summaryrefslogtreecommitdiff
path: root/Plexservice.cpp
diff options
context:
space:
mode:
authorchriszero <zerov83@gmail.com>2015-05-20 21:18:14 +0200
committerchriszero <zerov83@gmail.com>2015-05-20 21:18:14 +0200
commit709ebb92273ae0af7aae79dfeb55e3ddf17324af (patch)
treeadf10eeaa71b65dfd5343c8d8c31b5728ec334b1 /Plexservice.cpp
parent86cfa7fa64406971990160db56b71c7a71dcf3e5 (diff)
downloadvdr-plugin-plex-709ebb92273ae0af7aae79dfeb55e3ddf17324af.tar.gz
vdr-plugin-plex-709ebb92273ae0af7aae79dfeb55e3ddf17324af.tar.bz2
- Added handling for disapearing or not reachable plexservers
Diffstat (limited to 'Plexservice.cpp')
-rw-r--r--Plexservice.cpp38
1 files changed, 22 insertions, 16 deletions
diff --git a/Plexservice.cpp b/Plexservice.cpp
index b86dac3..20db51e 100644
--- a/Plexservice.cpp
+++ b/Plexservice.cpp
@@ -3,6 +3,7 @@
#include "PlexHelper.h"
#include "plexgdm.h"
#include <memory>
+#include <Poco/Net/NetException.h>
namespace plexclient
{
@@ -72,7 +73,7 @@ void Plexservice::Authenticate()
try {
std::string token = GetMyPlexToken();
auto pRequest = CreateRequest("/?X-Plex-Token=" + token);
-
+
Poco::Net::HTTPClientSession session(pServer->GetIpAdress(), pServer->GetPort());
session.sendRequest(*pRequest);
Poco::Net::HTTPResponse response;
@@ -114,11 +115,12 @@ std::shared_ptr<MediaContainer> Plexservice::GetSection(std::string section, boo
dsyslog("[plex] URI: http://%s:%d%s", pServer->GetIpAdress().c_str(), pServer->GetPort(), uri.c_str());
std::shared_ptr<MediaContainer> pAllsections(new MediaContainer(&rs, pServer));
-
+
session.abort();
return pAllsections;
- } catch (Poco::Exception &exc) {
+ } catch (Poco::Net::NetException &exc) {
+ pServer->Offline = true;
return 0;
}
}
@@ -136,7 +138,7 @@ std::shared_ptr<MediaContainer> Plexservice::GetLastSection(bool current)
return NULL;
}
-bool Plexservice::IsRoot()
+bool Plexservice::IsRoot()
{
return m_vUriStack.size() <= 1;
}
@@ -158,22 +160,26 @@ std::unique_ptr<Poco::Net::HTTPRequest> Plexservice::CreateRequest(std::string p
return pRequest;
}
-MediaContainer Plexservice::GetMediaContainer(std::string fullUrl)
+std::shared_ptr<MediaContainer> Plexservice::GetMediaContainer(std::string fullUrl)
{
- Poco::URI fileuri(fullUrl);
- Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, fileuri.getPathAndQuery(), Poco::Net::HTTPMessage::HTTP_1_1);
- PlexHelper::AddHttpHeader(request);
+ try {
+ Poco::URI fileuri(fullUrl);
+ Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, fileuri.getPathAndQuery(), Poco::Net::HTTPMessage::HTTP_1_1);
+ PlexHelper::AddHttpHeader(request);
- Poco::Net::HTTPClientSession session(fileuri.getHost(), fileuri.getPort());
+ Poco::Net::HTTPClientSession session(fileuri.getHost(), fileuri.getPort());
- session.sendRequest(request);
- Poco::Net::HTTPResponse response;
- std::istream &rs = session.receiveResponse(response);
+ session.sendRequest(request);
+ Poco::Net::HTTPResponse response;
+ std::istream &rs = session.receiveResponse(response);
- MediaContainer allsections(&rs, plexgdm::GetInstance().GetServer(fileuri.getHost(), fileuri.getPort()));
-
- session.abort();
- return allsections;
+ std::shared_ptr<MediaContainer> pAllsections(new MediaContainer(&rs, plexgdm::GetInstance().GetServer(fileuri.getHost(), fileuri.getPort())));
+
+ session.abort();
+ return pAllsections;
+ } catch (Poco::Net::NetException &exc) {
+ return 0;
+ }
}
std::string Plexservice::encode(std::string message)