summaryrefslogtreecommitdiff
path: root/plex.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plex.cpp')
-rw-r--r--plex.cpp295
1 files changed, 8 insertions, 287 deletions
diff --git a/plex.cpp b/plex.cpp
index fe937bb..ed8af98 100644
--- a/plex.cpp
+++ b/plex.cpp
@@ -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();
}
/**