From 23f9f7712bfa33b5a488a447a6fabe6035cc3240 Mon Sep 17 00:00:00 2001 From: chriszero Date: Sat, 15 Nov 2014 19:43:07 +0100 Subject: initial commit --- SubscriptionManager.cpp | 118 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 SubscriptionManager.cpp (limited to 'SubscriptionManager.cpp') diff --git a/SubscriptionManager.cpp b/SubscriptionManager.cpp new file mode 100644 index 0000000..47f917d --- /dev/null +++ b/SubscriptionManager.cpp @@ -0,0 +1,118 @@ +#include "SubscriptionManager.h" +#include "Config.h" + +#include + +#include +#include +#include +#include +#include + +namespace plexclient +{ + +SubscriptionManager::SubscriptionManager() +{ + +} + +void SubscriptionManager::Notify() { + mutex.lock(); + + //TODO: Implement + for(auto subs : m_mSubcribers) { + subs.second.SendUpdate(GetMsg(std::to_string(subs.second.m_iCommandId)), false); + } + + mutex.unlock(); +} + +void SubscriptionManager::AddSubscriber(Subscriber subs) { + mutex.lock(); + m_mSubcribers[subs.GetUuid()] = subs; + std::cout << "AddSubscriber: " << subs.to_string() << std::endl; + mutex.unlock(); +} + +void SubscriptionManager::RemoveSubscriber(std::string uuid) { + mutex.lock(); + if(m_mSubcribers.find(uuid) != m_mSubcribers.end()) { + m_mSubcribers.erase(uuid); + } + mutex.unlock(); +} + +std::string SubscriptionManager::GetMsg(std::string commandId) { + PlayerGetCurrentPosition(); + int time = PlayerCurrent; + + bool paused = PlayerPaused; + + std::stringstream msg; + msg << "" + ""; + + msg << ""; + msg << ""; + msg << ""; + + msg << ""; + return msg.str(); +} + +Subscriber::Subscriber(std::string protocol, std::string host, int port, std::string uuid, int commandId) { + m_sProtocol = protocol; + m_sHost = host; + m_iPort = port; + m_sUuid = uuid; + m_iCommandId = commandId; +} + +void Subscriber::SendUpdate(std::string msg, bool isNav) { + ++m_iAge; + + Poco::Net::HTTPRequest *pRequest = new Poco::Net::HTTPRequest(Poco::Net::HTTPRequest::HTTP_POST, + "/:/timeline", 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"); + + 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-vdr"); + pRequest->add("X-Plex-Provides", "player"); + pRequest->add("X-Plex-Version", "0.0.1a"); + + auto session = new Poco::Net::HTTPClientSession(m_sHost, m_iPort); + std::ostream& oustr = session->sendRequest(*pRequest); + oustr << msg; +} + +ActionManager::ActionManager() {} + +void ActionManager::AddAction(std::string file) { + m_sAction = file; + m_isAction = true; +} + +std::string ActionManager::GetAction() { + m_isAction = false; + return m_sAction; +} + +bool ActionManager::IsAction() { + return m_isAction; +} + +} + -- cgit v1.2.3