#include "browserGrid.h" #include "plexSdOsd.h" #include "XmlObject.h" #include "PVideo.h" #include "Directory.h" cBrowserGrid::cBrowserGrid(cViewGrid* viewGrid) : cViewGridNavigator(viewGrid) { m_rows = 2; m_columns = 5; m_pService = NULL; m_pContainer = NULL; m_bServersAreRoot = true; SetServerElements(); ProcessData(); } cBrowserGrid::cBrowserGrid(cViewGrid* viewGrid, std::shared_ptr<plexclient::Plexservice> service) : cViewGridNavigator(viewGrid) { m_rows = 2; m_columns = 5; m_bServersAreRoot = false; m_pService = service; m_pContainer = m_pService->GetSection(m_pService->StartUri); ProcessData(); } void cBrowserGrid::SetServerElements() { m_vServerElements.clear(); for(std::vector<plexclient::PlexServer>::iterator it = plexclient::plexgdm::GetInstance().GetPlexservers().begin(); it != plexclient::plexgdm::GetInstance().GetPlexservers().end(); ++it) { m_vServerElements.push_back(cServerElement(&(*it), "/library/sections", "Bibliothek")); m_vServerElements.push_back(cServerElement(&(*it), "/video", "Video Channels")); } } void cBrowserGrid::ProcessData() { m_vElements.clear(); if(m_vServerElements.size() > 0) { for(auto it = m_vServerElements.begin(); it !=m_vServerElements.end(); ++it) { cServerElement *elem = &(*it); m_vElements.push_back(elem); } } else { m_vElements.push_back(&m_Dummy); m_Dummy.Dirty(); if(m_pContainer->m_vVideos.size() > 0) { for(std::vector<plexclient::Video>::iterator it = m_pContainer->m_vVideos.begin(); it != m_pContainer->m_vVideos.end(); ++it) { plexclient::Video *elem = &(*it); m_vElements.push_back(elem); } } if(m_pContainer->m_vDirectories.size() > 0) { for(std::vector<plexclient::Directory>::iterator it = m_pContainer->m_vDirectories.begin(); it != m_pContainer->m_vDirectories.end(); ++it) { plexclient::Directory *elem = &(*it); m_vElements.push_back(elem); } } } m_firstElementIter = m_vElements.begin(); m_pGrid->Clear(); m_setIterator = true; FilterElements(0); } eOSState cBrowserGrid::NavigateSelect() { plexclient::Directory* dir = dynamic_cast<plexclient::Directory*>(SelectedObject()); if(dir) { m_pContainer = m_pService->GetSection(dir->m_sKey); ProcessData(); return eOSState::osContinue; } else if(dynamic_cast<cDummyElement*>(SelectedObject())) { return NavigateBack(); } else if(cServerElement* srv = dynamic_cast<cServerElement*>(SelectedObject())) { m_pService = std::shared_ptr<plexclient::Plexservice>(new plexclient::Plexservice( srv->Server() ) ); m_pContainer = m_pService->GetSection(srv->StartPath()); m_vServerElements.clear(); ProcessData(); return eOSState::osContinue; } else return eOSState::osEnd; } eOSState cBrowserGrid::NavigateBack() { std::shared_ptr<plexclient::MediaContainer> pCont = NULL; if(m_pService) { pCont = m_pService->GetLastSection(); } if(pCont) { m_pContainer = pCont; ProcessData(); return eOSState::osBack; } else if(m_bServersAreRoot) { m_pContainer = NULL; m_pService = NULL; SetServerElements(); ProcessData(); } return eOSState::osEnd; } /* * cDummyElement */ void cDummyElement::AddTokens(std::shared_ptr<cViewGrid> grid) { grid->ClearTokens(); grid->AddIntToken("isdummy", 1); grid->AddStringToken("title", "../"); } std::string cDummyElement::GetTitle() { return "Dummy"; } /* * cServerElement */ cServerElement::cServerElement(plexclient::PlexServer* server, std::string startPath, std::string startName) { m_pServer = server; m_sStartPath = startPath; m_sStartName = startName; } void cServerElement::AddTokens(std::shared_ptr<cViewGrid> grid) { grid->ClearTokens(); grid->AddIntToken("isserver", 1); grid->AddStringToken("title", m_pServer->GetServerName()); grid->AddStringToken("serverstartpointname", m_sStartName); grid->AddStringToken("serverip", m_pServer->GetIpAdress()); grid->AddIntToken("serverport", m_pServer->GetPort()); grid->AddStringToken("serverversion", m_pServer->GetVersion()); } std::string cServerElement::GetTitle() { return "Server"; }