diff options
author | chriszero <zerov83@gmail.com> | 2015-01-30 21:15:27 +0100 |
---|---|---|
committer | chriszero <zerov83@gmail.com> | 2015-01-30 21:15:27 +0100 |
commit | 5e9305312db74b71aae9025f7bfe06bac8ebb885 (patch) | |
tree | fa1d6215f8958c33c13c44627162fcacfc3b7a83 /plex.cpp | |
parent | 87eb8a9e931606da4197391b6e3a09376b1383c2 (diff) | |
download | vdr-plugin-plex-5e9305312db74b71aae9025f7bfe06bac8ebb885.tar.gz vdr-plugin-plex-5e9305312db74b71aae9025f7bfe06bac8ebb885.tar.bz2 |
Some fixes from last commit.
Diffstat (limited to 'plex.cpp')
-rw-r--r-- | plex.cpp | 213 |
1 files changed, 111 insertions, 102 deletions
@@ -17,8 +17,11 @@ static const char *MAINMENUENTRY = "Plex for VDR"; */ static void PlayFile(plexclient::Video* pVid) { - isyslog("[plex]: play file '%s'\n", pVid->m_sKey.c_str()); - cControl::Launch(cHlsPlayerControl::Create(pVid)); + isyslog("[plex]: play file '%s'\n", pVid->m_sKey.c_str()); + cControl* control = cHlsPlayerControl::Create(pVid); + if(control) { + cControl::Launch(control); + } } ////////////////////////////////////////////////////////////////////////////// @@ -29,119 +32,125 @@ static void PlayFile(plexclient::Video* pVid) static char ShowBrowser; ///< flag show browser static plexclient::PlexServer* pPlexServer; -cPlexBrowser::cPlexBrowser(const char *title, plexclient::PlexServer* pServ) :cOsdMenu(title) { - +cPlexBrowser::cPlexBrowser(const char *title, plexclient::PlexServer* pServ) :cOsdMenu(title) +{ + dsyslog("[plex]%s:\n", __FUNCTION__); pService = new plexclient::Plexservice(pServ); pService->Authenticate(); - pCont = pService->GetAllSections(); + pCont = pService->GetAllSections(); CreateMenu(); } -cPlexBrowser::~cPlexBrowser() { +cPlexBrowser::~cPlexBrowser() +{ delete pService; } -void cPlexBrowser::CreateMenu() { +void cPlexBrowser::CreateMenu() +{ // Clear Menu Clear(); // Directory or Video? if(pCont->m_vDirectories.size() > 0) { - + for(std::vector<plexclient::Directory>::iterator it = pCont->m_vDirectories.begin(); it != pCont->m_vDirectories.end(); ++it) { plexclient::Directory *pDir = &(*it); Add(new cPlexOsdItem( pDir->m_sTitle.c_str(), pDir) ); } - } - + } + if(pCont->m_vVideos.size() > 0) { for(std::vector<plexclient::Video>::iterator it = pCont->m_vVideos.begin(); it != pCont->m_vVideos.end(); ++it) { plexclient::Video *vid = &(*it); // cast raw pointer Add(new cPlexOsdItem( vid->m_sTitle.c_str(), vid) ); - } + } } - + if(Count() < 1) { Add(new cPlexOsdItem("Empty")); } - + Display(); } -eOSState cPlexBrowser::ProcessKey(eKeys key) { +eOSState cPlexBrowser::ProcessKey(eKeys key) +{ eOSState state; - // call standard function - state = cOsdMenu::ProcessKey(key); - if (state || key != kNone) { + // call standard function + state = cOsdMenu::ProcessKey(key); + if (state || key != kNone) { dsyslog("[plex]%s: state=%d key=%d\n", __FUNCTION__, state, key); - } + } - switch (state) { + switch (state) { case osUnknown: - switch (key) { + switch (key) { case kOk: - return ProcessSelected(); + return ProcessSelected(); case kBack: return LevelUp(); default: - break; - } - break; + break; + } + break; case osBack: - state = LevelUp(); - if (state == osEnd) { // top level reached + state = LevelUp(); + if (state == osEnd) { // top level reached return osPlugin; - } + } default: - break; - } - return state; + break; + } + return state; } -eOSState cPlexBrowser::LevelUp() { - if(m_vStack.size() <= 1){ +eOSState cPlexBrowser::LevelUp() +{ + if(m_vStack.size() <= 1) { m_vStack.clear(); ShowBrowser = 0; return osEnd; } - + m_vStack.pop_back(); - + std::string uri; for(unsigned int i = 0; i < m_vStack.size(); i++) { - if(m_vStack[i][0]=='/') { - uri = m_vStack[i]; - continue; - } - uri += m_vStack[i]; - if(i+1 < m_vStack.size()) { - uri += "/"; - } + if(m_vStack[i][0]=='/') { + uri = m_vStack[i]; + continue; } - + uri += m_vStack[i]; + if(i+1 < m_vStack.size()) { + uri += "/"; + } + } + pCont = pService->GetSection(uri); - + CreateMenu(); return osContinue; } -eOSState cPlexBrowser::ProcessSelected() { - int current = Current(); // get current menu item index - cPlexOsdItem *item = static_cast<cPlexOsdItem*>(Get(current)); - - +eOSState cPlexBrowser::ProcessSelected() +{ + int current = Current(); // get current menu item index + cPlexOsdItem *item = static_cast<cPlexOsdItem*>(Get(current)); + + if(item->IsVideo()) { - plexclient::Video* pVid = item->GetAttachedVideo(); + plexclient::Video* pVid = item->GetAttachedVideo(); PlayFile(pVid); return osEnd; } - - + + if(item->IsDir()) { plexclient::Directory* pDir = item->GetAttachedDirectory(); - + m_vStack.push_back(pDir->m_sKey); std::string uri; for(unsigned int i = 0; i < m_vStack.size(); i++) { @@ -155,15 +164,15 @@ eOSState cPlexBrowser::ProcessSelected() { } } std::cout << "m_sSection: " << uri << std::endl; - + pCont = pService->GetSection(uri); - + CreateMenu(); return osContinue; } - + //return osEnd; - return osContinue; + return osContinue; } @@ -175,15 +184,15 @@ eOSState cPlexBrowser::ProcessSelected() { ** Play menu constructor. */ cPlayMenu::cPlayMenu(const char *title, int c0, int c1, int c2, int c3, int c4) -:cOsdMenu(title, c0, c1, c2, c3, c4) + :cOsdMenu(title, c0, c1, c2, c3, c4) { SetHasHotkeys(); - + for(std::vector<plexclient::PlexServer>::iterator it = plexclient::plexgdm::GetInstance().GetPlexservers().begin(); it != plexclient::plexgdm::GetInstance().GetPlexservers().end(); ++it) { plexclient::PlexServer *pServer = &(*it); Add(new cPlexOsdItem(pServer->GetServerName().c_str(), pServer)); } - + if(Count() < 1) { Add(new cPlexOsdItem("No Plex Media Server found."), false); } @@ -203,31 +212,31 @@ cPlayMenu::~cPlayMenu() */ eOSState cPlayMenu::ProcessKey(eKeys key) { - eOSState state; - - if (key != kNone) { - dsyslog("[plex]%s: key=%d\n", __FUNCTION__, key); - } - // call standard function - state = cOsdMenu::ProcessKey(key); - + eOSState state; + + if (key != kNone) { + dsyslog("[plex]%s: key=%d\n", __FUNCTION__, key); + } + // call standard function + state = cOsdMenu::ProcessKey(key); + int current = Current(); // get current menu item index cPlexOsdItem *item = static_cast<cPlexOsdItem*>(Get(current)); - - switch (state) { - case osUnknown: - switch (key) { - case kOk: - pPlexServer = item->GetAttachedServer(); - ShowBrowser = 1; - return osPlugin; // restart with OSD browser - default: - break; - } + + switch (state) { + case osUnknown: + switch (key) { + case kOk: + pPlexServer = item->GetAttachedServer(); + ShowBrowser = 1; + return osPlugin; // restart with OSD browser default: break; - } - return state; + } + default: + break; + } + return state; } ////////////////////////////////////////////////////////////////////////////// @@ -242,7 +251,7 @@ eOSState cPlayMenu::ProcessKey(eKeys key) */ cMyPlugin::cMyPlugin(void) { - dsyslog("[plex]%s:\n", __FUNCTION__); + dsyslog("[plex]%s:\n", __FUNCTION__); } /** @@ -250,7 +259,7 @@ cMyPlugin::cMyPlugin(void) */ cMyPlugin::~cMyPlugin(void) { - dsyslog("[plex]%s:\n", __FUNCTION__); + dsyslog("[plex]%s:\n", __FUNCTION__); plexclient::plexgdm::GetInstance().stopRegistration(); plexclient::ControlServer::GetInstance().Stop(); } @@ -262,7 +271,7 @@ cMyPlugin::~cMyPlugin(void) */ const char *cMyPlugin::Version(void) { - return VERSION; + return VERSION; } /** @@ -272,7 +281,7 @@ const char *cMyPlugin::Version(void) */ const char *cMyPlugin::Description(void) { - return DESCRIPTION; + return DESCRIPTION; } /** @@ -280,22 +289,22 @@ const char *cMyPlugin::Description(void) */ bool cMyPlugin::Initialize(void) { - // First Startup? Save UUID + // First Startup? Save UUID SetupStore("UUID", Config::GetInstance().GetUUID().c_str()); - + plexclient::plexgdm::GetInstance().discover(); - + if (plexclient::plexgdm::GetInstance().GetPlexservers().size() > 0) { plexclient::plexgdm::GetInstance().clientDetails(Config::GetInstance().GetUUID(), DESCRIPTION, "3200", "VDR", VERSION); plexclient::plexgdm::GetInstance().Start(); - + plexclient::ControlServer::GetInstance().Start(); - + } else { esyslog("[plex]No Plexmediaserver found"); } - return true; + return true; } /** @@ -303,7 +312,7 @@ bool cMyPlugin::Initialize(void) */ const char *cMyPlugin::MainMenuEntry(void) { - return Config::GetInstance().HideMainMenuEntry ? NULL : MAINMENUENTRY; + return Config::GetInstance().HideMainMenuEntry ? NULL : MAINMENUENTRY; } /** @@ -311,12 +320,12 @@ const char *cMyPlugin::MainMenuEntry(void) */ cOsdObject *cMyPlugin::MainMenuAction(void) { - //dsyslog("[plex]%s:\n", __FUNCTION__); + //dsyslog("[plex]%s:\n", __FUNCTION__); - if (ShowBrowser) { + if (ShowBrowser) { return new cPlexBrowser("Browse Plex", pPlexServer); - } - return new cPlayMenu("Plex"); + } + return new cPlayMenu("Plex"); } /** @@ -325,7 +334,7 @@ cOsdObject *cMyPlugin::MainMenuAction(void) */ void cMyPlugin::MainThreadHook(void) { - // dsyslog("[plex]%s:\n", __FUNCTION__); + // dsyslog("[plex]%s:\n", __FUNCTION__); // Start Tasks, e.g. Play Video if(plexclient::ActionManager::GetInstance().IsAction()) { std::string file = plexclient::ActionManager::GetInstance().GetAction(); @@ -338,9 +347,9 @@ void cMyPlugin::MainThreadHook(void) */ cMenuSetupPage *cMyPlugin::SetupMenu(void) { - //dsyslog("[plex]%s:\n", __FUNCTION__); + //dsyslog("[plex]%s:\n", __FUNCTION__); - return new cMyMenuSetupPage; + return new cMyMenuSetupPage; } /** @@ -353,15 +362,15 @@ cMenuSetupPage *cMyPlugin::SetupMenu(void) */ bool cMyPlugin::SetupParse(const char *name, const char *value) { - //dsyslog("[plex]%s: '%s' = '%s'\n", __FUNCTION__, name, value); + //dsyslog("[plex]%s: '%s' = '%s'\n", __FUNCTION__, name, value); - if (strcasecmp(name, "HideMainMenuEntry") == 0) Config::GetInstance().HideMainMenuEntry = atoi(value) ? true : false; + if (strcasecmp(name, "HideMainMenuEntry") == 0) Config::GetInstance().HideMainMenuEntry = atoi(value) ? true : false; else if (strcasecmp(name, "Username") == 0) Config::GetInstance().s_username = std::string(value); else if (strcasecmp(name, "Password") == 0) Config::GetInstance().s_password = std::string(value); else if (strcasecmp(name, "UUID") == 0) Config::GetInstance().SetUUID(value); else return false; - return true; + return true; } VDRPLUGINCREATOR(cMyPlugin); // Don't touch this! |