diff options
author | chriszero <zerov83@gmail.com> | 2014-11-18 20:41:44 +0100 |
---|---|---|
committer | chriszero <zerov83@gmail.com> | 2014-11-18 20:41:44 +0100 |
commit | 53143efc7a8b93ac779b494588e44c2ef47a1f12 (patch) | |
tree | 68307c1498c3bb25d9c24bedfebf78d5e42e2bec /Plexservice.cpp | |
parent | fc243d8bfde7c24168b67f90341e7d0d114114b2 (diff) | |
download | vdr-plugin-plex-53143efc7a8b93ac779b494588e44c2ef47a1f12.tar.gz vdr-plugin-plex-53143efc7a8b93ac779b494588e44c2ef47a1f12.tar.bz2 |
Fixes seg fault on some systems
Diffstat (limited to 'Plexservice.cpp')
-rw-r--r-- | Plexservice.cpp | 34 |
1 files changed, 15 insertions, 19 deletions
diff --git a/Plexservice.cpp b/Plexservice.cpp index 066abe2..a4d886b 100644 --- a/Plexservice.cpp +++ b/Plexservice.cpp @@ -31,16 +31,18 @@ Poco::Net::HTTPClientSession* Plexservice::GetHttpSession(bool createNew) std::string Plexservice::GetMyPlexToken() { + // Syncronize + Poco::Mutex::ScopedLock lock(m_mutex); + //todo: cache token in file or db - if(m_sToken.empty()) { - std::ostringstream ss; + if(&m_sToken != 0 || m_sToken.empty()) { + std::stringstream ss; Poco::Base64Encoder b64(ss); b64 << Config::GetInstance().GetUsername() << ":" << Config::GetInstance().GetPassword(); b64.close(); m_sToken = ss.str(); - b64.~Base64Encoder(); Poco::Net::Context::Ptr context = new Poco::Net::Context( Poco::Net::Context::CLIENT_USE, "", "", "", Poco::Net::Context::VERIFY_NONE, // VERIFY_NONE...?! @@ -53,10 +55,10 @@ std::string Plexservice::GetMyPlexToken() request.add("X-Plex-Platform", "VDR"); request.add("X-Plex-Platform-Version", "2.0.4"); request.add("X-Plex-Provides", "player"); - request.add("X-Plex-Product", "plex-vdr"); + request.add("X-Plex-Product", "plex for vdr"); request.add("X-Plex-Version", "0.0.1a"); request.add("X-Plex-Device", "Linux"); - request.add("X-Plex-Client-Identifier", "plex-vdr"); + request.add("X-Plex-Client-Identifier", "plex for vdr"); request.add("Authorization", Poco::format("Basic %s", m_sToken)); plexSession.sendRequest(request); @@ -77,13 +79,10 @@ std::string Plexservice::GetMyPlexToken() void Plexservice::Authenticate() { - if(m_sToken.empty()) { - GetMyPlexToken(); - //m_sToken = ""; - } try { GetHttpSession(true); - Poco::Net::HTTPRequest *pRequest = CreateRequest("/?X-Plex-Token=" + m_sToken); + std::string token = GetMyPlexToken(); + Poco::Net::HTTPRequest *pRequest = CreateRequest("/?X-Plex-Token=" + token); m_pPlexSession->sendRequest(*pRequest); Poco::Net::HTTPResponse response; @@ -121,19 +120,16 @@ MediaContainer* Plexservice::GetAllSections() MediaContainer* Plexservice::GetSection(std::string section) { - if(m_sToken.empty()) { - GetMyPlexToken(); - } - + std::string token = GetMyPlexToken(); GetHttpSession(true); Poco::Net::HTTPRequest *pRequest; if(section[0]=='/') { // Full URI? - pRequest = CreateRequest(Poco::format("%s?X-Plex-Token=%s", section, m_sToken)); + pRequest = CreateRequest(Poco::format("%s?X-Plex-Token=%s", section, token)); } else if(false == section.empty()) { - pRequest = CreateRequest(Poco::format("/library/sections/%s?X-Plex-Token=%s", section, m_sToken)); + pRequest = CreateRequest(Poco::format("/library/sections/%s?X-Plex-Token=%s", section, token)); } else { - pRequest = CreateRequest("/library/sections/?X-Plex-Token=" + m_sToken); + pRequest = CreateRequest("/library/sections/?X-Plex-Token=" + token); } m_pPlexSession->sendRequest(*pRequest); @@ -163,7 +159,7 @@ Poco::Net::HTTPRequest* Plexservice::CreateRequest(std::string path) pRequest->add("X-Plex-Language", Config::GetInstance().GetLanguage()); pRequest->add("X-Plex-Model", "Linux"); pRequest->add("X-Plex-Platform", "VDR"); - pRequest->add("X-Plex-Product", "plex-vdr"); + pRequest->add("X-Plex-Product", "plex for vdr"); pRequest->add("X-Plex-Provides", "player"); pRequest->add("X-Plex-Version", "0.0.1a"); @@ -186,7 +182,7 @@ MediaContainer* Plexservice::GetMediaContainer(std::string fullUrl) { pRequest->add("X-Plex-Language", Config::GetInstance().GetLanguage()); pRequest->add("X-Plex-Model", "Linux"); pRequest->add("X-Plex-Platform", "VDR"); - pRequest->add("X-Plex-Product", "plex-vdr"); + pRequest->add("X-Plex-Product", "plex for vdr"); pRequest->add("X-Plex-Provides", "player"); pRequest->add("X-Plex-Version", "0.0.1a"); |