summaryrefslogtreecommitdiffstats
path: root/xbmc/pvr/guilib/guiinfo/PVRGUIInfo.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--xbmc/pvr/guilib/guiinfo/PVRGUIInfo.h217
1 files changed, 217 insertions, 0 deletions
diff --git a/xbmc/pvr/guilib/guiinfo/PVRGUIInfo.h b/xbmc/pvr/guilib/guiinfo/PVRGUIInfo.h
new file mode 100644
index 0000000..5591353
--- /dev/null
+++ b/xbmc/pvr/guilib/guiinfo/PVRGUIInfo.h
@@ -0,0 +1,217 @@
+/*
+ * 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.
+ */
+
+#pragma once
+
+#include "addons/kodi-dev-kit/include/kodi/c-api/addon-instance/pvr/pvr_channels.h"
+#include "guilib/guiinfo/GUIInfoProvider.h"
+#include "pvr/addons/PVRClients.h"
+#include "pvr/guilib/guiinfo/PVRGUITimerInfo.h"
+#include "pvr/guilib/guiinfo/PVRGUITimesInfo.h"
+#include "threads/CriticalSection.h"
+#include "threads/Thread.h"
+
+#include <atomic>
+#include <string>
+#include <vector>
+
+class CFileItem;
+
+namespace KODI
+{
+namespace GUILIB
+{
+namespace GUIINFO
+{
+class CGUIInfo;
+}
+} // namespace GUILIB
+} // namespace KODI
+
+namespace PVR
+{
+enum class PVREvent;
+struct PVRChannelNumberInputChangedEvent;
+struct PVRPreviewAndPlayerShowInfoChangedEvent;
+
+class CPVRGUIInfo : public KODI::GUILIB::GUIINFO::CGUIInfoProvider, private CThread
+{
+public:
+ CPVRGUIInfo();
+ ~CPVRGUIInfo() override = default;
+
+ void Start();
+ void Stop();
+
+ /*!
+ * @brief CEventStream callback for PVR events.
+ * @param event The event.
+ */
+ void Notify(const PVREvent& event);
+
+ /*!
+ * @brief CEventStream callback for channel number input changes.
+ * @param event The event.
+ */
+ void Notify(const PVRChannelNumberInputChangedEvent& event);
+
+ /*!
+ * @brief CEventStream callback for channel preview and player show info changes.
+ * @param event The event.
+ */
+ void Notify(const PVRPreviewAndPlayerShowInfoChangedEvent& event);
+
+ // KODI::GUILIB::GUIINFO::IGUIInfoProvider implementation
+ bool InitCurrentItem(CFileItem* item) override;
+ bool GetLabel(std::string& value,
+ const CFileItem* item,
+ int contextWindow,
+ const KODI::GUILIB::GUIINFO::CGUIInfo& info,
+ std::string* fallback) const override;
+ bool GetFallbackLabel(std::string& value,
+ const CFileItem* item,
+ int contextWindow,
+ const KODI::GUILIB::GUIINFO::CGUIInfo& info,
+ std::string* fallback) override;
+ bool GetInt(int& value,
+ const CGUIListItem* item,
+ int contextWindow,
+ const KODI::GUILIB::GUIINFO::CGUIInfo& info) const override;
+ bool GetBool(bool& value,
+ const CGUIListItem* item,
+ int contextWindow,
+ const KODI::GUILIB::GUIINFO::CGUIInfo& info) const override;
+
+private:
+ void ResetProperties();
+ void ClearQualityInfo(PVR_SIGNAL_STATUS& qualityInfo);
+ void ClearDescrambleInfo(PVR_DESCRAMBLE_INFO& descrambleInfo);
+
+ void Process() override;
+
+ void UpdateTimersCache();
+ void UpdateBackendCache();
+ void UpdateQualityData();
+ void UpdateDescrambleData();
+ void UpdateMisc();
+ void UpdateNextTimer();
+ void UpdateTimeshiftData();
+ void UpdateTimeshiftProgressData();
+
+ void UpdateTimersToggle();
+
+ bool GetListItemAndPlayerLabel(const CFileItem* item,
+ const KODI::GUILIB::GUIINFO::CGUIInfo& info,
+ std::string& strValue) const;
+ bool GetPVRLabel(const CFileItem* item,
+ const KODI::GUILIB::GUIINFO::CGUIInfo& info,
+ std::string& strValue) const;
+ bool GetRadioRDSLabel(const CFileItem* item,
+ const KODI::GUILIB::GUIINFO::CGUIInfo& info,
+ std::string& strValue) const;
+
+ bool GetListItemAndPlayerInt(const CFileItem* item,
+ const KODI::GUILIB::GUIINFO::CGUIInfo& info,
+ int& iValue) const;
+ bool GetPVRInt(const CFileItem* item,
+ const KODI::GUILIB::GUIINFO::CGUIInfo& info,
+ int& iValue) const;
+ int GetTimeShiftSeekPercent() const;
+
+ bool GetListItemAndPlayerBool(const CFileItem* item,
+ const KODI::GUILIB::GUIINFO::CGUIInfo& info,
+ bool& bValue) const;
+ bool GetPVRBool(const CFileItem* item,
+ const KODI::GUILIB::GUIINFO::CGUIInfo& info,
+ bool& bValue) const;
+ bool GetRadioRDSBool(const CFileItem* item,
+ const KODI::GUILIB::GUIINFO::CGUIInfo& info,
+ bool& bValue) const;
+
+ void CharInfoBackendNumber(std::string& strValue) const;
+ void CharInfoTotalDiskSpace(std::string& strValue) const;
+ void CharInfoSignal(std::string& strValue) const;
+ void CharInfoSNR(std::string& strValue) const;
+ void CharInfoBER(std::string& strValue) const;
+ void CharInfoUNC(std::string& strValue) const;
+ void CharInfoFrontendName(std::string& strValue) const;
+ void CharInfoFrontendStatus(std::string& strValue) const;
+ void CharInfoBackendName(std::string& strValue) const;
+ void CharInfoBackendVersion(std::string& strValue) const;
+ void CharInfoBackendHost(std::string& strValue) const;
+ void CharInfoBackendDiskspace(std::string& strValue) const;
+ void CharInfoBackendProviders(std::string& strValue) const;
+ void CharInfoBackendChannelGroups(std::string& strValue) const;
+ void CharInfoBackendChannels(std::string& strValue) const;
+ void CharInfoBackendTimers(std::string& strValue) const;
+ void CharInfoBackendRecordings(std::string& strValue) const;
+ void CharInfoBackendDeletedRecordings(std::string& strValue) const;
+ void CharInfoPlayingClientName(std::string& strValue) const;
+ void CharInfoEncryption(std::string& strValue) const;
+ void CharInfoService(std::string& strValue) const;
+ void CharInfoMux(std::string& strValue) const;
+ void CharInfoProvider(std::string& strValue) const;
+
+ /** @name PVRGUIInfo data */
+ //@{
+ CPVRGUIAnyTimerInfo m_anyTimersInfo; // tv + radio
+ CPVRGUITVTimerInfo m_tvTimersInfo;
+ CPVRGUIRadioTimerInfo m_radioTimersInfo;
+
+ CPVRGUITimesInfo m_timesInfo;
+
+ bool m_bHasTVRecordings;
+ bool m_bHasRadioRecordings;
+ unsigned int m_iCurrentActiveClient;
+ std::string m_strPlayingClientName;
+ std::string m_strBackendName;
+ std::string m_strBackendVersion;
+ std::string m_strBackendHost;
+ std::string m_strBackendTimers;
+ std::string m_strBackendRecordings;
+ std::string m_strBackendDeletedRecordings;
+ std::string m_strBackendProviders;
+ std::string m_strBackendChannelGroups;
+ std::string m_strBackendChannels;
+ long long m_iBackendDiskTotal;
+ long long m_iBackendDiskUsed;
+ bool m_bIsPlayingTV;
+ bool m_bIsPlayingRadio;
+ bool m_bIsPlayingRecording;
+ bool m_bIsPlayingEpgTag;
+ bool m_bIsPlayingEncryptedStream;
+ bool m_bHasTVChannels;
+ bool m_bHasRadioChannels;
+ bool m_bCanRecordPlayingChannel;
+ bool m_bIsRecordingPlayingChannel;
+ bool m_bIsPlayingActiveRecording;
+ std::string m_strPlayingTVGroup;
+ std::string m_strPlayingRadioGroup;
+
+ //@}
+
+ PVR_SIGNAL_STATUS m_qualityInfo; /*!< stream quality information */
+ PVR_DESCRAMBLE_INFO m_descrambleInfo; /*!< stream descramble information */
+ std::vector<SBackend> m_backendProperties;
+
+ std::string m_channelNumberInput;
+ bool m_previewAndPlayerShowInfo{false};
+
+ mutable CCriticalSection m_critSection;
+
+ /**
+ * The various backend-related fields will only be updated when this
+ * flag is set. This is done to limit the amount of unnecessary
+ * backend querying when we're not displaying any of the queried
+ * information.
+ */
+ mutable std::atomic<bool> m_updateBackendCacheRequested;
+
+ bool m_bRegistered;
+};
+} // namespace PVR