summaryrefslogtreecommitdiffstats
path: root/xbmc/pvr/dialogs/GUIDialogPVRGuideInfo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'xbmc/pvr/dialogs/GUIDialogPVRGuideInfo.cpp')
-rw-r--r--xbmc/pvr/dialogs/GUIDialogPVRGuideInfo.cpp255
1 files changed, 255 insertions, 0 deletions
diff --git a/xbmc/pvr/dialogs/GUIDialogPVRGuideInfo.cpp b/xbmc/pvr/dialogs/GUIDialogPVRGuideInfo.cpp
new file mode 100644
index 0000000..9bce21e
--- /dev/null
+++ b/xbmc/pvr/dialogs/GUIDialogPVRGuideInfo.cpp
@@ -0,0 +1,255 @@
+/*
+ * Copyright (C) 2012-2018 Team Kodi
+ * This file is part of Kodi - https://kodi.tv
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ * See LICENSES/README.md for more information.
+ */
+
+#include "GUIDialogPVRGuideInfo.h"
+
+#include "FileItem.h"
+#include "ServiceBroker.h"
+#include "guilib/GUIMessage.h"
+#include "pvr/PVRManager.h"
+#include "pvr/addons/PVRClient.h"
+#include "pvr/epg/EpgInfoTag.h"
+#include "pvr/guilib/PVRGUIActionsEPG.h"
+#include "pvr/guilib/PVRGUIActionsPlayback.h"
+#include "pvr/guilib/PVRGUIActionsTimers.h"
+#include "pvr/recordings/PVRRecordings.h"
+#include "pvr/timers/PVRTimerInfoTag.h"
+#include "pvr/timers/PVRTimers.h"
+
+#include <memory>
+
+using namespace PVR;
+
+#define CONTROL_BTN_FIND 4
+#define CONTROL_BTN_SWITCH 5
+#define CONTROL_BTN_RECORD 6
+#define CONTROL_BTN_OK 7
+#define CONTROL_BTN_PLAY_RECORDING 8
+#define CONTROL_BTN_ADD_TIMER 9
+#define CONTROL_BTN_PLAY_EPGTAG 10
+#define CONTROL_BTN_SET_REMINDER 11
+
+CGUIDialogPVRGuideInfo::CGUIDialogPVRGuideInfo()
+ : CGUIDialog(WINDOW_DIALOG_PVR_GUIDE_INFO, "DialogPVRInfo.xml")
+{
+}
+
+CGUIDialogPVRGuideInfo::~CGUIDialogPVRGuideInfo() = default;
+
+bool CGUIDialogPVRGuideInfo::OnClickButtonOK(const CGUIMessage& message)
+{
+ bool bReturn = false;
+
+ if (message.GetSenderId() == CONTROL_BTN_OK)
+ {
+ Close();
+ bReturn = true;
+ }
+
+ return bReturn;
+}
+
+bool CGUIDialogPVRGuideInfo::OnClickButtonRecord(const CGUIMessage& message)
+{
+ bool bReturn = false;
+
+ if (message.GetSenderId() == CONTROL_BTN_RECORD)
+ {
+ auto& mgr = CServiceBroker::GetPVRManager();
+
+ const std::shared_ptr<CPVRTimerInfoTag> timerTag =
+ mgr.Timers()->GetTimerForEpgTag(m_progItem->GetEPGInfoTag());
+ if (timerTag)
+ {
+ if (timerTag->IsRecording())
+ bReturn = mgr.Get<PVR::GUI::Timers>().StopRecording(CFileItem(timerTag));
+ else
+ bReturn = mgr.Get<PVR::GUI::Timers>().DeleteTimer(CFileItem(timerTag));
+ }
+ else
+ {
+ bReturn = mgr.Get<PVR::GUI::Timers>().AddTimer(*m_progItem, false);
+ }
+ }
+
+ if (bReturn)
+ Close();
+
+ return bReturn;
+}
+
+bool CGUIDialogPVRGuideInfo::OnClickButtonAddTimer(const CGUIMessage& message)
+{
+ bool bReturn = false;
+
+ if (message.GetSenderId() == CONTROL_BTN_ADD_TIMER)
+ {
+ auto& mgr = CServiceBroker::GetPVRManager();
+ if (m_progItem && !mgr.Timers()->GetTimerForEpgTag(m_progItem->GetEPGInfoTag()))
+ {
+ bReturn = mgr.Get<PVR::GUI::Timers>().AddTimerRule(*m_progItem, true, true);
+ }
+ }
+
+ if (bReturn)
+ Close();
+
+ return bReturn;
+}
+
+bool CGUIDialogPVRGuideInfo::OnClickButtonSetReminder(const CGUIMessage& message)
+{
+ bool bReturn = false;
+
+ if (message.GetSenderId() == CONTROL_BTN_SET_REMINDER)
+ {
+ auto& mgr = CServiceBroker::GetPVRManager();
+ if (m_progItem && !mgr.Timers()->GetTimerForEpgTag(m_progItem->GetEPGInfoTag()))
+ {
+ bReturn = mgr.Get<PVR::GUI::Timers>().AddReminder(*m_progItem);
+ }
+ }
+
+ if (bReturn)
+ Close();
+
+ return bReturn;
+}
+
+bool CGUIDialogPVRGuideInfo::OnClickButtonPlay(const CGUIMessage& message)
+{
+ bool bReturn = false;
+
+ if (message.GetSenderId() == CONTROL_BTN_SWITCH ||
+ message.GetSenderId() == CONTROL_BTN_PLAY_RECORDING ||
+ message.GetSenderId() == CONTROL_BTN_PLAY_EPGTAG)
+ {
+ Close();
+
+ if (m_progItem)
+ {
+ if (message.GetSenderId() == CONTROL_BTN_PLAY_RECORDING)
+ CServiceBroker::GetPVRManager().Get<PVR::GUI::Playback>().PlayRecording(
+ *m_progItem, true /* bCheckResume */);
+ else if (message.GetSenderId() == CONTROL_BTN_PLAY_EPGTAG &&
+ m_progItem->GetEPGInfoTag()->IsPlayable())
+ CServiceBroker::GetPVRManager().Get<PVR::GUI::Playback>().PlayEpgTag(*m_progItem);
+ else
+ CServiceBroker::GetPVRManager().Get<PVR::GUI::Playback>().SwitchToChannel(
+ *m_progItem, true /* bCheckResume */);
+
+ bReturn = true;
+ }
+ }
+
+ return bReturn;
+}
+
+bool CGUIDialogPVRGuideInfo::OnClickButtonFind(const CGUIMessage& message)
+{
+ bool bReturn = false;
+
+ if (message.GetSenderId() == CONTROL_BTN_FIND)
+ {
+ Close();
+ if (m_progItem)
+ return CServiceBroker::GetPVRManager().Get<PVR::GUI::EPG>().FindSimilar(*m_progItem);
+ }
+
+ return bReturn;
+}
+
+bool CGUIDialogPVRGuideInfo::OnMessage(CGUIMessage& message)
+{
+ switch (message.GetMessage())
+ {
+ case GUI_MSG_CLICKED:
+ return OnClickButtonOK(message) || OnClickButtonRecord(message) ||
+ OnClickButtonPlay(message) || OnClickButtonFind(message) ||
+ OnClickButtonAddTimer(message) || OnClickButtonSetReminder(message);
+ }
+
+ return CGUIDialog::OnMessage(message);
+}
+
+bool CGUIDialogPVRGuideInfo::OnInfo(int actionID)
+{
+ Close();
+ return true;
+}
+
+void CGUIDialogPVRGuideInfo::SetProgInfo(const std::shared_ptr<CFileItem>& item)
+{
+ m_progItem = item;
+}
+
+CFileItemPtr CGUIDialogPVRGuideInfo::GetCurrentListItem(int offset)
+{
+ return m_progItem;
+}
+
+void CGUIDialogPVRGuideInfo::OnInitWindow()
+{
+ CGUIDialog::OnInitWindow();
+
+ if (!m_progItem)
+ {
+ /* no epg event selected */
+ return;
+ }
+
+ auto& mgr = CServiceBroker::GetPVRManager();
+ const auto epgTag = m_progItem->GetEPGInfoTag();
+
+ if (!mgr.Recordings()->GetRecordingForEpgTag(epgTag))
+ {
+ /* not recording. hide the play recording button */
+ SET_CONTROL_HIDDEN(CONTROL_BTN_PLAY_RECORDING);
+ }
+
+ bool bHideRecord = true;
+ bool bHideAddTimer = true;
+ const std::shared_ptr<CPVRTimerInfoTag> timer = mgr.Timers()->GetTimerForEpgTag(epgTag);
+ bool bHideSetReminder = timer || (epgTag->StartAsLocalTime() <= CDateTime::GetCurrentDateTime());
+
+ if (timer)
+ {
+ if (timer->IsRecording())
+ {
+ SET_CONTROL_LABEL(CONTROL_BTN_RECORD, 19059); /* Stop recording */
+ bHideRecord = false;
+ }
+ else if (!timer->GetTimerType()->IsReadOnly())
+ {
+ SET_CONTROL_LABEL(CONTROL_BTN_RECORD, 19060); /* Delete timer */
+ bHideRecord = false;
+ }
+ }
+ else if (epgTag->IsRecordable())
+ {
+ const std::shared_ptr<CPVRClient> client = mgr.GetClient(epgTag->ClientID());
+ if (client && client->GetClientCapabilities().SupportsTimers())
+ {
+ SET_CONTROL_LABEL(CONTROL_BTN_RECORD, 264); /* Record */
+ bHideRecord = false;
+ bHideAddTimer = false;
+ }
+ }
+
+ if (!epgTag->IsPlayable())
+ SET_CONTROL_HIDDEN(CONTROL_BTN_PLAY_EPGTAG);
+
+ if (bHideRecord)
+ SET_CONTROL_HIDDEN(CONTROL_BTN_RECORD);
+
+ if (bHideAddTimer)
+ SET_CONTROL_HIDDEN(CONTROL_BTN_ADD_TIMER);
+
+ if (bHideSetReminder)
+ SET_CONTROL_HIDDEN(CONTROL_BTN_SET_REMINDER);
+}