summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchriszero <zerov83@gmail.com>2015-02-13 16:14:10 +0100
committerchriszero <zerov83@gmail.com>2015-02-13 16:14:10 +0100
commit20fefdd3f341d6e7f6b15e4926bf5569aa1943d5 (patch)
treeba402770b4912be3d93f6dd8faab521f4b5e4762
parentb5c156939ddf2fc4ec3fa27ae1c3daae28681c12 (diff)
downloadvdr-plugin-plex-20fefdd3f341d6e7f6b15e4926bf5569aa1943d5.tar.gz
vdr-plugin-plex-20fefdd3f341d6e7f6b15e4926bf5569aa1943d5.tar.bz2
Removed some raw pointers to avoid a possible memoryleak
-rw-r--r--MediaContainer.cpp2
-rw-r--r--MediaContainer.h2
-rw-r--r--PVideo.cpp4
-rw-r--r--PVideo.h5
-rw-r--r--PlexHTTPRequestHandler.cpp11
-rw-r--r--PlexServer.cpp4
-rw-r--r--PlexServer.h2
-rw-r--r--Plexservice.cpp46
-rw-r--r--Plexservice.h2
-rw-r--r--SubscriptionManager.cpp16
-rw-r--r--SubscriptionManager.h6
-rw-r--r--hlsPlayer.cpp45
-rw-r--r--hlsPlayer.h4
-rw-r--r--hlsPlayerControl.cpp21
-rw-r--r--hlsPlayerControl.h7
-rw-r--r--plex.cpp12
-rw-r--r--plexgdm.cpp2
17 files changed, 88 insertions, 103 deletions
diff --git a/MediaContainer.cpp b/MediaContainer.cpp
index b49dfd7..fa3c24a 100644
--- a/MediaContainer.cpp
+++ b/MediaContainer.cpp
@@ -2,7 +2,7 @@
namespace plexclient
{
-MediaContainer::MediaContainer(std::istream* response, PlexServer* Server)
+MediaContainer::MediaContainer(std::istream* response, PlexServer Server)
{
try {
InputSource src(*response);
diff --git a/MediaContainer.h b/MediaContainer.h
index aaf0d9a..e3ad6b7 100644
--- a/MediaContainer.h
+++ b/MediaContainer.h
@@ -34,7 +34,7 @@ namespace plexclient
class MediaContainer: XmlObject
{
public:
- MediaContainer(std::istream *response, PlexServer* Server);
+ MediaContainer(std::istream *response, PlexServer Server);
protected:
diff --git a/PVideo.cpp b/PVideo.cpp
index f05c220..b186da8 100644
--- a/PVideo.cpp
+++ b/PVideo.cpp
@@ -3,10 +3,10 @@
namespace plexclient
{
-Video::Video(Poco::XML::Node* pNode, PlexServer* Server)
+Video::Video(Poco::XML::Node* pNode, PlexServer Server)
{
m_iMyPlayOffset = 0;
- m_pServer = Server;
+ m_Server = Server;
NodeIterator it(pNode, Poco::XML::NodeFilter::SHOW_ALL);
Poco::XML::Node* pChildNode = it.nextNode();
diff --git a/PVideo.h b/PVideo.h
index 101e5d1..b78f57a 100644
--- a/PVideo.h
+++ b/PVideo.h
@@ -33,7 +33,8 @@ namespace plexclient
class Video: XmlObject
{
public:
- Video(Poco::XML::Node* pNode, PlexServer* Server);
+ Video(Poco::XML::Node* pNode, PlexServer Server);
+ Video() {};
public:
int m_iRatingKey;
@@ -60,7 +61,7 @@ public:
std::vector<std::string> m_vRole;
std::string m_sCollection;
Media m_Media;
- PlexServer* m_pServer;
+ PlexServer m_Server;
int m_iMyPlayOffset;
};
diff --git a/PlexHTTPRequestHandler.cpp b/PlexHTTPRequestHandler.cpp
index f07bce4..86ac3cd 100644
--- a/PlexHTTPRequestHandler.cpp
+++ b/PlexHTTPRequestHandler.cpp
@@ -3,6 +3,8 @@
#include <vdr/keys.h>
#include <unistd.h>
+#include <Poco/SharedPtr.h>
+
#include "hlsPlayerControl.h"
namespace plexclient
@@ -224,16 +226,17 @@ void PlayerRequestHandler::handleRequest(Poco::Net::HTTPServerRequest& request,
std::string address = query["address"];
std::string port = query["port"];
std::string key = query["key"];
-
+
std::string fullUrl = protocol + "://" + address + ":" + port + key; // Metainfo
std::cout << fullUrl << std::endl;
- MediaContainer* pCont = Plexservice::GetMediaContainer(fullUrl);
+ MediaContainer Cont = Plexservice::GetMediaContainer(fullUrl);
// MUSS im Maintread des Plugins/VDR gestartet werden
if(query.find("offset") != query.end()) {
- pCont->m_vVideos[0].m_iMyPlayOffset = atoi(query["offset"].c_str()) / 1000;
+ Cont.m_vVideos[0].m_iMyPlayOffset = atoi(query["offset"].c_str()) / 1000;
}
- ActionManager::GetInstance().AddAction(&pCont->m_vVideos[0]); // MemoryLeak?
+ //Poco::
+ ActionManager::GetInstance().AddAction(Cont.m_vVideos[0]);
} else if(request.getURI().find("/playback/play") != std::string::npos) {
cRemote::Put(kPlay);
} else if(request.getURI().find("/playback/pause") != std::string::npos) {
diff --git a/PlexServer.cpp b/PlexServer.cpp
index 5675009..b413d7d 100644
--- a/PlexServer.cpp
+++ b/PlexServer.cpp
@@ -42,8 +42,4 @@ std::string PlexServer::GetUri()
return std::string("http://") + m_sIpAddress + ":" + std::string(itoa(m_nPort));
}
-PlexServer::~PlexServer()
-{
-}
-
}
diff --git a/PlexServer.h b/PlexServer.h
index 19130d7..a3d6ee1 100644
--- a/PlexServer.h
+++ b/PlexServer.h
@@ -21,7 +21,7 @@ class PlexServer
public:
PlexServer(std::string data, std::string ip);
PlexServer(std::string ip, int port);
- ~PlexServer();
+ PlexServer() {};
int GetMaster() const {
return m_nMaster;
diff --git a/Plexservice.cpp b/Plexservice.cpp
index c5e028a..776f9fc 100644
--- a/Plexservice.cpp
+++ b/Plexservice.cpp
@@ -146,7 +146,7 @@ MediaContainer* Plexservice::GetSection(std::string section)
dsyslog("[plex] URI: %s[s%]", m_pPlexSession->getHost().c_str(), pRequest->getURI().c_str());
- MediaContainer* pAllsections = new MediaContainer(&rs, this->pServer);
+ MediaContainer* pAllsections = new MediaContainer(&rs, *pServer);
//Poco::StreamCopier::copyStream(rs, std::cout);
delete pRequest;
return pAllsections;
@@ -178,39 +178,35 @@ Poco::Net::HTTPRequest* Plexservice::CreateRequest(std::string path)
return pRequest;
}
-MediaContainer* Plexservice::GetMediaContainer(std::string fullUrl)
+MediaContainer Plexservice::GetMediaContainer(std::string fullUrl)
{
Poco::URI fileuri(fullUrl);
- Poco::Net::HTTPRequest* pRequest = new Poco::Net::HTTPRequest(Poco::Net::HTTPRequest::HTTP_GET,
- fileuri.getPathAndQuery(), Poco::Net::HTTPMessage::HTTP_1_1);
+ Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, fileuri.getPathAndQuery(), Poco::Net::HTTPMessage::HTTP_1_1);
- pRequest->add("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17");
+ request.add("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17");
//pRequest->add("X-Plex-Client-Capabilities", "protocols=shoutcast,http-video;videoDecoders=h264{profile:high&resolution:1080&level:51};audioDecoders=mp3,aac");
- pRequest->add("X-Plex-Client-Identifier", Config::GetInstance().GetUUID());
- pRequest->add("X-Plex-Device", "PC");
- pRequest->add("X-Plex-Device-Name", Config::GetInstance().GetHostname());
- 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 for vdr");
- pRequest->add("X-Plex-Provides", "player");
- pRequest->add("X-Plex-Version", "0.0.1a");
-
- Poco::Net::HTTPClientSession* session = new Poco::Net::HTTPClientSession(fileuri.getHost(), fileuri.getPort());
-
- session->sendRequest(*pRequest);
+ request.add("X-Plex-Client-Identifier", Config::GetInstance().GetUUID());
+ request.add("X-Plex-Device", "PC");
+ request.add("X-Plex-Device-Name", Config::GetInstance().GetHostname());
+ request.add("X-Plex-Language", Config::GetInstance().GetLanguage());
+ request.add("X-Plex-Model", "Linux");
+ request.add("X-Plex-Platform", "VDR");
+ request.add("X-Plex-Product", "plex for vdr");
+ request.add("X-Plex-Provides", "player");
+ request.add("X-Plex-Version", "0.0.1a");
+
+ Poco::Net::HTTPClientSession session(fileuri.getHost(), fileuri.getPort());
+
+ session.sendRequest(request);
Poco::Net::HTTPResponse response;
- std::istream &rs = session->receiveResponse(response);
+ std::istream &rs = session.receiveResponse(response);
- MediaContainer* pAllsections = new MediaContainer(&rs, new PlexServer(fileuri.getHost(), fileuri.getPort()));
-
- delete pRequest;
- delete session;
+ MediaContainer allsections(&rs, PlexServer(fileuri.getHost(), fileuri.getPort()));
- return pAllsections;
+ return allsections;
}
#ifdef CRYPTOPP
@@ -298,7 +294,7 @@ std::string Plexservice::encode(std::string message)
std::string Plexservice::GetUniversalTranscodeUrl(Video* video, int offset, PlexServer* server)
{
- PlexServer* pSrv = server ? server : video->m_pServer;
+ PlexServer* pSrv = server ? server : &video->m_Server;
std::stringstream params;
params << "/video/:/transcode/universal/start.m3u8?";
params << "path=" << encode(pSrv->GetUri() + video->m_sKey);
diff --git a/Plexservice.h b/Plexservice.h
index 3daa7cf..02961d3 100644
--- a/Plexservice.h
+++ b/Plexservice.h
@@ -61,7 +61,7 @@ public:
PlexServer* GetServer();
static std::string GetUniversalTranscodeUrl(Video* video, int offset = 0, PlexServer* server = 0);
- static MediaContainer* GetMediaContainer(std::string fullUrl);
+ static MediaContainer GetMediaContainer(std::string fullUrl);
static std::string encode(std::string message);
private:
diff --git a/SubscriptionManager.cpp b/SubscriptionManager.cpp
index a6f35c5..d312803 100644
--- a/SubscriptionManager.cpp
+++ b/SubscriptionManager.cpp
@@ -53,8 +53,8 @@ void SubscriptionManager::NotifyServer()
std::string server;
int port;
if(pVid) {
- server = pVid->m_pServer->GetIpAdress();
- port = pVid->m_pServer->GetPort();
+ server = pVid->m_Server.GetIpAdress();
+ port = pVid->m_Server.GetPort();
} else if ( plexgdm::GetInstance().GetPlexservers().size() > 0) {
server = plexgdm::GetInstance().GetPlexservers().at(0).GetIpAdress();
port = plexgdm::GetInstance().GetPlexservers().at(0).GetPort();
@@ -169,10 +169,10 @@ std::string SubscriptionManager::GetTimelineXml()
msg << " duration=\"" << total << "\"";
msg << " seekRange=\"0-" << total << "\"";
msg << " controllable=\"true\"";
- msg << " machineIdentifier=\"" << (pVid ? pVid->m_pServer->GetUuid() : "") << "\"";
+ msg << " machineIdentifier=\"" << (pVid ? pVid->m_Server.GetUuid() : "") << "\"";
msg << " protocol=\"http\"";
- msg << " address=\"" << (pVid ? pVid->m_pServer->GetIpAdress() : "") << "\"";
- msg << " port=\"" << (pVid ? pVid->m_pServer->GetPort() : 0) << "\"";
+ msg << " address=\"" << (pVid ? pVid->m_Server.GetIpAdress() : "") << "\"";
+ msg << " port=\"" << (pVid ? pVid->m_Server.GetPort() : 0) << "\"";
msg << " guid=\"" << Config::GetInstance().GetUUID() << "\"";
msg << " containerKey=\"" << (pVid ? pVid->m_sKey : "/library/metadata/900000") << "\"";
msg << " key=\"" << (pVid ? pVid->m_sKey : "/library/metadata/900000") << "\"";
@@ -239,14 +239,14 @@ void Subscriber::SendUpdate(std::string msg, bool isNav)
ActionManager::ActionManager() {}
-void ActionManager::AddAction(Video* video)
+void ActionManager::AddAction(Video video)
{
m_myLock.Lock(&m_myMutex);
m_Action = video;
m_isAction = true;
}
-Video* ActionManager::GetAction()
+Video ActionManager::GetAction()
{
m_myLock.Lock(&m_myMutex);
m_isAction = false;
@@ -272,7 +272,7 @@ void cSubscriberStatus::Replaying(const cControl* DvbPlayerControl, const char*
pControl = const_cast<cControl*>(DvbPlayerControl);
cHlsPlayerControl* hlsControl = dynamic_cast<cHlsPlayerControl*>(pControl);
if(hlsControl) {
- pVideo = hlsControl->m_pVideo;
+ pVideo = &hlsControl->m_Video;
} else {
pVideo = NULL;
}
diff --git a/SubscriptionManager.h b/SubscriptionManager.h
index 19cfad1..fc96448 100644
--- a/SubscriptionManager.h
+++ b/SubscriptionManager.h
@@ -90,15 +90,15 @@ public:
static ActionManager instance;
return instance;
}
- void AddAction(Video* video);
- Video* GetAction();
+ void AddAction(Video video);
+ Video GetAction();
bool IsAction();
private:
cMutexLock m_myLock;
cMutex m_myMutex;
ActionManager();
- Video* m_Action;
+ Video m_Action;
bool m_isAction;
};
diff --git a/hlsPlayer.cpp b/hlsPlayer.cpp
index df62b0d..fe52c7c 100644
--- a/hlsPlayer.cpp
+++ b/hlsPlayer.cpp
@@ -379,11 +379,11 @@ int cHlsSegmentLoader::GetStreamLenght()
//--- cHlsPlayer
-cHlsPlayer::cHlsPlayer(std::string startm3u8, plexclient::Video* Video, int offset)
+cHlsPlayer::cHlsPlayer(std::string startm3u8, plexclient::Video Video, int offset)
{
dsyslog("[plex]: '%s'", __FUNCTION__);
m_pSegmentLoader = new cHlsSegmentLoader(startm3u8);
- m_pVideo = Video;
+ m_Video = Video;
m_timeOffset = offset;
m_jumpOffset = 0;
m_tTimeSum = 0;
@@ -406,8 +406,8 @@ void cHlsPlayer::SetAudioAndSubtitleTracks(void)
{
//DeviceClrAvailableTracks();
DeviceSetAvailableTrack(ttDolby, 0, 0, "Current");
- if(m_pVideo->m_Media.m_vStreams.size() > 0) {
- std::vector<plexclient::Stream> streams = m_pVideo->m_Media.m_vStreams;
+ if(m_Video.m_Media.m_vStreams.size() > 0) {
+ std::vector<plexclient::Stream> streams = m_Video.m_Media.m_vStreams;
for(std::vector<plexclient::Stream>::iterator it = streams.begin(); it != streams.end(); ++it) {
plexclient::Stream *pStream = &(*it);
if(pStream->m_eStreamType == plexclient::sAUDIO) {
@@ -432,7 +432,7 @@ void cHlsPlayer::Action(void)
DeviceFreeze();
m_doJump = false;
m_bFirstPlay = true;
- std::string uri = plexclient::Plexservice::GetUniversalTranscodeUrl(m_pVideo, m_jumpOffset);
+ std::string uri = plexclient::Plexservice::GetUniversalTranscodeUrl(&m_Video, m_jumpOffset);
m_pSegmentLoader->LoadM3u8(uri);
m_timeOffset = m_jumpOffset;
DeviceClear();
@@ -461,7 +461,7 @@ void cHlsPlayer::Action(void)
}
}
// set as watched if >= 90%
- int t = m_pVideo->m_Media.m_lDuration / 1000 * 0.9;
+ int t = m_Video.m_Media.m_lDuration / 1000 * 0.9;
if( GetPlayedSeconds() >= t) {
SetWatched();
}
@@ -506,14 +506,12 @@ void cHlsPlayer::Activate(bool On)
bool cHlsPlayer::GetIndex(int& Current, int& Total, bool SnapToIFrame __attribute__((unused)))
{
- if(m_pVideo) {
- if( m_pVideo->m_Media.m_lDuration == 0) {
- Total = m_pSegmentLoader->GetStreamLenght() * FramesPerSecond();
- } else {
- Total = m_pVideo->m_Media.m_lDuration / 1000 * FramesPerSecond(); // milliseconds
- }
- Current = GetPlayedSeconds() * FramesPerSecond();
+ if(m_Video.m_Media.m_lDuration > 0) {
+ Total = m_Video.m_Media.m_lDuration / 1000 * FramesPerSecond(); // milliseconds
+ } else {
+ Total = m_pSegmentLoader->GetStreamLenght() * FramesPerSecond();
}
+ Current = GetPlayedSeconds() * FramesPerSecond();
return true;
}
@@ -564,10 +562,7 @@ void cHlsPlayer::Stop(void)
double cHlsPlayer::FramesPerSecond(void)
{
- if(m_pVideo) {
- return m_pVideo->m_Media.m_VideoFrameRate ? m_pVideo->m_Media.m_VideoFrameRate : DEFAULTFRAMESPERSECOND;
- }
- return DEFAULTFRAMESPERSECOND;
+ return m_Video.m_Media.m_VideoFrameRate ? m_Video.m_Media.m_VideoFrameRate : DEFAULTFRAMESPERSECOND;
}
void cHlsPlayer::JumpRelative(int seconds)
@@ -590,8 +585,8 @@ void cHlsPlayer::SetAudioTrack(eTrackType Type __attribute__((unused)), const tT
dsyslog("[plex]%s %d %s", __FUNCTION__, TrackId->id, TrackId->language);
// Check if stream availiable
int streamId = 0;
- if(m_pVideo->m_Media.m_vStreams.size() > 0) {
- std::vector<plexclient::Stream> streams = m_pVideo->m_Media.m_vStreams;
+ if(m_Video.m_Media.m_vStreams.size() > 0) {
+ std::vector<plexclient::Stream> streams = m_Video.m_Media.m_vStreams;
for(std::vector<plexclient::Stream>::iterator it = streams.begin(); it != streams.end(); ++it) {
plexclient::Stream *pStream = &(*it);
if(pStream->m_eStreamType == plexclient::sAUDIO && pStream->m_iIndex + AudioIndexOffset == TrackId->id) {
@@ -602,9 +597,9 @@ void cHlsPlayer::SetAudioTrack(eTrackType Type __attribute__((unused)), const tT
}
// Then do the request
if(streamId > 0) {
- Poco::Net::HTTPClientSession session(m_pVideo->m_pServer->GetIpAdress(), m_pVideo->m_pServer->GetPort());
+ Poco::Net::HTTPClientSession session(m_Video.m_Server.GetIpAdress(), m_Video.m_Server.GetPort());
- std::string uri = "/library/parts/" + std::string(itoa(m_pVideo->m_Media.m_iPartId)) + "?audioStreamID=" + std::string(itoa(streamId));
+ std::string uri = "/library/parts/" + std::string(itoa(m_Video.m_Media.m_iPartId)) + "?audioStreamID=" + std::string(itoa(streamId));
Poco::Net::HTTPRequest req(Poco::Net::HTTPRequest::HTTP_PUT, uri);
session.sendRequest(req);
@@ -653,8 +648,8 @@ void cHlsPlayer::ReportProgress(bool stopped)
state = "paused";
}
- Poco::Net::HTTPClientSession session(m_pVideo->m_pServer->GetIpAdress(), m_pVideo->m_pServer->GetPort());
- std::string uri = "/:/progress?key=" + std::string(itoa(m_pVideo->m_iRatingKey)) + "&identifier=com.plexapp.plugins.library&time=" + std::string(itoa(GetPlayedSeconds()*1000)) + "&state=" + state;
+ Poco::Net::HTTPClientSession session(m_Video.m_Server.GetIpAdress(), m_Video.m_Server.GetPort());
+ std::string uri = "/:/progress?key=" + std::string(itoa(m_Video.m_iRatingKey)) + "&identifier=com.plexapp.plugins.library&time=" + std::string(itoa(GetPlayedSeconds()*1000)) + "&state=" + state;
Poco::Net::HTTPRequest req(Poco::Net::HTTPRequest::HTTP_GET, uri);
session.sendRequest(req);
@@ -669,8 +664,8 @@ void cHlsPlayer::ReportProgress(bool stopped)
void cHlsPlayer::SetWatched(void)
{
- Poco::Net::HTTPClientSession session(m_pVideo->m_pServer->GetIpAdress(), m_pVideo->m_pServer->GetPort());
- std::string uri = "/:/scrobble?key=" + std::string(itoa(m_pVideo->m_iRatingKey)) + "&identifier=com.plexapp.plugins.library";
+ Poco::Net::HTTPClientSession session(m_Video.m_Server.GetIpAdress(), m_Video.m_Server.GetPort());
+ std::string uri = "/:/scrobble?key=" + std::string(itoa(m_Video.m_iRatingKey)) + "&identifier=com.plexapp.plugins.library";
Poco::Net::HTTPRequest req(Poco::Net::HTTPRequest::HTTP_GET, uri);
session.sendRequest(req);
diff --git a/hlsPlayer.h b/hlsPlayer.h
index ee27049..79e1abf 100644
--- a/hlsPlayer.h
+++ b/hlsPlayer.h
@@ -75,7 +75,7 @@ class cHlsPlayer : public cPlayer, cThread
private:
int AudioIndexOffset;
cHlsSegmentLoader* m_pSegmentLoader;
- plexclient::Video* m_pVideo;
+ plexclient::Video m_Video;
int m_jumpOffset;
int m_timeOffset;
@@ -109,7 +109,7 @@ protected:
public:
//static cMutex s_mutex;
- cHlsPlayer(std::string startm3u8, plexclient::Video* Video, int offset = 0);
+ cHlsPlayer(std::string startm3u8, plexclient::Video Video, int offset = 0);
~cHlsPlayer();
virtual bool GetIndex(int &Current, int &Total, bool SnapToIFrame = false);
diff --git a/hlsPlayerControl.cpp b/hlsPlayerControl.cpp
index dff1a30..b9e15d3 100644
--- a/hlsPlayerControl.cpp
+++ b/hlsPlayerControl.cpp
@@ -8,11 +8,8 @@
#include "PVideo.h"
// static
-cControl* cHlsPlayerControl::Create(plexclient::Video* Video)
+cControl* cHlsPlayerControl::Create(plexclient::Video Video)
{
- if(!Video->m_pServer)
- return NULL;
-
// Stop already playing stream
cHlsPlayerControl* c = dynamic_cast<cHlsPlayerControl*>(cControl::Control(true));
if(c) {
@@ -20,20 +17,20 @@ cControl* cHlsPlayerControl::Create(plexclient::Video* Video)
}
// get Metadata
- std::string uri = Video->m_pServer->GetUri() + Video->m_sKey;
- plexclient::MediaContainer *pmcontainer = plexclient::Plexservice::GetMediaContainer(uri);
+ std::string uri = Video.m_Server.GetUri() + Video.m_sKey;
+ plexclient::MediaContainer pmcontainer = plexclient::Plexservice::GetMediaContainer(uri);
- std::string transcodeUri = plexclient::Plexservice::GetUniversalTranscodeUrl(&pmcontainer->m_vVideos[0], Video->m_iMyPlayOffset);
- cHlsPlayerControl* playerControl = new cHlsPlayerControl(new cHlsPlayer(transcodeUri, &pmcontainer->m_vVideos[0], Video->m_iMyPlayOffset), pmcontainer);
- playerControl->m_title = pmcontainer->m_vVideos[0].m_sTitle;
+ std::string transcodeUri = plexclient::Plexservice::GetUniversalTranscodeUrl(&pmcontainer.m_vVideos[0], Video.m_iMyPlayOffset);
+ cHlsPlayerControl* playerControl = new cHlsPlayerControl(new cHlsPlayer(transcodeUri, pmcontainer.m_vVideos[0], Video.m_iMyPlayOffset), pmcontainer.m_vVideos[0]);
+ playerControl->m_title = pmcontainer.m_vVideos[0].m_sTitle;
return playerControl;
}
-cHlsPlayerControl::cHlsPlayerControl(cHlsPlayer* Player, plexclient::MediaContainer* Container) :cControl(Player)
+cHlsPlayerControl::cHlsPlayerControl(cHlsPlayer* Player, plexclient::Video Video) :cControl(Player)
{
dsyslog("[plex]: '%s'", __FUNCTION__);
player = Player;
- m_pVideo = &Container->m_vVideos[0];
+ m_Video = Video;
//m_title = title;
displayReplay = NULL;
@@ -43,7 +40,7 @@ cHlsPlayerControl::cHlsPlayerControl(cHlsPlayer* Player, plexclient::MediaContai
lastSpeed = -2; // an invalid value
timeoutShow = 0;
- cStatus::MsgReplaying(this, m_title.c_str(), m_pVideo->m_Media.m_sPartFile.c_str(), true);
+ cStatus::MsgReplaying(this, m_title.c_str(), m_Video.m_Media.m_sPartFile.c_str(), true);
}
cHlsPlayerControl::~cHlsPlayerControl()
diff --git a/hlsPlayerControl.h b/hlsPlayerControl.h
index 6457363..c64139a 100644
--- a/hlsPlayerControl.h
+++ b/hlsPlayerControl.h
@@ -12,7 +12,6 @@ class cHlsPlayerControl : public cControl
{
private:
static volatile int active;
- plexclient::MediaContainer* m_pMediaContainer;
cHlsPlayer* player;
std::string m_title;
@@ -31,10 +30,10 @@ protected:
//void ShowMode();
public:
- plexclient::Video* m_pVideo;
+ plexclient::Video m_Video;
- static cControl* Create(plexclient::Video* Video);
- cHlsPlayerControl(cHlsPlayer* Player, plexclient::MediaContainer* Container);
+ static cControl* Create(plexclient::Video Video);
+ cHlsPlayerControl(cHlsPlayer* Player, plexclient::Video Video);
virtual ~cHlsPlayerControl();
virtual void Show(void);
diff --git a/plex.cpp b/plex.cpp
index 05a8b4e..524fd22 100644
--- a/plex.cpp
+++ b/plex.cpp
@@ -15,10 +15,10 @@ static const char *MAINMENUENTRY = "Plex for VDR";
**
** @param filename path and file name
*/
-static void PlayFile(plexclient::Video* pVid)
+static void PlayFile(plexclient::Video Vid)
{
- isyslog("[plex]: play file '%s'\n", pVid->m_sKey.c_str());
- cControl* control = cHlsPlayerControl::Create(pVid);
+ isyslog("[plex]: play file '%s'\n", Vid.m_sKey.c_str());
+ cControl* control = cHlsPlayerControl::Create(Vid);
if(control) {
cControl::Launch(control);
}
@@ -142,8 +142,7 @@ eOSState cPlexBrowser::ProcessSelected()
if(item->IsVideo()) {
- plexclient::Video* pVid = item->GetAttachedVideo();
- PlayFile(pVid);
+ PlayFile(*item->GetAttachedVideo());
return osEnd;
}
@@ -329,8 +328,7 @@ void cMyPlugin::MainThreadHook(void)
// dsyslog("[plex]%s:\n", __FUNCTION__);
// Start Tasks, e.g. Play Video
if(plexclient::ActionManager::GetInstance().IsAction()) {
- plexclient::Video* video = plexclient::ActionManager::GetInstance().GetAction();
- PlayFile(video);
+ PlayFile(plexclient::ActionManager::GetInstance().GetAction());
}
}
diff --git a/plexgdm.cpp b/plexgdm.cpp
index 0ad2fe0..9eb152f 100644
--- a/plexgdm.cpp
+++ b/plexgdm.cpp
@@ -12,7 +12,7 @@ plexgdm::plexgdm()
_multicastAddress = "239.0.0.250";
_clientUpdatePort = 32412;
_helloSent = false;
- _discoverInterval = 10 * 1000;
+ _discoverInterval = 30 * 1000;
_discoverTimer.Set(1);
m_discoverAdress = Poco::Net::SocketAddress(_multicastAddress, 32414);