summaryrefslogtreecommitdiffstats
path: root/xbmc/addons/kodi-addon-dev-kit/include/kodi/c-api/addon-instance/pvr/pvr_timers.h
diff options
context:
space:
mode:
Diffstat (limited to 'xbmc/addons/kodi-addon-dev-kit/include/kodi/c-api/addon-instance/pvr/pvr_timers.h')
-rw-r--r--xbmc/addons/kodi-addon-dev-kit/include/kodi/c-api/addon-instance/pvr/pvr_timers.h407
1 files changed, 407 insertions, 0 deletions
diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/c-api/addon-instance/pvr/pvr_timers.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/c-api/addon-instance/pvr/pvr_timers.h
new file mode 100644
index 0000000..bc16adb
--- /dev/null
+++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/c-api/addon-instance/pvr/pvr_timers.h
@@ -0,0 +1,407 @@
1/*
2 * Copyright (C) 2005-2018 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
4 *
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
7 */
8
9#pragma once
10
11#include "pvr_defines.h"
12
13#include <stdbool.h>
14#include <stdint.h>
15#include <time.h>
16
17//¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
18// "C" Definitions group 6 - PVR timers
19#ifdef __cplusplus
20extern "C"
21{
22#endif /* __cplusplus */
23
24 //============================================================================
25 /// @defgroup cpp_kodi_addon_pvr_Defs_Timer_PVR_TIMER_ definition PVR_TIMER (various)
26 /// @ingroup cpp_kodi_addon_pvr_Defs_Timer
27 /// @brief **PVR timer various different definitions**\n
28 /// This mostly used on @ref cpp_kodi_addon_pvr_Defs_Timer_PVRTimer "kodi::addon::PVRTimer"
29 /// to define default or not available.
30 ///
31 ///@{
32
33 //============================================================================
34 /// @brief Numeric PVR timer type definitions (@ref kodi::addon::PVRTimer::SetTimerType()
35 /// values).
36 ///
37 /// "Null" value for a numeric timer type.
38 #define PVR_TIMER_TYPE_NONE 0
39 //----------------------------------------------------------------------------
40
41 //============================================================================
42 /// @brief Special @ref kodi::addon::PVRTimer::SetClientIndex() value to indicate
43 /// that a timer has not (yet) a valid client index.
44 ///
45 /// Timer has not (yet) a valid client index.
46 #define PVR_TIMER_NO_CLIENT_INDEX 0
47 //----------------------------------------------------------------------------
48
49 //============================================================================
50 /// @brief Special @ref kodi::addon::PVRTimer::SetParentClientIndex() value to
51 /// indicate that a timer has no parent.
52 ///
53 /// Timer has no parent; it was not scheduled by a repeating timer.
54 #define PVR_TIMER_NO_PARENT PVR_TIMER_NO_CLIENT_INDEX
55 //----------------------------------------------------------------------------
56
57 //============================================================================
58 /// @brief Special @ref kodi::addon::PVRTimer::SetEPGUid() value to indicate
59 /// that a timer has no EPG event uid.
60 ///
61 /// Timer has no EPG event unique identifier.
62 #define PVR_TIMER_NO_EPG_UID EPG_TAG_INVALID_UID
63 //----------------------------------------------------------------------------
64
65 //============================================================================
66 /// @brief Special @ref kodi::addon::PVRTimer::SetClientChannelUid() value to
67 /// indicate "any channel". Useful for some repeating timer types.
68 ///
69 /// denotes "any channel", not a specific one.
70 ///
71 #define PVR_TIMER_ANY_CHANNEL -1
72 //----------------------------------------------------------------------------
73
74 //============================================================================
75 /// @brief Value where set in background to inform that related part not used.
76 ///
77 /// Normally this related parts need not to set by this as it is default.
78 #define PVR_TIMER_VALUE_NOT_AVAILABLE -1
79 //----------------------------------------------------------------------------
80
81 ///@}
82 //----------------------------------------------------------------------------
83
84
85 //============================================================================
86 /// @defgroup cpp_kodi_addon_pvr_Defs_Timer_PVR_TIMER_TYPES enum PVR_TIMER_TYPES
87 /// @ingroup cpp_kodi_addon_pvr_Defs_Timer
88 /// @brief **PVR timer type attributes (@ref kodi::addon::PVRTimerType::SetAttributes() values).**\n
89 /// To defines the attributes for a type. These values are bit fields that can be
90 /// used together.
91 ///
92 ///--------------------------------------------------------------------------
93 ///
94 /// **Example:**
95 /// ~~~~~~~~~~~~~{.cpp}
96 /// kodi::addon::PVRTimerType tag;
97 /// tag.SetAttributes(PVR_TIMER_TYPE_IS_MANUAL | PVR_TIMER_TYPE_IS_REPEATING);
98 /// ~~~~~~~~~~~~~
99 ///
100 ///@{
101 typedef enum PVR_TIMER_TYPES
102 {
103 /// @brief __0000 0000 0000 0000 0000 0000 0000 0000__ :\n Empty attribute value.
104 PVR_TIMER_TYPE_ATTRIBUTE_NONE = 0,
105
106 /// @brief __0000 0000 0000 0000 0000 0000 0000 0001__ :\n Defines whether this is a type for
107 /// manual (time-based) or epg-based timers.
108 PVR_TIMER_TYPE_IS_MANUAL = (1 << 0),
109
110 /// @brief __0000 0000 0000 0000 0000 0000 0000 0010__ :\n Defines whether this is a type for
111 /// repeating or one-shot timers.
112 PVR_TIMER_TYPE_IS_REPEATING = (1 << 1),
113
114 /// @brief __0000 0000 0000 0000 0000 0000 0000 0100__ :\n Timers of this type must not be edited
115 /// by Kodi.
116 PVR_TIMER_TYPE_IS_READONLY = (1 << 2),
117
118 /// @brief __0000 0000 0000 0000 0000 0000 0000 1000__ :\n Timers of this type must not be created
119 /// by Kodi. All other operations are allowed, though.
120 PVR_TIMER_TYPE_FORBIDS_NEW_INSTANCES = (1 << 3),
121
122 /// @brief __0000 0000 0000 0000 0000 0000 0001 0000__ :\n This type supports enabling/disabling
123 /// of the timer (@ref kodi::addon::PVRTimer::SetState() with
124 /// @ref PVR_TIMER_STATE_SCHEDULED | @ref PVR_TIMER_STATE_DISABLED).
125 PVR_TIMER_TYPE_SUPPORTS_ENABLE_DISABLE = (1 << 4),
126
127 /// @brief __0000 0000 0000 0000 0000 0000 0010 0000__ :\n This type supports channels
128 /// (@ref kodi::addon::PVRTimer::SetClientChannelUid()).
129 PVR_TIMER_TYPE_SUPPORTS_CHANNELS = (1 << 5),
130
131 /// @brief __0000 0000 0000 0000 0000 0000 0100 0000__ :\n This type supports a recording start
132 /// time (@ref kodi::addon::PVRTimer::SetStartTime()).
133 PVR_TIMER_TYPE_SUPPORTS_START_TIME = (1 << 6),
134
135 /// @brief __0000 0000 0000 0000 0000 0000 1000 0000__ :\n This type supports matching epg episode
136 /// title using@ref kodi::addon::PVRTimer::SetEPGSearchString().
137 PVR_TIMER_TYPE_SUPPORTS_TITLE_EPG_MATCH = (1 << 7),
138
139 /// @brief __0000 0000 0000 0000 0000 0001 0000 0000__ :\n This type supports matching "more" epg
140 /// data (not just episode title) using @ref kodi::addon::PVRTimer::SetEPGSearchString().
141 /// Setting @ref PVR_TIMER_TYPE_SUPPORTS_FULLTEXT_EPG_MATCH implies
142 /// @ref PVR_TIMER_TYPE_SUPPORTS_TITLE_EPG_MATCH.
143 PVR_TIMER_TYPE_SUPPORTS_FULLTEXT_EPG_MATCH = (1 << 8),
144
145 /// @brief __0000 0000 0000 0000 0000 0010 0000 0000__ :\n This type supports a first day the
146 /// timer gets active (@ref kodi::addon::PVRTimer::SetFirstDay()).
147 PVR_TIMER_TYPE_SUPPORTS_FIRST_DAY = (1 << 9),
148
149 /// @brief __0000 0000 0000 0000 0000 0100 0000 0000__ :\n This type supports weekdays for
150 /// defining the recording schedule (@ref kodi::addon::PVRTimer::SetWeekdays()).
151 PVR_TIMER_TYPE_SUPPORTS_WEEKDAYS = (1 << 10),
152
153 /// @brief __0000 0000 0000 0000 0000 1000 0000 0000__ :\n This type supports the <b>"record only new episodes"</b> feature
154 /// (@ref kodi::addon::PVRTimer::SetPreventDuplicateEpisodes()).
155 PVR_TIMER_TYPE_SUPPORTS_RECORD_ONLY_NEW_EPISODES = (1 << 11),
156
157 /// @brief __0000 0000 0000 0000 0001 0000 0000 0000__ :\n This type supports pre and post record time (@ref kodi::addon::PVRTimer::SetMarginStart(),
158 /// @ref kodi::addon::PVRTimer::SetMarginEnd()).
159 PVR_TIMER_TYPE_SUPPORTS_START_END_MARGIN = (1 << 12),
160
161 /// @brief __0000 0000 0000 0000 0010 0000 0000 0000__ :\n This type supports recording priority (@ref kodi::addon::PVRTimer::SetPriority()).
162 PVR_TIMER_TYPE_SUPPORTS_PRIORITY = (1 << 13),
163
164 /// @brief __0000 0000 0000 0000 0100 0000 0000 0000__ :\n This type supports recording lifetime (@ref kodi::addon::PVRTimer::SetLifetime()).
165 PVR_TIMER_TYPE_SUPPORTS_LIFETIME = (1 << 14),
166
167 /// @brief __0000 0000 0000 0000 1000 0000 0000 0000__ :\n This type supports placing recordings in user defined folders
168 /// (@ref kodi::addon::PVRTimer::SetDirectory()).
169 PVR_TIMER_TYPE_SUPPORTS_RECORDING_FOLDERS = (1 << 15),
170
171 /// @brief __0000 0000 0000 0001 0000 0000 0000 0000__ :\n This type supports a list of recording groups
172 /// (@ref kodi::addon::PVRTimer::SetRecordingGroup()).
173 PVR_TIMER_TYPE_SUPPORTS_RECORDING_GROUP = (1 << 16),
174
175 /// @brief __0000 0000 0000 0010 0000 0000 0000 0000__ :\n This type supports a recording end time (@ref kodi::addon::PVRTimer::SetEndTime()).
176 PVR_TIMER_TYPE_SUPPORTS_END_TIME = (1 << 17),
177
178 /// @brief __0000 0000 0000 0100 0000 0000 0000 0000__ :\n Enables an 'Any Time' over-ride option for start time
179 /// (using @ref kodi::addon::PVRTimer::SetStartAnyTime()).
180 PVR_TIMER_TYPE_SUPPORTS_START_ANYTIME = (1 << 18),
181
182 /// @brief __0000 0000 0000 1000 0000 0000 0000 0000__ :\n Enables a separate <b>'Any Time'</b> over-ride for end time
183 /// (using @ref kodi::addon::PVRTimer::SetEndAnyTime()).
184 PVR_TIMER_TYPE_SUPPORTS_END_ANYTIME = (1 << 19),
185
186 /// @brief __0000 0000 0001 0000 0000 0000 0000 0000__ :\n This type supports specifying a maximum recordings setting'
187 /// (@ref kodi::addon::PVRTimer::SetMaxRecordings()).
188 PVR_TIMER_TYPE_SUPPORTS_MAX_RECORDINGS = (1 << 20),
189
190 /// @brief __0000 0000 0010 0000 0000 0000 0000 0000__ :\n This type should not appear on any create menus which don't
191 /// provide an associated @ref cpp_kodi_addon_pvr_Defs_epg_PVREPGTag "EPG tag".
192 PVR_TIMER_TYPE_REQUIRES_EPG_TAG_ON_CREATE = (1 << 21),
193
194 /// @brief __0000 0000 0100 0000 0000 0000 0000 0000__ :\n This type should not appear on any create menus which provide an
195 /// associated @ref cpp_kodi_addon_pvr_Defs_epg_PVREPGTag "EPG tag".
196 PVR_TIMER_TYPE_FORBIDS_EPG_TAG_ON_CREATE = (1 << 22),
197
198 /// @brief __0000 0000 1000 0000 0000 0000 0000 0000__ :\n This type should not appear on any create menus unless associated
199 /// with an @ref cpp_kodi_addon_pvr_Defs_epg_PVREPGTag "EPG tag" with
200 /// 'series' attributes.
201 ///
202 /// Following conditions allow this:
203 /// - @ref kodi::addon::PVREPGTag::SetFlags() have flag @ref EPG_TAG_FLAG_IS_SERIES
204 /// - @ref kodi::addon::PVREPGTag::SetSeriesNumber() > 0
205 /// - @ref kodi::addon::PVREPGTag::SetEpisodeNumber() > 0
206 /// - @ref kodi::addon::PVREPGTag::SetEpisodePartNumber() > 0
207 ///
208 /// Implies @ref PVR_TIMER_TYPE_REQUIRES_EPG_TAG_ON_CREATE.
209 PVR_TIMER_TYPE_REQUIRES_EPG_SERIES_ON_CREATE = (1 << 23),
210
211 /// @brief __0000 0001 0000 0000 0000 0000 0000 0000__ :\n This type supports 'any channel', for example when defining a timer
212 /// rule that should match any channel instaed of a particular channel.
213 PVR_TIMER_TYPE_SUPPORTS_ANY_CHANNEL = (1 << 24),
214
215 /// @brief __0000 0010 0000 0000 0000 0000 0000 0000__ :\n This type should not appear on any create menus which don't provide
216 /// an associated @ref cpp_kodi_addon_pvr_Defs_epg_PVREPGTag "EPG tag" with
217 /// a series link.
218 PVR_TIMER_TYPE_REQUIRES_EPG_SERIESLINK_ON_CREATE = (1 << 25),
219
220 /// @brief __0000 0100 0000 0000 0000 0000 0000 0000__ :\n This type allows deletion of an otherwise read-only timer.
221 PVR_TIMER_TYPE_SUPPORTS_READONLY_DELETE = (1 << 26),
222
223 /// @brief __0000 1000 0000 0000 0000 0000 0000 0000__ :\n Timers of this type do trigger a reminder if time is up.
224 PVR_TIMER_TYPE_IS_REMINDER = (1 << 27),
225
226 /// @brief __0001 0000 0000 0000 0000 0000 0000 0000__ :\n This type supports pre record time (@ref kodi::addon::PVRTimer::SetMarginStart()).
227 PVR_TIMER_TYPE_SUPPORTS_START_MARGIN = (1 << 28),
228
229 /// @brief __0010 0000 0000 0000 0000 0000 0000 0000__ :\n This type supports post record time (@ref kodi::addon::PVRTimer::SetMarginEnd()).
230 PVR_TIMER_TYPE_SUPPORTS_END_MARGIN = (1 << 29),
231 } PVR_TIMER_TYPES;
232 ///@}
233 //----------------------------------------------------------------------------
234
235 //============================================================================
236 /// @defgroup cpp_kodi_addon_pvr_Defs_Timer_PVR_WEEKDAY enum PVR_WEEKDAY
237 /// @ingroup cpp_kodi_addon_pvr_Defs_Timer
238 /// @brief **PVR timer weekdays** (@ref kodi::addon::PVRTimer::SetWeekdays() **values**)\n
239 /// Used to select the days of a week you want.
240 ///
241 /// It can be also used to select several days e.g.:
242 /// ~~~~~~~~~~~~~{.cpp}
243 /// ...
244 /// unsigned int day = PVR_WEEKDAY_MONDAY | PVR_WEEKDAY_SATURDAY;
245 /// ...
246 /// ~~~~~~~~~~~~~
247 ///
248 ///@{
249 typedef enum PVR_WEEKDAYS
250 {
251 /// @brief __0000 0000__ : Nothing selected.
252 PVR_WEEKDAY_NONE = 0,
253
254 /// @brief __0000 0001__ : To select Monday.
255 PVR_WEEKDAY_MONDAY = (1 << 0),
256
257 /// @brief __0000 0010__ : To select Tuesday.
258 PVR_WEEKDAY_TUESDAY = (1 << 1),
259
260 /// @brief __0000 0100__ : To select Wednesday.
261 PVR_WEEKDAY_WEDNESDAY = (1 << 2),
262
263 /// @brief __0000 1000__ : To select Thursday.
264 PVR_WEEKDAY_THURSDAY = (1 << 3),
265
266 /// @brief __0001 0000__ : To select Friday.
267 PVR_WEEKDAY_FRIDAY = (1 << 4),
268
269 /// @brief __0010 0000__ : To select Saturday.
270 PVR_WEEKDAY_SATURDAY = (1 << 5),
271
272 /// @brief __0100 0000__ : To select Sunday.
273 PVR_WEEKDAY_SUNDAY = (1 << 6),
274
275 /// @brief __0111 1111__ : To select all days of week.
276 PVR_WEEKDAY_ALLDAYS = PVR_WEEKDAY_MONDAY | PVR_WEEKDAY_TUESDAY | PVR_WEEKDAY_WEDNESDAY |
277 PVR_WEEKDAY_THURSDAY | PVR_WEEKDAY_FRIDAY | PVR_WEEKDAY_SATURDAY |
278 PVR_WEEKDAY_SUNDAY
279 } PVR_WEEKDAY;
280 ///@}
281 //----------------------------------------------------------------------------
282
283 //============================================================================
284 /// @defgroup cpp_kodi_addon_pvr_Defs_Timer_PVR_TIMER_STATE enum PVR_TIMER_STATE
285 /// @ingroup cpp_kodi_addon_pvr_Defs_Timer
286 /// @brief **PVR timer states**\n
287 /// To set within @ref cpp_kodi_addon_pvr_Defs_Timer_PVRTimer "kodi::addon::PVRTimer"
288 /// the needed state about.
289 ///
290 ///@{
291 typedef enum PVR_TIMER_STATE
292 {
293 /// @brief __0__ : The timer was just created on the backend and is not yet active.
294 ///
295 /// This state must not be used for timers just created on the client side.
296 PVR_TIMER_STATE_NEW = 0,
297
298 /// @brief __1__ : The timer is scheduled for recording.
299 PVR_TIMER_STATE_SCHEDULED = 1,
300
301 /// @brief __2__ : The timer is currently recordings.
302 PVR_TIMER_STATE_RECORDING = 2,
303
304 /// @brief __3__ : The recording completed successfully.
305 PVR_TIMER_STATE_COMPLETED = 3,
306
307 /// @brief __4__ : Recording started, but was aborted.
308 PVR_TIMER_STATE_ABORTED = 4,
309
310 /// @brief __5__ : The timer was scheduled, but was canceled.
311 PVR_TIMER_STATE_CANCELLED = 5,
312
313 /// @brief __6__ : The scheduled timer conflicts with another one, but will be
314 /// recorded.
315 PVR_TIMER_STATE_CONFLICT_OK = 6,
316
317 /// @brief __7__ : The scheduled timer conflicts with another one and won't be
318 /// recorded.
319 PVR_TIMER_STATE_CONFLICT_NOK = 7,
320
321 /// @brief __8__ : The timer is scheduled, but can't be recorded for some reason.
322 PVR_TIMER_STATE_ERROR = 8,
323
324 /// @brief __9__ : The timer was disabled by the user, can be enabled via setting
325 /// the state to @ref PVR_TIMER_STATE_SCHEDULED.
326 PVR_TIMER_STATE_DISABLED = 9,
327 } PVR_TIMER_STATE;
328 ///@}
329 //----------------------------------------------------------------------------
330
331 /*!
332 * @brief "C" PVR add-on timer event.
333 *
334 * Structure used to interface in "C" between Kodi and Addon.
335 *
336 * See @ref cpp_kodi_addon_pvr_Defs_Timer_PVRTimer "kodi::addon::PVRTimer" for
337 * description of values.
338 */
339 typedef struct PVR_TIMER
340 {
341 unsigned int iClientIndex;
342 unsigned int iParentClientIndex;
343 int iClientChannelUid;
344 time_t startTime;
345 time_t endTime;
346 bool bStartAnyTime;
347 bool bEndAnyTime;
348 enum PVR_TIMER_STATE state;
349 unsigned int iTimerType;
350 char strTitle[PVR_ADDON_NAME_STRING_LENGTH];
351 char strEpgSearchString[PVR_ADDON_NAME_STRING_LENGTH];
352 bool bFullTextEpgSearch;
353 char strDirectory[PVR_ADDON_URL_STRING_LENGTH];
354 char strSummary[PVR_ADDON_DESC_STRING_LENGTH];
355 int iPriority;
356 int iLifetime;
357 int iMaxRecordings;
358 unsigned int iRecordingGroup;
359 time_t firstDay;
360 unsigned int iWeekdays;
361 unsigned int iPreventDuplicateEpisodes;
362 unsigned int iEpgUid;
363 unsigned int iMarginStart;
364 unsigned int iMarginEnd;
365 int iGenreType;
366 int iGenreSubType;
367 char strSeriesLink[PVR_ADDON_URL_STRING_LENGTH];
368 } PVR_TIMER;
369
370 /*!
371 * @brief "C" PVR add-on timer event type.
372 *
373 * Structure used to interface in "C" between Kodi and Addon.
374 *
375 * See @ref cpp_kodi_addon_pvr_Defs_Timer_PVRTimerType "kodi::addon::PVRTimerType" for
376 * description of values.
377 */
378 typedef struct PVR_TIMER_TYPE
379 {
380 unsigned int iId;
381 uint64_t iAttributes;
382 char strDescription[PVR_ADDON_TIMERTYPE_STRING_LENGTH];
383
384 unsigned int iPrioritiesSize;
385 struct PVR_ATTRIBUTE_INT_VALUE priorities[PVR_ADDON_TIMERTYPE_VALUES_ARRAY_SIZE];
386 int iPrioritiesDefault;
387
388 unsigned int iLifetimesSize;
389 struct PVR_ATTRIBUTE_INT_VALUE lifetimes[PVR_ADDON_TIMERTYPE_VALUES_ARRAY_SIZE];
390 int iLifetimesDefault;
391
392 unsigned int iPreventDuplicateEpisodesSize;
393 struct PVR_ATTRIBUTE_INT_VALUE preventDuplicateEpisodes[PVR_ADDON_TIMERTYPE_VALUES_ARRAY_SIZE];
394 unsigned int iPreventDuplicateEpisodesDefault;
395
396 unsigned int iRecordingGroupSize;
397 struct PVR_ATTRIBUTE_INT_VALUE recordingGroup[PVR_ADDON_TIMERTYPE_VALUES_ARRAY_SIZE];
398 unsigned int iRecordingGroupDefault;
399
400 unsigned int iMaxRecordingsSize;
401 struct PVR_ATTRIBUTE_INT_VALUE maxRecordings[PVR_ADDON_TIMERTYPE_VALUES_ARRAY_SIZE_SMALL];
402 int iMaxRecordingsDefault;
403 } PVR_TIMER_TYPE;
404
405#ifdef __cplusplus
406}
407#endif /* __cplusplus */