Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Create a gui wrapper #305

Open
KeizerDev opened this issue Mar 17, 2017 · 5 comments
Open

Create a gui wrapper #305

KeizerDev opened this issue Mar 17, 2017 · 5 comments

Comments

@KeizerDev
Copy link

Why not make a gui wrapper for it with gtk or something?

@juanrubio
Copy link
Member

Sounds like a very nice idea. Unfortunately, I currently lack the bandwidth necessary for such a task. But I would be happy to try and provide support to anyone that might want to give it a try.

@Jirubizu
Copy link

@juanrubio Hello there, I am considering about developing a GUI wrapper for your program. At the current state I only started the git repo and I am testing different ways to wrap around your internals, either by simply reading the outputs and interacting with them or actually hooking into your main functions and calling each different function that way.
I have made a trello board and a git repo which I would like you to share to your users just so it would give me an idea on what to include in the GUI version.
If you are happy with this and wouldn't mind me writing out the URLS please say so as I am not sure with the guidelines and therefore didn't make a new issue regarding this nor did I include any links in this response.

@tizonia
Copy link
Collaborator

tizonia commented May 19, 2019

@Jirubizu

My apologies for such a delayed reply. I would love to see a GUI wrapper of some kind that could work with Tizonia. Please feel free to post your URLs here if you want. I'm sure there will be other users interested in a GUI that could leverage Tizonia features.

Please have a look at the Roadmap section in the repo's README.md file.
https://github.com/tizonia/tizonia-openmax-il#roadmap

There are a number of items related to 'RPC interface / headless support', issues #488, #509, #551. I think an RPC interface is what Tizonia is missing right now to make integrations with GUI wrappers or other programs really feasible. But probably there are other ways to achieve a successful integration.

Please feel free to ask any questions here and I will try to help where I can.

@Jirubizu
Copy link

@tizonia

Hello again, below is my git repo which I will be working on.
However, I wanted to ask where is the central location within the program where functions are called?
I am maybe thinking on calling functions directly which would basically be me building upon you program so it would be possible to integrate it with your repo and push it as an update if it works as intended :D

https://github.com/Jirubizu/TizoniaGUI

@tizonia
Copy link
Collaborator

tizonia commented May 25, 2019

@Jirubizu

Perhaps you could start looking at this location. This file contains the top-level functions that are selected when the user selects an option from one of the existing services.

tiz::playapp::spotify_stream ()

It all starts by retrieving the command-line options and arguments provided and then:

  • a 'playlist' object is instantiated (this is an internal mechanism to identify the user's request which will end up producing a real playlist)
tizplaylist_ptr_t playlist
      = boost::make_shared< tiz::playlist > (tiz::playlist (uri_list, shuffle));
  • a 'graph manager' is instantiated. This is a top level object that undertands how to put together the right OpenMAX IL pipeline that controls the specified service (e.g. spotify http source, ogg decoder, pcm audio renderer)
tizgraphconfig_ptr_t config
      = boost::make_shared< tiz::graph::spotifyconfig > (
          playlist, user, pass, playlist_type, owner, recover_lost_token,
          allow_explicit_tracks);

  // Instantiate the streaming client manager
  tiz::graphmgr::mgr_ptr_t p_mgr
      = boost::make_shared< tiz::graphmgr::spotifymgr > (config);

  p_mgr->init (playlist, graphmgr_termination_cback ());
  p_mgr->start ();
  • Finally, a simple top level loop that controls the user keyboad input and exits if the user presses Ctrl+C or 'q'
 while (ETIZPlayUserQuit != player_wait_for_user_input (p_mgr))
  {
  }

  p_mgr->quit ();
  p_mgr->deinit ();

As for the integration options, to be honest, I think the ideal option is to separate the backend and the UI via some RPC mechanism, because that would be the easiest way to allow both, backend and UI to evolve without interfering with each other. But, I'm definitely willing to be proved wrong on this!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants