diff options
-rw-r--r-- | Plexservice.cpp | 2 | ||||
-rw-r--r-- | Plexservice.h | 4 | ||||
-rw-r--r-- | cPlexOsdItem.cpp | 17 | ||||
-rw-r--r-- | cPlexOsdItem.h | 14 | ||||
-rw-r--r-- | plex.cpp | 30 | ||||
-rw-r--r-- | plex.h | 8 |
6 files changed, 32 insertions, 43 deletions
diff --git a/Plexservice.cpp b/Plexservice.cpp index b8d41b7..76de898 100644 --- a/Plexservice.cpp +++ b/Plexservice.cpp @@ -126,7 +126,6 @@ std::shared_ptr<MediaContainer> Plexservice::GetSection(std::string section, boo pRequest = CreateRequest(uri); if(putOnStack) { m_vUriStack.push(uri); - std::cout << "Get: " << uri << std::endl; } m_pPlexSession->sendRequest(*pRequest); @@ -152,7 +151,6 @@ std::shared_ptr<MediaContainer> Plexservice::GetLastSection() // discard last one m_vUriStack.pop(); std::string uri = m_vUriStack.top(); - std::cout << "Pop: " << uri << std::endl; return GetSection(uri, false); } return NULL; diff --git a/Plexservice.h b/Plexservice.h index af7275d..e96bf16 100644 --- a/Plexservice.h +++ b/Plexservice.h @@ -47,13 +47,15 @@ public: std::shared_ptr<MediaContainer> GetLastSection(); void GetAuthDetails(); void Authenticate(); - PlexServer* GetServer(); + static std::string GetUniversalTranscodeUrl(Video* video, int offset = 0, PlexServer* server = 0); static std::string GetMyPlexToken(); static MediaContainer GetMediaContainer(std::string fullUrl); static std::string encode(std::string message); + std::string StartUri; + private: Poco::Mutex m_mutex; Poco::Net::HTTPClientSession *m_pPlexSession; diff --git a/cPlexOsdItem.cpp b/cPlexOsdItem.cpp index bfc6898..2d006c3 100644 --- a/cPlexOsdItem.cpp +++ b/cPlexOsdItem.cpp @@ -1,33 +1,24 @@ #include "cPlexOsdItem.h" cPlexOsdItem::cPlexOsdItem(const char* title) :cOsdItem(title) { - item = 0; - dir = 0; - pserver = 0; m_bVideo = false; m_bDir = false; } -cPlexOsdItem::cPlexOsdItem(const char* title, plexclient::PlexServer* server) :cOsdItem(title) { - item = 0; - dir = 0; - pserver = server; +cPlexOsdItem::cPlexOsdItem(const char* title, std::shared_ptr<plexclient::Plexservice> service) :cOsdItem(title) { + pservice = service; m_bVideo = false; m_bDir = false; } cPlexOsdItem::cPlexOsdItem(const char* title, plexclient::Video* obj) :cOsdItem(title) { item = obj; - dir = 0; - pserver = 0; m_bVideo = true; m_bDir = false; } cPlexOsdItem::cPlexOsdItem(const char* title, plexclient::Directory* obj) :cOsdItem(title) { dir = obj; - item = 0; - pserver = 0; m_bDir = true; m_bVideo = false; } @@ -40,6 +31,6 @@ plexclient::Directory* cPlexOsdItem::GetAttachedDirectory() { return dir; } -plexclient::PlexServer* cPlexOsdItem::GetAttachedServer() { - return pserver; +std::shared_ptr<plexclient::Plexservice> cPlexOsdItem::GetAttachedService() { + return pservice; } diff --git a/cPlexOsdItem.h b/cPlexOsdItem.h index 9aba337..e484d9a 100644 --- a/cPlexOsdItem.h +++ b/cPlexOsdItem.h @@ -1,31 +1,33 @@ #ifndef CPLEXOSDITEM_H #define CPLEXOSDITEM_H +#include <memory> + #include <vdr/osd.h> // Base class: cOsdItem #include <vdr/interface.h> #include <vdr/plugin.h> #include "PVideo.h" #include "Directory.h" -#include "PlexServer.h" +#include "Plexservice.h" class cPlexOsdItem : public cOsdItem { private: - plexclient::Video *item; - plexclient::Directory *dir; - plexclient::PlexServer *pserver; + plexclient::Video* item; + plexclient::Directory* dir; + std::shared_ptr<plexclient::Plexservice> pservice; bool m_bVideo; bool m_bDir; public: cPlexOsdItem(const char* title); - cPlexOsdItem(const char* title, plexclient::PlexServer* server); + cPlexOsdItem(const char* title, std::shared_ptr<plexclient::Plexservice> service); cPlexOsdItem(const char* title, plexclient::Video* obj); cPlexOsdItem(const char* title, plexclient::Directory* obj); plexclient::Video* GetAttachedVideo(); plexclient::Directory* GetAttachedDirectory(); - plexclient::PlexServer* GetAttachedServer(); + std::shared_ptr<plexclient::Plexservice> GetAttachedService(); bool IsVideo() const { return m_bVideo; @@ -22,24 +22,18 @@ static void PlayFile(plexclient::Video Vid) static char ShowBrowser; ///< flag show browser -static plexclient::PlexServer* pPlexServer; +static std::shared_ptr<plexclient::Plexservice> pPlexService; -cPlexBrowser::cPlexBrowser(const char *title, plexclient::PlexServer* pServ) :cOsdMenu(title) +cPlexBrowser::cPlexBrowser(const char *title, std::shared_ptr<plexclient::Plexservice> Service) :cOsdMenu(title) { dsyslog("[plex]%s:\n", __FUNCTION__); - pService = new plexclient::Plexservice(pServ); + pService = Service; pService->Authenticate(); - pCont = pService->GetSection("/library/sections"); - //pChannels = pService->GetSection("/video"); + pCont = pService->GetSection(pService->StartUri); SetMenuCategory(mcRecording); CreateMenu(); } -cPlexBrowser::~cPlexBrowser() -{ - delete pService; -} - void cPlexBrowser::CreateMenu() { // Clear Menu @@ -124,7 +118,7 @@ eOSState cPlexBrowser::ProcessSelected() if(item->IsDir()) { plexclient::Directory* pDir = item->GetAttachedDirectory(); pCont = pService->GetSection(pDir->m_sKey); - + //SetTitle(pDir->m_sTitle.c_str()); CreateMenu(); return osContinue; } @@ -189,8 +183,14 @@ cPlayMenu::cPlayMenu(const char *title, int c0, int c1, int c2, int c3, int 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)); + //&(*it) + auto s1 = std::make_shared<plexclient::Plexservice>( &(*it) ); + s1->StartUri = "/library/sections"; + Add(new cPlexOsdItem(Poco::format("%s - Library", it->GetServerName()).c_str(), s1)); + + auto s2 = std::make_shared<plexclient::Plexservice>( &(*it) ); + s2->StartUri = "/video"; + Add(new cPlexOsdItem(Poco::format("%s - Video Channels", it->GetServerName()).c_str(), s2 )); } if(Count() < 1) { @@ -227,7 +227,7 @@ eOSState cPlayMenu::ProcessKey(eKeys key) case osUnknown: switch (key) { case kOk: - pPlexServer = item->GetAttachedServer(); + pPlexService = item->GetAttachedService(); ShowBrowser = 1; return osPlugin; // restart with OSD browser default: @@ -315,7 +315,7 @@ cOsdObject *cMyPlugin::MainMenuAction(void) //dsyslog("[plex]%s:\n", __FUNCTION__); if (ShowBrowser) { - return new cPlexBrowser("Browse Plex", pPlexServer); + return new cPlexBrowser("Browse Plex", pPlexService); } return new cPlayMenu("Plex"); } @@ -43,7 +43,7 @@ static const char *const MAINMENUENTRY = "Plex for VDR"; class cPlexBrowser :public cOsdMenu { private: - plexclient::Plexservice* pService; + std::shared_ptr<plexclient::Plexservice> pService; std::shared_ptr<plexclient::MediaContainer> pCont; std::vector<plexclient::Video> *v_Vid; std::vector<plexclient::Directory> *v_Dir; @@ -58,11 +58,7 @@ private: eOSState ProcessSelected(); public: - cPlexBrowser(const char *title, plexclient::PlexServer* pServ); - ~cPlexBrowser(); - /// File browser destructor - //virtual ~ cPlexBrowser(); - /// Process keyboard input + cPlexBrowser(const char *title, std::shared_ptr<plexclient::Plexservice> Service); virtual eOSState ProcessKey(eKeys); }; |