summaryrefslogtreecommitdiff
path: root/plexSdOsd.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plexSdOsd.cpp')
-rw-r--r--plexSdOsd.cpp134
1 files changed, 70 insertions, 64 deletions
diff --git a/plexSdOsd.cpp b/plexSdOsd.cpp
index 1515ccd..5eadc9a 100644
--- a/plexSdOsd.cpp
+++ b/plexSdOsd.cpp
@@ -69,43 +69,38 @@ void cPlexSdOsd::Flush()
eOSState cPlexSdOsd::ProcessKey(eKeys Key)
{
eOSState state = eOSState::osContinue;
- plexclient::Video* vid = NULL;
-
- if (m_pBrowserGrid->DrawTime())
- m_pBrowserGrid->Flush();
-
- //check if some plexservers are online
- if(plexclient::plexgdm::GetInstance().GetFirstServer() == NULL ||
- (plexclient::plexgdm::GetInstance().GetFirstServer() && plexclient::plexgdm::GetInstance().GetFirstServer()->Offline)
- ) {
- DrawMessage(std::string(tr("No Plex Media Server found.")));
- switch (Key & ~k_Repeat) {
- case kOk:
- case kBack:
- return eOSState::osEnd;
- break;
- default:
- return eOSState::osContinue;
+ if(m_detailsActive) {
+ state = ProcessKeyDetailView(Key);
+ } else {
+ //check if some plexservers are online
+ if(plexclient::plexgdm::GetInstance().GetFirstServer() == NULL ||
+ (plexclient::plexgdm::GetInstance().GetFirstServer() && plexclient::plexgdm::GetInstance().GetFirstServer()->Offline)
+ ) {
+ DrawMessage(std::string(tr("No Plex Media Server found.")));
+ switch (Key & ~k_Repeat) {
+ case kOk:
+ case kBack:
+ return eOSState::osEnd;
+ break;
+ default:
+ return eOSState::osContinue;
+ }
}
+ if (m_pBrowserGrid->DrawTime()) m_pBrowserGrid->Flush();
+ state = ProcessKeyBrowserView(Key);
}
+
+ return state;
+}
- if(m_messageDisplayed) {
- vid = dynamic_cast<plexclient::Video*>(m_pBrowserGrid->SelectedObject());
- 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 if(m_detailsActive) {
- switch (Key & ~k_Repeat) {
+
+eOSState cPlexSdOsd::ProcessKeyDetailView(eKeys Key)
+{
+ eOSState state = eOSState::osContinue;
+ plexclient::Video* vid = NULL;
+
+ switch (Key & ~k_Repeat) {
case kUp:
if(m_pDetailGrid->NavigateUp()) Flush();
break;
@@ -120,37 +115,55 @@ eOSState cPlexSdOsd::ProcessKey(eKeys Key)
break;
case kOk:
state = m_pDetailGrid->NavigateSelect();
+ vid = dynamic_cast<plexclient::Video*>(m_pDetailGrid->SelectedObject());
Flush();
break;
case kBack:
- state = m_pDetailGrid->NavigateBack();
+ state = eOSState::osContinue;
m_pDetailGrid->Clear();
m_pDetailsView->Deactivate(true);
m_pDetailGrid = nullptr;
m_pDetailsView = nullptr;
m_detailsActive = false;
m_pRootView->Activate();
+ Flush();
break;
- case kBlue:
- vid = m_pDetailGrid->GetVideo();
- state = eOSState::osUser1;
+ case kYellow:
+ if(m_pDetailGrid->GetVideo()) {
+ if(m_pDetailGrid->GetVideo()->m_iViewCount > 0) m_pDetailGrid->GetVideo()->SetUnwatched();
+ else m_pDetailGrid->GetVideo()->SetWatched();
+ m_pDetailGrid->GetVideo()->UpdateFromServer();
+ Flush();
+ }
break;
+ case kGreen:
+ vid = m_pDetailGrid->GetVideo();
+ state = eOSState::osUser1;
+ break;
case kRed:
- if(m_pDetailGrid->GetVideo()) {
- if(m_pDetailGrid->GetVideo()->m_iViewCount > 0) m_pDetailGrid->GetVideo()->SetUnwatched();
- else m_pDetailGrid->GetVideo()->SetWatched();
- m_pDetailGrid->GetVideo()->UpdateFromServer();
- Flush();
- }
+ vid = m_pDetailGrid->GetVideo();
+ vid->m_iMyPlayOffset = vid->m_lViewoffset/1000;
+ state = eOSState::osUser1;
break;
- case kGreen:
- case kYellow:
+ case kBlue:
default:
break;
- }
- } else {
+ }
+
+ if(state == eOSState::osUser1 && vid) {
+ cMyPlugin::PlayFile(*vid);
+ state = eOSState::osEnd;
+ }
+
+ return state;
+}
- switch (Key & ~k_Repeat) {
+eOSState cPlexSdOsd::ProcessKeyBrowserView(eKeys Key)
+{
+ eOSState state = eOSState::osContinue;
+ plexclient::Video* vid = NULL;
+
+ switch (Key & ~k_Repeat) {
case kUp:
if(m_pBrowserGrid->NavigateUp()) Flush();
break;
@@ -168,6 +181,7 @@ eOSState cPlexSdOsd::ProcessKey(eKeys Key)
state = m_pBrowserGrid->NavigateSelect();
if(state == eOSState::osUser1) {
vid = dynamic_cast<plexclient::Video*>(m_pBrowserGrid->SelectedObject());
+ vid->m_iMyPlayOffset = vid->m_lViewoffset/1000;
}
Flush();
break;
@@ -193,7 +207,6 @@ eOSState cPlexSdOsd::ProcessKey(eKeys Key)
if(vid) {
vid->UpdateFromServer();
ShowDetails(vid);
- //Flush();
}
break;
case kYellow:
@@ -202,20 +215,13 @@ eOSState cPlexSdOsd::ProcessKey(eKeys Key)
break;
default:
break;
- }
-
}
-
- if(state == eOSState::osUser1) {
- 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;
- }
+
+ if(state == eOSState::osUser1 && vid) {
+ cMyPlugin::PlayFile(*vid);
+ state = eOSState::osEnd;
}
+
return state;
}
@@ -227,10 +233,10 @@ void cPlexSdOsd::ShowDetails(plexclient::Video *vid)
m_pDetailsView = std::shared_ptr<skindesignerapi::cOsdView>(GetOsdView((int)eViews::detailView));
m_pDetailGrid = std::shared_ptr<cDetailView>(new cDetailView(m_pDetailsView, vid));
+ m_pDetailsView->Activate();
m_pDetailGrid->Draw();
- m_pDetailGrid->Flush();
+ m_pDetailGrid->Flush();
m_detailsActive = true;
-
}
void cPlexSdOsd::DrawMessage(std::string message)
@@ -406,4 +412,4 @@ void cPlexSdOsd::DefineDetailsTokens(eViewElementsDetail ve, skindesignerapi::cT
default:
break;
}
-} \ No newline at end of file
+}