diff options
Diffstat (limited to 'plex.cpp')
-rw-r--r-- | plex.cpp | 295 |
1 files changed, 8 insertions, 287 deletions
@@ -1,283 +1,7 @@ #include "ControlServer.h" #include "SubscriptionManager.h" #include "plex.h" - -////////////////////////////////////////////////////////////////////////////// -// cOsdMenu -////////////////////////////////////////////////////////////////////////////// -static std::shared_ptr<plexclient::Plexservice> pPlexService; - -std::shared_ptr<plexclient::Plexservice> cPlexBrowser::pLastService; -int cPlexBrowser::lastCurrentItem; - -cPlexBrowser::cPlexBrowser(const char *title, std::shared_ptr<plexclient::Plexservice> Service) :cOsdMenu(title) -{ - dsyslog("[plex]%s:\n", __FUNCTION__); - pService = Service; - pService->Authenticate(); - if(pService == pLastService) { - pCont = pService->GetLastSection(true); - } else { - pCont = pService->GetSection(pService->StartUri); - } - SetMenuCategory(mcRecording); - CreateMenu(); -} - -cPlexBrowser* cPlexBrowser::RecoverLastState() -{ - if (cPlexBrowser::pLastService != NULL) { - cPlexBrowser* pBrowser = new cPlexBrowser("", cPlexBrowser::pLastService); - return pBrowser; - } - return NULL; -} - -void cPlexBrowser::CreateMenu() -{ - // Clear Menu - Clear(); - // Directory or Video? - if(pCont && 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( tr(pDir->GetTitle().c_str()), pDir) ); - } - } - - if(pCont && 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->GetTitle().c_str(), vid) ); - } - } - - if(Count() < 1) { - Add(new cPlexOsdItem("Empty")); - } else if (pService == pLastService) { - // recover last selected item - cOsdItem* item = Get(lastCurrentItem); - SetCurrent(item); - pLastService = NULL; - } - - Display(); -} - -eOSState cPlexBrowser::ProcessKey(eKeys key) -{ - eOSState state; - - // call standard function - state = cOsdMenu::ProcessKey(key); - - int current = Current(); // get current menu item index - cPlexOsdItem *item = static_cast<cPlexOsdItem*>(Get(current)); - - if(item->IsVideo()) { - if(item->GetAttachedVideo()->m_iViewCount > 0) SetHelp(tr("Info"), tr("Unscrobble")); - else SetHelp(tr("Info"), tr("Scrobble")); - } else { - SetHelp(NULL); - } - - switch (state) { - case osUnknown: - switch (key) { - case kOk: - return ProcessSelected(); - case kBack: - return LevelUp(); - case kRed: - std::cout << "RED"; - if(item->IsVideo()) { - std::cout << " Video Info"; - } - std::cout << std::endl; - break; - case kGreen: - if(item->IsVideo()) { - if(item->GetAttachedVideo()->m_iViewCount > 0) { - if(item->GetAttachedVideo()->SetUnwatched()) { - item->GetAttachedVideo()->UpdateFromServer(); - } - } else { - if(item->GetAttachedVideo()->SetWatched()) { - item->GetAttachedVideo()->UpdateFromServer(); - } - } - } - if(item->GetAttachedVideo()->m_iViewCount > 0) SetHelp(tr("Info"), tr("Unscrobble")); - else SetHelp(tr("Info"), tr("Scrobble")); - break; - default: - break; - } - break; - case osBack: - state = LevelUp(); - if (state == osEnd) { // top level reached - return osPlugin; - } - default: - break; - } - return state; -} - -eOSState cPlexBrowser::LevelUp() -{ - pCont = pService->GetLastSection(); - if(!pCont) { - cPlayMenu::eShow = menuShow::MAIN; - return osEnd; - } - cString title = cString::sprintf(tr("Browse Plex - %s"), tr(pCont->m_sTitle1.c_str())); - SetTitle(title); - CreateMenu(); - return osContinue; -} - -eOSState cPlexBrowser::ProcessSelected() -{ - int current = Current(); // get current menu item index - cPlexOsdItem *item = static_cast<cPlexOsdItem*>(Get(current)); - - - if(item->IsVideo()) { - pLastService = pService; - lastCurrentItem = current; - cMyPlugin::PlayFile(*item->GetAttachedVideo()); - return osEnd; - } - - if(item->IsDir()) { - plexclient::Directory* pDir = item->GetAttachedDirectory(); - pCont = pService->GetSection(pDir->m_sKey); - cString title = cString::sprintf(tr("Browse Plex - %s"), tr(pDir->m_sTitle.c_str())); - SetTitle(title); - CreateMenu(); - return osContinue; - } - - //return osEnd; - return osContinue; -} - - -cPlexInfo::cPlexInfo(plexclient::Video* video) : cOsdMenu(video->GetTitle().c_str()) -{ - cOsdMenu::Display(); - - Add(new cOsdItem(video->m_sSummary.c_str())); -} - -eOSState cPlexInfo::ProcessKey(eKeys Key) -{ - switch (int(Key)) { - case kUp|k_Repeat: - case kUp: - case kDown|k_Repeat: - case kDown: - case kLeft|k_Repeat: - case kLeft: - case kRight|k_Repeat: - case kRight: - DisplayMenu()->Scroll(NORMALKEY(Key) == kUp || NORMALKEY(Key) == kLeft, NORMALKEY(Key) == kLeft || NORMALKEY(Key) == kRight); - cStatus::MsgOsdTextItem(NULL, NORMALKEY(Key) == kUp || NORMALKEY(Key) == kLeft); - return osContinue; - case kInfo: - return osBack; - default: - break; - } - - eOSState state = cOsdMenu::ProcessKey(Key); - - if (state == osUnknown) { - switch (Key) { - case kGreen: - cRemote::Put(Key, true); - case kOk: - return osBack; - default: - break; - } - } - return state; -} - -////////////////////////////////////////////////////////////////////////////// -// cOsdMenu -////////////////////////////////////////////////////////////////////////////// - -menuShow cPlayMenu::eShow = MAIN; - -/** -** 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) -{ - SetHasHotkeys(); - - for(std::vector<plexclient::PlexServer>::iterator it = plexclient::plexgdm::GetInstance().GetPlexservers().begin(); it != plexclient::plexgdm::GetInstance().GetPlexservers().end(); ++it) { - //&(*it) - auto s1 = std::make_shared<plexclient::Plexservice>( &(*it) ); - s1->StartUri = "/library/sections"; - Add(new cPlexOsdItem(Poco::format(tr("%s - Library"), it->GetServerName()).c_str(), s1)); - - auto s2 = std::make_shared<plexclient::Plexservice>( &(*it) ); - s2->StartUri = "/video"; - Add(new cPlexOsdItem(Poco::format(tr("%s - Video Channels"), it->GetServerName()).c_str(), s2 )); - } - - if(Count() < 1) { - Add(new cPlexOsdItem(tr("No Plex Media Server found.")), false); - } -} - -/** -** Play menu destructor. -*/ -cPlayMenu::~cPlayMenu() -{ -} - -/** -** Handle play plugin menu key event. -** -** @param key key event -*/ -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); - - int current = Current(); // get current menu item index - cPlexOsdItem *item = static_cast<cPlexOsdItem*>(Get(current)); - - switch (state) { - case osUnknown: - switch (key) { - case kOk: - pPlexService = item->GetAttachedService(); - cPlayMenu::eShow = menuShow::BROWSER; - return osPlugin; // restart with OSD browser - default: - break; - } - default: - break; - } - return state; -} +#include "plexOsd.h" ////////////////////////////////////////////////////////////////////////////// // cPlugin @@ -324,6 +48,12 @@ const char *cMyPlugin::Description(void) return DESCRIPTION; } + +bool cMyPlugin::Start(void) +{ + return true; +} + /** ** Start any background activities the plugin shall perform. */ @@ -353,16 +83,7 @@ const char *cMyPlugin::MainMenuEntry(void) cOsdObject *cMyPlugin::MainMenuAction(void) { //dsyslog("[plex]%s:\n", __FUNCTION__); - - if(CalledFromCode) { - CalledFromCode = false; - return cPlexBrowser::RecoverLastState(); - } - - if (cPlayMenu::eShow == menuShow::BROWSER) { - return new cPlexBrowser(tr("Browse Plex"), pPlexService); - } - return new cPlayMenu("Plex"); + return cPlexMenu::ProcessMenu(); } /** |