From f7196f23bc0ed500dcf1f60b794caa9a9f76a751 Mon Sep 17 00:00:00 2001 From: chriszero Date: Sun, 3 May 2015 17:20:03 +0200 Subject: - Playmarks for skindesigner - More tokens (mediainfo, codes, etc) - Updated translation --- plexSdOsd.cpp | 135 +++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 86 insertions(+), 49 deletions(-) (limited to 'plexSdOsd.cpp') diff --git a/plexSdOsd.cpp b/plexSdOsd.cpp index 949eb81..27f8157 100644 --- a/plexSdOsd.cpp +++ b/plexSdOsd.cpp @@ -9,11 +9,15 @@ cMutex cPlexSdOsd::RedrawMutex; cPlexSdOsd::cPlexSdOsd() { + m_pRootView = NULL; } cPlexSdOsd::~cPlexSdOsd() { - m_pBrowserGrid->Clear(); + if(m_pBrowserGrid) + m_pBrowserGrid->Clear(); + if(m_pMessage) + m_pMessage->Clear(); cPictureCache::GetInstance().RemoveAll(); delete m_pRootView; } @@ -46,6 +50,8 @@ void cPlexSdOsd::Show(void) } m_pBrowserGrid = std::shared_ptr(new cBrowserGrid(m_pRootView)); + m_pMessage = std::shared_ptr(m_pRootView->GetViewElement(eViewElementsRoot::verMessage)); + m_messageDisplayed = false; Flush(); } @@ -59,60 +65,91 @@ eOSState cPlexSdOsd::ProcessKey(eKeys Key) { eOSState state = eOSState::osContinue; plexclient::Video* vid = dynamic_cast(m_pBrowserGrid->SelectedObject()); - + if (m_pBrowserGrid->DrawTime()) - m_pBrowserGrid->Flush(); - - switch (Key & ~k_Repeat) { - case kUp: - m_pBrowserGrid->NavigateUp(); - Flush(); - break; - case kDown: - m_pBrowserGrid->NavigateDown(); - Flush(); - break; - case kLeft: - m_pBrowserGrid->NavigateLeft(); - Flush(); - break; - case kRight: - m_pBrowserGrid->NavigateRight(); - Flush(); - break; - case kOk: - // Play movie or change dir - state = m_pBrowserGrid->NavigateSelect(); - Flush(); - break; - case kBack: - state = m_pBrowserGrid->NavigateBack(); - Flush(); - break; - case kRed: - if(vid) { - if(vid->m_iViewCount > 0) vid->SetUnwatched(); - else vid->SetWatched(); - vid->UpdateFromServer(); + m_pBrowserGrid->Flush(); + + if(m_messageDisplayed) { + switch (Key & ~k_Repeat) { + case kOk: + vid->m_iMyPlayOffset = vid->m_lViewoffset/1000; + m_messageDisplayed = false; + state = eOSState::osUser1; + break; + case kBack: + vid->m_lViewoffset = 0; + state = eOSState::osUser1; + default: + break; + } + } else { + + switch (Key & ~k_Repeat) { + case kUp: + m_pBrowserGrid->NavigateUp(); + Flush(); + break; + case kDown: + m_pBrowserGrid->NavigateDown(); + Flush(); + break; + case kLeft: + m_pBrowserGrid->NavigateLeft(); + Flush(); + break; + case kRight: + m_pBrowserGrid->NavigateRight(); + Flush(); + break; + case kOk: + // Play movie or change dir + state = m_pBrowserGrid->NavigateSelect(); Flush(); + break; + case kBack: + state = m_pBrowserGrid->NavigateBack(); + Flush(); + break; + case kRed: + if(vid) { + if(vid->m_iViewCount > 0) vid->SetUnwatched(); + else vid->SetWatched(); + vid->UpdateFromServer(); + Flush(); + } + break; + case kGreen: + m_pBrowserGrid->PrevTab(); + Flush(); + break; + case kYellow: + m_pBrowserGrid->NextTab(); + Flush(); + break; + default: + break; } - break; - case kGreen: - m_pBrowserGrid->PrevTab(); - Flush(); - break; - case kYellow: - m_pBrowserGrid->NextTab(); - Flush(); - break; - default: - break; + } if(state == eOSState::osUser1) { - //plexclient::ActionManager::GetInstance().AddAction(*vid); - cMyPlugin::PlayFile(*vid); - state = eOSState::osEnd; + if(vid->m_iMyPlayOffset == 0 && vid->m_lViewoffset > 0 ) { + cString message = cString::sprintf(tr("'Ok' to start from %ld minutes, 'Back' to start from beginning."), vid->m_lViewoffset / 60000); + DrawMessage(std::string(message)); + m_messageDisplayed = true; + } else { + cMyPlugin::PlayFile(*vid); + state = eOSState::osEnd; + } } return state; } + +void cPlexSdOsd::DrawMessage(std::string message) +{ + m_pMessage->ClearTokens(); + m_pMessage->AddStringToken("message", message); + m_pMessage->AddIntToken("displaymessage", true); + m_pMessage->Display(); + m_pRootView->Display(); +} -- cgit v1.2.3