diff options
Diffstat (limited to 'plexSdOsd.cpp')
-rw-r--r-- | plexSdOsd.cpp | 117 |
1 files changed, 103 insertions, 14 deletions
diff --git a/plexSdOsd.cpp b/plexSdOsd.cpp index e6dc1f9..843eafa 100644 --- a/plexSdOsd.cpp +++ b/plexSdOsd.cpp @@ -1,4 +1,9 @@ #include "plexSdOsd.h" +#include "viewGridNavigator.h" +#include "pictureCache.h" +#include <vdr/thread.h> + +cMutex cPlexSdOsd::RedrawMutex; cPlexSdOsd::cPlexSdOsd() { @@ -16,28 +21,48 @@ void cPlexSdOsd::Show(void) esyslog("[plex]: used skindesigner skin does not support plex"); return; } + m_pBackground = std::shared_ptr<cViewElement>(m_pRootView->GetViewElement(eViewElementsRoot::verBackground)); m_pViewHeader = std::shared_ptr<cViewHeader>( new cViewHeader(m_pRootView->GetViewElement(eViewElementsRoot::verHeader)) ); - m_pBrowserGrid = std::shared_ptr<cBrowserGrid>( - new cBrowserGrid( m_pRootView->GetViewGrid(eViewGrids::vgBrowser)) - ); + m_pfooter = std::shared_ptr<cViewElement>(m_pRootView->GetViewElement(eViewElementsRoot::verFooter)); + + SwitchGrid(m_pViewHeader->CurrentTab()); Flush(); } void cPlexSdOsd::Flush() { + cMutexLock MutexLock(&cPlexSdOsd::RedrawMutex); + DrawBackground(); + m_pViewHeader->Draw(m_pBrowserGrid->SelectedObject()); + + m_pBackground->Display(); + m_pBrowserGrid->Flush(); - - m_pViewHeader->Draw(); - + m_pRootView->Display(); } +void cPlexSdOsd::DrawBackground() +{ + m_pBackground->ClearTokens(); + + if(auto video = dynamic_cast<plexclient::Video*>(m_pBrowserGrid->SelectedObject()) ) { + bool cached = false; + std::string path = cPictureCache::GetInstance().GetPath(video->ArtUri(), 1920, 1080, cached); + m_pBackground->AddStringToken("selecteditembackground", path); + } + + m_pBackground->AddIntToken("isdirectory", 1); + m_pBackground->AddStringToken("currentdirectorybackground", "/path"); +} + eOSState cPlexSdOsd::ProcessKey(eKeys Key) { + eOSState state = eOSState::osContinue; switch (Key & ~k_Repeat) { case kUp: m_pBrowserGrid->NavigateUp(); @@ -57,10 +82,11 @@ eOSState cPlexSdOsd::ProcessKey(eKeys Key) break; case kOk: // Play movie or change dir - m_pBrowserGrid->NavigateSelect(); + state = m_pBrowserGrid->NavigateSelect(); Flush(); break; case kBack: + //state = m_pBrowserGrid->NavigateBack(); Flush(); break; @@ -77,28 +103,91 @@ eOSState cPlexSdOsd::ProcessKey(eKeys Key) default: break; } - return eOSState::osContinue; + return state; } void cPlexSdOsd::SwitchGrid(ePlexMenuTab currentTab) { if(currentTab == ePlexMenuTab::pmtOnDeck) { - - auto service = std::shared_ptr<plexclient::Plexservice>(new plexclient::Plexservice( new plexclient::PlexServer("192.168.1.175", 32400), "/hubs/home/onDeck" ) ); + auto service = std::shared_ptr<plexclient::Plexservice>(new plexclient::Plexservice( plexclient::plexgdm::GetInstance().GetServer("192.168.1.175", 32400), "/hubs/home/onDeck" ) ); m_pBrowserGrid = std::shared_ptr<cBrowserGrid>( new cBrowserGrid( m_pRootView->GetViewGrid(eViewGrids::vgBrowser), service) ); - + m_pBrowserGrid->m_pRootView = m_pRootView; + } else if(currentTab == ePlexMenuTab::pmtRecentlyAdded) { - auto service = std::shared_ptr<plexclient::Plexservice>(new plexclient::Plexservice( new plexclient::PlexServer("192.168.1.175", 32400), "/library/sections" ) ); + auto service = std::shared_ptr<plexclient::Plexservice>(new plexclient::Plexservice( plexclient::plexgdm::GetInstance().GetServer("192.168.1.175", 32400), "/library/sections" ) ); m_pBrowserGrid = std::shared_ptr<cBrowserGrid>( new cBrowserGrid( m_pRootView->GetViewGrid(eViewGrids::vgBrowser), service) ); - + m_pBrowserGrid->m_pRootView = m_pRootView; + } else if(currentTab == ePlexMenuTab::pmtLibrary) { - + m_pBrowserGrid = std::shared_ptr<cBrowserGrid>( new cBrowserGrid( m_pRootView->GetViewGrid(eViewGrids::vgBrowser)) ); + m_pBrowserGrid->m_pRootView = m_pRootView; } } + +void cPlexSdOsd::DrawFooter() +{ + //if (!active) + // return; + + string textGreen = tr("Prev. Tab"); + string textYellow = tr("Next Tab"); + string textRed = ""; + string textBlue = ""; + + if(auto vid = dynamic_cast<plexclient::Video*>(m_pBrowserGrid->SelectedObject()) ) { + if(vid->m_iViewCount > 0) textRed = tr("Unscrobble"); + else textRed = tr("Scrobble"); + textBlue = tr("Info"); + } + + + int colorKeys[4] = { Setup.ColorKey0, Setup.ColorKey1, Setup.ColorKey2, Setup.ColorKey3 }; + + m_pfooter->Clear(); + m_pfooter->ClearTokens(); + + m_pfooter->AddStringToken("red", textRed); + m_pfooter->AddStringToken("green", textGreen); + m_pfooter->AddStringToken("yellow", textYellow); + m_pfooter->AddStringToken("blue", textBlue); + + for (int button = 1; button < 5; button++) { + string red = *cString::sprintf("red%d", button); + string green = *cString::sprintf("green%d", button); + string yellow = *cString::sprintf("yellow%d", button); + string blue = *cString::sprintf("blue%d", button); + bool isRed = false; + bool isGreen = false; + bool isYellow = false; + bool isBlue = false; + switch (colorKeys[button-1]) { + case 0: + isRed = true; + break; + case 1: + isGreen = true; + break; + case 2: + isYellow = true; + break; + case 3: + isBlue = true; + break; + default: + break; + } + m_pfooter->AddIntToken(red, isRed); + m_pfooter->AddIntToken(green, isGreen); + m_pfooter->AddIntToken(yellow, isYellow); + m_pfooter->AddIntToken(blue, isBlue); + } + + m_pfooter->Display(); +} |