summaryrefslogtreecommitdiffstats
path: root/xbmc/pvr/guilib/PVRGUIActionsTimers.h
diff options
context:
space:
mode:
Diffstat (limited to 'xbmc/pvr/guilib/PVRGUIActionsTimers.h')
-rw-r--r--xbmc/pvr/guilib/PVRGUIActionsTimers.h234
1 files changed, 234 insertions, 0 deletions
diff --git a/xbmc/pvr/guilib/PVRGUIActionsTimers.h b/xbmc/pvr/guilib/PVRGUIActionsTimers.h
new file mode 100644
index 0000000..f6ae8fe
--- /dev/null
+++ b/xbmc/pvr/guilib/PVRGUIActionsTimers.h
@@ -0,0 +1,234 @@
+/*
+ * Copyright (C) 2016-2022 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 "pvr/IPVRComponent.h"
+#include "pvr/settings/PVRSettings.h"
+
+#include <memory>
+
+class CFileItem;
+
+namespace PVR
+{
+class CPVRChannel;
+class CPVRTimerInfoTag;
+
+class CPVRGUIActionsTimers : public IPVRComponent
+{
+public:
+ CPVRGUIActionsTimers();
+ ~CPVRGUIActionsTimers() override = default;
+
+ /*!
+ * @brief Open the timer settings dialog to create a new tv or radio timer.
+ * @param bRadio indicates whether a radio or tv timer shall be created.
+ * @return true on success, false otherwise.
+ */
+ bool AddTimer(bool bRadio) const;
+
+ /*!
+ * @brief Create a new timer, either interactive or non-interactive.
+ * @param item containing epg data to create a timer for. item must be an epg tag or a channel.
+ * @param bShowTimerSettings is used to control whether a settings dialog will be opened prior
+ * creating the timer.
+ * @return true, if the timer was created successfully, false otherwise.
+ */
+ bool AddTimer(const CFileItem& item, bool bShowTimerSettings) const;
+
+ /*!
+ * @brief Add a timer to the client. Doesn't add the timer to the container. The backend will
+ * do this.
+ * @return True if it was sent correctly, false if not.
+ */
+ bool AddTimer(const std::shared_ptr<CPVRTimerInfoTag>& item) const;
+
+ /*!
+ * @brief Create a new timer rule, either interactive or non-interactive.
+ * @param item containing epg data to create a timer rule for. item must be an epg tag or a
+ * channel.
+ * @param bShowTimerSettings is used to control whether a settings dialog will be opened prior
+ * creating the timer rule.
+ * @param bFallbackToOneShotTimer if no timer rule can be created, try to create a one-shot
+ * timer instead.
+ * @return true, if the timer rule was created successfully, false otherwise.
+ */
+ bool AddTimerRule(const CFileItem& item,
+ bool bShowTimerSettings,
+ bool bFallbackToOneShotTimer) const;
+
+ /*!
+ * @brief Creates or deletes a timer for the given epg tag.
+ * @param item containing an epg tag.
+ * @return true on success, false otherwise.
+ */
+ bool ToggleTimer(const CFileItem& item) const;
+
+ /*!
+ * @brief Toggles a given timer's enabled/disabled state.
+ * @param item containing a timer.
+ * @return true on success, false otherwise.
+ */
+ bool ToggleTimerState(const CFileItem& item) const;
+
+ /*!
+ * @brief Open the timer settings dialog to edit an existing timer.
+ * @param item containing an epg tag or a timer.
+ * @return true on success, false otherwise.
+ */
+ bool EditTimer(const CFileItem& item) const;
+
+ /*!
+ * @brief Open the timer settings dialog to edit an existing timer rule.
+ * @param item containing an epg tag or a timer.
+ * @return true on success, false otherwise.
+ */
+ bool EditTimerRule(const CFileItem& item) const;
+
+ /*!
+ * @brief Get the timer rule for a given timer
+ * @param item containing an item to query the timer rule for. item must be a timer or an epg tag.
+ * @return The timer rule item, or nullptr if none was found.
+ */
+ std::shared_ptr<CFileItem> GetTimerRule(const CFileItem& item) const;
+
+ /*!
+ * @brief Delete a timer, always showing a confirmation dialog.
+ * @param item containing a timer to delete. item must be a timer, an epg tag or a channel.
+ * @return true, if the timer was deleted successfully, false otherwise.
+ */
+ bool DeleteTimer(const CFileItem& item) const;
+
+ /*!
+ * @brief Delete a timer rule, always showing a confirmation dialog.
+ * @param item containing a timer rule to delete. item must be a timer, an epg tag or a channel.
+ * @return true, if the timer rule was deleted successfully, false otherwise.
+ */
+ bool DeleteTimerRule(const CFileItem& item) const;
+
+ /*!
+ * @brief Toggle recording on the currently playing channel, if any.
+ * @return True if the recording was started or stopped successfully, false otherwise.
+ */
+ bool ToggleRecordingOnPlayingChannel();
+
+ /*!
+ * @brief Start or stop recording on a given channel.
+ * @param channel the channel to start/stop recording.
+ * @param bOnOff True to start recording, false to stop.
+ * @return True if the recording was started or stopped successfully, false otherwise.
+ */
+ bool SetRecordingOnChannel(const std::shared_ptr<CPVRChannel>& channel, bool bOnOff);
+
+ /*!
+ * @brief Stop a currently active recording, always showing a confirmation dialog.
+ * @param item containing a recording to stop. item must be a timer, an epg tag or a channel.
+ * @return true, if the recording was stopped successfully, false otherwise.
+ */
+ bool StopRecording(const CFileItem& item) const;
+
+ /*!
+ * @brief Create a new reminder timer, non-interactive.
+ * @param item containing epg data to create a reminder timer for. item must be an epg tag.
+ * @return true, if the timer was created successfully, false otherwise.
+ */
+ bool AddReminder(const CFileItem& item) const;
+
+ /*!
+ * @brief Announce due reminders, if any.
+ */
+ void AnnounceReminders() const;
+
+private:
+ CPVRGUIActionsTimers(const CPVRGUIActionsTimers&) = delete;
+ CPVRGUIActionsTimers const& operator=(CPVRGUIActionsTimers const&) = delete;
+
+ /*!
+ * @brief Open the timer settings dialog.
+ * @param timer containing the timer the settings shall be displayed for.
+ * @return true, if the dialog was ended successfully, false otherwise.
+ */
+ bool ShowTimerSettings(const std::shared_ptr<CPVRTimerInfoTag>& timer) const;
+
+ /*!
+ * @brief Add a timer or timer rule, either interactive or non-interactive.
+ * @param item containing epg data to create a timer or timer rule for. item must be an epg tag
+ * or a channel.
+ * @param bCreateteRule denotes whether to create a one-shot timer or a timer rule.
+ * @param bShowTimerSettings is used to control whether a settings dialog will be opened prior
+ * creating the timer or timer rule.
+ * @param bFallbackToOneShotTimer if bCreateteRule is true and no timer rule can be created, try
+ * to create a one-shot timer instead.
+ * @return true, if the timer or timer rule was created successfully, false otherwise.
+ */
+ bool AddTimer(const CFileItem& item,
+ bool bCreateRule,
+ bool bShowTimerSettings,
+ bool bFallbackToOneShotTimer) const;
+
+ /*!
+ * @brief Delete a timer or timer rule, always showing a confirmation dialog.
+ * @param item containing a timer or timer rule to delete. item must be a timer, an epg tag or
+ * a channel.
+ * @param bIsRecording denotes whether the timer is currently recording (controls correct
+ * confirmation dialog).
+ * @param bDeleteRule denotes to delete a timer rule. For convenience, one can pass a timer
+ * created by a rule.
+ * @return true, if the timer or timer rule was deleted successfully, false otherwise.
+ */
+ bool DeleteTimer(const CFileItem& item, bool bIsRecording, bool bDeleteRule) const;
+
+ /*!
+ * @brief Delete a timer or timer rule, showing a confirmation dialog in case a timer currently
+ * recording shall be deleted.
+ * @param timer containing a timer or timer rule to delete.
+ * @param bIsRecording denotes whether the timer is currently recording (controls correct
+ * confirmation dialog).
+ * @param bDeleteRule denotes to delete a timer rule. For convenience, one can pass a timer
+ * created by a rule.
+ * @return true, if the timer or timer rule was deleted successfully, false otherwise.
+ */
+ bool DeleteTimer(const std::shared_ptr<CPVRTimerInfoTag>& timer,
+ bool bIsRecording,
+ bool bDeleteRule) const;
+
+ /*!
+ * @brief Open a dialog to confirm timer delete.
+ * @param timer the timer to delete.
+ * @param bDeleteRule in: ignored. out, for one shot timer scheduled by a timer rule: true to
+ * also delete the timer rule that has scheduled this timer, false to only delete the one shot
+ * timer. out, for one shot timer not scheduled by a timer rule: ignored
+ * @return true, to proceed with delete, false otherwise.
+ */
+ bool ConfirmDeleteTimer(const std::shared_ptr<CPVRTimerInfoTag>& timer, bool& bDeleteRule) const;
+
+ /*!
+ * @brief Open a dialog to confirm stop recording.
+ * @param timer the recording to stop (actually the timer to delete).
+ * @return true, to proceed with delete, false otherwise.
+ */
+ bool ConfirmStopRecording(const std::shared_ptr<CPVRTimerInfoTag>& timer) const;
+
+ /*!
+ * @brief Announce and process a reminder timer.
+ * @param timer The reminder timer.
+ */
+ void AnnounceReminder(const std::shared_ptr<CPVRTimerInfoTag>& timer) const;
+
+ CPVRSettings m_settings;
+ mutable bool m_bReminderAnnouncementRunning{false};
+};
+
+namespace GUI
+{
+// pretty scope and name
+using Timers = CPVRGUIActionsTimers;
+} // namespace GUI
+
+} // namespace PVR