summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Plexservice.cpp2
-rw-r--r--Plexservice.h4
-rw-r--r--cPlexOsdItem.cpp17
-rw-r--r--cPlexOsdItem.h14
-rw-r--r--plex.cpp30
-rw-r--r--plex.h8
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;
diff --git a/plex.cpp b/plex.cpp
index 2d16cb9..710c70f 100644
--- a/plex.cpp
+++ b/plex.cpp
@@ -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");
}
diff --git a/plex.h b/plex.h
index 44bfcff..8da6111 100644
--- a/plex.h
+++ b/plex.h
@@ -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);
};