[PVR][Estuary] Timer settings dialog: Show client name in timer type selection dialog...
[xbmc.git] / xbmc / GUIInfoManager.cpp
blob90bf4642de6b37abfa56c05fd61af3d99ecb3af4
1 /*
2 * Copyright (C) 2005-2018 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
7 */
9 #include "GUIInfoManager.h"
11 #include "FileItem.h"
12 #include "ServiceBroker.h"
13 #include "URL.h"
14 #include "Util.h"
15 #include "application/ApplicationComponents.h"
16 #include "application/ApplicationPlayer.h"
17 #include "cores/DataCacheCore.h"
18 #include "guilib/guiinfo/GUIInfo.h"
19 #include "guilib/guiinfo/GUIInfoHelper.h"
20 #include "guilib/guiinfo/GUIInfoLabels.h"
21 #include "input/WindowTranslator.h"
22 #include "interfaces/AnnouncementManager.h"
23 #include "interfaces/info/InfoExpression.h"
24 #include "messaging/ApplicationMessenger.h"
25 #include "playlists/PlayListTypes.h"
26 #include "settings/SkinSettings.h"
27 #include "utils/CharsetConverter.h"
28 #include "utils/FileUtils.h"
29 #include "utils/StringUtils.h"
30 #include "utils/URIUtils.h"
31 #include "utils/log.h"
33 #include <algorithm>
34 #include <array>
35 #include <charconv>
36 #include <cmath>
37 #include <functional>
38 #include <iterator>
39 #include <memory>
40 #include <mutex>
42 using namespace KODI::GUILIB;
43 using namespace KODI::GUILIB::GUIINFO;
44 using namespace INFO;
46 bool InfoBoolComparator(const InfoPtr &right, const InfoPtr &left)
48 return *right < *left;
51 CGUIInfoManager::CGUIInfoManager(void)
52 : m_currentFile(new CFileItem),
53 m_bools(&InfoBoolComparator)
57 CGUIInfoManager::~CGUIInfoManager(void)
59 delete m_currentFile;
62 void CGUIInfoManager::Initialize()
64 CServiceBroker::GetAppMessenger()->RegisterReceiver(this);
67 /// \brief Translates a string as given by the skin into an int that we use for more
68 /// efficient retrieval of data. Can handle combined strings on the form
69 /// Player.Caching + VideoPlayer.IsFullscreen (Logical and)
70 /// Player.HasVideo | Player.HasAudio (Logical or)
71 int CGUIInfoManager::TranslateString(const std::string &condition)
73 // translate $LOCALIZE as required
74 std::string strCondition(CGUIInfoLabel::ReplaceLocalize(condition));
75 return TranslateSingleString(strCondition);
78 typedef struct
80 const char *str;
81 int val;
82 } infomap;
84 /// \page modules__infolabels_boolean_conditions Infolabels and Boolean conditions
85 /// \tableofcontents
86 ///
87 /// \section modules__infolabels_boolean_conditions_Description Description
88 /// Skins can use boolean conditions with the <b>\<visible\></b> tag or with condition
89 /// attributes. Scripts can read boolean conditions with
90 /// <b>xbmc.getCondVisibility(condition)</b>.
91 ///
92 /// Skins can use infolabels with <b>$INFO[infolabel]</b> or the <b>\<info\></b> tag. Scripts
93 /// can read infolabels with <b>xbmc.getInfoLabel('infolabel')</b>.
94 ///
95 /// @todo [docs] Improve the description and create links for functions
96 /// @todo [docs] Separate boolean conditions from infolabels
97 /// @todo [docs] Order items alphabetically within subsections for a better search experience
98 /// @todo [docs] Order subsections alphabetically
99 /// @todo [docs] Use links instead of bold values for infolabels/bools
100 /// so we can use a link to point users when providing help
104 /// \page modules__infolabels_boolean_conditions
105 /// \section modules_list_infolabels_booleans List of Infolabels and Boolean conditions
106 /// \subsection modules__infolabels_boolean_conditions_GlobalBools Global
107 /// \table_start
108 /// \table_h3{ Labels, Type, Description }
109 /// \table_row3{ <b>`true`</b>,
110 /// \anchor Global_True
111 /// _boolean_,
112 /// @return Always evaluates to **true**.
113 /// <p>
114 /// }
115 /// \table_row3{ <b>`false`</b>,
116 /// \anchor Global_False
117 /// _boolean_,
118 /// @return Always evaluates to **false**.
119 /// <p>
120 /// }
121 /// \table_row3{ <b>`yes`</b>,
122 /// \anchor Global_Yes
123 /// _boolean_,
124 /// @return same as \link Global_True `true` \endlink.
125 /// <p>
126 /// }
127 /// \table_row3{ <b>`no`</b>,
128 /// \anchor Global_No
129 /// _boolean_,
130 /// @return same as \link Global_False `false` \endlink.
131 /// <p>
132 /// }
133 /// \table_end
135 /// -----------------------------------------------------------------------------
137 /// \page modules__infolabels_boolean_conditions
138 /// \subsection modules__infolabels_boolean_conditions_Addon Addon
139 /// \table_start
140 /// \table_h3{ Labels, Type, Description }
141 /// \table_row3{ <b>`Addon.SettingStr(addon_id\,setting_id)`</b>,
142 /// \anchor Addon_SettingString
143 /// _string_,
144 /// @return The string value of the setting `setting_id` belonging to the addon with the id `addon_id`.
145 /// @param addon_id - the id of the addon
146 /// @param setting_id - the addon setting
147 /// <p><hr>
148 /// @skinning_v20 **[New Infolabel]** \link Addon_SettingString `Addon.SettingStr(addon_id\,setting_id)`\endlink
149 /// <p>
150 /// }
151 /// \table_row3{ <b>`Addon.SettingBool(addon_id\,setting_id)`</b>,
152 /// \anchor Addon_SettingBool
153 /// _boolean_,
154 /// @return **True** if the setting `setting_id` belonging to the addon with the id `addon_id` is **True**\, **False** otherwise.
155 /// @note The provided setting with `setting_id` must be a boolean setting type. Otherwise it will return the boolean info
156 /// default value (which is **False**).
157 /// @param addon_id - the id of the addon
158 /// @param setting_id - the addon setting
159 /// <p><hr>
160 /// @skinning_v20 **[New Boolean Condition]** \link Addon_SettingBool `Addon.SettingBool(addon_id\,setting_id)`\endlink
161 /// <p>
162 /// }
163 /// \table_row3{ <b>`Addon.SettingInt(addon_id\,setting_id)`</b>,
164 /// \anchor Addon_SettingInt
165 /// _integer_,
166 /// @return The integer value of the setting `setting_id` belong to the addon with the id `addon_id`.
167 /// @note The provided setting with `setting_id` must be an integer setting type. Otherwise it will return the integer info
168 /// default value (which is 0).
169 /// @param addon_id - the id of the addon
170 /// @param setting_id - the addon setting
171 /// <p><hr>
172 /// @skinning_v20 **[New Integer Info]** \link Addon_SettingInt `Addon.SettingInt(addon_id\,setting_id)`\endlink
173 /// <p>
174 /// }
175 /// \table_end
177 /// -----------------------------------------------------------------------------
178 const infomap addons[] = {
179 {"settingstr", ADDON_SETTING_STRING},
180 {"settingbool", ADDON_SETTING_BOOL},
181 {"settingint", ADDON_SETTING_INT},
184 /// \page modules__infolabels_boolean_conditions
185 /// \subsection modules__infolabels_boolean_conditions_String String
186 /// \table_start
187 /// \table_h3{ Labels, Type, Description }
188 /// \table_row3{ <b>`String.IsEmpty(info)`</b>,
189 /// \anchor String_IsEmpty
190 /// _boolean_,
191 /// @return **True** if the info is empty.
192 /// @param info - infolabel
193 /// @note **Example of info:** \link ListItem_Title `ListItem.Title` \endlink \,
194 /// \link ListItem_Genre `ListItem.Genre` \endlink.
195 /// Please note that string can also be a `$LOCALIZE[]`.
196 /// Also note that in a panelview or similar this only works on the focused item
197 /// <p><hr>
198 /// @skinning_v17 **[New Boolean Condition]** \link String_IsEmpty `String.IsEmpty(info)`\endlink
199 /// <p>
200 /// }
201 /// \table_row3{ <b>`String.IsEqual(info\,string)`</b>,
202 /// \anchor String_IsEqual
203 /// _boolean_,
204 /// @return **True** if the info is equal to the given string.
205 /// @param info - infolabel
206 /// @param string - comparison string
207 /// @note **Example of info:** \link ListItem_Title `ListItem.Title` \endlink \,
208 /// \link ListItem_Genre `ListItem.Genre` \endlink.
209 /// Please note that string can also be a `$LOCALIZE[]`.
210 /// Also note that in a panelview or similar this only works on the focused item
211 /// <p><hr>
212 /// @skinning_v17 **[New Boolean Condition]** \link String_IsEqual `String.IsEqual(info\,string)`\endlink
213 /// <p>
214 /// }
215 /// \table_row3{ <b>`String.StartsWith(info\,substring)`</b>,
216 /// \anchor String_StartsWith
217 /// _boolean_,
218 /// @return **True** if the info starts with the given substring.
219 /// @param info - infolabel
220 /// @param substring - substring to check
221 /// @note **Example of info:** \link ListItem_Title `ListItem.Title` \endlink \,
222 /// \link ListItem_Genre `ListItem.Genre` \endlink.
223 /// Please note that string can also be a `$LOCALIZE[]`.
224 /// Also note that in a panelview or similar this only works on the focused item
225 /// <p><hr>
226 /// @skinning_v17 **[New Boolean Condition]** \link String_StartsWith `String.StartsWith(info\,substring)`\endlink
227 /// <p>
228 /// }
229 /// \table_row3{ <b>`String.EndsWith(info\,substring)`</b>,
230 /// \anchor String_EndsWith
231 /// _boolean_,
232 /// @return **True** if the info ends with the given substring.
233 /// @param info - infolabel
234 /// @param substring - substring to check
235 /// @note **Example of info:** \link ListItem_Title `ListItem.Title` \endlink \,
236 /// \link ListItem_Genre `ListItem.Genre` \endlink.
237 /// Please note that string can also be a `$LOCALIZE[]`.
238 /// Also note that in a panelview or similar this only works on the focused item
239 /// <p><hr>
240 /// @skinning_v17 **[New Boolean Condition]** \link String_EndsWith `String.EndsWith(info\,substring)`\endlink
241 /// <p>
242 /// }
243 /// \table_row3{ <b>`String.Contains(info\,substring)`</b>,
244 /// \anchor String_Contains
245 /// _boolean_,
246 /// @return **True** if the info contains the given substring.
247 /// @param info - infolabel
248 /// @param substring - substring to check
249 /// @note **Example of info:** \link ListItem_Title `ListItem.Title` \endlink \,
250 /// \link ListItem_Genre `ListItem.Genre` \endlink.
251 /// Please note that string can also be a `$LOCALIZE[]`.
252 /// Also note that in a panelview or similar this only works on the focused item
253 /// <p><hr>
254 /// @skinning_v17 **[New Boolean Condition]** \link String_Contains `String.Contains(info\,substring)`\endlink
255 /// <p>
256 /// }
257 /// \table_end
259 /// -----------------------------------------------------------------------------
262 const infomap string_bools[] = {{ "isempty", STRING_IS_EMPTY },
263 { "isequal", STRING_IS_EQUAL },
264 { "startswith", STRING_STARTS_WITH },
265 { "endswith", STRING_ENDS_WITH },
266 { "contains", STRING_CONTAINS }};
268 /// \page modules__infolabels_boolean_conditions
269 /// \subsection modules__infolabels_boolean_conditions_Integer Integer
270 /// \table_start
271 /// \table_h3{ Labels, Type, Description }
272 /// \table_row3{ <b>`Integer.ValueOf(number)`</b>,
273 /// \anchor Integer_ValueOf
274 /// _integer_,
275 /// @return An integer info label that represents the provided number
276 /// @param number - the number to compute
277 /// @note **Example:** `Integer.ValueOf(4)` will be evaluated to 4.
278 /// @note Will return -1 if not able to convert the provided value to an integer. **Example**: `Integer.ValueOf(some string)` will evaluate to -1
279 /// as the provided argument is not an integer.
280 /// <p><hr>
281 /// @skinning_v20 **[New InfoLabel]** \link Integer_ValueOf `Integer.ValueOf(number)`\endlink
282 /// <p>
283 /// }
284 /// \table_row3{ <b>`Integer.IsEqual(info\,number)`</b>,
285 /// \anchor Integer_IsEqual
286 /// _boolean_,
287 /// @return **True** if the value of the infolabel is equal to the supplied number.
288 /// @param info - infolabel
289 /// @param number - number or integer infolabel to compare
290 /// @note **Example:** `Integer.IsEqual(ListItem.Year\,2000)`
291 /// <p><hr>
292 /// @skinning_v17 **[New Boolean Condition]** \link Integer_IsEqual `Integer.IsEqual(info\,number)`\endlink
293 /// @skinning_v20 \link Integer_IsEqual `Integer.IsEqual(info\,number)`\endlink now supports comparisons against other integer infos
294 /// and not just fixed number values.
295 /// <p>
296 /// }
297 /// \table_row3{ <b>`Integer.IsGreater(info\,number)`</b>,
298 /// \anchor Integer_IsGreater
299 /// _boolean_,
300 /// @return **True** if the value of the infolabel is greater than to the supplied number.
301 /// @param info - infolabel
302 /// @param number - number or integer infolabel to compare
303 /// @note **Example:** `Integer.IsGreater(ListItem.Year\,2000)`
304 /// <p><hr>
305 /// @skinning_v17 **[New Boolean Condition]** \link Integer_IsGreater `Integer.IsGreater(info\,number)`\endlink
306 /// @skinning_v20 \link Integer_IsGreater `Integer.IsGreater(info\,number)`\endlink now supports comparisons against other integer infos
307 /// and not just fixed number values.
308 /// <p>
309 /// }
310 /// \table_row3{ <b>`Integer.IsGreaterOrEqual(info\,number)`</b>,
311 /// \anchor Integer_IsGreaterOrEqual
312 /// _boolean_,
313 /// @return **True** if the value of the infolabel is greater or equal to the supplied number.
314 /// @param info - infolabel
315 /// @param number - number or integer infolabel to compare
316 /// @note **Example:** `Integer.IsGreaterOrEqual(ListItem.Year\,2000)`
317 /// @note **Example2:** `Integer.IsGreaterOrEqual(Container(x).ListItem(1).Year\,Container(x).ListItem(2).Year)`
318 /// <p><hr>
319 /// @skinning_v17 **[New Boolean Condition]** \link Integer_IsGreaterOrEqual `Integer.IsGreaterOrEqual(info\,number)`\endlink
320 /// @skinning_v20 \link Integer_IsGreaterOrEqual `Integer.IsGreaterOrEqual(info\,number)`\endlink now supports comparisons against other integer infos
321 /// and not just fixed number values.
322 /// <p>
323 /// }
324 /// \table_row3{ <b>`Integer.IsLess(info\,number)`</b>,
325 /// \anchor Integer_IsLess
326 /// _boolean_,
327 /// @return **True** if the value of the infolabel is less than the supplied number.
328 /// @param info - infolabel
329 /// @param number - number or integer infolabel to compare
330 /// @note **Example:** `Integer.IsLess(ListItem.Year\,2000)`
331 /// <p><hr>
332 /// @skinning_v17 **[New Boolean Condition]** \link Integer_IsLess `Integer.IsLess(info\,number)`\endlink
333 /// @skinning_v20 \link Integer_IsLess `Integer.IsLess(info\,number)`\endlink now supports comparisons against other integer infos
334 /// and not just fixed number values.
335 /// <p>
336 /// }
337 /// \table_row3{ <b>`Integer.IsLessOrEqual(info\,number)`</b>,
338 /// \anchor Integer_IsLessOrEqual
339 /// _boolean_,
340 /// @return **True** if the value of the infolabel is less or equal to the supplied number.
341 /// @param info - infolabel
342 /// @param number - number or integer infolabel to compare
343 /// @note **Example:** `Integer.IsLessOrEqual(ListItem.Year\,2000)`
344 /// <p><hr>
345 /// @skinning_v17 **[New Boolean Condition]** \link Integer_IsLessOrEqual `Integer.IsLessOrEqual(info\,number)`\endlink
346 /// @skinning_v20 \link Integer_IsLessOrEqual `Integer.IsLessOrEqual(info\,number)`\endlink now supports comparisons against other integer infos
347 /// and not just fixed number values.
348 /// <p>
349 /// }
350 /// \table_row3{ <b>`Integer.IsEven(info)`</b>,
351 /// \anchor Integer_IsEven
352 /// _boolean_,
353 /// @return **True** if the value of the infolabel is odd
354 /// @param info - infolabel
355 /// @note **Example:** `Integer.IsEven(ListItem.CurrentItem)`
356 /// <p><hr>
357 /// @skinning_v19 **[New Boolean Condition]** \link Integer_IsEven `Integer.IsEven(info)`\endlink
358 /// <p>
359 /// }
360 /// \table_row3{ <b>`Integer.IsOdd(info)`</b>,
361 /// \anchor Integer_IsOdd
362 /// _boolean_,
363 /// @return **True** if the value of the infolabel is odd
364 /// @param info - infolabel
365 /// @note **Example:** `Integer.IsOdd(ListItem.CurrentItem)`
366 /// <p><hr>
367 /// @skinning_v19 **[New Boolean Condition]** \link Integer_IsOdd `Integer.IsOdd(info)`\endlink
368 /// <p>
369 /// }
370 /// \table_end
372 /// -----------------------------------------------------------------------------
374 const infomap integer_bools[] = {{ "isequal", INTEGER_IS_EQUAL },
375 { "isgreater", INTEGER_GREATER_THAN },
376 { "isgreaterorequal", INTEGER_GREATER_OR_EQUAL },
377 { "isless", INTEGER_LESS_THAN },
378 { "islessorequal", INTEGER_LESS_OR_EQUAL },
379 { "iseven", INTEGER_EVEN },
380 { "isodd", INTEGER_ODD }};
383 /// \page modules__infolabels_boolean_conditions
384 /// \subsection modules__infolabels_boolean_conditions_Player Player
385 /// \table_start
386 /// \table_h3{ Labels, Type, Description }
387 /// \table_row3{ <b>`Player.HasAudio`</b>,
388 /// \anchor Player_HasAudio
389 /// _boolean_,
390 /// @return **True** if the player has an audio file.
391 /// <p>
392 /// }
393 /// \table_row3{ <b>`Player.HasGame`</b>,
394 /// \anchor Player_HasGame
395 /// _boolean_,
396 /// @return **True** if the player has a game file (RETROPLAYER).
397 /// <p><hr>
398 /// @skinning_v18 **[New Boolean Condition]** \link Player_HasGame `Player.HasGame`\endlink
399 /// <p>
400 /// }
401 /// \table_row3{ <b>`Player.HasMedia`</b>,
402 /// \anchor Player_HasMedia
403 /// _boolean_,
404 /// @return **True** if the player has an audio or video file.
405 /// <p>
406 /// }
407 /// \table_row3{ <b>`Player.HasVideo`</b>,
408 /// \anchor Player_HasVideo
409 /// _boolean_,
410 /// @return **True** if the player has a video file.
411 /// <p>
412 /// }
413 /// \table_row3{ <b>`Player.Paused`</b>,
414 /// \anchor Player_Paused
415 /// _boolean_,
416 /// @return **True** if the player is paused.
417 /// <p>
418 /// }
419 /// \table_row3{ <b>`Player.Playing`</b>,
420 /// \anchor Player_Playing
421 /// _boolean_,
422 /// @return **True** if the player is currently playing (i.e. not ffwding\,
423 /// rewinding or paused.)
424 /// <p>
425 /// }
426 /// \table_row3{ <b>`Player.Rewinding`</b>,
427 /// \anchor Player_Rewinding
428 /// _boolean_,
429 /// @return **True** if the player is rewinding.
430 /// <p>
431 /// }
432 /// \table_row3{ <b>`Player.Rewinding2x`</b>,
433 /// \anchor Player_Rewinding2x
434 /// _boolean_,
435 /// @return **True** if the player is rewinding at 2x.
436 /// <p>
437 /// }
438 /// \table_row3{ <b>`Player.Rewinding4x`</b>,
439 /// \anchor Player_Rewinding4x
440 /// _boolean_,
441 /// @return **True** if the player is rewinding at 4x.
442 /// <p>
443 /// }
444 /// \table_row3{ <b>`Player.Rewinding8x`</b>,
445 /// \anchor Player_Rewinding8x
446 /// _boolean_,
447 /// @return **True** if the player is rewinding at 8x.
448 /// <p>
449 /// }
450 /// \table_row3{ <b>`Player.Rewinding16x`</b>,
451 /// \anchor Player_Rewinding16x
452 /// _boolean_,
453 /// @return **True** if the player is rewinding at 16x.
454 /// <p>
455 /// }
456 /// \table_row3{ <b>`Player.Rewinding32x`</b>,
457 /// \anchor Player_Rewinding32x
458 /// _boolean_,
459 /// @return **True** if the player is rewinding at 32x.
460 /// <p>
461 /// }
462 /// \table_row3{ <b>`Player.Forwarding`</b>,
463 /// \anchor Player_Forwarding
464 /// _boolean_,
465 /// @return **True** if the player is fast forwarding.
466 /// <p>
467 /// }
468 /// \table_row3{ <b>`Player.Forwarding2x`</b>,
469 /// \anchor Player_Forwarding2x
470 /// _boolean_,
471 /// @return **True** if the player is fast forwarding at 2x.
472 /// <p>
473 /// }
474 /// \table_row3{ <b>`Player.Forwarding4x`</b>,
475 /// \anchor Player_Forwarding4x
476 /// _boolean_,
477 /// @return **True** if the player is fast forwarding at 4x.
478 /// <p>
479 /// }
480 /// \table_row3{ <b>`Player.Forwarding8x`</b>,
481 /// \anchor Player_Forwarding8x
482 /// _boolean_,
483 /// @return **True** if the player is fast forwarding at 8x.
484 /// <p>
485 /// }
486 /// \table_row3{ <b>`Player.Forwarding16x`</b>,
487 /// \anchor Player_Forwarding16x
488 /// _boolean_,
489 /// @return **True** if the player is fast forwarding at 16x.
490 /// <p>
491 /// }
492 /// \table_row3{ <b>`Player.Forwarding32x`</b>,
493 /// \anchor Player_Forwarding32x
494 /// _boolean_,
495 /// @return **True** if the player is fast forwarding at 32x.
496 /// <p>
497 /// }
498 /// \table_row3{ <b>`Player.Caching`</b>,
499 /// \anchor Player_Caching
500 /// _boolean_,
501 /// @return **True** if the player is current re-caching data (internet based
502 /// video playback).
503 /// <p>
504 /// }
505 /// \table_row3{ <b>`Player.DisplayAfterSeek`</b>,
506 /// \anchor Player_DisplayAfterSeek
507 /// _boolean_,
508 /// @return **True** for the first 2.5 seconds after a seek.
509 /// <p>
510 /// }
511 /// \table_row3{ <b>`Player.Seekbar`</b>,
512 /// \anchor Player_Seekbar
513 /// _integer_,
514 /// @return The percentage of one seek to other position.
515 /// <p>
516 /// }
517 /// \table_row3{ <b>`Player.Seeking`</b>,
518 /// \anchor Player_Seeking
519 /// _boolean_,
520 /// @return **True** if a seek is in progress.
521 /// <p>
522 /// }
523 /// \table_row3{ <b>`Player.ShowTime`</b>,
524 /// \anchor Player_ShowTime
525 /// _boolean_,
526 /// @return **True** if the user has requested the time to show (occurs in video
527 /// fullscreen).
528 /// <p>
529 /// }
530 /// \table_row3{ <b>`Player.ShowInfo`</b>,
531 /// \anchor Player_ShowInfo
532 /// _boolean_,
533 /// @return **True** if the user has requested the song info to show (occurs in
534 /// visualisation fullscreen and slideshow).
535 /// <p>
536 /// }
537 /// \table_row3{ <b>`Player.Title`</b>,
538 /// \anchor Player_Title
539 /// _string_,
540 /// @return The Musicplayer title for audio and the Videoplayer title for
541 /// video.
542 /// <p>
543 /// }
544 /// \table_row3{ <b>`Player.offset(number).Title`</b>,
545 /// \anchor Player_Offset_Title
546 /// _string_,
547 /// @return The title of audio or video which has an offset `number` with respect to the currently playing item.
548 /// <p><hr>
549 /// @skinning_v19 **[New Infolabel]** \link Player_Offset_Title `Player.offset(number).Title`\endlink
550 /// <p>
551 /// }
552 /// \table_row3{ <b>`Player.position(number).Title`</b>,
553 /// \anchor Player_Position_Title
554 /// _string_,
555 /// @return The title of the audio or video which has an offset `number` with respect to the start of the playlist.
556 /// <p><hr>
557 /// @skinning_v19 **[New Infolabel]** \link Player_Position_Title `Player.position(number).Title`\endlink
558 /// <p>
559 /// }
560 /// \table_row3{ <b>`Player.Muted`</b>,
561 /// \anchor Player_Muted
562 /// _boolean_,
563 /// @return **True** if the volume is muted.
564 /// <p>
565 /// }
566 /// \table_row3{ <b>`Player.HasDuration`</b>,
567 /// \anchor Player_HasDuration
568 /// _boolean_,
569 /// @return **True** if Media is not a true stream.
570 /// <p>
571 /// }
572 /// \table_row3{ <b>`Player.Passthrough`</b>,
573 /// \anchor Player_Passthrough
574 /// _boolean_,
575 /// @return **True** if the player is using audio passthrough.
576 /// <p>
577 /// }
578 /// \table_row3{ <b>`Player.CacheLevel`</b>,
579 /// \anchor Player_CacheLevel
580 /// _string_,
581 /// @return The used cache level as a string with an integer number.
582 /// <p>
583 /// }
584 /// \table_row3{ <b>`Player.Progress`</b>,
585 /// \anchor Player_Progress
586 /// _integer_ / _string_,
587 /// @return The progress position as percentage.
588 /// <p><hr>
589 /// @skinning_v19 \link Player_Progress `Player.Progress`\endlink infolabel
590 /// also exposed as a string.
591 /// <p>
592 /// }
593 /// \table_row3{ <b>`Player.ProgressCache`</b>,
594 /// \anchor Player_ProgressCache
595 /// _integer_ / _string_,
596 /// @return How much of the file is cached above current play percentage
597 /// <p><hr>
598 /// @skinning_v19 \link Player_ProgressCache `Player.ProgressCache`\endlink
599 /// infolabel also exposed as a string.
600 /// <p>
601 /// }
602 /// \table_row3{ <b>`Player.Volume`</b>,
603 /// \anchor Player_Volume
604 /// _string_,
605 /// @return The current player volume with the format `%2.1f` dB
606 /// <p>
607 /// }
608 /// \table_row3{ <b>`Player.SubtitleDelay`</b>,
609 /// \anchor Player_SubtitleDelay
610 /// _string_,
611 /// @return The used subtitle delay with the format `%2.3f` s
612 /// <p>
613 /// }
614 /// \table_row3{ <b>`Player.AudioDelay`</b>,
615 /// \anchor Player_AudioDelay
616 /// _string_,
617 /// @return The used audio delay with the format `%2.3f` s
618 /// <p>
619 /// }
620 /// \table_row3{ <b>`Player.Chapter`</b>,
621 /// \anchor Player_Chapter
622 /// _integer_,
623 /// @return The current chapter of current playing media.
624 /// <p>
625 /// }
626 /// \table_row3{ <b>`Player.ChapterCount`</b>,
627 /// \anchor Player_ChapterCount
628 /// _integer_,
629 /// @return The total number of chapters of current playing media.
630 /// <p>
631 /// }
632 /// \table_row3{ <b>`Player.ChapterName`</b>,
633 /// \anchor Player_ChapterName
634 /// _string_,
635 /// @return The name of currently used chapter if available.
636 /// <p>
637 /// }
638 /// \table_row3{ <b>`Player.Folderpath`</b>,
639 /// \anchor Player_Folderpath
640 /// _string_,
641 /// @return The full path of the currently playing song or movie
642 /// <p>
643 /// }
644 /// \table_row3{ <b>`Player.offset(number).Folderpath`</b>,
645 /// \anchor Player_Offset_Folderpath
646 /// _string_,
647 /// @return The full path of the audio or video file which has an offset `number` with respect to the currently playing item.
648 /// <p><hr>
649 /// @skinning_v19 **[New Infolabel]** \link Player_Offset_Folderpath `Player.offset(number).Folderpath`\endlink
650 /// <p>
651 /// }
652 /// \table_row3{ <b>`Player.position(number).Folderpath`</b>,
653 /// \anchor Player_Position_Folderpath
654 /// _string_,
655 /// @return The full path of the audio or video file which has an offset `number` with respect to the start of the playlist.
656 /// <p><hr>
657 /// @skinning_v19 **[New Infolabel]** \link Player_Position_Folderpath `Player.position(number).Folderpath`\endlink
658 /// <p>
659 /// }
660 /// \table_row3{ <b>`Player.FilenameAndPath`</b>,
661 /// \anchor Player_FilenameAndPath
662 /// _string_,
663 /// @return The full path with filename of the currently
664 /// playing song or movie
665 /// <p>
666 /// }
667 /// \table_row3{ <b>`Player.offset(number).FilenameAndPath`</b>,
668 /// \anchor Player_Offset_FilenameAndPath
669 /// _string_,
670 /// @return The full path with filename of audio or video file which has an offset `number` with respect to the currently playing item.
671 /// <p><hr>
672 /// @skinning_v19 **[New Infolabel]** \link Player_Offset_FilenameAndPath `Player.offset(number).FilenameAndPath`\endlink
673 /// <p>
674 /// }
675 /// \table_row3{ <b>`Player.position(number).FilenameAndPath`</b>,
676 /// \anchor Player_Position_FilenameAndPath
677 /// _string_,
678 /// @return The full path with filename of the audio or video file which has an offset `number` with respect to the start of the playlist.
679 /// <p><hr>
680 /// @skinning_v19 **[New Infolabel]** \link Player_Position_FilenameAndPath `Player.position(number).FilenameAndPath`\endlink
681 /// <p>
682 /// }
683 /// \table_row3{ <b>`Player.Filename`</b>,
684 /// \anchor Player_Filename
685 /// _string_,
686 /// @return The filename of the currently playing media.
687 /// <p><hr>
688 /// @skinning_v13 **[New Infolabel]** \link Player_Filename `Player.Filename`\endlink
689 /// <p>
690 /// }
691 /// \table_row3{ <b>`Player.offset(number).Filename`</b>,
692 /// \anchor Player_Offset_Filename
693 /// _string_,
694 /// @return The filename of audio or video file which has an offset `number` with respect to the currently playing item.
695 /// <p><hr>
696 /// @skinning_v19 **[New Infolabel]** \link Player_Offset_Filename `Player.offset(number).Filename`\endlink
697 /// <p>
698 /// }
699 /// \table_row3{ <b>`Player.position(number).Filename`</b>,
700 /// \anchor Player_Position_Filename
701 /// _string_,
702 /// @return The filename of the audio or video file which has an offset `number` with respect to the start of the playlist.
703 /// <p><hr>
704 /// @skinning_v19 **[New Infolabel]** \link Player_Position_Filename `Player.position(number).Filename`\endlink
705 /// <p>
706 /// }
707 /// \table_row3{ <b>`Player.IsInternetStream`</b>,
708 /// \anchor Player_IsInternetStream
709 /// _boolean_,
710 /// @return **True** if the player is playing an internet stream.
711 /// <p>
712 /// }
713 /// \table_row3{ <b>`Player.PauseEnabled`</b>,
714 /// \anchor Player_PauseEnabled
715 /// _boolean_,
716 /// @return **True** if played stream is paused.
717 /// <p>
718 /// }
719 /// \table_row3{ <b>`Player.SeekEnabled`</b>,
720 /// \anchor Player_SeekEnabled
721 /// _boolean_,
722 /// @return **True** if seek on playing is enabled.
723 /// <p>
724 /// }
725 /// \table_row3{ <b>`Player.ChannelPreviewActive`</b>,
726 /// \anchor Player_ChannelPreviewActive
727 /// _boolean_,
728 /// @return **True** if PVR channel preview is active (used
729 /// channel tag different from played tag)
730 /// <p>
731 /// }
732 /// \table_row3{ <b>`Player.TempoEnabled`</b>,
733 /// \anchor Player_TempoEnabled
734 /// _boolean_,
735 /// @return **True** if player supports tempo (i.e. speed up/down normal
736 /// playback speed)
737 /// <p><hr>
738 /// @skinning_v17 **[New Boolean Condition]** \link Player_TempoEnabled `Player.TempoEnabled`\endlink
739 /// <p>
740 /// }
741 /// \table_row3{ <b>`Player.IsTempo`</b>,
742 /// \anchor Player_IsTempo
743 /// _boolean_,
744 /// @return **True** if player has tempo (i.e. is playing with a playback speed higher or
745 /// lower than normal playback speed)
746 /// <p><hr>
747 /// @skinning_v17 **[New Boolean Condition]** \link Player_IsTempo `Player.IsTempo`\endlink
748 /// <p>
749 /// }
750 /// \table_row3{ <b>`Player.PlaySpeed`</b>,
751 /// \anchor Player_PlaySpeed
752 /// _string_,
753 /// @return The player playback speed with the format `%1.2f` (1.00 means normal
754 /// playback speed).
755 /// @note For Tempo\, the default range is 0.80 - 1.50 (it can be changed
756 /// in advanced settings). If \ref Player_PlaySpeed "Player.PlaySpeed" returns a value different from 1.00
757 /// and \ref Player_IsTempo "Player.IsTempo" is false it means the player is in ff/rw mode.
758 /// <p>
759 /// }
760 /// \table_row3{ <b>`Player.HasResolutions`</b>,
761 /// \anchor Player_HasResolutions
762 /// _boolean_,
763 /// @return **True** if the player is allowed to switch resolution and refresh rate
764 /// (i.e. if whitelist modes are configured in Kodi's System/Display settings)
765 /// <p><hr>
766 /// @skinning_v18 **[New Boolean Condition]** \link Player_HasResolutions `Player.HasResolutions`\endlink
767 /// <p>
768 /// }
769 /// \table_row3{ <b>`Player.HasPrograms`</b>,
770 /// \anchor Player_HasPrograms
771 /// _boolean_,
772 /// @return **True** if the media file being played has programs\, i.e. groups of streams.
773 /// @note Ex: if a media file has multiple streams (quality\, channels\, etc) a program represents
774 /// a particular stream combo.
775 /// <p>
776 /// }
777 /// \table_row3{ <b>`Player.FrameAdvance`</b>,
778 /// \anchor Player_FrameAdvance
779 /// _boolean_,
780 /// @return **True** if player is in frame advance mode.
781 /// @note Skins should hide seek bar in this mode
782 /// <p><hr>
783 /// @skinning_v18 **[New Boolean Condition]** \link Player_FrameAdvance `Player.FrameAdvance`\endlink
784 /// <p>
785 /// }
786 /// \table_row3{ <b>`Player.Icon`</b>,
787 /// \anchor Player_Icon
788 /// _string_,
789 /// @return The thumbnail of the currently playing item. If no thumbnail image exists\,
790 /// the icon will be returned\, if available.
791 /// <p><hr>
792 /// @skinning_v18 **[New Infolabel]** \link Player_Icon `Player.Icon`\endlink
793 /// <p>
794 /// }
795 /// \table_row3{ <b>`Player.Cutlist`</b>,
796 /// \anchor Player_Cutlist
797 /// _string_,
798 /// @return The cutlist of the currently playing item as csv in the format start1\,end1\,start2\,end2\,...
799 /// Tokens must have values in the range from 0.0 to 100.0. end token must be less or equal than start token.
800 /// <p>
801 /// @deprecated \link Player_Cutlist `Player.Cutlist`\endlink is deprecated and will be removed in the next version.
802 /// <p><hr>
803 /// @skinning_v19 **[New Infolabel]** \link Player_Cutlist `Player.Cutlist`\endlink
804 /// @skinning_v20 \link Player_Cutlist `Player.Cutlist`\endlink is deprecated\, use \link Player_Editlist `Player.Editlist`\endlink instead
805 /// <p>
806 /// }
807 /// \table_row3{ <b>`Player.Editlist`</b>,
808 /// \anchor Player_Editlist
809 /// _string_,
810 /// @return The editlist of the currently playing item as csv in the format start1\,end1\,start2\,end2\,...
811 /// Tokens must have values in the range from 0.0 to 100.0. end token must be less or equal than start token.
812 /// @note This infolabel does not contain EDL cuts. Edits start and end times are ajusted according to cuts
813 /// defined for the media item.
814 /// <p><hr>
815 /// @skinning_v20 **[New Infolabel]** \link Player_Editlist `Player.Editlist`\endlink
816 /// <p>
817 /// }
818 /// \table_row3{ <b>`Player.Cuts`</b>,
819 /// \anchor Player_Cuts
820 /// _string_,
821 /// @return The EDL cut markers of the currently playing item as csv in the format start1\,end1\,start2\,end2\,...
822 /// Tokens must have values in the range from 0.0 to 100.0. end token must be less or equal than start token.
823 /// <p><hr>
824 /// @skinning_v20 **[New Infolabel]** \link Player_Cuts `Player.Cuts`\endlink
825 /// <p>
826 /// }
827 /// \table_row3{ <b>`Player.SceneMarkers`</b>,
828 /// \anchor Player_SceneMarkers
829 /// _string_,
830 /// @return The EDL scene markers of the currently playing item as csv in the format start1\,end1\,start2\,end2\,...
831 /// Tokens must have values in the range from 0.0 to 100.0. end token must be less or equal than start token.
832 /// <p><hr>
833 /// @skinning_v20 **[New Infolabel]** \link Player_SceneMarkers `Player.SceneMarkers`\endlink
834 /// <p>
835 /// }
836 /// \table_row3{ <b>`Player.HasSceneMarkers`</b>,
837 /// \anchor Player_HasSceneMarkers
838 /// _boolean_,
839 /// @return **True** if the item being played has scene markers\, **False** otherwise
840 /// <p><hr>
841 /// @skinning_v20 **[New Infolabel]** \link Player_HasSceneMarkers `Player.HasSceneMarkers`\endlink
842 /// <p>
843 /// }
844 /// \table_row3{ <b>`Player.Chapters`</b>,
845 /// \anchor Player_Chapters
846 /// _string_,
847 /// @return The chapters of the currently playing item as csv in the format start1\,end1\,start2\,end2\,...
848 /// Tokens must have values in the range from 0.0 to 100.0. end token must be less or equal than start token.
849 /// <p><hr>
850 /// @skinning_v19 **[New Infolabel]** \link Player_Chapters `Player.Chapters`\endlink
851 /// <p>
852 /// }
853 const infomap player_labels[] = {{"hasmedia", PLAYER_HAS_MEDIA},
854 {"hasaudio", PLAYER_HAS_AUDIO},
855 {"hasvideo", PLAYER_HAS_VIDEO},
856 {"hasgame", PLAYER_HAS_GAME},
857 {"playing", PLAYER_PLAYING},
858 {"paused", PLAYER_PAUSED},
859 {"rewinding", PLAYER_REWINDING},
860 {"forwarding", PLAYER_FORWARDING},
861 {"rewinding2x", PLAYER_REWINDING_2x},
862 {"rewinding4x", PLAYER_REWINDING_4x},
863 {"rewinding8x", PLAYER_REWINDING_8x},
864 {"rewinding16x", PLAYER_REWINDING_16x},
865 {"rewinding32x", PLAYER_REWINDING_32x},
866 {"forwarding2x", PLAYER_FORWARDING_2x},
867 {"forwarding4x", PLAYER_FORWARDING_4x},
868 {"forwarding8x", PLAYER_FORWARDING_8x},
869 {"forwarding16x", PLAYER_FORWARDING_16x},
870 {"forwarding32x", PLAYER_FORWARDING_32x},
871 {"caching", PLAYER_CACHING},
872 {"seekbar", PLAYER_SEEKBAR},
873 {"seeking", PLAYER_SEEKING},
874 {"showtime", PLAYER_SHOWTIME},
875 {"showinfo", PLAYER_SHOWINFO},
876 {"muted", PLAYER_MUTED},
877 {"hasduration", PLAYER_HASDURATION},
878 {"passthrough", PLAYER_PASSTHROUGH},
879 {"cachelevel", PLAYER_CACHELEVEL},
880 {"title", PLAYER_TITLE},
881 {"progress", PLAYER_PROGRESS},
882 {"progresscache", PLAYER_PROGRESS_CACHE},
883 {"volume", PLAYER_VOLUME},
884 {"subtitledelay", PLAYER_SUBTITLE_DELAY},
885 {"audiodelay", PLAYER_AUDIO_DELAY},
886 {"chapter", PLAYER_CHAPTER},
887 {"chaptercount", PLAYER_CHAPTERCOUNT},
888 {"chaptername", PLAYER_CHAPTERNAME},
889 {"folderpath", PLAYER_PATH},
890 {"filenameandpath", PLAYER_FILEPATH},
891 {"filename", PLAYER_FILENAME},
892 {"isinternetstream", PLAYER_ISINTERNETSTREAM},
893 {"pauseenabled", PLAYER_CAN_PAUSE},
894 {"seekenabled", PLAYER_CAN_SEEK},
895 {"channelpreviewactive", PLAYER_IS_CHANNEL_PREVIEW_ACTIVE},
896 {"tempoenabled", PLAYER_SUPPORTS_TEMPO},
897 {"istempo", PLAYER_IS_TEMPO},
898 {"playspeed", PLAYER_PLAYSPEED},
899 {"hasprograms", PLAYER_HAS_PROGRAMS},
900 {"hasresolutions", PLAYER_HAS_RESOLUTIONS},
901 {"frameadvance", PLAYER_FRAMEADVANCE},
902 {"icon", PLAYER_ICON},
903 {"cutlist", PLAYER_CUTLIST},
904 {"editlist", PLAYER_EDITLIST},
905 {"cuts", PLAYER_CUTS},
906 {"scenemarkers", PLAYER_SCENE_MARKERS},
907 {"hasscenemarkers", PLAYER_HAS_SCENE_MARKERS},
908 {"chapters", PLAYER_CHAPTERS}};
910 /// \page modules__infolabels_boolean_conditions
911 /// \table_row3{ <b>`Player.Art(type)`</b>,
912 /// \anchor Player_Art_type
913 /// _string_,
914 /// @return The Image for the defined art type for the current playing ListItem.
915 /// @param type - The art type. The type is defined by scripts and scrappers and can have any value.
916 /// Common example values for type are:
917 /// - fanart
918 /// - thumb
919 /// - poster
920 /// - banner
921 /// - clearlogo
922 /// - tvshow.poster
923 /// - tvshow.banner
924 /// - etc
925 /// @todo get a way of centralize all random art strings used in core so we can point users to them
926 /// while still making it clear they can have any value.
927 /// <p>
928 /// }
929 /// \table_row3{ <b>`Player.HasPerformedSeek(interval)`</b>,
930 /// \anchor Player_HasPerformedSeek
931 /// _boolean_,
932 /// @return **True** if the Player has performed a seek operation in the last provided second `interval`\, **False** otherwise.
933 /// @param interval - the time interval (in seconds)
934 /// <p><hr>
935 /// @skinning_v20 **[New Boolean Condition]** \link Player_HasPerformedSeek `Player.HasPerformedSeek(interval)`\endlink
936 /// <p>
937 /// }
939 const infomap player_param[] = {{"art", PLAYER_ITEM_ART},
940 {"hasperformedseek", PLAYER_HASPERFORMEDSEEK}};
942 /// \page modules__infolabels_boolean_conditions
943 /// \table_row3{ <b>`Player.SeekTime`</b>,
944 /// \anchor Player_SeekTime
945 /// _string_,
946 /// @return The time to which the user is seeking.
947 /// <p>
948 /// }
949 /// \table_row3{ <b>`Player.SeekOffset([format])`</b>,
950 /// \anchor Player_SeekOffset_format
951 /// _string_,
952 /// @return The seek offset after a seek press in a given format.
953 /// @param format [opt] The format of the return time value.
954 /// See \ref TIME_FORMAT for the list of possible values.
955 /// <p>
956 /// @note **Example:** user presses BigStepForward\, player.seekoffset returns +10:00
957 /// <p>
958 /// }
959 /// \table_row3{ <b>`Player.SeekStepSize`</b>,
960 /// \anchor Player_SeekStepSize
961 /// _string_,
962 /// @return The seek step size.
963 /// <p>
964 /// <hr>
965 /// @skinning_v15 **[New Infolabel]** \link Player_SeekStepSize `Player.SeekStepSize`\endlink
966 /// <p>
967 /// }
968 /// \table_row3{ <b>`Player.TimeRemaining([format])`</b>,
969 /// \anchor Player_TimeRemaining_format
970 /// _string_,
971 /// @return The remaining time of current playing media in a given format.
972 /// @param format [opt] The format of the return time value.
973 /// See \ref TIME_FORMAT for the list of possible values.
974 /// <p>
975 /// }
976 /// \table_row3{ <b>`Player.TimeSpeed`</b>,
977 /// \anchor Player_TimeSpeed
978 /// _string_,
979 /// @return The time and the playspeed formatted: "1:23 (2x)".
980 /// <p>
981 /// }
982 /// \table_row3{ <b>`Player.Time([format])`</b>,
983 /// \anchor Player_Time_format
984 /// _string_,
985 /// @return The elapsed time of current playing media in a given format.
986 /// @param format [opt] The format of the return time value.
987 /// See \ref TIME_FORMAT for the list of possible values.
988 /// <p>
989 /// }
990 /// \table_row3{ <b>`Player.Duration([format])`</b>,
991 /// \anchor Player_Duration_format
992 /// _string_,
993 /// @return The total duration of the current playing media in a given format.
994 /// @param format [opt] The format of the return time value.
995 /// See \ref TIME_FORMAT for the list of possible values.
996 /// <p>
997 /// }
998 /// \table_row3{ <b>`Player.FinishTime([format])`</b>,
999 /// \anchor Player_FinishTime_format
1000 /// _string_,
1001 /// @return The time at which the playing media will end (in a specified format).
1002 /// @param format [opt] The format of the return time value.
1003 /// See \ref TIME_FORMAT for the list of possible values.
1004 /// <p>
1005 /// }
1006 /// \table_row3{ <b>`Player.StartTime([format])`</b>,
1007 /// \anchor Player_StartTime_format
1008 /// _string_,
1009 /// @return The time at which the playing media began (in a specified format).
1010 /// @param format [opt] The format of the return time value.
1011 /// See \ref TIME_FORMAT for the list of possible values.
1012 /// <p>
1013 /// }
1014 /// \table_row3{ <b>`Player.SeekNumeric([format])`</b>,
1015 /// \anchor Player_SeekNumeric_format
1016 /// _string_,
1017 /// @return The time at which the playing media began (in a specified format).
1018 /// @param format [opt] The format of the return time value.
1019 /// See \ref TIME_FORMAT for the list of possible values.
1020 /// <p>
1021 /// }
1022 const infomap player_times[] = {{ "seektime", PLAYER_SEEKTIME },
1023 { "seekoffset", PLAYER_SEEKOFFSET },
1024 { "seekstepsize", PLAYER_SEEKSTEPSIZE },
1025 { "timeremaining", PLAYER_TIME_REMAINING },
1026 { "timespeed", PLAYER_TIME_SPEED },
1027 { "time", PLAYER_TIME },
1028 { "duration", PLAYER_DURATION },
1029 { "finishtime", PLAYER_FINISH_TIME },
1030 { "starttime", PLAYER_START_TIME },
1031 { "seeknumeric", PLAYER_SEEKNUMERIC } };
1034 /// \page modules__infolabels_boolean_conditions
1035 /// \table_row3{ <b>`Player.Process(videohwdecoder)`</b>,
1036 /// \anchor Player_Process_videohwdecoder
1037 /// _boolean_,
1038 /// @return **True** if the currently playing video is decoded in hardware.
1039 /// <p><hr>
1040 /// @skinning_v17 **[New Boolean Condition]** \link Player_Process_videohwdecoder `Player.Process(videohwdecoder)`\endlink
1041 /// <p>
1042 /// }
1043 /// \table_row3{ <b>`Player.Process(videodecoder)`</b>,
1044 /// \anchor Player_Process_videodecoder
1045 /// _string_,
1046 /// @return The videodecoder name of the currently playing video.
1047 /// <p><hr>
1048 /// @skinning_v17 **[New Infolabel]** \link Player_Process_videodecoder `Player.Process(videodecoder)`\endlink
1049 /// <p>
1050 /// }
1051 /// \table_row3{ <b>`Player.Process(deintmethod)`</b>,
1052 /// \anchor Player_Process_deintmethod
1053 /// _string_,
1054 /// @return The deinterlace method of the currently playing video.
1055 /// <p><hr>
1056 /// @skinning_v17 **[New Infolabel]** \link Player_Process_deintmethod `Player.Process(deintmethod)`\endlink
1057 /// <p>
1058 /// }
1059 /// \table_row3{ <b>`Player.Process(pixformat)`</b>,
1060 /// \anchor Player_Process_pixformat
1061 /// _string_,
1062 /// @return The pixel format of the currently playing video.
1063 /// <p><hr>
1064 /// @skinning_v17 **[New Infolabel]** \link Player_Process_pixformat `Player.Process(pixformat)`\endlink
1065 /// <p>
1066 /// }
1067 /// \table_row3{ <b>`Player.Process(videowidth)`</b>,
1068 /// \anchor Player_Process_videowidth
1069 /// _string_,
1070 /// @return The width of the currently playing video.
1071 /// <p><hr>
1072 /// @skinning_v17 **[New Infolabel]** \link Player_Process_videowidth `Player.Process(videowidth)`\endlink
1073 /// <p>
1074 /// }
1075 /// \table_row3{ <b>`Player.Process(videoheight)`</b>,
1076 /// \anchor Player_Process_videoheight
1077 /// _string_,
1078 /// @return The width of the currently playing video.
1079 /// <p><hr>
1080 /// @skinning_v17 **[New Infolabel]** \link Player_Process_videoheight `Player.Process(videoheight)`\endlink
1081 /// <p>
1082 /// }
1083 /// \table_row3{ <b>`Player.Process(videoscantype)`</b>,
1084 /// \anchor Player_Process_videoscantype
1085 /// _string_,
1086 /// @return The scan type identifier of the currently playing video **p** (for progressive) or **i** (for interlaced).
1087 /// <p><hr>
1088 /// @skinning_v20 **[New Infolabel]** \link Player_Process_videoscantype `Player.Process(videoscantype)`\endlink
1089 /// <p>
1090 /// }
1091 /// \table_row3{ <b>`Player.Process(videofps)`</b>,
1092 /// \anchor Player_Process_videofps
1093 /// _string_,
1094 /// @return The video framerate of the currently playing video.
1095 /// <p><hr>
1096 /// @skinning_v17 **[New Infolabel]** \link Player_Process_videofps `Player.Process(videofps)`\endlink
1097 /// <p>
1098 /// }
1099 /// \table_row3{ <b>`Player.Process(videodar)`</b>,
1100 /// \anchor Player_Process_videodar
1101 /// _string_,
1102 /// @return The display aspect ratio of the currently playing video.
1103 /// <p><hr>
1104 /// @skinning_v17 **[New Infolabel]** \link Player_Process_videodar `Player.Process(videodar)`\endlink
1105 /// <p>
1106 /// }
1107 /// \table_row3{ <b>`Player.Process(audiodecoder)`</b>,
1108 /// \anchor Player_Process_audiodecoder
1109 /// _string_,
1110 /// @return The audiodecoder name of the currently playing item.
1111 /// <p><hr>
1112 /// @skinning_v17 **[New Infolabel]** \link Player_Process_videodar `Player.Process(audiodecoder)`\endlink
1113 /// <p>
1114 /// }
1115 /// \table_row3{ <b>`Player.Process(audiochannels)`</b>,
1116 /// \anchor Player_Process_audiochannels
1117 /// _string_,
1118 /// @return The audiodecoder name of the currently playing item.
1119 /// <p><hr>
1120 /// @skinning_v17 **[New Infolabel]** \link Player_Process_audiochannels `Player.Process(audiochannels)`\endlink
1121 /// <p>
1122 /// }
1123 /// \table_row3{ <b>`Player.Process(audiosamplerate)`</b>,
1124 /// \anchor Player_Process_audiosamplerate
1125 /// _string_,
1126 /// @return The samplerate of the currently playing item.
1127 /// <p><hr>
1128 /// @skinning_v17 **[New Infolabel]** \link Player_Process_audiosamplerate `Player.Process(audiosamplerate)`\endlink
1129 /// <p>
1130 /// }
1131 /// \table_row3{ <b>`Player.Process(audiobitspersample)`</b>,
1132 /// \anchor Player_Process_audiobitspersample
1133 /// _string_,
1134 /// @return The bits per sample of the currently playing item.
1135 /// <p><hr>
1136 /// @skinning_v17 **[New Infolabel]** \link Player_Process_audiobitspersample `Player.Process(audiobitspersample)`\endlink
1137 /// <p>
1138 /// }
1139 /// \table_end
1141 /// -----------------------------------------------------------------------------
1143 const infomap player_process[] = {{"videodecoder", PLAYER_PROCESS_VIDEODECODER},
1144 {"deintmethod", PLAYER_PROCESS_DEINTMETHOD},
1145 {"pixformat", PLAYER_PROCESS_PIXELFORMAT},
1146 {"videowidth", PLAYER_PROCESS_VIDEOWIDTH},
1147 {"videoheight", PLAYER_PROCESS_VIDEOHEIGHT},
1148 {"videofps", PLAYER_PROCESS_VIDEOFPS},
1149 {"videodar", PLAYER_PROCESS_VIDEODAR},
1150 {"videohwdecoder", PLAYER_PROCESS_VIDEOHWDECODER},
1151 {"audiodecoder", PLAYER_PROCESS_AUDIODECODER},
1152 {"audiochannels", PLAYER_PROCESS_AUDIOCHANNELS},
1153 {"audiosamplerate", PLAYER_PROCESS_AUDIOSAMPLERATE},
1154 {"audiobitspersample", PLAYER_PROCESS_AUDIOBITSPERSAMPLE},
1155 {"videoscantype", PLAYER_PROCESS_VIDEOSCANTYPE}};
1157 /// \page modules__infolabels_boolean_conditions
1158 /// \subsection modules__infolabels_boolean_conditions_Weather Weather
1159 /// \table_start
1160 /// \table_h3{ Labels, Type, Description }
1161 /// \table_row3{ <b>`Weather.IsFetched`</b>,
1162 /// \anchor Weather_IsFetched
1163 /// _boolean_,
1164 /// @return **True** if the weather data has been downloaded.
1165 /// <p>
1166 /// }
1167 /// \table_row3{ <b>`Weather.Conditions`</b>,
1168 /// \anchor Weather_Conditions
1169 /// _string_,
1170 /// @return The current weather conditions as textual description.
1171 /// @note This is looked up in a background process.
1172 /// <p>
1173 /// }
1174 /// \table_row3{ <b>`Weather.ConditionsIcon`</b>,
1175 /// \anchor Weather_ConditionsIcon
1176 /// _string_,
1177 /// @return The current weather conditions as an icon.
1178 /// @note This is looked up in a background process.
1179 /// <p>
1180 /// }
1181 /// \table_row3{ <b>`Weather.Temperature`</b>,
1182 /// \anchor Weather_Temperature
1183 /// _string_,
1184 /// @return The current weather temperature.
1185 /// <p>
1186 /// }
1187 /// \table_row3{ <b>`Weather.Location`</b>,
1188 /// \anchor Weather_Location
1189 /// _string_,
1190 /// @return The city/town which the above two items are for.
1191 /// <p>
1192 /// }
1193 /// \table_row3{ <b>`Weather.Fanartcode`</b>,
1194 /// \anchor Weather_fanartcode
1195 /// _string_,
1196 /// @return The current weather fanartcode.
1197 /// <p>
1198 /// }
1199 /// \table_row3{ <b>`Weather.Plugin`</b>,
1200 /// \anchor Weather_plugin
1201 /// _string_,
1202 /// @return The current weather plugin.
1203 /// <p>
1204 /// }
1205 /// \table_end
1207 /// -----------------------------------------------------------------------------
1208 const infomap weather[] = {{ "isfetched", WEATHER_IS_FETCHED },
1209 { "conditions", WEATHER_CONDITIONS_TEXT }, // labels from here
1210 { "temperature", WEATHER_TEMPERATURE },
1211 { "location", WEATHER_LOCATION },
1212 { "fanartcode", WEATHER_FANART_CODE },
1213 { "plugin", WEATHER_PLUGIN },
1214 { "conditionsicon", WEATHER_CONDITIONS_ICON }};
1216 /// \page modules__infolabels_boolean_conditions
1217 /// \subsection modules__infolabels_boolean_conditions_System System
1218 /// @todo some values are hardcoded in the middle of the code - refactor to make it easier to track
1219 /// \table_start
1220 /// \table_h3{ Labels, Type, Description }
1221 /// \table_row3{ <b>`System.AlarmLessOrEqual(alarmname\,seconds)`</b>,
1222 /// \anchor System_AlarmLessOrEqual
1223 /// _boolean_,
1224 /// @return **True** if the alarm with `alarmname` has less or equal to `seconds` left.
1225 /// @param alarmname - The name of the alarm. It can be one of the following:
1226 /// - shutdowntimer
1227 /// @param seconds - Time in seconds to compare with the alarm trigger event
1228 /// @note **Example:** `System.Alarmlessorequal(shutdowntimer\,119)`\,
1229 /// will return true when the shutdowntimer has less then 2 minutes
1230 /// left.
1231 /// <p>
1232 /// }
1233 /// \table_row3{ <b>`System.HasNetwork`</b>,
1234 /// \anchor System_HasNetwork
1235 /// _boolean_,
1236 /// @return **True** if the Kodi host has a network available.
1237 /// <p>
1238 /// }
1239 /// \table_row3{ <b>`System.HasMediadvd`</b>,
1240 /// \anchor System_HasMediadvd
1241 /// _boolean_,
1242 /// @return **True** if there is a CD or DVD in the DVD-ROM drive.
1243 /// <p>
1244 /// }
1245 /// \table_row3{ <b>`System.HasMediaAudioCD`</b>,
1246 /// \anchor System_HasMediaAudioCD
1247 /// _boolean_,
1248 /// @return **True** if there is an audio CD in the optical drive. **False** if no drive
1249 /// available\, empty drive or other medium.
1250 /// <p><hr>
1251 /// @skinning_v18 **[New Boolean Condition]** \link System_HasMediaAudioCD
1252 /// `System.HasMediaAudioCD` \endlink <p>
1253 /// }
1254 /// \table_row3{ <b>`System.DVDReady`</b>,
1255 /// \anchor System_DVDReady
1256 /// _boolean_,
1257 /// @return **True** if the disc is ready to use.
1258 /// <p>
1259 /// }
1260 /// \table_row3{ <b>`System.TrayOpen`</b>,
1261 /// \anchor System_TrayOpen
1262 /// _boolean_,
1263 /// @return **True** if the disc tray is open.
1264 /// <p>
1265 /// }
1266 /// \table_row3{ <b>`System.HasLocks`</b>,
1267 /// \anchor System_HasLocks
1268 /// _boolean_,
1269 /// @return **True** if the system has an active lock mode.
1270 /// <p>
1271 /// }
1272 /// \table_row3{ <b>`System.IsMaster`</b>,
1273 /// \anchor System_IsMaster
1274 /// _boolean_,
1275 /// @return **True** if the system is in master mode.
1276 /// <p>
1277 /// }
1278 /// \table_row3{ <b>`System.ShowExitButton`</b>,
1279 /// \anchor System_ShowExitButton
1280 /// _boolean_,
1281 /// @return **True** if the exit button should be shown (configurable via advanced settings).
1282 /// <p>
1283 /// }
1284 /// \table_row3{ <b>`System.DPMSActive`</b>,
1285 /// \anchor System_DPMSActive
1286 /// _boolean_,
1287 /// @return **True** if DPMS (VESA Display Power Management Signaling) mode is active.
1288 /// <p>
1289 /// }
1290 /// \table_row3{ <b>`System.IsStandalone`</b>,
1291 /// \anchor System_IsStandalone
1292 /// _boolean_,
1293 /// @return **True** if Kodi is running in standalone mode.
1294 /// <p>
1295 /// }
1296 /// \table_row3{ <b>`System.IsFullscreen`</b>,
1297 /// \anchor System_IsFullscreen
1298 /// _boolean_,
1299 /// @return **True** if Kodi is running fullscreen.
1300 /// <p>
1301 /// }
1302 /// \table_row3{ <b>`System.LoggedOn`</b>,
1303 /// \anchor System_LoggedOn
1304 /// _boolean_,
1305 /// @return **True** if a user is currently logged on under a profile.
1306 /// <p>
1307 /// }
1308 /// \table_row3{ <b>`System.HasLoginScreen`</b>,
1309 /// \anchor System_HasLoginScreen
1310 /// _boolean_,
1311 /// @return **True** if the profile login screen is enabled.
1312 /// <p>
1313 /// }
1314 /// \table_row3{ <b>`System.HasPVR`</b>,
1315 /// \anchor System_HasPVR
1316 /// _boolean_,
1317 /// @return **True** if PVR is supported from Kodi.
1318 /// @note normally always true
1320 /// }
1321 /// \table_row3{ <b>`System.HasPVRAddon`</b>,
1322 /// \anchor System_HasPVRAddon
1323 /// _boolean_,
1324 /// @return **True** if at least one pvr client addon is installed and enabled.
1325 /// @param id - addon id of the PVR addon
1326 /// <p><hr>
1327 /// @skinning_v17 **[New Boolean Condition]** \link System_HasPVRAddon
1328 /// `System.HasPVRAddon`\endlink <p>
1329 /// }
1330 /// \table_row3{ <b>`System.HasCMS`</b>,
1331 /// \anchor System_HasCMS
1332 /// _boolean_,
1333 /// @return **True** if colour management is supported from Kodi.
1334 /// @note currently only supported for OpenGL
1335 /// <p><hr>
1336 /// @skinning_v17 **[New Boolean Condition]** \link System_HasCMS `System.HasCMS`\endlink
1337 /// <p>
1338 /// }
1339 /// \table_row3{ <b>`System.HasActiveModalDialog`</b>,
1340 /// \anchor System_HasActiveModalDialog
1341 /// _boolean_,
1342 /// @return **True** if a modal dialog is active.
1343 /// <p><hr>
1344 /// @skinning_v18 **[New Boolean Condition]** \link System_HasActiveModalDialog
1345 /// `System.HasActiveModalDialog`\endlink <p>
1346 /// }
1347 /// \table_row3{ <b>`System.HasVisibleModalDialog`</b>,
1348 /// \anchor System_HasVisibleModalDialog
1349 /// _boolean_,
1350 /// @return **True** if a modal dialog is visible.
1351 /// <p><hr>
1352 /// @skinning_v18 **[New Boolean Condition]** \link System_HasVisibleModalDialog
1353 /// `System.HasVisibleModalDialog`\endlink <p>
1354 /// }
1355 /// \table_row3{ <b>`System.Platform.Linux`</b>,
1356 /// \anchor System_PlatformLinux
1357 /// _boolean_,
1358 /// @return **True** if Kodi is running on a linux/unix based computer.
1359 /// <p>
1360 /// }
1361 /// \table_row3{ <b>`System.Platform.Windows`</b>,
1362 /// \anchor System_PlatformWindows
1363 /// _boolean_,
1364 /// @return **True** if Kodi is running on a windows based computer.
1365 /// <p>
1366 /// }
1367 /// \table_row3{ <b>`System.Platform.UWP`</b>,
1368 /// \anchor System_PlatformUWP
1369 /// _boolean_,
1370 /// @return **True** if Kodi is running on Universal Windows Platform (UWP).
1371 /// <p><hr>
1372 /// @skinning_v18 **[New Boolean Condition]** \link System_PlatformUWP
1373 /// `System.Platform.UWP`\endlink <p>
1374 /// }
1375 /// \table_row3{ <b>`System.Platform.OSX`</b>,
1376 /// \anchor System_PlatformOSX
1377 /// _boolean_,
1378 /// @return **True** if Kodi is running on an OSX based computer.
1379 /// <p>
1380 /// }
1381 /// \table_row3{ <b>`System.Platform.IOS`</b>,
1382 /// \anchor System_PlatformIOS
1383 /// _boolean_,
1384 /// @return **True** if Kodi is running on an IOS device.
1385 /// <p>
1386 /// }
1387 /// \table_row3{ <b>`System.Platform.TVOS`</b>,
1388 /// \anchor System_PlatformTVOS
1389 /// _boolean_,
1390 /// @return **True** if Kodi is running on a tvOS device.
1391 /// <p><hr>
1392 /// @skinning_v19 **[New Boolean Condition]** \link System_PlatformTVOS
1393 /// `System.Platform.TVOS`\endlink <p>
1394 /// }
1395 /// \table_row3{ <b>`System.Platform.Darwin`</b>,
1396 /// \anchor System_PlatformDarwin
1397 /// _boolean_,
1398 /// @return **True** if Kodi is running on an OSX or IOS system.
1399 /// <p>
1400 /// }
1401 /// \table_row3{ <b>`System.Platform.Android`</b>,
1402 /// \anchor System_PlatformAndroid
1403 /// _boolean_,
1404 /// @return **True** if Kodi is running on an android device.
1405 /// <p>
1406 /// }
1407 /// \table_row3{ <b>`System.CanPowerDown`</b>,
1408 /// \anchor System_CanPowerDown
1409 /// _boolean_,
1410 /// @return **True** if Kodi can powerdown the system.
1411 /// <p>
1412 /// }
1413 /// \table_row3{ <b>`System.CanSuspend`</b>,
1414 /// \anchor System_CanSuspend
1415 /// _boolean_,
1416 /// @return **True** if Kodi can suspend the system.
1417 /// <p>
1418 /// }
1419 /// \table_row3{ <b>`System.CanHibernate`</b>,
1420 /// \anchor System_CanHibernate
1421 /// _boolean_,
1422 /// @return **True** if Kodi can hibernate the system.
1423 /// <p>
1424 /// }
1425 /// \table_row3{ <b>`System.HasHiddenInput`</b>,
1426 /// \anchor System_HasHiddenInput
1427 /// _boolean_,
1428 /// @return **True** when to osd keyboard/numeric dialog requests a
1429 /// password/pincode.
1430 /// <p><hr>
1431 /// @skinning_v16 **[New Boolean Condition]** \link System_HasHiddenInput
1432 /// `System.HasHiddenInput`\endlink <p>
1433 /// }
1434 /// \table_row3{ <b>`System.CanReboot`</b>,
1435 /// \anchor System_CanReboot
1436 /// _boolean_,
1437 /// @return **True** if Kodi can reboot the system.
1438 /// <p>
1439 /// }
1440 /// \table_row3{ <b>`System.ScreenSaverActive`</b>,
1441 /// \anchor System_ScreenSaverActive
1442 /// _boolean_,
1443 /// @return **True** if ScreenSaver is active.
1444 /// <p>
1445 /// }
1446 /// \table_row3{ <b>`System.IdleShutdownInhibited`</b>,
1447 /// \anchor System_IdleShutdownInhibited
1448 /// _boolean_,
1449 /// @return **True** when shutdown on idle is disabled.
1450 /// <p>
1451 /// }
1452 /// \table_row3{ <b>`System.HasShutdown`</b>,
1453 /// \anchor System_HasShutdown
1454 /// _boolean_,
1455 /// @return **True** if Kodi can shutdown the system.
1456 /// <p>
1457 /// }
1458 /// \table_row3{ <b>`System.Time`</b>,
1459 /// \anchor System_Time
1460 /// _string_,
1461 /// @return The current time.
1462 /// <p>
1463 /// }
1464 /// \table_row3{ <b>`System.Time(format)`</b>,
1465 /// \anchor System_Time_format
1466 /// _string_,
1467 /// @return The current time in a specified format.
1468 /// @param format [opt] The format of the return time value.
1469 /// See \ref TIME_FORMAT for the list of possible values.
1470 /// <p>
1471 /// }
1472 /// \table_row3{ <b>`System.Time(startTime[\,endTime])`</b>,
1473 /// \anchor System_Time
1474 /// _boolean_,
1475 /// @return **True** if the current system time is >= `startTime` and < `endTime` (if defined).
1476 /// @param startTime - Start time
1477 /// @param endTime - [opt] End time
1478 /// <p>
1479 /// @note Time must be specified in the format HH:mm\, using
1480 /// a 24 hour clock.
1481 /// <p>
1482 /// }
1483 /// \table_row3{ <b>`System.Date`</b>,
1484 /// \anchor System_Date
1485 /// _string_,
1486 /// @return The current date.
1487 /// <p><hr>
1488 /// @skinning_v16 **[Infolabel Updated]** \link System_Date `System.Date`\endlink
1489 /// will now return the full day and month names. old: sat\, jul 18 2015
1490 /// new: saturday\, july 18 2015
1491 /// <p>
1492 /// }
1493 /// \table_row3{ <b>`System.Date(format)`</b>,
1494 /// \anchor System_Date_format
1495 /// _string_,
1496 /// @return The current date using a specified format.
1497 /// @param format - the format for the date. It can be one of the following
1498 /// values:
1499 /// - **d** - day of month (1-31)
1500 /// - **dd** - day of month (01-31)
1501 /// - **ddd** - short day of the week Mon-Sun
1502 /// - **DDD** - long day of the week Monday-Sunday
1503 /// - **m** - month (1-12)
1504 /// - **mm** - month (01-12)
1505 /// - **mmm** - short month name Jan-Dec
1506 /// - **MMM** - long month name January-December
1507 /// - **yy** - 2-digit year
1508 /// - **yyyy** - 4-digit year
1509 /// <p>
1510 /// }
1511 /// \table_row3{ <b>`System.Date(startDate[\,endDate])`</b>,
1512 /// \anchor System_Date
1513 /// _boolean_,
1514 /// @return **True** if the current system date is >= `startDate` and < `endDate` (if defined).
1515 /// @param startDate - The start date
1516 /// @param endDate - [opt] The end date
1517 /// @note Date must be specified in the format MM-DD or YY-MM-DD.
1518 /// <p>
1519 /// }
1520 /// \table_row3{ <b>`System.AlarmPos`</b>,
1521 /// \anchor System_AlarmPos
1522 /// _string_,
1523 /// @return The shutdown Timer position.
1524 /// <p>
1525 /// }
1526 /// \table_row3{ <b>`System.BatteryLevel`</b>,
1527 /// \anchor System_BatteryLevel
1528 /// _string_,
1529 /// @return The remaining battery level in range 0-100.
1530 /// <p>
1531 /// }
1532 /// \table_row3{ <b>`System.FreeSpace`</b>,
1533 /// \anchor System_FreeSpace
1534 /// _string_,
1535 /// @return The total Freespace on the drive.
1536 /// <p>
1537 /// }
1538 /// \table_row3{ <b>`System.UsedSpace`</b>,
1539 /// \anchor System_UsedSpace
1540 /// _string_,
1541 /// @return The total Usedspace on the drive.
1542 /// <p>
1543 /// }
1544 /// \table_row3{ <b>`System.TotalSpace`</b>,
1545 /// \anchor System_TotalSpace
1546 /// _string_,
1547 /// @return The total space on the drive.
1548 /// <p>
1549 /// }
1550 /// \table_row3{ <b>`System.UsedSpacePercent`</b>,
1551 /// \anchor System_UsedSpacePercent
1552 /// _string_,
1553 /// @return The total Usedspace Percent on the drive.
1554 /// <p>
1555 /// }
1556 /// \table_row3{ <b>`System.FreeSpacePercent`</b>,
1557 /// \anchor System_FreeSpacePercent
1558 /// _string_,
1559 /// @return The total Freespace Percent on the drive.
1560 /// <p>
1561 /// }
1562 /// \table_row3{ <b>`System.CPUTemperature`</b>,
1563 /// \anchor System_CPUTemperature
1564 /// _string_,
1565 /// @return The current CPU temperature.
1566 /// <p>
1567 /// }
1568 /// \table_row3{ <b>`System.CpuUsage`</b>,
1569 /// \anchor System_CpuUsage
1570 /// _string_,
1571 /// @return The the cpu usage for each individual cpu core.
1572 /// <p>
1573 /// }
1574 /// \table_row3{ <b>`System.GPUTemperature`</b>,
1575 /// \anchor System_GPUTemperature
1576 /// _string_,
1577 /// @return The current GPU temperature.
1578 /// <p>
1579 /// }
1580 /// \table_row3{ <b>`System.FanSpeed`</b>,
1581 /// \anchor System_FanSpeed
1582 /// _string_,
1583 /// @return The current fan speed.
1584 /// <p>
1585 /// }
1586 /// \table_row3{ <b>`System.BuildVersion`</b>,
1587 /// \anchor System_BuildVersion
1588 /// _string_,
1589 /// @return The version of build.
1590 /// <p>
1591 /// }
1592 /// \table_row3{ <b>`System.BuildVersionShort`</b>,
1593 /// \anchor System_BuildVersionShort
1594 /// _string_,
1595 /// @return The shorter string with version of build.
1596 /// <p>
1597 /// }
1598 /// \table_row3{ <b>`System.BuildDate`</b>,
1599 /// \anchor System_BuildDate
1600 /// _string_,
1601 /// @return The date of build.
1602 /// <p>
1603 /// }
1604 /// \table_row3{ <b>`System.BuildVersionCode`</b>,
1605 /// \anchor System_BuildVersionCode
1606 /// _string_,
1607 /// @return The version code of build.
1608 /// <p>
1609 /// }
1610 /// \table_row3{ <b>`System.BuildVersionGit`</b>,
1611 /// \anchor System_BuildVersionGit
1612 /// _string_,
1613 /// @return The git version of build.
1614 /// <p>
1615 /// }
1616 /// \table_row3{ <b>`System.FriendlyName`</b>,
1617 /// \anchor System_FriendlyName
1618 /// _string_,
1619 /// @return The Kodi instance name.
1620 /// @note It will auto append (%hostname%) in case
1621 /// the device name was not changed. eg. "Kodi (htpc)"
1622 /// <p>
1623 /// }
1624 /// \table_row3{ <b>`System.FPS`</b>,
1625 /// \anchor System_FPS
1626 /// _string_,
1627 /// @return The current rendering speed (frames per second).
1628 /// <p>
1629 /// }
1630 /// \table_row3{ <b>`System.FreeMemory`</b>,
1631 /// \anchor System_FreeMemory
1632 /// _string_,
1633 /// @return The amount of free memory in Mb.
1634 /// <p>
1635 /// }
1636 /// \table_row3{ <b>`System.ScreenMode`</b>,
1637 /// \anchor System_ScreenMode
1638 /// _string_,
1639 /// @return The screenmode (eg windowed / fullscreen).
1640 /// <p>
1641 /// }
1642 /// \table_row3{ <b>`System.ScreenWidth`</b>,
1643 /// \anchor System_ScreenWidth
1644 /// _string_,
1645 /// @return The width of screen in pixels.
1646 /// <p>
1647 /// }
1648 /// \table_row3{ <b>`System.ScreenHeight`</b>,
1649 /// \anchor System_ScreenHeight
1650 /// _string_,
1651 /// @return The height of screen in pixels.
1652 /// <p>
1653 /// }
1654 /// \table_row3{ <b>`System.StartupWindow`</b>,
1655 /// \anchor System_StartupWindow
1656 /// _string_,
1657 /// @return The Window Kodi will load on startup.
1658 /// <p><hr>
1659 /// @skinning_v13 **[New Infolabel]** \link System_StartupWindow `System.StartupWindow`\endlink
1660 /// <p>
1661 /// }
1662 /// \table_row3{ <b>`System.CurrentWindow`</b>,
1663 /// \anchor System_CurrentWindow
1664 /// _string_,
1665 /// @return The current Window in use.
1666 /// <p>
1667 /// }
1668 /// \table_row3{ <b>`System.CurrentControl`</b>,
1669 /// \anchor System_CurrentControl
1670 /// _string_,
1671 /// @return The current focused control
1672 /// <p>
1673 /// }
1674 /// \table_row3{ <b>`System.CurrentControlId`</b>,
1675 /// \anchor System_CurrentControlId
1676 /// _string_,
1677 /// @return The ID of the currently focused control.
1678 /// <p>
1679 /// }
1680 /// \table_row3{ <b>`System.DVDLabel`</b>,
1681 /// \anchor System_DVDLabel
1682 /// _string_,
1683 /// @return the label of the disk in the DVD-ROM drive.
1684 /// <p>
1685 /// }
1686 /// \table_row3{ <b>`System.KernelVersion`</b>,
1687 /// \anchor System_KernelVersion
1688 /// _string_,
1689 /// @return The System kernel version.
1690 /// <p>
1691 /// }
1692 /// \table_row3{ <b>`System.OSVersionInfo`</b>,
1693 /// \anchor System_OSVersionInfo
1694 /// _string_,
1695 /// @return The system name + kernel version.
1696 /// <p>
1697 /// }
1698 /// \table_row3{ <b>`System.Uptime`</b>,
1699 /// \anchor System_Uptime
1700 /// _string_,
1701 /// @return The system current uptime.
1702 /// <p>
1703 /// }
1704 /// \table_row3{ <b>`System.TotalUptime`</b>,
1705 /// \anchor System_TotalUptime
1706 /// _string_,
1707 /// @return The system total uptime.
1708 /// <p>
1709 /// }
1710 /// \table_row3{ <b>`System.CpuFrequency`</b>,
1711 /// \anchor System_CpuFrequency
1712 /// _string_,
1713 /// @return The system cpu frequency.
1714 /// <p>
1715 /// }
1716 /// \table_row3{ <b>`System.ScreenResolution`</b>,
1717 /// \anchor System_ScreenResolution
1718 /// _string_,
1719 /// @return The screen resolution.
1720 /// <p>
1721 /// }
1722 /// \table_row3{ <b>`System.VideoEncoderInfo`</b>,
1723 /// \anchor System_VideoEncoderInfo
1724 /// _string_,
1725 /// @return The video encoder info.
1726 /// <p>
1727 /// }
1728 /// \table_row3{ <b>`System.InternetState`</b>,
1729 /// \anchor System_InternetState
1730 /// _string_,
1731 /// @return The internet state: connected or not connected.
1732 /// @warning Do not use to check status in a pythonscript since it is threaded.
1733 /// <p>
1734 /// }
1735 /// \table_row3{ <b>`System.Language`</b>,
1736 /// \anchor System_Language
1737 /// _string_,
1738 /// @return the current language.
1739 /// <p>
1740 /// }
1741 /// \table_row3{ <b>`System.ProfileName`</b>,
1742 /// \anchor System_ProfileName
1743 /// _string_,
1744 /// @return The user name of the currently logged in Kodi user
1745 /// <p>
1746 /// }
1747 /// \table_row3{ <b>`System.ProfileThumb`</b>,
1748 /// \anchor System_ProfileThumb
1749 /// _string_,
1750 /// @return The thumbnail image of the currently logged in Kodi user
1751 /// <p>
1752 /// }
1753 /// \table_row3{ <b>`System.ProfileCount`</b>,
1754 /// \anchor System_ProfileCount
1755 /// _string_,
1756 /// @return The number of defined profiles.
1757 /// <p>
1758 /// }
1759 /// \table_row3{ <b>`System.ProfileAutoLogin`</b>,
1760 /// \anchor System_ProfileAutoLogin
1761 /// _string_,
1762 /// @return The profile Kodi will auto login to.
1763 /// <p><hr>
1764 /// @skinning_v13 **[New Infolabel]** \link System_ProfileAutoLogin
1765 /// `System.ProfileAutoLogin`\endlink <p>
1766 /// }
1767 /// \table_row3{ <b>`System.StereoscopicMode`</b>,
1768 /// \anchor System_StereoscopicMode
1769 /// _string_,
1770 /// @return The preferred stereoscopic mode.
1771 /// @note Configured in settings > video > playback).
1772 /// <p><hr>
1773 /// @skinning_v13 **[New Infolabel]** \link System_StereoscopicMode
1774 /// `System.StereoscopicMode`\endlink <p>
1775 /// }
1776 /// \table_row3{ <b>`System.TemperatureUnits`</b>,
1777 /// \anchor System_TemperatureUnits
1778 /// _string_,
1779 /// @return the Celsius or the Fahrenheit symbol.
1780 /// <p>
1781 /// }
1782 /// \table_row3{ <b>`System.Progressbar`</b>,
1783 /// \anchor System_Progressbar
1784 /// _string_,
1785 /// @return The percentage of the currently active progress.
1786 /// <p>
1787 /// }
1788 /// \table_row3{ <b>`System.GetBool(boolean)`</b>,
1789 /// \anchor System_GetBool
1790 /// _string_,
1791 /// @return The value of any standard system boolean setting.
1792 /// @note Will not work with settings in advancedsettings.xml
1793 /// <p>
1794 /// }
1795 /// \table_row3{ <b>`System.Memory(type)`</b>,
1796 /// \anchor System_Memory
1797 /// _string_,
1798 /// @return The memory value depending on the requested type.
1799 /// @param type - Can be one of the following:
1800 /// - <b>free</b>
1801 /// - <b>free.percent</b>
1802 /// - <b>used</b>
1803 /// - <b>used.percent</b>
1804 /// - <b>total</b>
1805 /// <p>
1806 /// }
1807 /// \table_row3{ <b>`System.AddonTitle(id)`</b>,
1808 /// \anchor System_AddonTitle
1809 /// _string_,
1810 /// @return The title of the addon with the given id
1811 /// @param id - the addon id
1812 /// <p>
1813 /// }
1814 /// \table_row3{ <b>`System.AddonVersion(id)`</b>,
1815 /// \anchor System_AddonVersion
1816 /// _string_,
1817 /// @return The version of the addon with the given id.
1818 /// @param id - the addon id
1819 /// <p><hr>
1820 /// @skinning_v13 **[New Infolabel]** \link System_AddonVersion
1821 /// `System.AddonVersion(id)`\endlink <p>
1822 /// }
1823 /// \table_row3{ <b>`System.AddonIcon(id)`</b>,
1824 /// \anchor System_AddonVersion
1825 /// _string_,
1826 /// @return The icon of the addon with the given id.
1827 /// @param id - the addon id
1828 /// <p>
1829 /// }
1830 /// \table_row3{ <b>`System.AddonUpdateCount`</b>,
1831 /// \anchor System_AddonUpdateCount
1832 /// _string_,
1833 /// @return The number of available addon updates.
1834 /// <p><hr>
1835 /// @skinning_v19 **[New Infolabel]** \link System_AddonUpdateCount `
1836 /// System.AddonUpdateCount`\endlink <p>
1837 /// }
1838 /// \table_row3{ <b>`System.IdleTime(time)`</b>,
1839 /// \anchor System_IdleTime
1840 /// _boolean_,
1841 /// @return **True** if Kodi has had no input for `time` amount of seconds.
1842 /// @param time - elapsed seconds to check for idle activity.
1843 /// <p>
1844 /// }
1845 /// \table_row3{ <b>`System.PrivacyPolicy`</b>,
1846 /// \anchor System_PrivacyPolicy
1847 /// _string_,
1848 /// @return The official Kodi privacy policy.
1849 /// <p><hr>
1850 /// @skinning_v17 **[New Infolabel]** \link System_PrivacyPolicy `System.PrivacyPolicy`\endlink
1851 /// <p>
1852 /// }
1853 /// \table_row3{ <b>`System.SupportsCPUUsage`</b>,
1854 /// \anchor System_SupportsCPUUsage
1855 /// _boolean_,
1856 /// @return **True** if the system can provide CPU usage information.
1857 /// <p><hr>
1858 /// @skinning_v19 **[New Boolean Condition]** \link System_SupportsCPUUsage `
1859 /// System.SupportsCPUUsage`\endlink <p>
1860 /// }
1861 /// \table_row3{ <b>`System.SupportedHDRTypes`</b>,
1862 /// \anchor System_SupportedHDRTypes
1863 /// _string_,
1864 /// @return The display's supported HDR types.
1865 /// <p><hr>
1866 /// @skinning_v20 **[New Infolabel]** \link System_SupportedHDRTypes `System.SupportedHDRTypes`\endlink
1867 /// <p>
1868 /// }
1869 /// \table_row3{ <b>`System.IsScreensaverInhibited`</b>,
1870 /// \anchor System_IsScreensaverInhibited
1871 /// _boolean_,
1872 /// @return **True** when screensaver on idle is disabled.
1873 /// <p>
1874 /// }
1875 const infomap system_labels[] = {
1876 {"hasnetwork", SYSTEM_ETHERNET_LINK_ACTIVE},
1877 {"hasmediadvd", SYSTEM_MEDIA_DVD},
1878 {"hasmediaaudiocd", SYSTEM_MEDIA_AUDIO_CD},
1879 {"dvdready", SYSTEM_DVDREADY},
1880 {"trayopen", SYSTEM_TRAYOPEN},
1881 {"haslocks", SYSTEM_HASLOCKS},
1882 {"hashiddeninput", SYSTEM_HAS_INPUT_HIDDEN},
1883 {"hasloginscreen", SYSTEM_HAS_LOGINSCREEN},
1884 {"hasactivemodaldialog", SYSTEM_HAS_ACTIVE_MODAL_DIALOG},
1885 {"hasvisiblemodaldialog", SYSTEM_HAS_VISIBLE_MODAL_DIALOG},
1886 {"ismaster", SYSTEM_ISMASTER},
1887 {"isfullscreen", SYSTEM_ISFULLSCREEN},
1888 {"isstandalone", SYSTEM_ISSTANDALONE},
1889 {"loggedon", SYSTEM_LOGGEDON},
1890 {"showexitbutton", SYSTEM_SHOW_EXIT_BUTTON},
1891 {"canpowerdown", SYSTEM_CAN_POWERDOWN},
1892 {"cansuspend", SYSTEM_CAN_SUSPEND},
1893 {"canhibernate", SYSTEM_CAN_HIBERNATE},
1894 {"canreboot", SYSTEM_CAN_REBOOT},
1895 {"screensaveractive", SYSTEM_SCREENSAVER_ACTIVE},
1896 {"dpmsactive", SYSTEM_DPMS_ACTIVE},
1897 {"cputemperature", SYSTEM_CPU_TEMPERATURE}, // labels from here
1898 {"cpuusage", SYSTEM_CPU_USAGE},
1899 {"gputemperature", SYSTEM_GPU_TEMPERATURE},
1900 {"fanspeed", SYSTEM_FAN_SPEED},
1901 {"freespace", SYSTEM_FREE_SPACE},
1902 {"usedspace", SYSTEM_USED_SPACE},
1903 {"totalspace", SYSTEM_TOTAL_SPACE},
1904 {"usedspacepercent", SYSTEM_USED_SPACE_PERCENT},
1905 {"freespacepercent", SYSTEM_FREE_SPACE_PERCENT},
1906 {"buildversion", SYSTEM_BUILD_VERSION},
1907 {"buildversionshort", SYSTEM_BUILD_VERSION_SHORT},
1908 {"buildversioncode", SYSTEM_BUILD_VERSION_CODE},
1909 {"buildversiongit", SYSTEM_BUILD_VERSION_GIT},
1910 {"builddate", SYSTEM_BUILD_DATE},
1911 {"fps", SYSTEM_FPS},
1912 {"freememory", SYSTEM_FREE_MEMORY},
1913 {"language", SYSTEM_LANGUAGE},
1914 {"temperatureunits", SYSTEM_TEMPERATURE_UNITS},
1915 {"screenmode", SYSTEM_SCREEN_MODE},
1916 {"screenwidth", SYSTEM_SCREEN_WIDTH},
1917 {"screenheight", SYSTEM_SCREEN_HEIGHT},
1918 {"currentwindow", SYSTEM_CURRENT_WINDOW},
1919 {"currentcontrol", SYSTEM_CURRENT_CONTROL},
1920 {"currentcontrolid", SYSTEM_CURRENT_CONTROL_ID},
1921 {"dvdlabel", SYSTEM_DVD_LABEL},
1922 {"internetstate", SYSTEM_INTERNET_STATE},
1923 {"osversioninfo", SYSTEM_OS_VERSION_INFO},
1924 {"kernelversion", SYSTEM_OS_VERSION_INFO}, // old, not correct name
1925 {"uptime", SYSTEM_UPTIME},
1926 {"totaluptime", SYSTEM_TOTALUPTIME},
1927 {"cpufrequency", SYSTEM_CPUFREQUENCY},
1928 {"screenresolution", SYSTEM_SCREEN_RESOLUTION},
1929 {"videoencoderinfo", SYSTEM_VIDEO_ENCODER_INFO},
1930 {"profilename", SYSTEM_PROFILENAME},
1931 {"profilethumb", SYSTEM_PROFILETHUMB},
1932 {"profilecount", SYSTEM_PROFILECOUNT},
1933 {"profileautologin", SYSTEM_PROFILEAUTOLOGIN},
1934 {"progressbar", SYSTEM_PROGRESS_BAR},
1935 {"batterylevel", SYSTEM_BATTERY_LEVEL},
1936 {"friendlyname", SYSTEM_FRIENDLY_NAME},
1937 {"alarmpos", SYSTEM_ALARM_POS},
1938 {"isinhibit",
1939 SYSTEM_IDLE_SHUTDOWN_INHIBITED}, // Deprecated, replaced by "idleshutdowninhibited"
1940 {"idleshutdowninhibited", SYSTEM_IDLE_SHUTDOWN_INHIBITED},
1941 {"hasshutdown", SYSTEM_HAS_SHUTDOWN},
1942 {"haspvr", SYSTEM_HAS_PVR},
1943 {"startupwindow", SYSTEM_STARTUP_WINDOW},
1944 {"stereoscopicmode", SYSTEM_STEREOSCOPIC_MODE},
1945 {"hascms", SYSTEM_HAS_CMS},
1946 {"privacypolicy", SYSTEM_PRIVACY_POLICY},
1947 {"haspvraddon", SYSTEM_HAS_PVR_ADDON},
1948 {"addonupdatecount", SYSTEM_ADDON_UPDATE_COUNT},
1949 {"supportscpuusage", SYSTEM_SUPPORTS_CPU_USAGE},
1950 {"supportedhdrtypes", SYSTEM_SUPPORTED_HDR_TYPES},
1951 {"isscreensaverinhibited", SYSTEM_IS_SCREENSAVER_INHIBITED}};
1953 /// \page modules__infolabels_boolean_conditions
1954 /// \table_row3{ <b>`System.HasAddon(id)`</b>,
1955 /// \anchor System_HasAddon
1956 /// _boolean_,
1957 /// @return **True** if the specified addon is installed on the system.
1958 /// @param id - the addon id
1959 /// @skinning_v19 **[Boolean Condition Updated]** \link System_HasAddon `System.HasAddon(id)`\endlink
1960 /// <p>
1961 /// }
1962 /// \table_row3{ <b>`System.AddonIsEnabled(id)`</b>,
1963 /// \anchor System_AddonIsEnabled
1964 /// _boolean_,
1965 /// @return **True** if the specified addon is enabled on the system.
1966 /// @param id - The addon Id
1967 /// <p><hr>
1968 /// @skinning_v19 **[New Boolean Condition]** \link System_AddonIsEnabled `System.AddonIsEnabled(id)`\endlink
1969 /// <p>
1970 /// }
1971 /// \table_row3{ <b>`System.HasCoreId(id)`</b>,
1972 /// \anchor System_HasCoreId
1973 /// _boolean_,
1974 /// @return **True** if the CPU core with the given 'id' exists.
1975 /// @param id - the id of the CPU core
1976 /// <p>
1977 /// }
1978 /// \table_row3{ <b>`System.HasAlarm(alarm)`</b>,
1979 /// \anchor System_HasAlarm
1980 /// _boolean_,
1981 /// @return **True** if the system has the `alarm` alarm set.
1982 /// @param alarm - the name of the alarm
1983 /// <p>
1984 /// }
1985 /// \table_row3{ <b>`System.CoreUsage(id)`</b>,
1986 /// \anchor System_CoreUsage
1987 /// _string_,
1988 /// @return the usage of the CPU core with the given 'id'
1989 /// @param id - the id of the CPU core
1990 /// <p>
1991 /// }
1992 /// \table_row3{ <b>`System.Setting(hidewatched)`</b>,
1993 /// \anchor System_Setting
1994 /// _boolean_,
1995 /// @return **True** if 'hide watched items' is selected.
1996 /// <p>
1997 /// }
1998 /// \table_row3{ <b>`System.Setting(hideunwatchedepisodethumbs)`</b>,
1999 /// \anchor System_Setting_HideUnwatchedEpisodeThumbs
2000 /// _boolean_,
2001 /// @return **True** if 'hide unwatched episode setting is enabled'\, **False** otherwise.
2002 /// <p><hr>
2003 /// @skinning_v20 **[New Boolean Condition]** \link System_Setting_HideUnwatchedEpisodeThumbs `System.Setting(hideunwatchedepisodethumbs)`\endlink
2004 /// <p>
2005 /// }
2006 /// \table_end
2008 /// -----------------------------------------------------------------------------
2009 const infomap system_param[] = {{ "hasalarm", SYSTEM_HAS_ALARM },
2010 { "hascoreid", SYSTEM_HAS_CORE_ID },
2011 { "setting", SYSTEM_SETTING },
2012 { "hasaddon", SYSTEM_HAS_ADDON },
2013 { "addonisenabled", SYSTEM_ADDON_IS_ENABLED },
2014 { "coreusage", SYSTEM_GET_CORE_USAGE }};
2016 /// \page modules__infolabels_boolean_conditions
2017 /// \subsection modules__infolabels_boolean_conditions_Network Network
2018 /// \table_start
2019 /// \table_h3{ Labels, Type, Description }
2020 /// \table_row3{ <b>`Network.IsDHCP`</b>,
2021 /// \anchor Network_IsDHCP
2022 /// _boolean_,
2023 /// @return **True** if the network type is DHCP.
2024 /// @note Network type can be either DHCP or FIXED
2025 /// <p>
2026 /// }
2027 /// \table_row3{ <b>`Network.IPAddress`</b>,
2028 /// \anchor Network_IPAddress
2029 /// _string_,
2030 /// @return The system's IP Address. e.g. 192.168.1.15
2031 /// <p>
2032 /// }
2033 /// \table_row3{ <b>`Network.LinkState`</b>,
2034 /// \anchor Network_LinkState
2035 /// _string_,
2036 /// @return The network linkstate e.g. 10mbit/100mbit etc.
2037 /// <p>
2038 /// }
2039 /// \table_row3{ <b>`Network.MacAddress`</b>,
2040 /// \anchor Network_MacAddress
2041 /// _string_,
2042 /// @return The system's MAC address.
2043 /// <p>
2044 /// }
2045 /// \table_row3{ <b>`Network.SubnetMask`</b>,
2046 /// \anchor Network_SubnetMask
2047 /// _string_,
2048 /// @return The network subnet mask.
2049 /// <p>
2050 /// }
2051 /// \table_row3{ <b>`Network.GatewayAddress`</b>,
2052 /// \anchor Network_GatewayAddress
2053 /// _string_,
2054 /// @return The network gateway address.
2055 /// <p>
2056 /// }
2057 /// \table_row3{ <b>`Network.DNS1Address`</b>,
2058 /// \anchor Network_DNS1Address
2059 /// _string_,
2060 /// @return The network DNS 1 address.
2061 /// <p>
2062 /// }
2063 /// \table_row3{ <b>`Network.DNS2Address`</b>,
2064 /// \anchor Network_DNS2Address
2065 /// _string_,
2066 /// @return The network DNS 2 address.
2067 /// <p>
2068 /// }
2069 /// \table_row3{ <b>`Network.DHCPAddress`</b>,
2070 /// \anchor Network_DHCPAddress
2071 /// _string_,
2072 /// @return The DHCP IP address.
2073 /// <p>
2074 /// }
2075 /// \table_end
2077 /// -----------------------------------------------------------------------------
2078 const infomap network_labels[] = {{ "isdhcp", NETWORK_IS_DHCP },
2079 { "ipaddress", NETWORK_IP_ADDRESS }, //labels from here
2080 { "linkstate", NETWORK_LINK_STATE },
2081 { "macaddress", NETWORK_MAC_ADDRESS },
2082 { "subnetmask", NETWORK_SUBNET_MASK },
2083 { "gatewayaddress", NETWORK_GATEWAY_ADDRESS },
2084 { "dns1address", NETWORK_DNS1_ADDRESS },
2085 { "dns2address", NETWORK_DNS2_ADDRESS },
2086 { "dhcpaddress", NETWORK_DHCP_ADDRESS }};
2088 /// \page modules__infolabels_boolean_conditions
2089 /// \subsection modules__infolabels_boolean_conditions_musicpartymode Music party mode
2090 /// \table_start
2091 /// \table_h3{ Labels, Type, Description }
2092 /// \table_row3{ <b>`MusicPartyMode.Enabled`</b>,
2093 /// \anchor MusicPartyMode_Enabled
2094 /// _boolean_,
2095 /// @return **True** if Party Mode is enabled.
2096 /// <p>
2097 /// }
2098 /// \table_row3{ <b>`MusicPartyMode.SongsPlayed`</b>,
2099 /// \anchor MusicPartyMode_SongsPlayed
2100 /// _string_,
2101 /// @return The number of songs played during Party Mode.
2102 /// <p>
2103 /// }
2104 /// \table_row3{ <b>`MusicPartyMode.MatchingSongs`</b>,
2105 /// \anchor MusicPartyMode_MatchingSongs
2106 /// _string_,
2107 /// @return The number of songs available to Party Mode.
2108 /// <p>
2109 /// }
2110 /// \table_row3{ <b>`MusicPartyMode.MatchingSongsPicked`</b>,
2111 /// \anchor MusicPartyMode_MatchingSongsPicked
2112 /// _string_,
2113 /// @return The number of songs picked already for Party Mode.
2114 /// <p>
2115 /// }
2116 /// \table_row3{ <b>`MusicPartyMode.MatchingSongsLeft`</b>,
2117 /// \anchor MusicPartyMode_MatchingSongsLeft
2118 /// _string_,
2119 /// @return The number of songs left to be picked from for Party Mode.
2120 /// <p>
2121 /// }
2122 /// \table_row3{ <b>`MusicPartyMode.RelaxedSongsPicked`</b>,
2123 /// \anchor MusicPartyMode_RelaxedSongsPicked
2124 /// _string_,
2125 /// @todo Not currently used
2126 /// <p>
2127 /// }
2128 /// \table_row3{ <b>`MusicPartyMode.RandomSongsPicked`</b>,
2129 /// \anchor MusicPartyMode_RandomSongsPicked
2130 /// _string_,
2131 /// @return The number of unique random songs picked during Party Mode.
2132 /// <p>
2133 /// }
2134 /// \table_end
2136 /// -----------------------------------------------------------------------------
2137 const infomap musicpartymode[] = {{ "enabled", MUSICPM_ENABLED },
2138 { "songsplayed", MUSICPM_SONGSPLAYED },
2139 { "matchingsongs", MUSICPM_MATCHINGSONGS },
2140 { "matchingsongspicked", MUSICPM_MATCHINGSONGSPICKED },
2141 { "matchingsongsleft", MUSICPM_MATCHINGSONGSLEFT },
2142 { "relaxedsongspicked", MUSICPM_RELAXEDSONGSPICKED },
2143 { "randomsongspicked", MUSICPM_RANDOMSONGSPICKED }};
2145 /// \page modules__infolabels_boolean_conditions
2146 /// \subsection modules__infolabels_boolean_conditions_MusicPlayer Music player
2147 /// \table_start
2148 /// \table_h3{ Labels, Type, Description }
2149 /// \table_row3{ <b>`MusicPlayer.Offset(number).Exists`</b>,
2150 /// \anchor MusicPlayer_Offset
2151 /// _boolean_,
2152 /// @return **True** if the music players playlist has a song queued in
2153 /// position (number).
2154 /// @param number - song position
2155 /// <p>
2156 /// }
2157 /// \table_row3{ <b>`MusicPlayer.Title`</b>,
2158 /// \anchor MusicPlayer_Title
2159 /// _string_,
2160 /// @return The title of the currently playing song.
2161 /// <p>
2162 /// }
2163 /// \table_row3{ <b>`MusicPlayer.offset(number).Title`</b>,
2164 /// \anchor MusicPlayer_Offset_Title
2165 /// _string_,
2166 /// @return The title of the song which has an offset `number` with respect to the
2167 /// current playing song.
2168 /// @param number - the offset number with respect to the current playing song
2169 /// <p>
2170 /// }
2171 /// \table_row3{ <b>`MusicPlayer.Position(number).Title`</b>,
2172 /// \anchor MusicPlayer_Position_Title
2173 /// _string_,
2174 /// @return The title of the song which as an offset `number` with respect to the
2175 /// start of the playlist.
2176 /// @param number - the offset number with respect to the start of the playlist
2177 /// <p>
2178 /// }
2179 /// \table_row3{ <b>`MusicPlayer.Album`</b>,
2180 /// \anchor MusicPlayer_Album
2181 /// _string_,
2182 /// @return The album from which the current song is from.
2183 /// <p>
2184 /// }
2185 /// \table_row3{ <b>`MusicPlayer.offset(number).Album`</b>,
2186 /// \anchor MusicPlayer_OffSet_Album
2187 /// _string_,
2188 /// @return The album from which the song with offset `number` with respect to
2189 /// the current song is from.
2190 /// @param number - the offset number with respect to the current playing song
2191 /// <p>
2192 /// }
2193 /// \table_row3{ <b>`MusicPlayer.Position(number).Album`</b>,
2194 /// \anchor MusicPlayer_Position_Album
2195 /// _string_,
2196 /// @return The album from which the song with offset `number` with respect to
2197 /// the start of the playlist is from.
2198 /// @param number - the offset number with respect to the start of the playlist
2199 /// <p>
2200 /// }
2201 /// \table_row3{ <b>`MusicPlayer.Property(Album_Mood)`</b>,
2202 /// \anchor MusicPlayer_Property_Album_Mood
2203 /// _string_,
2204 /// @return The moods of the currently playing Album
2205 /// <p>
2206 /// }
2207 /// \table_row3{ <b>`MusicPlayer.Property(Role.Composer)`</b>,
2208 /// \anchor MusicPlayer_Property_Role_Composer
2209 /// _string_,
2210 /// @return The name of the person who composed the selected song.
2211 /// <p><hr>
2212 /// @skinning_v17 **[New Infolabel]** \link MusicPlayer_Property_Role_Composer `MusicPlayer.Property(Role.Composer)`\endlink
2213 /// <p>
2214 /// }
2215 /// \table_row3{ <b>`MusicPlayer.Property(Role.Conductor)`</b>,
2216 /// \anchor MusicPlayer_Property_Role_Conductor
2217 /// _string_,
2218 /// @return The name of the person who conducted the selected song.
2219 /// <p><hr>
2220 /// @skinning_v17 **[New Infolabel]** \link MusicPlayer_Property_Role_Conductor `MusicPlayer.Property(Role.Conductor)`\endlink
2221 /// <p>
2222 /// }
2223 /// \table_row3{ <b>`MusicPlayer.Property(Role.Orchestra)`</b>,
2224 /// \anchor MusicPlayer_Property_Role_Orchestra
2225 /// _string_,
2226 /// @return The name of the orchestra performing the selected song.
2227 /// <p><hr>
2228 /// @skinning_v17 **[New Infolabel]** \link MusicPlayer_Property_Role_Orchestra `MusicPlayer.Property(Role.Orchestra)`\endlink
2229 /// <p>
2230 /// }
2231 /// \table_row3{ <b>`MusicPlayer.Property(Role.Lyricist)`</b>,
2232 /// \anchor MusicPlayer_Property_Role_Lyricist
2233 /// _string_,
2234 /// @return The name of the person who wrote the lyrics of the selected song.
2235 /// <p><hr>
2236 /// @skinning_v17 **[New Infolabel]** \link MusicPlayer_Property_Role_Lyricist `MusicPlayer.Property(Role.Lyricist)`\endlink
2237 /// <p>
2238 /// }
2239 /// \table_row3{ <b>`MusicPlayer.Property(Role.Remixer)`</b>,
2240 /// \anchor MusicPlayer_Property_Role_Remixer
2241 /// _string_,
2242 /// @return The name of the person who remixed the selected song.
2243 /// <p><hr>
2244 /// @skinning_v17 **[New Infolabel]** \link MusicPlayer_Property_Role_Remixer `MusicPlayer.Property(Role.Remixer)`\endlink
2245 /// <p>
2246 /// }
2247 /// \table_row3{ <b>`MusicPlayer.Property(Role.Arranger)`</b>,
2248 /// \anchor MusicPlayer_Property_Role_Arranger
2249 /// _string_,
2250 /// @return The name of the person who arranged the selected song.
2251 /// <p><hr>
2252 /// @skinning_v17 **[New Infolabel]** \link MusicPlayer_Property_Role_Arranger `MusicPlayer.Property(Role.Arranger)`\endlink
2253 /// <p>
2254 /// }
2255 /// \table_row3{ <b>`MusicPlayer.Property(Role.Engineer)`</b>,
2256 /// \anchor MusicPlayer_Property_Role_Engineer
2257 /// _string_,
2258 /// @return The name of the person who was the engineer of the selected song.
2259 /// <p><hr>
2260 /// @skinning_v17 **[New Infolabel]** \link MusicPlayer_Property_Role_Engineer `MusicPlayer.Property(Role.Engineer)`\endlink
2261 /// <p>
2262 /// }
2263 /// \table_row3{ <b>`MusicPlayer.Property(Role.Producer)`</b>,
2264 /// \anchor MusicPlayer_Property_Role_Producer
2265 /// _string_,
2266 /// @return The name of the person who produced the selected song.
2267 /// <p><hr>
2268 /// @skinning_v17 **[New Infolabel]** \link MusicPlayer_Property_Role_Producer `MusicPlayer.Property(Role.Producer)`\endlink
2269 /// <p>
2270 /// }
2271 /// \table_row3{ <b>`MusicPlayer.Property(Role.DJMixer)`</b>,
2272 /// \anchor MusicPlayer_Property_Role_DJMixer
2273 /// _string_,
2274 /// @return The name of the dj who remixed the selected song.
2275 /// <p><hr>
2276 /// @skinning_v17 **[New Infolabel]** \link MusicPlayer_Property_Role_DJMixer `MusicPlayer.Property(Role.DJMixer)`\endlink
2277 /// <p>
2278 /// }
2279 /// \table_row3{ <b>`MusicPlayer.Property(Role.Mixer)`</b>,
2280 /// \anchor MusicPlayer_Property_Role_Mixer
2281 /// _string_,
2282 /// @return The name of the dj who remixed the selected song.
2283 /// @todo So maybe rather than a row each have one entry for Role.XXXXX with composer\, arranger etc. as listed values
2284 /// @note MusicPlayer.Property(Role.any_custom_role) also works\,
2285 /// where any_custom_role could be an instrument violin or some other production activity e.g. sound engineer.
2286 /// The roles listed (composer\, arranger etc.) are standard ones but there are many possible.
2287 /// Music file tagging allows for the musicians and all other people involved in the recording to be added\, Kodi
2288 /// will gathers and stores that data\, and it is available to GUI.
2289 /// <p><hr>
2290 /// @skinning_v17 **[New Infolabel]** \link MusicPlayer_Property_Role_Mixer `MusicPlayer.Property(Role.Mixer)`\endlink
2291 /// <p>
2292 /// }
2293 /// \table_row3{ <b>`MusicPlayer.Property(Album_Mood)`</b>,
2294 /// \anchor MusicPlayer_Property_Album_Mood
2295 /// _string_,
2296 /// @return the moods of the currently playing Album
2297 /// <p>
2298 /// }
2299 /// \table_row3{ <b>`MusicPlayer.Property(Album_Style)`</b>,
2300 /// \anchor MusicPlayer_Property_Album_Style
2301 /// _string_,
2302 /// @return the styles of the currently playing Album.
2303 /// <p>
2304 /// }
2305 /// \table_row3{ <b>`MusicPlayer.Property(Album_Theme)`</b>,
2306 /// \anchor MusicPlayer_Property_Album_Theme
2307 /// _string_,
2308 /// @return The themes of the currently playing Album
2309 /// <p>
2310 /// }
2311 /// \table_row3{ <b>`MusicPlayer.Property(Album_Type)`</b>,
2312 /// \anchor MusicPlayer_Property_Album_Type
2313 /// _string_,
2314 /// @return The album type (e.g. compilation\, enhanced\, explicit lyrics) of the
2315 /// currently playing album.
2316 /// <p>
2317 /// }
2318 /// \table_row3{ <b>`MusicPlayer.Property(Album_Label)`</b>,
2319 /// \anchor MusicPlayer_Property_Album_Label
2320 /// _string_,
2321 /// @return The record label of the currently playing album.
2322 /// <p>
2323 /// }
2324 /// \table_row3{ <b>`MusicPlayer.Property(Album_Description)`</b>,
2325 /// \anchor MusicPlayer_Property_Album_Description
2326 /// _string_,
2327 /// @return A review of the currently playing album
2328 /// <p>
2329 /// }
2330 /// \table_row3{ <b>`MusicPlayer.Artist`</b>,
2331 /// \anchor MusicPlayer_Artist
2332 /// _string_,
2333 /// @return Artist(s) of current song.
2334 /// <p>
2335 /// }
2336 /// \table_row3{ <b>`MusicPlayer.offset(number).Artist`</b>,
2337 /// \anchor MusicPlayer_Offset_Artist
2338 /// _string_,
2339 /// @return Artist(s) of the song which has an offset `number` with respect
2340 /// to the current playing song.
2341 /// @param number - the offset of the song with respect to the current
2342 /// playing song
2343 /// <p>
2344 /// }
2345 /// \table_row3{ <b>`MusicPlayer.Position(number).Artist`</b>,
2346 /// \anchor MusicPlayer_Position_Artist
2347 /// _string_,
2348 /// @return Artist(s) of the song which has an offset `number` with respect
2349 /// to the start of the playlist.
2350 /// @param number - the offset of the song with respect to
2351 /// the start of the playlist
2352 /// <p>
2353 /// }
2354 /// \table_row3{ <b>`MusicPlayer.AlbumArtist`</b>,
2355 /// \anchor MusicPlayer_AlbumArtist
2356 /// _string_,
2357 /// @return The album artist of the currently playing song.
2358 /// <p>
2359 /// }
2360 /// \table_row3{ <b>`MusicPlayer.Cover`</b>,
2361 /// \anchor MusicPlayer_Cover
2362 /// _string_,
2363 /// @return The album cover of currently playing song.
2364 /// <p>
2365 /// }
2366 /// \table_row3{ <b>`MusicPlayer.Property(Artist_Sortname)`</b>,
2367 /// \anchor MusicPlayer_Property_Artist_Sortname
2368 /// _string_,
2369 /// @return The sortname of the currently playing Artist.
2370 /// <p><hr>
2371 /// @skinning_v18 **[New Infolabel]** \link MusicPlayer_Property_Artist_Sortname `MusicPlayer.Property(Artist_Sortname)`\endlink
2372 /// <p>
2373 /// }
2374 /// \table_row3{ <b>`MusicPlayer.Property(Artist_Type)`</b>,
2375 /// \anchor MusicPlayer_Property_Artist_Type
2376 /// _string_,
2377 /// @return The type of the currently playing Artist - person\,
2378 /// group\, orchestra\, choir etc.
2379 /// <p><hr>
2380 /// @skinning_v18 **[New Infolabel]** \link MusicPlayer_Property_Artist_Type `MusicPlayer.Property(Artist_Type)`\endlink
2381 /// <p>
2382 /// }
2383 /// \table_row3{ <b>`MusicPlayer.Property(Artist_Gender)`</b>,
2384 /// \anchor MusicPlayer_Property_Artist_Gender
2385 /// _string_,
2386 /// @return The gender of the currently playing Artist - male\,
2387 /// female\, other.
2388 /// <p><hr>
2389 /// @skinning_v18 **[New Infolabel]** \link MusicPlayer_Property_Artist_Gender `MusicPlayer.Property(Artist_Gender)`\endlink
2390 /// <p>
2391 /// }
2392 /// \table_row3{ <b>`MusicPlayer.Property(Artist_Disambiguation)`</b>,
2393 /// \anchor MusicPlayer_Property_Artist_Disambiguation
2394 /// _string_,
2395 /// @return A brief description of the currently playing Artist that differentiates them
2396 /// from others with the same name.
2397 /// <p><hr>
2398 /// @skinning_v18 **[New Infolabel]** \link MusicPlayer_Property_Artist_Disambiguation `MusicPlayer.Property(Artist_Disambiguation)`\endlink
2399 /// <p>
2400 /// }
2401 /// \table_row3{ <b>`MusicPlayer.Property(Artist_Born)`</b>,
2402 /// \anchor MusicPlayer_Property_Artist_Born
2403 /// _string_,
2404 /// @return The date of Birth of the currently playing Artist.
2405 /// <p>
2406 /// }
2407 /// \table_row3{ <b>`MusicPlayer.Property(Artist_Died)`</b>,
2408 /// \anchor MusicPlayer_Property_Artist_Died
2409 /// _string_,
2410 /// @return The date of Death of the currently playing Artist.
2411 /// <p>
2412 /// }
2413 /// \table_row3{ <b>`MusicPlayer.Property(Artist_Formed)`</b>,
2414 /// \anchor MusicPlayer_Property_Artist_Formed
2415 /// _string_,
2416 /// @return The Formation date of the currently playing Artist/Band.
2417 /// <p>
2418 /// }
2419 /// \table_row3{ <b>`MusicPlayer.Property(Artist_Disbanded)`</b>,
2420 /// \anchor MusicPlayer_Property_Artist_Disbanded
2421 /// _string_,
2422 /// @return The disbanding date of the currently playing Artist/Band.
2423 /// <p>
2424 /// }
2425 /// \table_row3{ <b>`MusicPlayer.Property(Artist_YearsActive)`</b>,
2426 /// \anchor MusicPlayer_Property_Artist_YearsActive
2427 /// _string_,
2428 /// @return The years the currently Playing artist has been active.
2429 /// <p>
2430 /// }
2431 /// \table_row3{ <b>`MusicPlayer.Property(Artist_Instrument)`</b>,
2432 /// \anchor MusicPlayer_Property_Artist_Instrument
2433 /// _string_,
2434 /// @return The instruments played by the currently playing artist.
2435 /// <p>
2436 /// }
2437 /// \table_row3{ <b>`MusicPlayer.Property(Artist_Description)`</b>,
2438 /// \anchor MusicPlayer_Property_Artist_Description
2439 /// _string_,
2440 /// @return A biography of the currently playing artist.
2441 /// <p>
2442 /// }
2443 /// \table_row3{ <b>`MusicPlayer.Property(Artist_Mood)`</b>,
2444 /// \anchor MusicPlayer_Property_Artist_Mood
2445 /// _string_,
2446 /// @return The moods of the currently playing artist.
2447 /// <p>
2448 /// }
2449 /// \table_row3{ <b>`MusicPlayer.Property(Artist_Style)`</b>,
2450 /// \anchor MusicPlayer_Property_Artist_Style
2451 /// _string_,
2452 /// @return The styles of the currently playing artist.
2453 /// <p>
2454 /// }
2455 /// \table_row3{ <b>`MusicPlayer.Property(Artist_Genre)`</b>,
2456 /// \anchor MusicPlayer_Property_Artist_Genre
2457 /// _string_,
2458 /// @return The genre of the currently playing artist.
2459 /// <p>
2460 /// }
2461 /// \table_row3{ <b>`MusicPlayer.Genre`</b>,
2462 /// \anchor MusicPlayer_Genre
2463 /// _string_,
2464 /// @return The genre(s) of current song.
2465 /// <p>
2466 /// }
2467 /// \table_row3{ <b>`MusicPlayer.offset(number).Genre`</b>,
2468 /// \anchor MusicPlayer_OffSet_Genre
2469 /// _string_,
2470 /// @return The genre(s) of the song with an offset `number` with respect
2471 /// to the current playing song.
2472 /// @param number - the offset song number with respect to the current playing
2473 /// song.
2474 /// <p>
2475 /// }
2476 /// \table_row3{ <b>`MusicPlayer.Position(number).Genre`</b>,
2477 /// \anchor MusicPlayer_Position_Genre
2478 /// _string_,
2479 /// @return The genre(s) of the song with an offset `number` with respect
2480 /// to the start of the playlist.
2481 /// @param number - the offset song number with respect to the start of the
2482 /// playlist
2483 /// song.
2484 /// <p>
2485 /// }
2486 /// \table_row3{ <b>`MusicPlayer.Lyrics`</b>,
2487 /// \anchor MusicPlayer_Lyrics
2488 /// _string_,
2489 /// @return The lyrics of current song stored in ID tag info.
2490 /// <p>
2491 /// }
2492 /// \table_row3{ <b>`MusicPlayer.Year`</b>,
2493 /// \anchor MusicPlayer_Year
2494 /// _string_,
2495 /// @return The year of release of current song.
2496 /// <p>
2497 /// }
2498 /// \table_row3{ <b>`MusicPlayer.offset(number).Year`</b>,
2499 /// \anchor MusicPlayer_Offset_Year
2500 /// _string_,
2501 /// @return The year of release of the song with an offset `number` with
2502 /// respect to the current playing song.
2503 /// @param number - the offset number with respect to the current song.
2504 /// <p>
2505 /// }
2506 /// \table_row3{ <b>`MusicPlayer.Position(number).Year`</b>,
2507 /// \anchor MusicPlayer_Position_Year
2508 /// _string_,
2509 /// @return The year of release of the song with an offset `number` with
2510 /// respect to the start of the playlist.
2511 /// @param number - the offset number with respect to the start of the
2512 /// playlist.
2513 /// <p>
2514 /// }
2515 /// \table_row3{ <b>`MusicPlayer.Rating`</b>,
2516 /// \anchor MusicPlayer_Rating
2517 /// _string_,
2518 /// @return The numeric Rating of current song (1-10).
2519 /// <p>
2520 /// }
2521 /// \table_row3{ <b>`MusicPlayer.offset(number).Rating`</b>,
2522 /// \anchor MusicPlayer_OffSet_Rating
2523 /// _string_,
2524 /// @return The numeric Rating of song with an offset `number` with
2525 /// respect to the current playing song.
2526 /// @param number - the offset with respect to the current playing song
2527 /// <p>
2528 /// }
2529 /// \table_row3{ <b>`MusicPlayer.Position(number).Rating`</b>,
2530 /// \anchor MusicPlayer_Position_Rating
2531 /// _string_,
2532 /// @return The numeric Rating of song with an offset `number` with
2533 /// respect to the start of the playlist.
2534 /// @param number - the offset with respect to the start of the playlist
2535 /// <p>
2536 /// }
2537 /// \table_row3{ <b>`MusicPlayer.RatingAndVotes`</b>,
2538 /// \anchor MusicPlayer_RatingAndVotes
2539 /// _string_,
2540 /// @return The scraped rating and votes of currently playing song\, if it's in the database.
2541 /// <p>
2542 /// }
2543 /// \table_row3{ <b>`MusicPlayer.UserRating`</b>,
2544 /// \anchor MusicPlayer_UserRating
2545 /// _string_,
2546 /// @return The scraped rating of the currently playing song (1-10).
2547 /// <p><hr>
2548 /// @skinning_v17 **[New Infolabel]** \link MusicPlayer_UserRating `MusicPlayer.UserRating`\endlink
2549 /// <p>
2550 /// }
2551 /// \table_row3{ <b>`MusicPlayer.Votes`</b>,
2552 /// \anchor MusicPlayer_Votes
2553 /// _string_,
2554 /// @return The scraped votes of currently playing song\, if it's in the database.
2555 /// <p>
2556 /// }
2557 /// \table_row3{ <b>`MusicPlayer.DiscNumber`</b>,
2558 /// \anchor MusicPlayer_DiscNumber
2559 /// _string_,
2560 /// @return The Disc Number of current song stored in ID tag info.
2561 /// <p>
2562 /// }
2563 /// \table_row3{ <b>`MusicPlayer.offset(number).DiscNumber`</b>,
2564 /// \anchor MusicPlayer_Offset_DiscNumber
2565 /// _string_,
2566 /// @return The Disc Number of current song stored in ID tag info for the
2567 /// song with an offset `number` with respect to the playing song.
2568 /// @param number - The offset value for the song with respect to the
2569 /// playing song.
2570 /// <p>
2571 /// }
2572 /// \table_row3{ <b>`MusicPlayer.Position(number).DiscNumber`</b>,
2573 /// \anchor MusicPlayer_Position_DiscNumber
2574 /// _string_,
2575 /// @return The Disc Number of current song stored in ID tag info for the
2576 /// song with an offset `number` with respect to the start of the playlist.
2577 /// @param number - The offset value for the song with respect to the
2578 /// start of the playlist.
2579 /// <p>
2580 /// }
2581 /// \table_row3{ <b>`MusicPlayer.Comment`</b>,
2582 /// \anchor MusicPlayer_Comment
2583 /// _string_,
2584 /// @return The Comment of current song stored in ID tag info.
2585 /// <p>
2586 /// }
2587 /// \table_row3{ <b>`MusicPlayer.offset(number).Comment`</b>,
2588 /// \anchor MusicPlayer_Offset_Comment
2589 /// _string_,
2590 /// @return The Comment of current song stored in ID tag info for the
2591 /// song with an offset `number` with respect to the playing song.
2592 /// @param number - The offset value for the song with respect to the
2593 /// playing song.
2594 /// <p>
2595 /// }
2596 /// \table_row3{ <b>`MusicPlayer.Position(number).Comment`</b>,
2597 /// \anchor MusicPlayer_Position_Comment
2598 /// _string_,
2599 /// @return The Comment of current song stored in ID tag info for the
2600 /// song with an offset `number` with respect to the start of the playlist.
2601 /// @param number - The offset value for the song with respect to the
2602 /// start of the playlist.
2603 /// <p>
2604 /// }
2605 /// \table_row3{ <b>`MusicPlayer.Contributors`</b>,
2606 /// \anchor MusicPlayer_Contributors
2607 /// _string_,
2608 /// @return The list of all people who've contributed to the currently playing song
2609 /// <p><hr>
2610 /// @skinning_v17 **[New Infolabel]** \link MusicPlayer_Contributors `MusicPlayer.Contributors`\endlink
2611 /// <p>
2612 /// }
2613 /// \table_row3{ <b>`MusicPlayer.ContributorAndRole`</b>,
2614 /// \anchor MusicPlayer_ContributorAndRole
2615 /// _string_,
2616 /// @return The list of all people and their role who've contributed to the currently playing song.
2617 /// <p><hr>
2618 /// @skinning_v17 **[New Infolabel]** \link MusicPlayer_ContributorAndRole `MusicPlayer.ContributorAndRole`\endlink
2619 /// <p>
2620 /// }
2621 /// \table_row3{ <b>`MusicPlayer.Mood`</b>,
2622 /// \anchor MusicPlayer_Mood
2623 /// _string_,
2624 /// @return The mood of the currently playing song.
2625 /// <p><hr>
2626 /// @skinning_v17 **[New Infolabel]** \link MusicPlayer_Mood `MusicPlayer.Mood`\endlink
2627 /// <p>
2628 /// }
2629 /// \table_row3{ <b>`MusicPlayer.PlaylistPlaying`</b>,
2630 /// \anchor MusicPlayer_PlaylistPlaying
2631 /// _boolean_,
2632 /// @return **True** if a playlist is currently playing.
2633 /// <p>
2634 /// }
2635 /// \table_row3{ <b>`MusicPlayer.Exists(relative\,position)`</b>,
2636 /// \anchor MusicPlayer_Exists
2637 /// _boolean_,
2638 /// @return **True** if the currently playing playlist has a song queued at the given position.
2639 /// @param relative - bool - If the position is relative
2640 /// @param position - int - The position of the song
2641 /// @note It is possible to define whether the position is relative or not\, default is false.
2642 /// <p>
2643 /// }
2644 /// \table_row3{ <b>`MusicPlayer.HasPrevious`</b>,
2645 /// \anchor MusicPlayer_HasPrevious
2646 /// _boolean_,
2647 /// @return **True** if the music player has a a Previous Song in the Playlist.
2648 /// <p>
2649 /// }
2650 /// \table_row3{ <b>`MusicPlayer.HasNext`</b>,
2651 /// \anchor MusicPlayer_HasNext
2652 /// _boolean_,
2653 /// @return **True** if the music player has a next song queued in the Playlist.
2654 /// <p>
2655 /// }
2656 /// \table_row3{ <b>`MusicPlayer.PlayCount`</b>,
2657 /// \anchor MusicPlayer_PlayCount
2658 /// _integer_,
2659 /// @return The play count of currently playing song\, if it's in the database.
2660 /// <p>
2661 /// }
2662 /// \table_row3{ <b>`MusicPlayer.LastPlayed`</b>,
2663 /// \anchor MusicPlayer_LastPlayed
2664 /// _string_,
2665 /// @return The last play date of currently playing song\, if it's in the database.
2666 /// <p>
2667 /// }
2668 /// \table_row3{ <b>`MusicPlayer.TrackNumber`</b>,
2669 /// \anchor MusicPlayer_TrackNumber
2670 /// _string_,
2671 /// @return The track number of current song.
2672 /// <p>
2673 /// }
2674 /// \table_row3{ <b>`MusicPlayer.offset(number).TrackNumber`</b>,
2675 /// \anchor MusicPlayer_Offset_TrackNumber
2676 /// _string_,
2677 /// @return The track number of the song with an offset `number`
2678 /// with respect to the current playing song.
2679 /// @param number - The offset number of the song with respect to the
2680 /// playing song
2681 /// <p>
2682 /// }
2683 /// \table_row3{ <b>`MusicPlayer.Position(number).TrackNumber`</b>,
2684 /// \anchor MusicPlayer_Position_TrackNumber
2685 /// _string_,
2686 /// @return The track number of the song with an offset `number`
2687 /// with respect to start of the playlist.
2688 /// @param number - The offset number of the song with respect
2689 /// to start of the playlist
2690 /// <p>
2691 /// }
2692 /// \table_row3{ <b>`MusicPlayer.Duration`</b>,
2693 /// \anchor MusicPlayer_Duration
2694 /// _string_,
2695 /// @return The duration of the current song.
2696 /// <p>
2697 /// }
2698 /// \table_row3{ <b>`MusicPlayer.offset(number).Duration`</b>,
2699 /// \anchor MusicPlayer_Offset_Duration
2700 /// _string_,
2701 /// @return The duration of the song with an offset `number`
2702 /// with respect to the current playing song.
2703 /// @param number - the offset number of the song with respect
2704 /// to the current playing song
2705 /// <p>
2706 /// }
2707 /// \table_row3{ <b>`MusicPlayer.Position(number).Duration`</b>,
2708 /// \anchor MusicPlayer_Position_Duration
2709 /// _string_,
2710 /// @return The duration of the song with an offset `number`
2711 /// with respect to the start of the playlist.
2712 /// @param number - the offset number of the song with respect
2713 /// to the start of the playlist
2714 /// <p>
2715 /// }
2716 /// \table_row3{ <b>`MusicPlayer.BitRate`</b>,
2717 /// \anchor MusicPlayer_BitRate
2718 /// _string_,
2719 /// @return The bitrate of current song.
2720 /// <p>
2721 /// }
2722 /// \table_row3{ <b>`MusicPlayer.Channels`</b>,
2723 /// \anchor MusicPlayer_Channels
2724 /// _string_,
2725 /// @return The number of channels of current song.
2726 /// <p>
2727 /// }
2728 /// \table_row3{ <b>`MusicPlayer.BitsPerSample`</b>,
2729 /// \anchor MusicPlayer_BitsPerSample
2730 /// _string_,
2731 /// @return The number of bits per sample of current song.
2732 /// <p>
2733 /// }
2734 /// \table_row3{ <b>`MusicPlayer.SampleRate`</b>,
2735 /// \anchor MusicPlayer_SampleRate
2736 /// _string_,
2737 /// @return The samplerate of current playing song.
2738 /// <p>
2739 /// }
2740 /// \table_row3{ <b>`MusicPlayer.Codec`</b>,
2741 /// \anchor MusicPlayer_Codec
2742 /// _string_,
2743 /// @return The codec of current playing song.
2744 /// <p>
2745 /// }
2746 /// \table_row3{ <b>`MusicPlayer.PlaylistPosition`</b>,
2747 /// \anchor MusicPlayer_PlaylistPosition
2748 /// _string_,
2749 /// @return The position of the current song in the current music playlist.
2750 /// <p>
2751 /// }
2752 /// \table_row3{ <b>`MusicPlayer.PlaylistLength`</b>,
2753 /// \anchor MusicPlayer_PlaylistLength
2754 /// _string_,
2755 /// @return The total size of the current music playlist.
2756 /// <p>
2757 /// }
2758 /// \table_row3{ <b>`MusicPlayer.ChannelName`</b>,
2759 /// \anchor MusicPlayer_ChannelName
2760 /// _string_,
2761 /// @return The channel name of the radio programme that's currently playing (PVR).
2762 /// <p>
2763 /// }
2764 /// \table_row3{ <b>`MusicPlayer.ChannelNumberLabel`</b>,
2765 /// \anchor MusicPlayer_ChannelNumberLabel
2766 /// _string_,
2767 /// @return The channel and subchannel number of the radio channel that's currently
2768 /// playing (PVR).
2769 /// <p><hr>
2770 /// @skinning_v14 **[New Infolabel]** \link MusicPlayer_ChannelNumberLabel `MusicPlayer.ChannelNumberLabel`\endlink
2771 /// <p>
2772 /// }
2773 /// \table_row3{ <b>`MusicPlayer.ChannelGroup`</b>,
2774 /// \anchor MusicPlayer_ChannelGroup
2775 /// _string_,
2776 /// @return The channel group of the radio programme that's currently playing (PVR).
2777 /// <p>
2778 /// }
2779 /// \table_row3{ <b>`MusicPlayer.Property(propname)`</b>,
2780 /// \anchor MusicPlayer_Property_Propname
2781 /// _string_,
2782 /// @return The requested property value of the currently playing item.
2783 /// @param propname - The requested property
2784 /// <p>
2785 /// }
2786 /// \table_row3{ <b>`MusicPlayer.DBID`</b>,
2787 /// \anchor MusicPlayer_DBID
2788 /// _string_,
2789 /// @return The database id of the currently playing song.
2790 /// <p><hr>
2791 /// @skinning_v17 **[New Infolabel]** \link MusicPlayer_DBID `MusicPlayer.DBID`\endlink
2792 /// <p>
2793 /// }
2794 /// \table_row3{ <b>`MusicPlayer.DiscTitle`</b>,
2795 /// \anchor MusicPlayer_DiscTitle
2796 /// _string_,
2797 /// @return The title of the disc currently playing.
2798 /// <p><hr>
2799 /// @skinning_v19 **[New Infolabel]** \link MusicPlayer_DiscTitle `MusicPlayer.DiscTitle`\endlink
2800 /// <p>
2801 /// }
2802 /// \table_row3{ <b>`MusicPlayer.ReleaseDate`</b>,
2803 /// \anchor MusicPlayer_ReleaseDate
2804 /// _string_,
2805 /// @return The release date of the song currently playing.
2806 /// <p><hr>
2807 /// @skinning_v19 **[New Infolabel]** \link MusicPlayer_ReleaseDate `MusicPlayer.ReleaseDate`\endlink
2808 /// <p>
2809 /// }
2810 /// \table_row3{ <b>`MusicPlayer.OriginalDate`</b>,
2811 /// \anchor MusicPlayer_OriginalDate
2812 /// _string_,
2813 /// @return The original release date of the song currently playing.
2814 /// <p><hr>
2815 /// @skinning_v19 **[New Infolabel]** \link MusicPlayer_OriginalDate `MusicPlayer.OriginalDate`\endlink
2816 /// <p>
2817 /// }
2818 /// \table_row3{ <b>`MusicPlayer.BPM`</b>,
2819 /// \anchor MusicPlayer_BPM
2820 /// _string_,
2821 /// @return The bpm of the track currently playing.
2822 /// <p><hr>
2823 /// @skinning_v19 **[New Infolabel]** \link MusicPlayer_BPM `MusicPlayer.BPM`\endlink
2824 /// <p>
2825 /// }
2826 /// \table_row3{ <b>`MusicPlayer.IsMultiDisc`</b>,
2827 /// \anchor MusicPlayer_IsMultiDisc
2828 /// _boolean_,
2829 /// @return Returns **true** if the album currently playing has more than one disc.
2830 /// <p><hr>
2831 /// @skinning_v19 **[New Infolabel]** \link MusicPlayer_IsMultiDisc `MusicPlayer.IsMultiDisc`\endlink
2832 /// <p>
2833 /// }
2834 /// \table_row3{ <b>`MusicPlayer.TotalDiscs`</b>,
2835 /// \anchor MusicPlayer_TotalDiscs
2836 /// _string_,
2837 /// @return The number of discs associated with the currently playing album.
2838 /// <p><hr>
2839 /// @skinning_v19 **[New Infolabel]** \link MusicPlayer_TotalDiscs `MusicPlayer.TotalDiscs`\endlink
2840 /// <p>
2841 /// }
2842 /// \table_row3{ <b>`MusicPlayer.Station`</b>,
2843 /// \anchor MusicPlayer_Station
2844 /// _string_,
2845 /// @return The name of the radio station currently playing (if available).
2846 /// <p><hr>
2847 /// @skinning_v19 **[New Infolabel]** \link MusicPlayer_Station `MusicPlayer.Station`\endlink
2848 /// <p>
2849 /// }
2850 /// \table_end
2852 /// -----------------------------------------------------------------------------
2853 const infomap musicplayer[] = {{ "title", MUSICPLAYER_TITLE },
2854 { "album", MUSICPLAYER_ALBUM },
2855 { "artist", MUSICPLAYER_ARTIST },
2856 { "albumartist", MUSICPLAYER_ALBUM_ARTIST },
2857 { "year", MUSICPLAYER_YEAR },
2858 { "genre", MUSICPLAYER_GENRE },
2859 { "duration", MUSICPLAYER_DURATION },
2860 { "tracknumber", MUSICPLAYER_TRACK_NUMBER },
2861 { "cover", MUSICPLAYER_COVER },
2862 { "bitrate", MUSICPLAYER_BITRATE },
2863 { "playlistlength", MUSICPLAYER_PLAYLISTLEN },
2864 { "playlistposition", MUSICPLAYER_PLAYLISTPOS },
2865 { "channels", MUSICPLAYER_CHANNELS },
2866 { "bitspersample", MUSICPLAYER_BITSPERSAMPLE },
2867 { "samplerate", MUSICPLAYER_SAMPLERATE },
2868 { "codec", MUSICPLAYER_CODEC },
2869 { "discnumber", MUSICPLAYER_DISC_NUMBER },
2870 { "disctitle", MUSICPLAYER_DISC_TITLE },
2871 { "rating", MUSICPLAYER_RATING },
2872 { "ratingandvotes", MUSICPLAYER_RATING_AND_VOTES },
2873 { "userrating", MUSICPLAYER_USER_RATING },
2874 { "votes", MUSICPLAYER_VOTES },
2875 { "comment", MUSICPLAYER_COMMENT },
2876 { "mood", MUSICPLAYER_MOOD },
2877 { "contributors", MUSICPLAYER_CONTRIBUTORS },
2878 { "contributorandrole", MUSICPLAYER_CONTRIBUTOR_AND_ROLE },
2879 { "lyrics", MUSICPLAYER_LYRICS },
2880 { "playlistplaying", MUSICPLAYER_PLAYLISTPLAYING },
2881 { "exists", MUSICPLAYER_EXISTS },
2882 { "hasprevious", MUSICPLAYER_HASPREVIOUS },
2883 { "hasnext", MUSICPLAYER_HASNEXT },
2884 { "playcount", MUSICPLAYER_PLAYCOUNT },
2885 { "lastplayed", MUSICPLAYER_LASTPLAYED },
2886 { "channelname", MUSICPLAYER_CHANNEL_NAME },
2887 { "channelnumberlabel", MUSICPLAYER_CHANNEL_NUMBER },
2888 { "channelgroup", MUSICPLAYER_CHANNEL_GROUP },
2889 { "dbid", MUSICPLAYER_DBID },
2890 { "property", MUSICPLAYER_PROPERTY },
2891 { "releasedate", MUSICPLAYER_RELEASEDATE },
2892 { "originaldate", MUSICPLAYER_ORIGINALDATE },
2893 { "bpm", MUSICPLAYER_BPM },
2894 { "ismultidisc", MUSICPLAYER_ISMULTIDISC },
2895 { "totaldiscs", MUSICPLAYER_TOTALDISCS },
2896 { "station", MUSICPLAYER_STATIONNAME }
2899 /// \page modules__infolabels_boolean_conditions
2900 /// \subsection modules__infolabels_boolean_conditions_Videoplayer Video player
2901 /// \table_start
2902 /// \table_h3{ Labels, Type, Description }
2903 /// \table_row3{ <b>`VideoPlayer.UsingOverlays`</b>,
2904 /// \anchor VideoPlayer_UsingOverlays
2905 /// _boolean_,
2906 /// @return **True** if the video player is using the hardware overlays render
2907 /// method.
2908 /// @note This is useful\, as with hardware overlays you have no alpha blending to
2909 /// the video image\, so shadows etc. need redoing\, or disabling.
2910 /// <p>
2911 /// }
2912 /// \table_row3{ <b>`VideoPlayer.IsFullscreen`</b>,
2913 /// \anchor VideoPlayer_IsFullscreen
2914 /// _boolean_,
2915 /// @return **True** if the video player is in fullscreen mode.
2916 /// <p>
2917 /// }
2918 /// \table_row3{ <b>`VideoPlayer.HasMenu`</b>,
2919 /// \anchor VideoPlayer_HasMenu
2920 /// _boolean_,
2921 /// @return **True** if the video player has a menu (ie is playing a DVD).
2922 /// <p>
2923 /// }
2924 /// \table_row3{ <b>`VideoPlayer.HasInfo`</b>,
2925 /// \anchor VideoPlayer_HasInfo
2926 /// _boolean_,
2927 /// @return **True** if the current playing video has information from the
2928 /// library or from a plugin (eg director/plot etc.)
2929 /// <p>
2930 /// }
2931 /// \table_row3{ <b>`VideoPlayer.Content(parameter)`</b>,
2932 /// \anchor VideoPlayer_Content
2933 /// _boolean_,
2934 /// @return **True** if the current Video you are playing is contained in
2935 /// corresponding Video Library sections. The following values are accepted:
2936 /// - <b>files</b>
2937 /// - <b>movies</b>
2938 /// - <b>episodes</b>
2939 /// - <b>musicvideos</b>
2940 /// - <b>livetv</b>
2941 /// <p>
2942 /// }
2943 /// \table_row3{ <b>`VideoPlayer.HasSubtitles`</b>,
2944 /// \anchor VideoPlayer_HasSubtitles
2945 /// _boolean_,
2946 /// @return **True** if there are subtitles available for video.
2947 /// <p>
2948 /// }
2949 /// \table_row3{ <b>`VideoPlayer.HasTeletext`</b>,
2950 /// \anchor VideoPlayer_HasTeletext
2951 /// _boolean_,
2952 /// @return **True** if teletext is usable on played TV channel.
2953 /// <p>
2954 /// }
2955 /// \table_row3{ <b>`VideoPlayer.IsStereoscopic`</b>,
2956 /// \anchor VideoPlayer_IsStereoscopic
2957 /// _boolean_,
2958 /// @return **True** when the currently playing video is a 3D (stereoscopic)
2959 /// video.
2960 /// <p><hr>
2961 /// @skinning_v13 **[New Boolean Condition]** \link VideoPlayer_IsStereoscopic `VideoPlayer.IsStereoscopic`\endlink
2962 /// <p>
2963 /// }
2964 /// \table_row3{ <b>`VideoPlayer.SubtitlesEnabled`</b>,
2965 /// \anchor VideoPlayer_SubtitlesEnabled
2966 /// _boolean_,
2967 /// @return **True** if subtitles are turned on for video.
2968 /// <p>
2969 /// }
2970 /// \table_row3{ <b>`VideoPlayer.HasEpg`</b>,
2971 /// \anchor VideoPlayer_HasEpg
2972 /// _boolean_,
2973 /// @return **True** if epg information is available for the currently playing
2974 /// programme (PVR).
2975 /// <p>
2976 /// }
2977 /// \table_row3{ <b>`VideoPlayer.CanResumeLiveTV`</b>,
2978 /// \anchor VideoPlayer_CanResumeLiveTV
2979 /// _boolean_,
2980 /// @return **True** if a in-progress PVR recording is playing an the respective
2981 /// live TV channel is available.
2982 /// <p>
2983 /// }
2984 /// \table_row3{ <b>`VideoPlayer.Title`</b>,
2985 /// \anchor VideoPlayer_Title
2986 /// _string_,
2987 /// @return The title of currently playing video.
2988 /// @note If it's in the database it will return the database title\, else the filename.
2989 /// <p>
2990 /// }
2991 /// \table_row3{ <b>`VideoPlayer.offset(number).Title`</b>,
2992 /// \anchor VideoPlayer_Offset_Title
2993 /// _string_,
2994 /// @return The title of video which has an offset `number` with respect to the currently playing video.
2995 /// @note If it's in the database it will return the database title\, else the filename.
2996 /// <p><hr>
2997 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_Title `VideoPlayer.offset(number).Title`\endlink
2998 /// <p>
2999 /// }
3000 /// \table_row3{ <b>`VideoPlayer.position(number).Title`</b>,
3001 /// \anchor VideoPlayer_Position_Title
3002 /// _string_,
3003 /// @return The title of the video which has an offset `number` with respect to the start of the playlist.
3004 /// @note If it's in the database it will return the database title\, else the filename.
3005 /// <p><hr>
3006 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_Title `VideoPlayer.position(number).Title`\endlink
3007 /// <p>
3008 /// }
3009 /// \table_row3{ <b>`VideoPlayer.OriginalTitle`</b>,
3010 /// \anchor VideoPlayer_OriginalTitle
3011 /// _string_,
3012 /// @return The original title of currently playing video. If it's in the database.
3013 /// <p>
3014 /// }
3015 /// \table_row3{ <b>`VideoPlayer.offset(number).OriginalTitle`</b>,
3016 /// \anchor VideoPlayer_Offset_OriginalTitle
3017 /// _string_,
3018 /// @return The original title of the video which has an offset `number` with respect to the currently playing video.
3019 /// <p><hr>
3020 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_OriginalTitle `VideoPlayer.offset(number).OriginalTitle`\endlink
3021 /// <p>
3022 /// }
3023 /// \table_row3{ <b>`VideoPlayer.position(number).OriginalTitle`</b>,
3024 /// \anchor VideoPlayer_Position_OriginalTitle
3025 /// _string_,
3026 /// @return The original title of the video which has an offset `number` with respect to the start of the playlist.
3027 /// <p><hr>
3028 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_OriginalTitle `VideoPlayer.position(number).OriginalTitle`\endlink
3029 /// <p>
3030 /// }
3031 /// \table_row3{ <b>`VideoPlayer.TVShowTitle`</b>,
3032 /// \anchor VideoPlayer_TVShowTitle
3033 /// _string_,
3034 /// @return The title of currently playing episode's tvshow name.
3035 /// <p>
3036 /// }
3037 /// \table_row3{ <b>`VideoPlayer.offset(number).TVShowTitle`</b>,
3038 /// \anchor VideoPlayer_Offset_TVShowTitle
3039 /// _string_,
3040 /// @return The title of the episode's tvshow name which has an offset `number` with respect to the currently playing video.
3041 /// <p><hr>
3042 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_TVShowTitle `VideoPlayer.offset(number).TVShowTitle`\endlink
3043 /// <p>
3044 /// }
3045 /// \table_row3{ <b>`VideoPlayer.position(number).TVShowTitle`</b>,
3046 /// \anchor VideoPlayer_Position_TVShowTitle
3047 /// _string_,
3048 /// @return The title of the episode's tvshow name which has an offset `number` with respect to the start of the playlist.
3049 /// <p><hr>
3050 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_TVShowTitle `VideoPlayer.position(number).TVShowTitle`\endlink
3051 /// <p>
3052 /// }
3053 /// \table_row3{ <b>`VideoPlayer.Season`</b>,
3054 /// \anchor VideoPlayer_Season
3055 /// _string_,
3056 /// @return The season number of the currently playing episode\, if it's in the database.
3057 /// <p><hr>
3058 /// @skinning_v15 **[Infolabel Updated]** \link VideoPlayer_Season `VideoPlayer.Season`\endlink
3059 /// also supports EPG.
3060 /// <p>
3061 /// }
3062 /// \table_row3{ <b>`VideoPlayer.offset(number).Season`</b>,
3063 /// \anchor VideoPlayer_Offset_Season
3064 /// _string_,
3065 /// @return The season number of the episode which has an offset `number` with respect to the currently playing video.
3066 /// <p><hr>
3067 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_Season `VideoPlayer.offset(number).Season`\endlink
3068 /// <p>
3069 /// }
3070 /// \table_row3{ <b>`VideoPlayer.position(number).Season`</b>,
3071 /// \anchor VideoPlayer_Position_Season
3072 /// _string_,
3073 /// @return The season number of the episode which has an offset `number` with respect to the start of the playlist.
3074 /// <p><hr>
3075 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_Season `VideoPlayer.position(number).Season`\endlink
3076 /// <p>
3077 /// }
3078 /// \table_row3{ <b>`VideoPlayer.Episode`</b>,
3079 /// \anchor VideoPlayer_Episode
3080 /// _string_,
3081 /// @return The episode number of the currently playing episode.
3082 /// <p><hr>
3083 /// @skinning_v15 **[Infolabel Updated]** \link VideoPlayer_Episode `VideoPlayer.Episode`\endlink
3084 /// also supports EPG.
3085 /// <p>
3086 /// }
3087 /// \table_row3{ <b>`VideoPlayer.offset(number).Episode`</b>,
3088 /// \anchor VideoPlayer_Offset_Episode
3089 /// _string_,
3090 /// @return The episode number of the episode which has an offset `number` with respect to the currently playing video.
3091 /// <p><hr>
3092 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_Episode `VideoPlayer.offset(number).Episode`\endlink
3093 /// <p>
3094 /// }
3095 /// \table_row3{ <b>`VideoPlayer.position(number).Episode`</b>,
3096 /// \anchor VideoPlayer_Position_Episode
3097 /// _string_,
3098 /// @return The episode number of the episode which has an offset `number` with respect to the start of the playlist.
3099 /// <p><hr>
3100 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_Episode `VideoPlayer.position(number).Episode`\endlink
3101 /// <p>
3102 /// }
3103 /// \table_row3{ <b>`VideoPlayer.Genre`</b>,
3104 /// \anchor VideoPlayer_Genre
3105 /// _string_,
3106 /// @return The genre(s) of current movie\, if it's in the database.
3107 /// <p>
3108 /// }
3109 /// \table_row3{ <b>`VideoPlayer.offset(number).Genre`</b>,
3110 /// \anchor VideoPlayer_Offset_Genre
3111 /// _string_,
3112 /// @return The genre(s) of the video which has an offset `number` with respect to the currently playing video.
3113 /// <p><hr>
3114 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_Genre `VideoPlayer.offset(number).Genre`\endlink
3115 /// <p>
3116 /// }
3117 /// \table_row3{ <b>`VideoPlayer.position(number).Genre`</b>,
3118 /// \anchor VideoPlayer_Position_Genre
3119 /// _string_,
3120 /// @return The genre(s) of the video which has an offset `number` with respect to the start of the playlist.
3121 /// <p><hr>
3122 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_Genre `VideoPlayer.position(number).Genre`\endlink
3123 /// <p>
3124 /// }
3125 /// \table_row3{ <b>`VideoPlayer.Director`</b>,
3126 /// \anchor VideoPlayer_Director
3127 /// _string_,
3128 /// @return The director of current movie\, if it's in the database.
3129 /// <p><hr>
3130 /// @skinning_v15 **[Infolabel Updated]** \link VideoPlayer_Director `VideoPlayer.Director`\endlink
3131 /// also supports EPG.
3132 /// <p>
3133 /// }
3134 /// \table_row3{ <b>`VideoPlayer.offset(number).Director`</b>,
3135 /// \anchor VideoPlayer_Offset_Director
3136 /// _string_,
3137 /// @return The director of the video which has an offset `number` with respect to the currently playing video.
3138 /// <p><hr>
3139 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_Director `VideoPlayer.offset(number).VideoPlayer_Offset_Director`\endlink
3140 /// <p>
3141 /// }
3142 /// \table_row3{ <b>`VideoPlayer.position(number).Director`</b>,
3143 /// \anchor VideoPlayer_Position_Director
3144 /// _string_,
3145 /// @return The director of the video which has an offset `number` with respect to the start of the playlist.
3146 /// <p><hr>
3147 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_Director `VideoPlayer.position(number).Director`\endlink
3148 /// <p>
3149 /// }
3150 /// \table_row3{ <b>`VideoPlayer.Country`</b>,
3151 /// \anchor VideoPlayer_Country
3152 /// _string_,
3153 /// @return The production country of current movie\, if it's in the database.
3154 /// <p>
3155 /// }
3156 /// \table_row3{ <b>`VideoPlayer.offset(number).Country`</b>,
3157 /// \anchor VideoPlayer_Offset_Country
3158 /// _string_,
3159 /// @return The production country of the video which has an offset `number` with respect to the currently playing video.
3160 /// <p><hr>
3161 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_Country `VideoPlayer.offset(number).Country`\endlink
3162 /// <p>
3163 /// }
3164 /// \table_row3{ <b>`VideoPlayer.position(number).Country`</b>,
3165 /// \anchor VideoPlayer_Position_Country
3166 /// _string_,
3167 /// @return The production country of the video which has an offset `number` with respect to the start of the playlist.
3168 /// <p><hr>
3169 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_Country `VideoPlayer.position(number).Country`\endlink
3170 /// <p>
3171 /// }
3172 /// \table_row3{ <b>`VideoPlayer.Year`</b>,
3173 /// \anchor VideoPlayer_Year
3174 /// _string_,
3175 /// @return The year of release of current movie\, if it's in the database.
3176 /// <p>
3177 /// }
3178 /// \table_row3{ <b>`VideoPlayer.offset(number).Year`</b>,
3179 /// \anchor VideoPlayer_Offset_Year
3180 /// _string_,
3181 /// @return The year of release of the video which has an offset `number` with respect to the currently playing video.
3182 /// <p><hr>
3183 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_Year `VideoPlayer.offset(number).Year`\endlink
3184 /// <p>
3185 /// }
3186 /// \table_row3{ <b>`VideoPlayer.position(number).Year`</b>,
3187 /// \anchor VideoPlayer_Position_Year
3188 /// _string_,
3189 /// @return The year of release of the video which has an offset `number` with respect to the start of the playlist.
3190 /// <p><hr>
3191 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_Year `VideoPlayer.position(number).Year`\endlink
3192 /// <p>
3193 /// }
3194 /// \table_row3{ <b>`VideoPlayer.Cover`</b>,
3195 /// \anchor VideoPlayer_Cover
3196 /// _string_,
3197 /// @return The cover of currently playing movie.
3198 /// <p>
3199 /// }
3200 /// \table_row3{ <b>`VideoPlayer.offset(number).Cover`</b>,
3201 /// \anchor VideoPlayer_Offset_Cover
3202 /// _string_,
3203 /// @return The cover of the video which has an offset `number` with respect to the currently playing video.
3204 /// <p><hr>
3205 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_Cover `VideoPlayer.offset(number).Cover`\endlink
3206 /// <p>
3207 /// }
3208 /// \table_row3{ <b>`VideoPlayer.position(number).Cover`</b>,
3209 /// \anchor VideoPlayer_Position_Cover
3210 /// _string_,
3211 /// @return The cover of the video which has an offset `number` with respect to the start of the playlist.
3212 /// <p><hr>
3213 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_Cover `VideoPlayer.position(number).Cover`\endlink
3214 /// <p>
3215 /// }
3216 /// \table_row3{ <b>`VideoPlayer.Rating`</b>,
3217 /// \anchor VideoPlayer_Rating
3218 /// _string_,
3219 /// @return The scraped rating of current movie\, if it's in the database.
3220 /// <p>
3221 /// }
3222 /// \table_row3{ <b>`VideoPlayer.offset(number).Rating`</b>,
3223 /// \anchor VideoPlayer_Offset_Rating
3224 /// _string_,
3225 /// @return The scraped rating of the video which has an offset `number` with respect to the currently playing video.
3226 /// <p><hr>
3227 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_Rating `VideoPlayer.offset(number).Rating`\endlink
3228 /// <p>
3229 /// }
3230 /// \table_row3{ <b>`VideoPlayer.position(number).Rating`</b>,
3231 /// \anchor VideoPlayer_Position_Rating
3232 /// _string_,
3233 /// @return The scraped rating of the video which has an offset `number` with respect to the start of the playlist.
3234 /// <p><hr>
3235 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_Rating `VideoPlayer.position(number).Rating`\endlink
3236 /// <p>
3237 /// }
3238 /// \table_row3{ <b>`VideoPlayer.UserRating`</b>,
3239 /// \anchor VideoPlayer_UserRating
3240 /// _string_,
3241 /// @return The user rating of the currently playing item.
3242 /// <p><hr>
3243 /// @skinning_v16 **[New Infolabel]** \link VideoPlayer_UserRating `VideoPlayer.UserRating`\endlink
3244 /// <p>
3245 /// }
3246 /// \table_row3{ <b>`VideoPlayer.offset(number).UserRating`</b>,
3247 /// \anchor VideoPlayer_Offset_UserRating
3248 /// _string_,
3249 /// @return The user rating of the video which has an offset `number` with respect to the currently playing video.
3250 /// <p><hr>
3251 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_UserRating `VideoPlayer.offset(number).UserRating`\endlink
3252 /// <p>
3253 /// }
3254 /// \table_row3{ <b>`VideoPlayer.position(number).UserRating`</b>,
3255 /// \anchor VideoPlayer_Position_UserRating
3256 /// _string_,
3257 /// @return The user rating of the video which has an offset `number` with respect to the start of the playlist.
3258 /// <p><hr>
3259 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_UserRating `VideoPlayer.position(number).UserRating`\endlink
3260 /// <p>
3261 /// }
3262 /// \table_row3{ <b>`VideoPlayer.Votes`</b>,
3263 /// \anchor VideoPlayer_Votes
3264 /// _string_,
3265 /// @return The scraped votes of current movie\, if it's in the database.
3266 /// <p><hr>
3267 /// @skinning_v13 **[New Infolabel]** \link VideoPlayer_Votes `VideoPlayer.Votes`\endlink
3268 /// <p>
3269 /// }
3270 /// \table_row3{ <b>`VideoPlayer.offset(number).Votes`</b>,
3271 /// \anchor VideoPlayer_Offset_Votes
3272 /// _string_,
3273 /// @return The scraped votes of the video which has an offset `number` with respect to the currently playing video.
3274 /// <p><hr>
3275 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_Votes `VideoPlayer.offset(number).Votes`\endlink
3276 /// <p>
3277 /// }
3278 /// \table_row3{ <b>`VideoPlayer.position(number).Votes`</b>,
3279 /// \anchor VideoPlayer_Position_Votes
3280 /// _string_,
3281 /// @return The scraped votes of the video which has an offset `number` with respect to the start of the playlist.
3282 /// <p><hr>
3283 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_Votes `VideoPlayer.position(number).Votes`\endlink
3284 /// <p>
3285 /// }
3286 /// \table_row3{ <b>`VideoPlayer.RatingAndVotes`</b>,
3287 /// \anchor VideoPlayer_RatingAndVotes
3288 /// _string_,
3289 /// @return The scraped rating and votes of current movie\, if it's in the database
3290 /// <p>
3291 /// }
3292 /// \table_row3{ <b>`VideoPlayer.offset(number).RatingAndVotes`</b>,
3293 /// \anchor VideoPlayer_Offset_RatingAndVotes
3294 /// _string_,
3295 /// @return The scraped rating and votes of the video which has an offset `number` with respect to the currently playing video.
3296 /// <p><hr>
3297 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_RatingAndVotes `VideoPlayer.offset(number).RatingAndVotes`\endlink
3298 /// <p>
3299 /// }
3300 /// \table_row3{ <b>`VideoPlayer.position(number).RatingAndVotes`</b>,
3301 /// \anchor VideoPlayer_Position_RatingAndVotes
3302 /// _string_,
3303 /// @return The scraped rating and votes of the video which has an offset `number` with respect to the start of the playlist.
3304 /// <p><hr>
3305 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_RatingAndVotes `VideoPlayer.position(number).RatingAndVotes`\endlink
3306 /// <p>
3307 /// }
3308 /// \table_row3{ <b>`VideoPlayer.mpaa`</b>,
3309 /// \anchor VideoPlayer_mpaa
3310 /// _string_,
3311 /// @return The MPAA rating of current movie\, if it's in the database.
3312 /// <p>
3313 /// }
3314 /// \table_row3{ <b>`VideoPlayer.offset(number).mpaa`</b>,
3315 /// \anchor VideoPlayer_Offset_mpaa
3316 /// _string_,
3317 /// @return The MPAA rating of the video which has an offset `number` with respect to the currently playing video.
3318 /// <p><hr>
3319 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_mpaa `VideoPlayer.offset(number).mpaa`\endlink
3320 /// <p>
3321 /// }
3322 /// \table_row3{ <b>`VideoPlayer.position(number).mpaa`</b>,
3323 /// \anchor VideoPlayer_Position_mpaa
3324 /// _string_,
3325 /// @return The MPAA rating of the video which has an offset `number` with respect to the start of the playlist.
3326 /// <p><hr>
3327 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_mpaa `VideoPlayer.position(number).mpaa`\endlink
3328 /// <p>
3329 /// }
3330 /// \table_row3{ <b>`VideoPlayer.Art(type)`</b>,
3331 /// \anchor VideoPlayer_art
3332 /// _string_,
3333 /// @return The art path for the requested arttype and for the currently playing video.
3334 /// @param type - can virtually be anything\, refers to the art type keyword in the art map (poster\, fanart\, banner\, thumb\, etc)
3335 /// <p><hr>
3336 /// @skinning_v20 **[New Infolabel]** \link VideoPlayer_art `VideoPlayer.Art(type)`\endlink
3337 /// <p>
3338 /// }
3339 /// \table_row3{ <b>`VideoPlayer.offset(number).Art(type)`</b>,
3340 /// \anchor VideoPlayer_Offset_art
3341 /// _string_,
3342 /// @return The art path for the requested arttype and for the video which has an offset `number` with respect to the currently playing video.
3343 /// @param number - the offset with respect to the start of the playlist
3344 /// @param type - can virtually be anything\, refers to the art type keyword in the art map (poster\, fanart\, banner\, thumb\, etc)
3345 /// <p><hr>
3346 /// @skinning_v20 **[New Infolabel]** \link VideoPlayer_Offset_mpaa `VideoPlayer.offset(number).Art(type)`\endlink
3347 /// <p>
3348 /// }
3349 /// \table_row3{ <b>`VideoPlayer.position(number).Art(type)`</b>,
3350 /// \anchor VideoPlayer_position_art
3351 /// _string_,
3352 /// @return The art path for the requested arttype and for the video which has an offset `number` with respect to the start of the playlist.
3353 /// @param number - the offset with respect to the start of the playlist
3354 /// @param type - can virtually be anything\, refers to the art type keyword in the art map (poster\, fanart\, banner\, thumb\, etc)
3355 /// <p><hr>
3356 /// @skinning_v20 **[New Infolabel]** \link VideoPlayer_position_art `VideoPlayer.position(number).Art(type)`\endlink
3357 /// <p>
3358 /// }
3359 /// \table_row3{ <b>`VideoPlayer.IMDBNumber`</b>,
3360 /// \anchor VideoPlayer_IMDBNumber
3361 /// _string_,
3362 /// @return The IMDb ID of the current movie\, if it's in the database.
3363 /// <p><hr>
3364 /// @skinning_v15 **[New Infolabel]** \link VideoPlayer_IMDBNumber `VideoPlayer.IMDBNumber`\endlink
3365 /// <p>
3366 /// }
3367 /// \table_row3{ <b>`VideoPlayer.offset(number).IMDBNumber`</b>,
3368 /// \anchor VideoPlayer_Offset_IMDBNumber
3369 /// _string_,
3370 /// @return The IMDb ID of the the video which has an offset `number` with respect to the currently playing video.
3371 /// <p><hr>
3372 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_IMDBNumber `VideoPlayer.offset(number).IMDBNumber`\endlink
3373 /// <p>
3374 /// }
3375 /// \table_row3{ <b>`VideoPlayer.position(number).IMDBNumber`</b>,
3376 /// \anchor VideoPlayer_Position_IMDBNumber
3377 /// _string_,
3378 /// @return The IMDb ID of the video which has an offset `number` with respect to the start of the playlist.
3379 /// <p><hr>
3380 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_IMDBNumber `VideoPlayer.position(number).IMDBNumber`\endlink
3381 /// <p>
3382 /// }
3383 /// \table_row3{ <b>`VideoPlayer.Top250`</b>,
3384 /// \anchor VideoPlayer_Top250
3385 /// _string_,
3386 /// @return The IMDb Top250 position of the currently playing movie\, if it's in the database.
3387 /// <p>
3388 /// }
3389 /// \table_row3{ <b>`VideoPlayer.offset(number).Top250`</b>,
3390 /// \anchor VideoPlayer_Offset_Top250
3391 /// _string_,
3392 /// @return The IMDb Top250 position of the video which has an offset `number` with respect to the currently playing video.
3393 /// <p><hr>
3394 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_Top250 `VideoPlayer.offset(number).Top250`\endlink
3395 /// <p>
3396 /// }
3397 /// \table_row3{ <b>`VideoPlayer.position(number).Top250`</b>,
3398 /// \anchor VideoPlayer_Position_Top250
3399 /// _string_,
3400 /// @return The IMDb Top250 position of the video which has an offset `number` with respect to the start of the playlist.
3401 /// <p><hr>
3402 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_Top250 `VideoPlayer.position(number).Top250`\endlink
3403 /// <p>
3404 /// }
3405 /// \table_row3{ <b>`VideoPlayer.EpisodeName`</b>,
3406 /// \anchor VideoPlayer_EpisodeName
3407 /// _string_,
3408 /// @return The name of the episode if the playing video is a TV Show\,
3409 /// if it's in the database (PVR).
3410 /// <p><hr>
3411 /// @skinning_v15 **[New Infolabel]** \link VideoPlayer_EpisodeName `VideoPlayer.EpisodeName`\endlink
3412 /// <p>
3413 /// }
3414 /// \table_row3{ <b>`VideoPlayer.PlaylistPosition`</b>,
3415 /// \anchor VideoPlayer_PlaylistPosition
3416 /// _string_,
3417 /// @return The position of the current song in the current video playlist.
3418 /// <p>
3419 /// }
3420 /// \table_row3{ <b>`VideoPlayer.PlaylistLength`</b>,
3421 /// \anchor VideoPlayer_PlaylistLength
3422 /// _string_,
3423 /// @return The total size of the current video playlist.
3424 /// <p>
3425 /// }
3426 /// \table_row3{ <b>`VideoPlayer.Cast`</b>,
3427 /// \anchor VideoPlayer_Cast
3428 /// _string_,
3429 /// @return A concatenated string of cast members of the current movie\, if it's in
3430 /// the database.
3431 /// <p><hr>
3432 /// @skinning_v15 **[Infolabel Updated]** \link VideoPlayer_Cast `VideoPlayer.Cast`\endlink
3433 /// also supports EPG.
3434 /// <p>
3435 /// }
3436 /// \table_row3{ <b>`VideoPlayer.CastAndRole`</b>,
3437 /// \anchor VideoPlayer_CastAndRole
3438 /// _string_,
3439 /// @return A concatenated string of cast members and roles of the current movie\,
3440 /// if it's in the database.
3441 /// <p>
3442 /// }
3443 /// \table_row3{ <b>`VideoPlayer.Album`</b>,
3444 /// \anchor VideoPlayer_Album
3445 /// _string_,
3446 /// @return The album from which the current Music Video is from\, if it's in the database.
3447 /// <p>
3448 /// }
3449 /// \table_row3{ <b>`VideoPlayer.offset(number).Album`</b>,
3450 /// \anchor VideoPlayer_Offset_Album
3451 /// _string_,
3452 /// @return The album from which the video which has an offset `number` with respect to the currently playing video.
3453 /// <p><hr>
3454 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_Album `VideoPlayer.offset(number).Album`\endlink
3455 /// <p>
3456 /// }
3457 /// \table_row3{ <b>`VideoPlayer.position(number).Album`</b>,
3458 /// \anchor VideoPlayer_Position_Album
3459 /// _string_,
3460 /// @return The album from which the music video which has an offset `number` with respect to the start of the playlist.
3461 /// <p><hr>
3462 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_Album `VideoPlayer.position(number).Album`\endlink
3463 /// <p>
3464 /// }
3465 /// \table_row3{ <b>`VideoPlayer.Artist`</b>,
3466 /// \anchor VideoPlayer_Artist
3467 /// _string_,
3468 /// @return The artist(s) of current Music Video\, if it's in the database.
3469 /// <p>
3470 /// }
3471 /// \table_row3{ <b>`VideoPlayer.offset(number).Artist`</b>,
3472 /// \anchor VideoPlayer_Offset_Artist
3473 /// _string_,
3474 /// @return The artist(s) of the video which has an offset `number` with respect to the currently playing video.
3475 /// <p><hr>
3476 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_Artist `VideoPlayer.offset(number).Artist`\endlink
3477 /// <p>
3478 /// }
3479 /// \table_row3{ <b>`VideoPlayer.position(number).Artist`</b>,
3480 /// \anchor VideoPlayer_Position_Artist
3481 /// _string_,
3482 /// @return The artist(s) of the music video which has an offset `number` with respect to the start of the playlist.
3483 /// <p><hr>
3484 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_Artist `VideoPlayer.position(number).Artist`\endlink
3485 /// <p>
3486 /// }
3487 /// \table_row3{ <b>`VideoPlayer.Studio`</b>,
3488 /// \anchor VideoPlayer_Studio
3489 /// _string_,
3490 /// @return The studio of current Music Video\, if it's in the database.
3491 /// <p>
3492 /// }
3493 /// \table_row3{ <b>`VideoPlayer.offset(number).Studio`</b>,
3494 /// \anchor VideoPlayer_Offset_Studio
3495 /// _string_,
3496 /// @return The studio of the video which has an offset `number` with respect to the currently playing video.
3497 /// <p><hr>
3498 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_Studio `VideoPlayer.offset(number).Studio`\endlink
3499 /// <p>
3500 /// }
3501 /// \table_row3{ <b>`VideoPlayer.position(number).Studio`</b>,
3502 /// \anchor VideoPlayer_Position_Studio
3503 /// _string_,
3504 /// @return The studio of the video which has an offset `number` with respect to the start of the playlist.
3505 /// <p><hr>
3506 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_Studio `VideoPlayer.position(number).Studio`\endlink
3507 /// <p>
3508 /// }
3509 /// \table_row3{ <b>`VideoPlayer.Writer`</b>,
3510 /// \anchor VideoPlayer_Writer
3511 /// _string_,
3512 /// @return The name of Writer of current playing Video\, if it's in the database.
3513 /// <p><hr>
3514 /// @skinning_v15 **[Infolabel Updated]** \link VideoPlayer_Writer `VideoPlayer.Writer`\endlink
3515 /// also supports EPG.
3516 /// <p>
3517 /// }
3518 /// \table_row3{ <b>`VideoPlayer.offset(number).Writer`</b>,
3519 /// \anchor VideoPlayer_Offset_Writer
3520 /// _string_,
3521 /// @return The name of Writer of the video which has an offset `number` with respect to the currently playing video.
3522 /// <p><hr>
3523 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_Writer `VideoPlayer.offset(number).Writer`\endlink
3524 /// <p>
3525 /// }
3526 /// \table_row3{ <b>`VideoPlayer.position(number).Writer`</b>,
3527 /// \anchor VideoPlayer_Position_Writer
3528 /// _string_,
3529 /// @return The name of Writer of the video which has an offset `number` with respect to the start of the playlist.
3530 /// <p><hr>
3531 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_Writer `VideoPlayer.position(number).Writer`\endlink
3532 /// <p>
3533 /// }
3534 /// \table_row3{ <b>`VideoPlayer.Tagline`</b>,
3535 /// \anchor VideoPlayer_Tagline
3536 /// _string_,
3537 /// @return The small Summary of current playing Video\, if it's in the database.
3538 /// <p>
3539 /// }
3540 /// \table_row3{ <b>`VideoPlayer.offset(number).Tagline`</b>,
3541 /// \anchor VideoPlayer_Offset_Tagline
3542 /// _string_,
3543 /// @return The small Summary of the video which has an offset `number` with respect to the currently playing video.
3544 /// <p><hr>
3545 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_Tagline `VideoPlayer.offset(number).Tagline`\endlink
3546 /// <p>
3547 /// }
3548 /// \table_row3{ <b>`VideoPlayer.position(number).Tagline`</b>,
3549 /// \anchor VideoPlayer_Position_Tagline
3550 /// _string_,
3551 /// @return The small Summary of the video which has an offset `number` with respect to the start of the playlist.
3552 /// <p><hr>
3553 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_Tagline `VideoPlayer.position(number).Tagline`\endlink
3554 /// <p>
3555 /// }
3556 /// \table_row3{ <b>`VideoPlayer.PlotOutline`</b>,
3557 /// \anchor VideoPlayer_PlotOutline
3558 /// _string_,
3559 /// @return The small Summary of current playing Video\, if it's in the database.
3560 /// <p>
3561 /// }
3562 /// \table_row3{ <b>`VideoPlayer.offset(number).PlotOutline`</b>,
3563 /// \anchor VideoPlayer_Offset_PlotOutline
3564 /// _string_,
3565 /// @return The small Summary of the video which has an offset `number` with respect to the currently playing video.
3566 /// <p><hr>
3567 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_PlotOutline `VideoPlayer.offset(number).PlotOutline`\endlink
3568 /// <p>
3569 /// }
3570 /// \table_row3{ <b>`VideoPlayer.position(number).PlotOutline`</b>,
3571 /// \anchor VideoPlayer_Position_PlotOutline
3572 /// _string_,
3573 /// @return The small Summary of the video which has an offset `number` with respect to the start of the playlist.
3574 /// <p><hr>
3575 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_PlotOutline `VideoPlayer.position(number).PlotOutline`\endlink
3576 /// <p>
3577 /// }
3578 /// \table_row3{ <b>`VideoPlayer.Plot`</b>,
3579 /// \anchor VideoPlayer_Plot
3580 /// _string_,
3581 /// @return The complete Text Summary of current playing Video\, if it's in the database.
3582 /// <p>
3583 /// }
3584 /// \table_row3{ <b>`VideoPlayer.offset(number).Plot`</b>,
3585 /// \anchor VideoPlayer_Offset_Plot
3586 /// _string_,
3587 /// @return The complete Text Summary of the video which has an offset `number` with respect to the currently playing video.
3588 /// <p><hr>
3589 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_Plot `VideoPlayer.offset(number).Plot`\endlink
3590 /// <p>
3591 /// }
3592 /// \table_row3{ <b>`VideoPlayer.position(number).Plot`</b>,
3593 /// \anchor VideoPlayer_Position_Plot
3594 /// _string_,
3595 /// @return The complete Text Summary of the video which has an offset `number` with respect to the start of the playlist.
3596 /// <p><hr>
3597 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_Plot `VideoPlayer.position(number).Plot`\endlink
3598 /// <p>
3599 /// }
3600 /// \table_row3{ <b>`VideoPlayer.Premiered`</b>,
3601 /// \anchor VideoPlayer_Premiered
3602 /// _string_,
3603 /// @return The release or aired date of the currently playing episode\, show\, movie or EPG item\,
3604 /// if it's in the database.
3605 /// <p>
3606 /// }
3607 /// \table_row3{ <b>`VideoPlayer.offset(number).Premiered`</b>,
3608 /// \anchor VideoPlayer_Offset_Premiered
3609 /// _string_,
3610 /// @return The release or aired date of the video which has an offset `number` with respect to the currently playing video.
3611 /// <p><hr>
3612 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_Premiered `VideoPlayer.offset(number).Premiered`\endlink
3613 /// <p>
3614 /// }
3615 /// \table_row3{ <b>`VideoPlayer.position(number).Premiered`</b>,
3616 /// \anchor VideoPlayer_Position_Premiered
3617 /// _string_,
3618 /// @return The release or aired date of the video which has an offset `number` with respect to the start of the playlist.
3619 /// if it's in the database.
3620 /// <p><hr>
3621 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_Premiered `VideoPlayer.position(number).Premiered`\endlink
3622 /// <p>
3623 /// }
3624 /// \table_row3{ <b>`VideoPlayer.Trailer`</b>,
3625 /// \anchor VideoPlayer_Trailer
3626 /// _string_,
3627 /// @return The path to the trailer of the currently playing movie\, if it's in the database.
3628 /// <p>
3629 /// }
3630 /// \table_row3{ <b>`VideoPlayer.offset(number).Trailer`</b>,
3631 /// \anchor VideoPlayer_Offset_Trailer
3632 /// _string_,
3633 /// @return The path to the trailer of the video which has an offset `number` with respect to the currently playing video.
3634 /// <p><hr>
3635 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_Trailer `VideoPlayer.offset(number).Title`\endlink
3636 /// <p>
3637 /// }
3638 /// \table_row3{ <b>`VideoPlayer.position(number).Trailer`</b>,
3639 /// \anchor VideoPlayer_Position_Trailer
3640 /// _string_,
3641 /// @return The path to the trailer of the video which has an offset `number` with respect to the start of the playlist.
3642 /// <p><hr>
3643 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_Trailer `VideoPlayer.position(number).Trailer`\endlink
3644 /// <p>
3645 /// }
3646 /// \table_row3{ <b>`VideoPlayer.LastPlayed`</b>,
3647 /// \anchor VideoPlayer_LastPlayed
3648 /// _string_,
3649 /// @return The last play date of current playing Video\, if it's in the database.
3650 /// <p>
3651 /// }
3652 /// \table_row3{ <b>`VideoPlayer.offset(number).LastPlayed`</b>,
3653 /// \anchor VideoPlayer_Offset_LastPlayed
3654 /// _string_,
3655 /// @return The last play date of the video which has an offset `number` with respect to the currently playing video.
3656 /// <p><hr>
3657 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_LastPlayed `VideoPlayer.offset(number).LastPlayed`\endlink
3658 /// <p>
3659 /// }
3660 /// \table_row3{ <b>`VideoPlayer.position(number).LastPlayed`</b>,
3661 /// \anchor VideoPlayer_Position_LastPlayed
3662 /// _string_,
3663 /// @return The last play date of the video which has an offset `number` with respect to the start of the playlist.
3664 /// <p><hr>
3665 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_LastPlayed `VideoPlayer.position(number).LastPlayed`\endlink
3666 /// <p>
3667 /// }
3668 /// \table_row3{ <b>`VideoPlayer.PlayCount`</b>,
3669 /// \anchor VideoPlayer_PlayCount
3670 /// _string_,
3671 /// @return The playcount of current playing Video\, if it's in the database.
3672 /// <p>
3673 /// }
3674 /// \table_row3{ <b>`VideoPlayer.offset(number).PlayCount`</b>,
3675 /// \anchor VideoPlayer_Offset_PlayCount
3676 /// _string_,
3677 /// @return The playcount of the video which has an offset `number` with respect to the currently playing video.
3678 /// <p><hr>
3679 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_PlayCount `VideoPlayer.offset(number).PlayCount`\endlink
3680 /// <p>
3681 /// }
3682 /// \table_row3{ <b>`VideoPlayer.position(number).PlayCount`</b>,
3683 /// \anchor VideoPlayer_Position_PlayCount
3684 /// _string_,
3685 /// @return The playcount of the video which has an offset `number` with respect to the start of the playlist.
3686 /// <p><hr>
3687 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_PlayCount `VideoPlayer.position(number).PlayCount`\endlink
3688 /// <p>
3689 /// }
3690 /// \table_row3{ <b>`VideoPlayer.VideoCodec`</b>,
3691 /// \anchor VideoPlayer_VideoCodec
3692 /// _string_,
3693 /// @return The video codec of the currently playing video (common values: see
3694 /// \ref ListItem_VideoCodec "ListItem.VideoCodec").
3695 /// <p>
3696 /// }
3697 /// \table_row3{ <b>`VideoPlayer.VideoResolution`</b>,
3698 /// \anchor VideoPlayer_VideoResolution
3699 /// _string_,
3700 /// @return The video resolution of the currently playing video (possible
3701 /// values: see \ref ListItem_VideoResolution "ListItem.VideoResolution").
3702 /// <p>
3703 /// }
3704 /// \table_row3{ <b>`VideoPlayer.VideoAspect`</b>,
3705 /// \anchor VideoPlayer_VideoAspect
3706 /// _string_,
3707 /// @return The aspect ratio of the currently playing video (possible values:
3708 /// see \ref ListItem_VideoAspect "ListItem.VideoAspect").
3709 /// <p>
3710 /// }
3711 /// \table_row3{ <b>`VideoPlayer.AudioCodec`</b>,
3712 /// \anchor VideoPlayer_AudioCodec
3713 /// _string_,
3714 /// @return The audio codec of the currently playing video\, optionally 'n'
3715 /// defines the number of the audiostream (common values: see
3716 /// \ref ListItem_AudioCodec "ListItem.AudioCodec").
3717 /// <p>
3718 /// }
3719 /// \table_row3{ <b>`VideoPlayer.AudioChannels`</b>,
3720 /// \anchor VideoPlayer_AudioChannels
3721 /// _string_,
3722 /// @return The number of audio channels of the currently playing video
3723 /// (possible values: see \ref ListItem_AudioChannels "ListItem.AudioChannels").
3724 /// <p><hr>
3725 /// @skinning_v16 **[Infolabel Updated]** \link VideoPlayer_AudioChannels `VideoPlayer.AudioChannels`\endlink
3726 /// if a video contains no audio\, these infolabels will now return empty.
3727 /// (they used to return 0)
3728 /// <p>
3729 /// }
3730 /// \table_row3{ <b>`VideoPlayer.AudioLanguage`</b>,
3731 /// \anchor VideoPlayer_AudioLanguage
3732 /// _string_,
3733 /// @return The language of the audio of the currently playing video(possible
3734 /// values: see \ref ListItem_AudioLanguage "ListItem.AudioLanguage").
3735 /// <p><hr>
3736 /// @skinning_v13 **[New Infolabel]** \link VideoPlayer_AudioLanguage `VideoPlayer.AudioLanguage`\endlink
3737 /// <p>
3738 /// }
3739 /// \table_row3{ <b>`VideoPlayer.SubtitlesLanguage`</b>,
3740 /// \anchor VideoPlayer_SubtitlesLanguage
3741 /// _string_,
3742 /// @return The language of the subtitle of the currently playing video
3743 /// (possible values: see \ref ListItem_SubtitleLanguage "ListItem.SubtitleLanguage").
3744 /// @note `VideoPlayer.SubtitlesLanguage` holds the language of the next available
3745 /// subtitle stream if subtitles are disabled in the player
3746 /// <p><hr>
3747 /// @skinning_v13 **[New Infolabel]** \link VideoPlayer_SubtitlesLanguage `VideoPlayer.SubtitlesLanguage`\endlink
3748 /// <p>
3749 /// }
3750 /// \table_row3{ <b>`VideoPlayer.StereoscopicMode`</b>,
3751 /// \anchor VideoPlayer_StereoscopicMode
3752 /// _string_,
3753 /// @return The stereoscopic mode of the currently playing video (possible
3754 /// values: see \ref ListItem_StereoscopicMode "ListItem.StereoscopicMode").
3755 /// <p><hr>
3756 /// @skinning_v13 **[New Infolabel]** \link VideoPlayer_StereoscopicMode `VideoPlayer.StereoscopicMode`\endlink
3757 /// <p>
3758 /// }
3759 /// \table_row3{ <b>`VideoPlayer.StartTime`</b>,
3760 /// \anchor VideoPlayer_StartTime
3761 /// _string_,
3762 /// @return The start date and time of the currently playing epg event or recording (PVR).
3763 /// <p>
3764 /// }
3765 /// \table_row3{ <b>`VideoPlayer.EndTime`</b>,
3766 /// \anchor VideoPlayer_EndTime
3767 /// _string_,
3768 /// @return The end date and time of the currently playing epg event or recording (PVR).
3769 /// <p>
3770 /// }
3771 /// \table_row3{ <b>`VideoPlayer.NextTitle`</b>,
3772 /// \anchor VideoPlayer_NextTitle
3773 /// _string_,
3774 /// @return The title of the programme that will be played next (PVR).
3775 /// <p>
3776 /// }
3777 /// \table_row3{ <b>`VideoPlayer.NextGenre`</b>,
3778 /// \anchor VideoPlayer_NextGenre
3779 /// _string_,
3780 /// @return The genre of the programme that will be played next (PVR).
3781 /// <p>
3782 /// }
3783 /// \table_row3{ <b>`VideoPlayer.NextPlot`</b>,
3784 /// \anchor VideoPlayer_NextPlot
3785 /// _string_,
3786 /// @return The plot of the programme that will be played next (PVR).
3787 /// <p>
3788 /// }
3789 /// \table_row3{ <b>`VideoPlayer.NextPlotOutline`</b>,
3790 /// \anchor VideoPlayer_NextPlotOutline
3791 /// _string_,
3792 /// @return The plot outline of the programme that will be played next (PVR).
3793 /// <p>
3794 /// }
3795 /// \table_row3{ <b>`VideoPlayer.NextStartTime`</b>,
3796 /// \anchor VideoPlayer_NextStartTime
3797 /// _string_,
3798 /// @return The start time of the programme that will be played next (PVR).
3799 /// <p>
3800 /// }
3801 /// \table_row3{ <b>`VideoPlayer.NextEndTime`</b>,
3802 /// \anchor VideoPlayer_NextEndTime
3803 /// _string_,
3804 /// @return The end time of the programme that will be played next (PVR).
3805 /// <p>
3806 /// }
3807 /// \table_row3{ <b>`VideoPlayer.NextDuration`</b>,
3808 /// \anchor VideoPlayer_NextDuration
3809 /// _string_,
3810 /// @return The duration of the programme that will be played next (PVR).
3811 /// <p>
3812 /// }
3813 /// \table_row3{ <b>`VideoPlayer.ChannelName`</b>,
3814 /// \anchor VideoPlayer_ChannelName
3815 /// _string_,
3816 /// @return The name of the currently tuned channel (PVR).
3817 /// <p>
3818 /// }
3819 /// \table_row3{ <b>`VideoPlayer.ChannelNumberLabel`</b>,
3820 /// \anchor VideoPlayer_ChannelNumberLabel
3821 /// _string_,
3822 /// @return The channel and subchannel number of the tv channel that's currently playing (PVR).
3823 /// <p><hr>
3824 /// @skinning_v14 **[New Infolabel]** \link VideoPlayer_ChannelNumberLabel `VideoPlayer.ChannelNumberLabel`\endlink
3825 /// <p>
3826 /// }
3827 /// \table_row3{ <b>`VideoPlayer.ChannelGroup`</b>,
3828 /// \anchor VideoPlayer_ChannelGroup
3829 /// _string_,
3830 /// @return The group of the currently tuned channel (PVR).
3831 /// <p>
3832 /// }
3833 /// \table_row3{ <b>`VideoPlayer.ParentalRating`</b>,
3834 /// \anchor VideoPlayer_ParentalRating
3835 /// _string_,
3836 /// @return The parental rating of the currently playing programme (PVR).
3837 /// <p>
3838 /// }
3839 /// \table_row3{ <b>`VideoPlayer.DBID`</b>,
3840 /// \anchor VideoPlayer_DBID
3841 /// _string_,
3842 /// @return The database id of the currently playing video
3843 /// <p><hr>
3844 /// @skinning_v17 **[New Infolabel]** \link VideoPlayer_DBID `VideoPlayer.DBID`\endlink
3845 /// <p>
3846 /// }
3847 /// \table_row3{ <b>`VideoPlayer.offset(number).DBID`</b>,
3848 /// \anchor VideoPlayer_Offset_DBID
3849 /// _string_,
3850 /// @return The database id of the video which has an offset `number` with respect to the currently playing video.
3851 /// <p><hr>
3852 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_DBID `VideoPlayer.offset(number).DBID`\endlink
3853 /// <p>
3854 /// }
3855 /// \table_row3{ <b>`VideoPlayer.position(number).DBID`</b>,
3856 /// \anchor VideoPlayer_Position_DBID
3857 /// _string_,
3858 /// @return The database id of the video which has an offset `number` with respect to the start of the playlist.
3859 /// <p><hr>
3860 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_DBID `VideoPlayer.position(number).DBID`\endlink
3861 /// <p>
3862 /// }
3863 /// \table_row3{ <b>`VideoPlayer.UniqueID(name)`</b>,
3864 /// \anchor VideoPlayer_UniqueID
3865 /// _string_,
3866 /// @return The scraped metadata id of current movie\, if it's in the database.
3867 /// @param name - the name of the metadata provider.
3868 /// <p><hr>
3869 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_UniqueID `VideoPlayer.UniqueID(name)`\endlink
3870 /// <p>
3871 /// }
3872 /// \table_row3{ <b>`VideoPlayer.TvShowDBID`</b>,
3873 /// \anchor VideoPlayer_TvShowDBID
3874 /// _string_,
3875 /// @return The database id of the TvShow for the currently playing Episode
3876 /// <p><hr>
3877 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_TvShowDBID `VideoPlayer.TvShowDBID`\endlink
3878 /// <p>
3879 /// }
3880 /// \table_row3{ <b>`VideoPlayer.AudioStreamCount`</b>,
3881 /// \anchor VideoPlayer_AudioStreamCount
3882 /// _integer_,
3883 /// @return The number of audio streams of the currently playing video.
3884 /// @note If the video contains no audio streams it returns 0.
3885 /// <p><hr>
3886 /// @skinning_v20 **[New Infolabel]** \link VideoPlayer_AudioStreamCount `VideoPlayer.AudioStreamCount`\endlink
3887 /// <p>
3888 /// }
3889 /// \table_row3{ <b>`VideoPlayer.HdrType`</b>,
3890 /// \anchor VideoPlayer_HdrType
3891 /// _string_,
3892 /// @return String containing the name of the detected HDR type or empty if not HDR. See \ref StreamHdrType for the list of possible values.
3893 /// <p><hr>
3894 /// @skinning_v20 **[New Infolabel]** \link VideoPlayer_HdrType `VideoPlayer.HdrType`\endlink
3895 /// <p>
3896 /// }
3897 /// \table_end
3899 /// -----------------------------------------------------------------------------
3900 // clang-format off
3901 const infomap videoplayer[] = {{ "title", VIDEOPLAYER_TITLE },
3902 { "genre", VIDEOPLAYER_GENRE },
3903 { "country", VIDEOPLAYER_COUNTRY },
3904 { "originaltitle", VIDEOPLAYER_ORIGINALTITLE },
3905 { "director", VIDEOPLAYER_DIRECTOR },
3906 { "year", VIDEOPLAYER_YEAR },
3907 { "cover", VIDEOPLAYER_COVER },
3908 { "usingoverlays", VIDEOPLAYER_USING_OVERLAYS },
3909 { "isfullscreen", VIDEOPLAYER_ISFULLSCREEN },
3910 { "hasmenu", VIDEOPLAYER_HASMENU },
3911 { "playlistlength", VIDEOPLAYER_PLAYLISTLEN },
3912 { "playlistposition", VIDEOPLAYER_PLAYLISTPOS },
3913 { "plot", VIDEOPLAYER_PLOT },
3914 { "plotoutline", VIDEOPLAYER_PLOT_OUTLINE },
3915 { "episode", VIDEOPLAYER_EPISODE },
3916 { "season", VIDEOPLAYER_SEASON },
3917 { "rating", VIDEOPLAYER_RATING },
3918 { "ratingandvotes", VIDEOPLAYER_RATING_AND_VOTES },
3919 { "userrating", VIDEOPLAYER_USER_RATING },
3920 { "votes", VIDEOPLAYER_VOTES },
3921 { "tvshowtitle", VIDEOPLAYER_TVSHOW },
3922 { "premiered", VIDEOPLAYER_PREMIERED },
3923 { "studio", VIDEOPLAYER_STUDIO },
3924 { "mpaa", VIDEOPLAYER_MPAA },
3925 { "top250", VIDEOPLAYER_TOP250 },
3926 { "cast", VIDEOPLAYER_CAST },
3927 { "castandrole", VIDEOPLAYER_CAST_AND_ROLE },
3928 { "artist", VIDEOPLAYER_ARTIST },
3929 { "album", VIDEOPLAYER_ALBUM },
3930 { "writer", VIDEOPLAYER_WRITER },
3931 { "tagline", VIDEOPLAYER_TAGLINE },
3932 { "hasinfo", VIDEOPLAYER_HAS_INFO },
3933 { "trailer", VIDEOPLAYER_TRAILER },
3934 { "videocodec", VIDEOPLAYER_VIDEO_CODEC },
3935 { "videoresolution", VIDEOPLAYER_VIDEO_RESOLUTION },
3936 { "videoaspect", VIDEOPLAYER_VIDEO_ASPECT },
3937 { "videobitrate", VIDEOPLAYER_VIDEO_BITRATE },
3938 { "audiocodec", VIDEOPLAYER_AUDIO_CODEC },
3939 { "audiochannels", VIDEOPLAYER_AUDIO_CHANNELS },
3940 { "audiobitrate", VIDEOPLAYER_AUDIO_BITRATE },
3941 { "audiolanguage", VIDEOPLAYER_AUDIO_LANG },
3942 { "hasteletext", VIDEOPLAYER_HASTELETEXT },
3943 { "lastplayed", VIDEOPLAYER_LASTPLAYED },
3944 { "playcount", VIDEOPLAYER_PLAYCOUNT },
3945 { "hassubtitles", VIDEOPLAYER_HASSUBTITLES },
3946 { "subtitlesenabled", VIDEOPLAYER_SUBTITLESENABLED },
3947 { "subtitleslanguage",VIDEOPLAYER_SUBTITLES_LANG },
3948 { "starttime", VIDEOPLAYER_STARTTIME },
3949 { "endtime", VIDEOPLAYER_ENDTIME },
3950 { "nexttitle", VIDEOPLAYER_NEXT_TITLE },
3951 { "nextgenre", VIDEOPLAYER_NEXT_GENRE },
3952 { "nextplot", VIDEOPLAYER_NEXT_PLOT },
3953 { "nextplotoutline", VIDEOPLAYER_NEXT_PLOT_OUTLINE },
3954 { "nextstarttime", VIDEOPLAYER_NEXT_STARTTIME },
3955 { "nextendtime", VIDEOPLAYER_NEXT_ENDTIME },
3956 { "nextduration", VIDEOPLAYER_NEXT_DURATION },
3957 { "channelname", VIDEOPLAYER_CHANNEL_NAME },
3958 { "channelnumberlabel", VIDEOPLAYER_CHANNEL_NUMBER },
3959 { "channelgroup", VIDEOPLAYER_CHANNEL_GROUP },
3960 { "hasepg", VIDEOPLAYER_HAS_EPG },
3961 { "parentalrating", VIDEOPLAYER_PARENTAL_RATING },
3962 { "isstereoscopic", VIDEOPLAYER_IS_STEREOSCOPIC },
3963 { "stereoscopicmode", VIDEOPLAYER_STEREOSCOPIC_MODE },
3964 { "canresumelivetv", VIDEOPLAYER_CAN_RESUME_LIVE_TV },
3965 { "imdbnumber", VIDEOPLAYER_IMDBNUMBER },
3966 { "episodename", VIDEOPLAYER_EPISODENAME },
3967 { "dbid", VIDEOPLAYER_DBID },
3968 { "uniqueid", VIDEOPLAYER_UNIQUEID },
3969 { "tvshowdbid", VIDEOPLAYER_TVSHOWDBID },
3970 { "audiostreamcount", VIDEOPLAYER_AUDIOSTREAMCOUNT },
3971 { "hdrtype", VIDEOPLAYER_HDR_TYPE },
3972 { "art", VIDEOPLAYER_ART},
3974 // clang-format on
3976 /// \page modules__infolabels_boolean_conditions
3977 /// \subsection modules__infolabels_boolean_conditions_RetroPlayer RetroPlayer
3978 /// \table_start
3979 /// \table_h3{ Labels, Type, Description }
3980 /// \table_row3{ <b>`RetroPlayer.VideoFilter`</b>,
3981 /// \anchor RetroPlayer_VideoFilter
3982 /// _string_,
3983 /// @return The video filter of the currently-playing game.
3984 /// The following values are possible:
3985 /// - nearest (Nearest neighbor\, i.e. pixelate)
3986 /// - linear (Bilinear filtering\, i.e. smooth blur)
3987 /// <p><hr>
3988 /// @skinning_v18 **[New Infolabel]** \link RetroPlayer_VideoFilter `RetroPlayer.VideoFilter`\endlink
3989 /// <p>
3990 /// }
3991 /// \table_row3{ <b>`RetroPlayer.StretchMode`</b>,
3992 /// \anchor RetroPlayer_StretchMode
3993 /// _string_,
3994 /// @return The stretch mode of the currently-playing game.
3995 /// The following values are possible:
3996 /// - normal (Show the game normally)
3997 /// - 4:3 (Stretch to a 4:3 aspect ratio)
3998 /// - fullscreen (Stretch to the full viewing area)
3999 /// - original (Shrink to the original resolution)
4000 /// <p><hr>
4001 /// @skinning_v18 **[New Infolabel]** \link RetroPlayer_StretchMode `RetroPlayer.StretchMode`\endlink
4002 /// <p>
4003 /// }
4004 /// \table_row3{ <b>`RetroPlayer.VideoRotation`</b>,
4005 /// \anchor RetroPlayer_VideoRotation
4006 /// _integer_,
4007 /// @return The video rotation of the currently-playing game
4008 /// in degrees counter-clockwise.
4009 /// The following values are possible:
4010 /// - 0
4011 /// - 90 (Shown in the GUI as 270 degrees)
4012 /// - 180
4013 /// - 270 (Shown in the GUI as 90 degrees)
4014 /// <p><hr>
4015 /// @skinning_v18 **[New Infolabel]** \link RetroPlayer_VideoRotation `RetroPlayer.VideoRotation`\endlink
4016 /// <p>
4017 /// }
4018 /// \table_end
4020 /// -----------------------------------------------------------------------------
4021 const infomap retroplayer[] =
4023 { "videofilter", RETROPLAYER_VIDEO_FILTER},
4024 { "stretchmode", RETROPLAYER_STRETCH_MODE},
4025 { "videorotation", RETROPLAYER_VIDEO_ROTATION},
4028 /// \page modules__infolabels_boolean_conditions
4029 /// \subsection modules__infolabels_boolean_conditions_Container Container
4030 /// \table_start
4031 /// \table_h3{ Labels, Type, Description }
4032 /// \table_row3{ <b>`Container.HasFiles`</b>,
4033 /// \anchor Container_HasFiles
4034 /// _boolean_,
4035 /// @return **True** if the container contains files.
4036 /// <p>
4037 /// }
4038 /// \table_row3{ <b>`Container.HasFolders`</b>,
4039 /// \anchor Container_HasFolders
4040 /// _boolean_,
4041 /// @return **True** if the container contains folders.
4042 /// <p>
4043 /// }
4044 /// \table_row3{ <b>`Container.IsStacked`</b>,
4045 /// \anchor Container_IsStacked
4046 /// _boolean_,
4047 /// @return **True** if the container is currently in stacked mode.
4048 /// <p>
4049 /// }
4050 /// \table_row3{ <b>`Container.FolderPath`</b>,
4051 /// \anchor Container_FolderPath
4052 /// _string_,
4053 /// @return The complete path of currently displayed folder.
4054 /// <p>
4055 /// }
4056 /// \table_row3{ <b>`Container.FolderName`</b>,
4057 /// \anchor Container_FolderName
4058 /// _string_,
4059 /// @return The top most folder in currently displayed folder.
4060 /// <p>
4061 /// }
4062 /// \table_row3{ <b>`Container.PluginName`</b>,
4063 /// \anchor Container_PluginName
4064 /// _string_,
4065 /// @return The current plugins base folder name.
4066 /// <p>
4067 /// }
4068 /// \table_row3{ <b>`Container.PluginCategory`</b>,
4069 /// \anchor Container_PluginCategory
4070 /// _string_,
4071 /// @return The current plugins category (set by the scripter).
4072 /// <p><hr>
4073 /// @skinning_v17 **[New Infolabel]** \link Container_PluginCategory `Container.PluginCategory`\endlink
4074 /// <p>
4075 /// }
4076 /// \table_row3{ <b>`Container.Viewmode`</b>,
4077 /// \anchor Container_Viewmode
4078 /// _string_,
4079 /// @return The current viewmode (list\, icons etc).
4080 /// <p>
4081 /// }
4082 /// \table_row3{ <b>`Container.ViewCount`</b>,
4083 /// \anchor Container_ViewCount
4084 /// _integer_,
4085 /// @return The number of available skin view modes for the current container listing.
4086 /// <p><hr>
4087 /// @skinning_v17 **[New Infolabel]** \link Container_ViewCount `Container.ViewCount`\endlink
4088 /// <p>
4089 /// }
4090 /// \table_row3{ <b>`Container.Totaltime`</b>,
4091 /// \anchor Container_Totaltime
4092 /// _string_,
4093 /// @return The total time of all items in the current container.
4094 /// <p>
4095 /// }
4096 /// \table_row3{ <b>`Container.TotalWatched`</b>,
4097 /// \anchor Container_TotalWatched
4098 /// _string_,
4099 /// @return The number of watched items in the container.
4100 /// @param id - [opt] if not supplied the current container will be used.
4101 /// <p><hr>
4102 /// @skinning_v16 **[New Infolabel]** \link Container_TotalWatched `Container(id).TotalWatched`\endlink
4103 /// <p>
4104 /// }
4105 /// \table_row3{ <b>`Container.TotalUnWatched`</b>,
4106 /// \anchor Container_TotalUnWatched
4107 /// _string_,
4108 /// @return The number of unwatched items in the container.
4109 /// @param id - [opt] if not supplied the current container will be used.
4110 /// <p><hr>
4111 /// @skinning_v16 **[New Infolabel]** \link Container_TotalUnWatched `Container(id).TotalUnWatched`\endlink
4112 /// <p>
4113 /// }
4114 /// \table_row3{ <b>`Container.HasThumb`</b>,
4115 /// \anchor Container_HasThumb
4116 /// _boolean_,
4117 /// @return **True** if the current container you are in has a thumb assigned
4118 /// to it.
4119 /// <p>
4120 /// }
4121 /// \table_row3{ <b>`Container.SortOrder`</b>,
4122 /// \anchor Container_SortOrder
4123 /// _string_,
4124 /// @return The current sort order (Ascending/Descending).
4125 /// <p><hr>
4126 /// @skinning_v16 **[New Infolabel]** \link Container_SortOrder `Container.SortOrder`\endlink
4127 /// <p>
4128 /// }
4129 /// \table_row3{ <b>`Container.CanFilter`</b>,
4130 /// \anchor Container_CanFilter
4131 /// _boolean_,
4132 /// @return **True** when the current container can be filtered.
4133 /// <p>
4134 /// }
4135 /// \table_row3{ <b>`Container.CanFilterAdvanced`</b>,
4136 /// \anchor Container_CanFilterAdvanced
4137 /// _boolean_,
4138 /// @return **True** when advanced filtering can be applied to the current container.
4139 /// <p>
4140 /// }
4141 /// \table_row3{ <b>`Container.Filtered`</b>,
4142 /// \anchor Container_Filtered
4143 /// _boolean_,
4144 /// @return **True** when a mediafilter is applied to the current container.
4145 /// <p>
4146 /// }
4147 /// \table_row3{ <b>`Container.ShowPlot`</b>,
4148 /// \anchor Container_ShowPlot
4149 /// _string_,
4150 /// @return The TV Show plot of the current container and can be used at
4151 /// season and episode level.
4152 /// <p>
4153 /// }
4154 /// \table_row3{ <b>`Container.ShowTitle`</b>,
4155 /// \anchor Container_ShowTitle
4156 /// _string_,
4157 /// @return The TV Show title of the current container and can be used at
4158 /// season and episode level.
4159 /// <p><hr>
4160 /// @skinning_v17 **[New Infolabel]** \link Container_ShowTitle `Container.ShowTitle`\endlink
4161 /// <p>
4162 /// }
4163 const infomap mediacontainer[] = {{ "hasfiles", CONTAINER_HASFILES },
4164 { "hasfolders", CONTAINER_HASFOLDERS },
4165 { "isstacked", CONTAINER_STACKED },
4166 { "folderpath", CONTAINER_FOLDERPATH },
4167 { "foldername", CONTAINER_FOLDERNAME },
4168 { "pluginname", CONTAINER_PLUGINNAME },
4169 { "plugincategory", CONTAINER_PLUGINCATEGORY },
4170 { "viewmode", CONTAINER_VIEWMODE },
4171 { "viewcount", CONTAINER_VIEWCOUNT },
4172 { "totaltime", CONTAINER_TOTALTIME },
4173 { "totalwatched", CONTAINER_TOTALWATCHED },
4174 { "totalunwatched", CONTAINER_TOTALUNWATCHED },
4175 { "hasthumb", CONTAINER_HAS_THUMB },
4176 { "sortorder", CONTAINER_SORT_ORDER },
4177 { "canfilter", CONTAINER_CAN_FILTER },
4178 { "canfilteradvanced",CONTAINER_CAN_FILTERADVANCED },
4179 { "filtered", CONTAINER_FILTERED },
4180 { "showplot", CONTAINER_SHOWPLOT },
4181 { "showtitle", CONTAINER_SHOWTITLE }};
4183 /// \page modules__infolabels_boolean_conditions
4184 /// \table_row3{ <b>`Container(id).OnNext`</b>,
4185 /// \anchor Container_OnNext
4186 /// _boolean_,
4187 /// @return **True** if the container with id (or current container if id is
4188 /// omitted) is moving to the next item. Allows views to be
4189 /// custom-designed (such as 3D coverviews etc.)
4190 /// <p>
4191 /// }
4192 /// \table_row3{ <b>`Container(id).OnScrollNext`</b>,
4193 /// \anchor Container_OnScrollNext
4194 /// _boolean_,
4195 /// @return **True** if the container with id (or current container if id is
4196 /// omitted) is scrolling to the next item. Differs from \ref Container_OnNext "OnNext" in that
4197 /// \ref Container_OnNext "OnNext" triggers on movement even if there is no scroll involved.
4198 /// <p>
4199 /// }
4200 /// \table_row3{ <b>`Container(id).OnPrevious`</b>,
4201 /// \anchor Container_OnPrevious
4202 /// _boolean_,
4203 /// @return **True** if the container with id (or current container if id is
4204 /// omitted) is moving to the previous item. Allows views to be
4205 /// custom-designed (such as 3D coverviews etc).
4206 /// <p>
4207 /// }
4208 /// \table_row3{ <b>`Container(id).OnScrollPrevious`</b>,
4209 /// \anchor Container_OnScrollPrevious
4210 /// _boolean_,
4211 /// @return **True** if the container with id (or current container if id is
4212 /// omitted) is scrolling to the previous item. Differs from \ref Container_OnPrevious "OnPrevious" in
4213 /// that \ref Container_OnPrevious "OnPrevious" triggers on movement even if there is no scroll involved.
4214 /// <p>
4215 /// }
4216 /// \table_row3{ <b>`Container(id).NumPages`</b>,
4217 /// \anchor Container_NumPages
4218 /// _integer_,
4219 /// @return The number of pages in the container with given id. If no id is specified it
4220 /// grabs the current container.
4221 /// <p>
4222 /// }
4223 /// \table_row3{ <b>`Container(id).NumItems`</b>,
4224 /// \anchor Container_NumItems
4225 /// _integer_,
4226 /// @return The number of items in the container or grouplist with given id excluding parent folder item.
4227 /// @note If no id is specified it grabs the current container.
4228 /// <p>
4229 /// }
4230 /// \table_row3{ <b>`Container(id).NumAllItems`</b>,
4231 /// \anchor Container_NumAllItems
4232 /// _integer_,
4233 /// @return The number of all items in the container or grouplist with given id including parent folder item.
4234 /// @note If no id is specified it grabs the current container.
4235 /// <p><hr>
4236 /// @skinning_v18 **[New Infolabel]** \link Container_NumAllItems `Container(id).NumAllItems`\endlink
4237 /// <p>
4238 /// }
4239 /// \table_row3{ <b>`Container(id).NumNonFolderItems`</b>,
4240 /// \anchor Container_NumNonFolderItems
4241 /// _integer_,
4242 /// @return The Number of items in the container or grouplist with given id excluding all folder items.
4243 /// @note **Example:** pvr recordings folders\, parent ".." folder).
4244 /// If no id is specified it grabs the current container.
4245 /// <p><hr>
4246 /// @skinning_v18 **[New Infolabel]** \link Container_NumNonFolderItems `Container(id).NumNonFolderItems`\endlink
4247 /// <p>
4248 /// }
4249 /// \table_row3{ <b>`Container(id).CurrentPage`</b>,
4250 /// \anchor Container_CurrentPage
4251 /// _string_,
4252 /// @return THe current page in the container with given id.
4253 /// @note If no id is specified it grabs the current container.
4254 /// <p>
4255 /// }
4256 /// \table_row3{ <b>`Container(id).CurrentItem`</b>,
4257 /// \anchor Container_CurrentItem
4258 /// _integer_,
4259 /// @return The current item in the container or grouplist with given id.
4260 /// @note If no id is specified it grabs the current container.
4261 /// <p><hr>
4262 /// @skinning_v15 **[New Infolabel]** \link Container_CurrentItem `Container(id).CurrentItem`\endlink
4263 /// <p>
4264 /// }
4265 /// \table_row3{ <b>`Container(id).Scrolling`</b>,
4266 /// \anchor Container_Scrolling
4267 /// _boolean_,
4268 /// @return **True** if the user is currently scrolling through the container
4269 /// with id (or current container if id is omitted).
4270 /// @note This is slightly delayed from the actual scroll start. Use
4271 /// \ref Container_OnScrollNext "Container(id).OnScrollNext" or
4272 /// \ref Container_OnScrollPrevious "Container(id).OnScrollPrevious" to trigger animations
4273 /// immediately on scroll.
4274 /// <p>
4275 /// }
4276 /// \table_row3{ <b>`Container(id).HasNext`</b>,
4277 /// \anchor Container_HasNext
4278 /// _boolean_,
4279 /// @return **True** if the container or textbox with id (id) has a next page.
4280 /// <p>
4281 /// }
4282 /// \table_row3{ <b>`Container(id).HasParent`</b>,
4283 /// \anchor Container_HasParent
4284 /// _boolean_,
4285 /// @return **True** when the container with given id contains a parent ('..') item.
4286 /// @note If no id is specified it grabs the current container.
4287 /// <p><hr>
4288 /// @skinning_v16 **[New Boolean Condition]** \link Container_HasParent `Container.HasParent`\endlink
4289 /// <p>
4290 /// }
4291 /// \table_row3{ <b>`Container(id).HasPrevious`</b>,
4292 /// \anchor Container_HasPrevious
4293 /// _boolean_,
4294 /// @return **True** if the container or textbox with id (id) has a previous page.
4295 /// <p>
4296 /// }
4297 /// \table_row3{ <b>`Container(id).IsUpdating`</b>,
4298 /// \anchor Container_IsUpdating
4299 /// _boolean_,
4300 /// @return **True** if the container with dynamic list content is currently updating.
4301 /// }
4302 const infomap container_bools[] ={{ "onnext", CONTAINER_MOVE_NEXT },
4303 { "onprevious", CONTAINER_MOVE_PREVIOUS },
4304 { "onscrollnext", CONTAINER_SCROLL_NEXT },
4305 { "onscrollprevious", CONTAINER_SCROLL_PREVIOUS },
4306 { "numpages", CONTAINER_NUM_PAGES },
4307 { "numitems", CONTAINER_NUM_ITEMS },
4308 { "numnonfolderitems", CONTAINER_NUM_NONFOLDER_ITEMS },
4309 { "numallitems", CONTAINER_NUM_ALL_ITEMS },
4310 { "currentpage", CONTAINER_CURRENT_PAGE },
4311 { "currentitem", CONTAINER_CURRENT_ITEM },
4312 { "scrolling", CONTAINER_SCROLLING },
4313 { "hasnext", CONTAINER_HAS_NEXT },
4314 { "hasparent", CONTAINER_HAS_PARENT_ITEM },
4315 { "hasprevious", CONTAINER_HAS_PREVIOUS },
4316 { "isupdating", CONTAINER_ISUPDATING }};
4318 /// \page modules__infolabels_boolean_conditions
4319 /// \table_row3{ <b>`Container(id).Row`</b>,
4320 /// \anchor Container_Row
4321 /// _integer_,
4322 /// @return The row number of the focused position in a panel container.
4323 /// <p><hr>
4324 /// @skinning_v16 **[New Infolabel]** \link Container_Row `Container(id).Row`\endlink
4325 /// <p>
4326 /// }
4327 /// \table_row3{ <b>`Container(id).Row(parameter)`</b>,
4328 /// \anchor Container_Row_parameter
4329 /// _boolean_,
4330 /// @return **True** if the row number of the focused position matches the specified parameter.
4331 /// <p>
4332 /// }
4333 /// \table_row3{ <b>`Container(id).Column`</b>,
4334 /// \anchor Container_Column
4335 /// _integer_,
4336 /// @return The column number of the focused position in a panel container.
4337 /// <p><hr>
4338 /// @skinning_v16 **[New Infolabel]** \link Container_Column `Container(id).Column`\endlink
4339 /// <p>
4340 /// }
4341 /// \table_row3{ <b>`Container(id).Column(parameter)`</b>,
4342 /// \anchor Container_Column_parameter
4343 /// _boolean_,
4344 /// @return **True** if the column number of the focused position matches the specified parameter.
4345 /// <p>
4346 /// }
4347 /// \table_row3{ <b>`Container(id).Position`</b>,
4348 /// \anchor Container_Position
4349 /// _integer_,
4350 /// @return The current focused position of container / grouplist (id) as a
4351 /// numeric label.
4352 /// <p><hr>
4353 /// @skinning_v16 **[Infolabel Updated]** \link Container_Position `Container(id).Position`\endlink
4354 /// now also returns the position for items inside a grouplist.
4355 /// <p>
4356 /// }
4357 /// \table_row3{ <b>`Container(id).Position(parameter)`</b>,
4358 /// \anchor Container_Position_parameter
4359 /// _boolean_,
4360 /// @return **True** if the container with id (or current container if id is omitted) is focused on the specified position.
4361 /// <p>
4362 /// }
4363 /// \table_row3{ <b>`Container(id).SubItem(item_number)`</b>,
4364 /// \anchor Container_SubItem
4365 /// _boolean_,
4366 /// @return **True** if the container with id (or current container if id is omitted) is focused on the specified subitem.
4367 /// @note If no id is specified it grabs the current container.
4368 /// <p>
4369 /// }
4370 /// \table_row3{ <b>`Container(id).HasFocus(item_number)`</b>,
4371 /// \anchor Container_HasFocus
4372 /// _boolean_,
4373 /// @return **True** if the container with id (or current container if id is
4374 /// omitted) has static content and is focused on the item with id
4375 /// item_number.
4376 /// <p>
4377 /// }
4378 /// \table_row3{ <b>`Container.SortMethod`</b>,
4379 /// \anchor Container_SortMethod
4380 /// _string_,
4381 /// @return The current sort method (returns a localized value).
4382 /// <p>
4383 /// }
4384 /// \table_row3{ <b>`Container.SortMethod(sortid)`</b>,
4385 /// \anchor Container_SortMethod_sortid
4386 /// _boolean_,
4387 /// @return **True** if the current sort method matches the specified SortID (see \ref List_of_sort_methods "SortUtils").
4388 /// <p>
4389 /// }
4390 const infomap container_ints[] = {{ "row", CONTAINER_ROW },
4391 { "column", CONTAINER_COLUMN },
4392 { "position", CONTAINER_POSITION },
4393 { "subitem", CONTAINER_SUBITEM },
4394 { "hasfocus", CONTAINER_HAS_FOCUS },
4395 { "sortmethod", CONTAINER_SORT_METHOD },
4398 /// \page modules__infolabels_boolean_conditions
4399 /// \table_row3{ <b>`Container.Property(addoncategory)`</b>,
4400 /// \anchor Container_Property_addoncategory
4401 /// _string_,
4402 /// @return The current add-on category.
4403 /// <p>
4404 /// }
4405 /// \table_row3{ <b>`Container.Property(reponame)`</b>,
4406 /// \anchor Container_Property_reponame
4407 /// _string_,
4408 /// @return The current add-on repository name.
4409 /// <p>
4410 /// }
4411 /// \table_row3{ <b>`Container.Content`</b>,
4412 /// \anchor Container_Content
4413 /// _string_,
4414 /// @return The content of the current container.
4415 /// <p><hr>
4416 /// @skinning_v16 **[New Infolabel]** \link Container_Content `Container.Content`\endlink
4417 /// <p>
4418 /// }
4419 /// \table_row3{ <b>`Container(id).ListItem(offset).Property`</b>,
4420 /// \anchor Container_ListItem_property
4421 /// _string_,
4422 /// @return the property of the ListItem with a given offset.
4423 /// @param offset - The offset for the listitem.
4424 /// @note `Property` has to be replaced with `Label`\, `Label2`\, `Icon` etc.
4425 /// @note **Example:** `Container(50).Listitem(2).Label `
4426 /// <p>
4427 /// }
4428 /// \table_row3{ <b>`Container(id).ListItemNoWrap(offset).Property`</b>,
4429 /// \anchor Container_ListItemNoWrap
4430 /// _string_,
4431 /// @return the same as \link Container_ListItem_property `Container(id).ListItem(offset).Property` \endlink
4432 /// but it won't wrap.
4433 /// @param offset - The offset for the listitem.
4434 /// @note That means if the last item of a list is focused\, `ListItemNoWrap(1)`
4435 /// will be empty while `ListItem(1)` will return the first item of the list.
4436 /// `Property` has to be replaced with `Label`\, `Label2`\, `Icon` etc.
4437 /// @note **Example:** `Container(50).ListitemNoWrap(1).Plot`
4438 /// <p>
4439 /// }
4440 /// \table_row3{ <b>`Container(id).ListItemPosition(x).[infolabel]`</b>,
4441 /// \anchor Container_ListItemPosition
4442 /// _string_,
4443 /// @return The infolabel for an item in a Container.
4444 /// @param x - the position in the container relative to the cursor position.
4445 /// @note **Example:** `Container(50).ListItemPosition(4).Genre`
4446 /// <p>
4447 /// }
4448 /// \table_row3{ <b>`Container(id).ListItemAbsolute(x).[infolabel]`</b>,
4449 /// \anchor Container_ListItemAbsolute
4450 /// _string_,
4451 /// @return The infolabel for an item in a Container.
4452 /// @param x - the absolute position in the container.
4453 /// @note **Example:** `Container(50).ListItemAbsolute(4).Genre`
4454 /// <p><hr>
4455 /// @skinning_v16 **[New Infolabel]** \link Container_ListItemAbsolute `Container(id).ListItemAbsolute(x).[infolabel]`\endlink
4456 /// <p>
4457 /// }
4458 /// \table_row3{ <b>`Container.Content(parameter)`</b>,
4459 /// \anchor Container_Content_parameter
4460 /// _string_,
4461 /// @return **True** if the current container you are in contains the following:
4462 /// - <b>files</b>
4463 /// - <b>songs</b>
4464 /// - <b>artists</b>
4465 /// - <b>albums</b>
4466 /// - <b>movies</b>
4467 /// - <b>tvshows</b>
4468 /// - <b>seasons</b>
4469 /// - <b>episodes</b>
4470 /// - <b>musicvideos</b>
4471 /// - <b>genres</b>
4472 /// - <b>years</b>
4473 /// - <b>actors</b>
4474 /// - <b>playlists</b>
4475 /// - <b>plugins</b>
4476 /// - <b>studios</b>
4477 /// - <b>directors</b>
4478 /// - <b>sets</b>
4479 /// - <b>tags</b>
4480 /// @note These currently only work in the Video and Music
4481 /// Library or unless a Plugin has set the value) also available are
4482 /// Addons true when a list of add-ons is shown LiveTV true when a
4483 /// htsp (tvheadend) directory is shown
4484 /// <p>
4485 /// }
4486 /// \table_row3{ <b>`Container.Art(type)`</b>,
4487 /// \anchor Container_Art
4488 /// _string_,
4489 /// @return The path to the art image file for the given type of the current container.
4490 /// @param type - the art type to request.
4491 /// @todo List of all art types
4492 /// <p><hr>
4493 /// @skinning_v16 **[Infolabel Updated]** \link Container_Art `Container.Art(type)`\endlink
4494 /// <b>set.fanart</b> as possible type value.
4495 /// @skinning_v15 **[New Infolabel]** \link Container_Art `Container.Art(type)`\endlink
4496 /// <p>
4497 /// }
4499 const infomap container_str[] = {{ "property", CONTAINER_PROPERTY },
4500 { "content", CONTAINER_CONTENT },
4501 { "art", CONTAINER_ART }};
4503 /// \page modules__infolabels_boolean_conditions
4504 /// \table_row3{ <b>`Container.SortDirection(direction)`</b>,
4505 /// \anchor Container_SortDirection
4506 /// _boolean_,
4507 /// @return **True** if the sort direction of a container equals direction.
4508 /// @param direction - The direction to check. It can be:
4509 /// - <b>ascending</b>
4510 /// - <b>descending</b>
4511 /// <p>
4512 /// }
4513 /// \table_end
4515 /// -----------------------------------------------------------------------------
4517 /// \page modules__infolabels_boolean_conditions
4518 /// \subsection modules__infolabels_boolean_conditions_ListItem ListItem
4519 /// \table_start
4520 /// \table_h3{ Labels, Type, Description }
4521 /// \table_row3{ <b>`ListItem.Thumb`</b>,
4522 /// \anchor ListItem_Thumb
4523 /// _string_,
4524 /// @return The thumbnail (if it exists) of the currently selected item
4525 /// in a list or thumb control.
4526 /// @deprecated but still available\, returns
4527 /// the same as \ref ListItem_Art_Type "ListItem.Art(thumb)"
4528 /// <p>
4529 /// }
4530 /// \table_row3{ <b>`ListItem.Icon`</b>,
4531 /// \anchor ListItem_Icon
4532 /// _string_,
4533 /// @return The thumbnail (if it exists) of the currently selected item in a list or thumb control.
4534 /// @note If no thumbnail image exists\, it will show the icon.
4535 /// <p>
4536 /// }
4537 /// \table_row3{ <b>`ListItem.ActualIcon`</b>,
4538 /// \anchor ListItem_ActualIcon
4539 /// _string_,
4540 /// @return The icon of the currently selected item in a list or thumb control.
4541 /// <p>
4542 /// }
4543 /// \table_row3{ <b>`ListItem.Overlay`</b>,
4544 /// \anchor ListItem_Overlay
4545 /// _string_,
4546 /// @return The overlay icon status of the currently selected item in a list or thumb control.
4547 /// - compressed file -- OverlayRAR.png
4548 /// - watched -- OverlayWatched.png
4549 /// - unwatched -- OverlayUnwatched.png
4550 /// - locked -- OverlayLocked.png
4551 /// <p>
4552 /// }
4553 /// \table_row3{ <b>`ListItem.IsFolder`</b>,
4554 /// \anchor ListItem_IsFolder
4555 /// _boolean_,
4556 /// @return **True** if the current ListItem is a folder.
4557 /// <p>
4558 /// }
4559 /// \table_row3{ <b>`ListItem.IsPlaying`</b>,
4560 /// \anchor ListItem_IsPlaying
4561 /// _boolean_,
4562 /// @return **True** if the current ListItem.* info labels and images are
4563 /// currently Playing media.
4564 /// <p>
4565 /// }
4566 /// \table_row3{ <b>`ListItem.IsResumable`</b>,
4567 /// \anchor ListItem_IsResumable
4568 /// _boolean_,
4569 /// @return **True** when the current ListItem has been partially played.
4570 /// <p>
4571 /// }
4572 /// \table_row3{ <b>`ListItem.IsCollection`</b>,
4573 /// \anchor ListItem_IsCollection
4574 /// _boolean_,
4575 /// @return **True** when the current ListItem is a movie set.
4576 /// <p><hr>
4577 /// @skinning_v15 **[New Boolean Condition]** \link ListItem_IsCollection `ListItem.IsCollection`\endlink
4578 /// <p>
4579 /// }
4580 /// \table_row3{ <b>`ListItem.IsSelected`</b>,
4581 /// \anchor ListItem_IsSelected
4582 /// _boolean_,
4583 /// @return **True** if the current ListItem is selected (f.e. currently playing
4584 /// in playlist window).
4585 /// <p>
4586 /// }
4587 /// \table_row3{ <b>`ListItem.HasEpg`</b>,
4588 /// \anchor ListItem_HasEpg
4589 /// _boolean_,
4590 /// @return **True** when the selected programme has epg info (PVR).
4591 /// <p>
4592 /// }
4593 /// \table_row3{ <b>`ListItem.HasTimer`</b>,
4594 /// \anchor ListItem_HasTimer
4595 /// _boolean_,
4596 /// @return **True** when a recording timer has been set for the selected
4597 /// programme (PVR).
4598 /// <p>
4599 /// }
4600 /// \table_row3{ <b>`ListItem.IsRecording`</b>,
4601 /// \anchor ListItem_IsRecording
4602 /// _boolean_,
4603 /// @return **True** when the selected programme is being recorded (PVR).
4604 /// <p>
4605 /// }
4606 /// \table_row3{ <b>`ListItem.IsPlayable`</b>,
4607 /// \anchor ListItem_IsPlayable
4608 /// _boolean_,
4609 /// @return **True** when the selected programme can be played (PVR)
4610 /// <p><hr>
4611 /// @skinning_v19 **[New Boolean Condition]** \link ListItem_IsPlayable `ListItem.IsPlayable`\endlink
4612 /// <p>
4613 /// }
4614 /// \table_row3{ <b>`ListItem.HasArchive`</b>,
4615 /// \anchor ListItem_HasArchive
4616 /// _boolean_,
4617 /// @return **True** when the selected channel has a server-side back buffer (PVR)
4618 /// <p><hr>
4619 /// @skinning_v19 **[New Boolean Condition]** \link ListItem_HasArchive `ListItem.HasArchive`\endlink
4620 /// <p>
4621 /// }
4622 /// \table_row3{ <b>`ListItem.IsEncrypted`</b>,
4623 /// \anchor ListItem_IsEncrypted
4624 /// _boolean_,
4625 /// @return **True** when the selected programme is encrypted (PVR).
4626 /// <p>
4627 /// }
4628 /// \table_row3{ <b>`ListItem.IsStereoscopic`</b>,
4629 /// \anchor ListItem_IsStereoscopic
4630 /// _boolean_,
4631 /// @return **True** when the selected video is a 3D (stereoscopic) video.
4632 /// <p><hr>
4633 /// @skinning_v13 **[New Boolean Condition]** \link ListItem_IsStereoscopic `ListItem.IsStereoscopic`\endlink
4634 /// <p>
4635 /// }
4636 /// \table_row3{ <b>`ListItem.Property(IsSpecial)`</b>,
4637 /// \anchor ListItem_Property_IsSpecial
4638 /// _boolean_,
4639 /// @return **True** if the current Season/Episode is a Special.
4640 /// <p>
4641 /// }
4642 /// \table_row3{ <b>`ListItem.Property(DateLabel)`</b>,
4643 /// \anchor ListItem_Property_DateLabel
4644 /// _boolean_,
4645 /// @return **True** if the item is a date label\, returns false if the item is a time label.
4646 /// @note Can be used in the rulerlayout of the epggrid control.
4647 /// <p>
4648 /// }
4649 /// \table_row3{ <b>`ListItem.Property(Addon.IsEnabled)`</b>,
4650 /// \anchor ListItem_Property_AddonIsEnabled
4651 /// _boolean_,
4652 /// @return **True** when the selected addon is enabled (for use in the addon
4653 /// info dialog only).
4654 /// <p><hr>
4655 /// @skinning_v17 **[Boolean Condition Updated]** \link ListItem_Property_AddonIsEnabled `ListItem.Property(Addon.IsEnabled)`\endlink
4656 /// replaces `ListItem.Property(Addon.Enabled)`.
4657 /// <p>
4658 /// }
4659 /// \table_row3{ <b>`ListItem.Property(Addon.IsInstalled)`</b>,
4660 /// \anchor ListItem_Property_AddonIsInstalled
4661 /// _boolean_,
4662 /// @return **True** when the selected addon is installed (for use in the addon
4663 /// info dialog only).
4664 /// <p><hr>
4665 /// @skinning_v17 **[Boolean Condition Updated]** \link ListItem_Property_AddonIsInstalled `ListItem.Property(Addon.IsInstalled)`\endlink
4666 /// replaces `ListItem.Property(Addon.Installed)`.
4667 /// <p>
4668 /// }
4669 /// \table_row3{ <b>`ListItem.Property(Addon.HasUpdate)`</b>,
4670 /// \anchor ListItem_Property_AddonHasUpdate
4671 /// _boolean_,
4672 /// @return **True** when there's an update available for the selected addon.
4673 /// <p><hr>
4674 /// @skinning_v17 **[Boolean Condition Updated]** \link ListItem_Property_AddonHasUpdate `ListItem.Property(Addon.HasUpdate)`\endlink
4675 /// replaces `ListItem.Property(Addon.UpdateAvail)`.
4676 /// <p>
4677 /// }
4678 /// \table_row3{ <b>`ListItem.IsAutoUpdateable`</b>,
4679 /// \anchor ListItem_IsAutoUpdateable
4680 /// _boolean_,
4681 /// @return **True** if this add-on can be updated automatically.
4682 /// <p><hr>
4683 /// @skinning_v19 **[New Boolean Condition]** \link ListItem_IsAutoUpdateable `ListItem.IsAutoUpdateable`\endlink
4684 /// <p>
4685 /// }
4686 /// \table_row3{ <b>`ListItem.Property(Addon.IsFromOfficialRepo)`</b>,
4687 /// \anchor ListItem_Property_AddonIsFromOfficialRepo
4688 /// _boolean_,
4689 /// @return **True** if this add-on is from an official repository.
4690 /// <p><hr>
4691 /// @skinning_v19 **[New Boolean Condition]** \link ListItem_Property_AddonIsFromOfficialRepo `ListItem.Property(Addon.IsFromOfficialRepo)`\endlink
4692 /// <p>
4693 /// }
4694 /// \table_row3{ <b>`ListItem.Property(Addon.IsBinary)`</b>,
4695 /// \anchor ListItem_Property_AddonIsBinary
4696 /// _boolean_,
4697 /// @return **True** if this add-on is a binary addon.
4698 /// <p><hr>
4699 /// @skinning_v19 **[New Boolean Condition]** \link ListItem_Property_AddonIsBinary `ListItem.Property(Addon.IsBinary)`\endlink
4700 /// <p>
4701 /// }
4702 /// \table_row3{ <b>`ListItem.Property(Addon.IsUpdate)`</b>,
4703 /// \anchor ListItem_Property_AddonIsUpdate
4704 /// _boolean_,
4705 /// @return **True** if this add-on is a valid update of an installed outdated add-on.
4706 /// <p><hr>
4707 /// @skinning_v19 **[New Boolean Condition]** \link ListItem_Property_AddonIsUpdate `ListItem.Property(Addon.IsUpdate)`\endlink
4708 /// <p>
4709 /// }
4710 /// \table_row3{ <b>`ListItem.Property(Addon.ValidUpdateOrigin)`</b>,
4711 /// \anchor ListItem_Property_ValidUpdateOrigin
4712 /// _string_,
4713 /// @return The origin string of a valid update for the addon. Empty string if there is no valid update available.
4714 /// <p><hr>
4715 /// @skinning_v19 **[New Infolabel]** \link ListItem_Property_ValidUpdateOrigin `ListItem.Property(Addon.ValidUpdateOrigin)`\endlink
4716 /// <p>
4717 /// }
4718 /// \table_row3{ <b>`ListItem.Property(Addon.ValidUpdateVersion)`</b>,
4719 /// \anchor ListItem_Property_ValidUpdateVersion
4720 /// _string_,
4721 /// @return The version string of a valid update for the addon. Empty string if there is no valid update available.
4722 /// <p><hr>
4723 /// @skinning_v19 **[New Infolabel]** \link ListItem_Property_ValidUpdateVersion `ListItem.Property(Addon.ValidUpdateVersion)`\endlink
4724 /// <p>
4725 /// }
4726 /// \table_row3{ <b>`ListItem.Label`</b>,
4727 /// \anchor ListItem_Label
4728 /// _string_,
4729 /// @return The left label of the currently selected item in a container.
4730 /// <p>
4731 /// }
4732 /// \table_row3{ <b>`ListItem.Label2`</b>,
4733 /// \anchor ListItem_Label2
4734 /// _string_,
4735 /// @return The right label of the currently selected item in a container.
4736 /// <p>
4737 /// }
4738 /// \table_row3{ <b>`ListItem.Title`</b>,
4739 /// \anchor ListItem_Title
4740 /// _string_,
4741 /// @return The title of the currently selected song\, movie\, game in a container.
4742 /// <p><hr>
4743 /// @skinning_v18 **[Infolabel Updated]** \link ListItem_Title `ListItem.Title`\endlink extended
4744 /// to support games
4745 /// <p>
4746 /// }
4747 /// \table_row3{ <b>`ListItem.OriginalTitle`</b>,
4748 /// \anchor ListItem_OriginalTitle
4749 /// _string_,
4750 /// @return The original title of the currently selected movie in a container.
4751 /// <p>
4752 /// }
4753 /// \table_row3{ <b>`ListItem.SortLetter`</b>,
4754 /// \anchor ListItem_SortLetter
4755 /// _string_,
4756 /// @return The first letter of the current file in a container.
4757 /// <p>
4758 /// }
4759 /// \table_row3{ <b>`ListItem.TrackNumber`</b>,
4760 /// \anchor ListItem_TrackNumber
4761 /// _string_,
4762 /// @return The track number of the currently selected song in a container.
4763 /// <p>
4764 /// }
4765 /// \table_row3{ <b>`ListItem.Artist`</b>,
4766 /// \anchor ListItem_Artist
4767 /// _string_,
4768 /// @return The artist of the currently selected song in a container.
4769 /// <p>
4770 /// }
4771 /// \table_row3{ <b>`ListItem.AlbumArtist`</b>,
4772 /// \anchor ListItem_AlbumArtist
4773 /// _string_,
4774 /// @return The artist of the currently selected album in a list.
4775 /// <p>
4776 /// }
4777 /// \table_row3{ <b>`ListItem.Property(Artist_Sortname)`</b>,
4778 /// \anchor ListItem_Property_Artist_Sortname
4779 /// _string_,
4780 /// @return The sortname of the currently selected Artist.
4781 /// <p><hr>
4782 /// @skinning_v18 **[New Infolabel]** \link ListItem_Property_Artist_Sortname `ListItem.Property(Artist_Sortname)`\endlink
4783 /// <p>
4784 /// }
4785 /// \table_row3{ <b>`ListItem.Property(Artist_Type)`</b>,
4786 /// \anchor ListItem_Property_Artist_Type
4787 /// _string_,
4788 /// @return The type of the currently selected Artist - person\, group\, orchestra\, choir etc.
4789 /// <p><hr>
4790 /// @skinning_v18 **[New Infolabel]** \link ListItem_Property_Artist_Type `ListItem.Property(Artist_Type)`\endlink
4791 /// <p>
4792 /// }
4793 /// \table_row3{ <b>`ListItem.Property(Artist_Gender)`</b>,
4794 /// \anchor ListItem_Property_Artist_Gender
4795 /// _string_,
4796 /// @return The Gender of the currently selected Artist - male\, female\, other.
4797 /// <p><hr>
4798 /// @skinning_v18 **[New Infolabel]** \link ListItem_Property_Artist_Gender `ListItem.Property(Artist_Gender)`\endlink
4799 /// <p>
4800 /// }
4801 /// \table_row3{ <b>`ListItem.Property(Artist_Disambiguation)`</b>,
4802 /// \anchor ListItem_Property_Artist_Disambiguation
4803 /// _string_,
4804 /// @return A Brief description of the currently selected Artist that differentiates them
4805 /// from others with the same name.
4806 /// <p><hr>
4807 /// @skinning_v18 **[New Infolabel]** \link ListItem_Property_Artist_Disambiguation `ListItem.Property(Artist_Disambiguation)`\endlink
4808 /// <p>
4809 /// }
4810 /// \table_row3{ <b>`ListItem.Property(Artist_Born)`</b>,
4811 /// \anchor ListItem_Property_Artist_Born
4812 /// _string_,
4813 /// @return The date of Birth of the currently selected Artist.
4814 /// <p>
4815 /// }
4816 /// \table_row3{ <b>`ListItem.Property(Artist_Died)`</b>,
4817 /// \anchor ListItem_Property_Artist_Died
4818 /// _string_,
4819 /// @return The date of Death of the currently selected Artist.
4820 /// <p>
4821 /// }
4822 /// \table_row3{ <b>`ListItem.Property(Artist_Formed)`</b>,
4823 /// \anchor ListItem_Property_Artist_Formed
4824 /// _string_,
4825 /// @return The formation date of the currently selected Band.
4826 /// <p>
4827 /// }
4828 /// \table_row3{ <b>`ListItem.Property(Artist_Disbanded)`</b>,
4829 /// \anchor ListItem_Property_Artist_Disbanded
4830 /// _string_,
4831 /// @return The disbanding date of the currently selected Band.
4832 /// <p>
4833 /// }
4834 /// \table_row3{ <b>`ListItem.Property(Artist_YearsActive)`</b>,
4835 /// \anchor ListItem_Property_Artist_YearsActive
4836 /// _string_,
4837 /// @return The years the currently selected artist has been active.
4838 /// <p>
4839 /// }
4840 /// \table_row3{ <b>`ListItem.Property(Artist_Instrument)`</b>,
4841 /// \anchor ListItem_Property_Artist_Instrument
4842 /// _string_,
4843 /// @return The instruments played by the currently selected artist.
4844 /// <p>
4845 /// }
4846 /// \table_row3{ <b>`ListItem.Property(Artist_Description)`</b>,
4847 /// \anchor ListItem_Property_Artist_Description
4848 /// _string_,
4849 /// @return A biography of the currently selected artist.
4850 /// <p>
4851 /// }
4852 /// \table_row3{ <b>`ListItem.Property(Artist_Mood)`</b>,
4853 /// \anchor ListItem_Property_Artist_Mood
4854 /// _string_,
4855 /// @return The moods of the currently selected artist.
4856 /// <p>
4857 /// }
4858 /// \table_row3{ <b>`ListItem.Property(Artist_Style)`</b>,
4859 /// \anchor ListItem_Property_Artist_Style
4860 /// _string_,
4861 /// @return The styles of the currently selected artist.
4862 /// <p>
4863 /// }
4864 /// \table_row3{ <b>`ListItem.Property(Artist_Genre)`</b>,
4865 /// \anchor ListItem_Property_Artist_Genre
4866 /// _string_,
4867 /// @return The genre of the currently selected artist.
4868 /// <p>
4869 /// }
4870 /// \table_row3{ <b>`ListItem.Album`</b>,
4871 /// \anchor ListItem_Album
4872 /// _string_,
4873 /// @return The album of the currently selected song in a container.
4874 /// <p>
4875 /// }
4876 /// \table_row3{ <b>`ListItem.Property(Album_Mood)`</b>,
4877 /// \anchor ListItem_Property_Album_Mood
4878 /// _string_,
4879 /// @return The moods of the currently selected Album.
4880 /// <p>
4881 /// }
4882 /// \table_row3{ <b>`ListItem.Property(Album_Style)`</b>,
4883 /// \anchor ListItem_Property_Album_Style
4884 /// _string_,
4885 /// @return The styles of the currently selected Album.
4886 /// <p>
4887 /// }
4888 /// \table_row3{ <b>`ListItem.Property(Album_Theme)`</b>,
4889 /// \anchor ListItem_Property_Album_Theme
4890 /// _string_,
4891 /// @return The themes of the currently selected Album.
4892 /// <p>
4893 /// }
4894 /// \table_row3{ <b>`ListItem.Property(Album_Type)`</b>,
4895 /// \anchor ListItem_Property_Album_Type
4896 /// _string_,
4897 /// @return The Album Type (e.g. compilation\, enhanced\, explicit lyrics) of
4898 /// the currently selected Album.
4899 /// <p>
4900 /// }
4901 /// \table_row3{ <b>`ListItem.Property(Album_Label)`</b>,
4902 /// \anchor ListItem_Property_Album_Label
4903 /// _string_,
4904 /// @return The record label of the currently selected Album.
4905 /// <p>
4906 /// }
4907 /// \table_row3{ <b>`ListItem.Property(Album_Description)`</b>,
4908 /// \anchor ListItem_Property_Album_Description
4909 /// _string_,
4910 /// @return A review of the currently selected Album.
4911 /// <p>
4912 /// }
4913 /// \table_row3{ <b>`ListItem.Property(Album_Totaldiscs)`</b>,
4914 /// \anchor ListItem_Property_Album_Totaldiscs
4915 /// _string_,
4916 /// @return The total number of discs belonging to an album.
4917 /// <p><hr>
4918 /// @skinning_v19 **[New Infolabel]** \link ListItem.Property(Album_Totaldiscs) `ListItem.Property(Album_Totaldiscs)`\endlink
4919 /// <p>
4920 /// }
4921 /// \table_row3{ <b>`ListItem.Property(Album_Isboxset)`</b>,
4922 /// \anchor ListItem_Property_Album_Isboxset
4923 /// _string_,
4924 /// @return **True** if the album is a boxset.
4925 /// <p><hr>
4926 /// @skinning_v19 **[New Infobool]** \link ListItem.Property(Album_Isboxset) `ListItem.Property(Album_Isboxset)`\endlink
4927 /// <p>
4928 /// }
4929 /// \table_row3{ <b>`ListItem.Property(Album_Duration)`</b>,
4930 /// \anchor ListItem_Property_Album_Duration
4931 /// _string_,
4932 /// @return The duration of the album in HH:MM:SS.
4933 /// <p><hr>
4934 /// @skinning_v19 **[New Infolabel]** \link ListItem_Property_Album_Duration `ListItem.Property(Album_Duration)`\endlink
4935 /// <p>
4936 /// }
4937 /// \table_row3{ <b>`ListItem.DiscNumber`</b>,
4938 /// \anchor ListItem_DiscNumber
4939 /// _string_,
4940 /// @return The disc number of the currently selected song in a container.
4941 /// <p>
4942 /// }
4943 /// \table_row3{ <b>`ListItem.Year`</b>,
4944 /// \anchor ListItem_Year
4945 /// _string_,
4946 /// @return The year of the currently selected song\, album\, movie\, game in a
4947 /// container.
4948 /// <p><hr>
4949 /// @skinning_v18 **[Infolabel Updated]** \link ListItem_Title `ListItem.Title`\endlink extended
4950 /// to support games
4951 /// <p>
4952 /// }
4953 /// \table_row3{ <b>`ListItem.Premiered`</b>,
4954 /// \anchor ListItem_Premiered
4955 /// _string_,
4956 /// @return The release/aired date of the currently selected episode\, show\,
4957 /// movie or EPG item in a container.
4958 /// <p><hr>
4959 /// @skinning_v15 **[Infolabel Updated]** \link ListItem_Premiered `ListItem.Premiered`\endlink
4960 /// now also available for EPG items.
4961 /// <p>
4962 /// }
4963 /// \table_row3{ <b>`ListItem.Genre`</b>,
4964 /// \anchor ListItem_Genre
4965 /// _string_,
4966 /// @return The genre of the currently selected song\, album or movie in a
4967 /// container.
4968 /// <p>
4969 /// }
4970 /// \table_row3{ <b>`ListItem.Contributors`</b>,
4971 /// \anchor ListItem_Contributors
4972 /// _string_,
4973 /// @return The list of all people who've contributed to the selected song.
4974 /// <p><hr>
4975 /// @skinning_v17 **[New Infolabel]** \link ListItem_Contributors `ListItem.Contributors`\endlink
4976 /// <p>
4977 /// }
4978 /// \table_row3{ <b>`ListItem.ContributorAndRole`</b>,
4979 /// \anchor ListItem_ContributorAndRole
4980 /// _string_,
4981 /// @return The list of all people and their role who've contributed to the selected song.
4982 /// <p><hr>
4983 /// @skinning_v17 **[New Infolabel]** \link ListItem_ContributorAndRole `ListItem.ContributorAndRole`\endlink
4984 /// <p>
4985 /// }
4986 /// \table_row3{ <b>`ListItem.Director`</b>,
4987 /// \anchor ListItem_Director
4988 /// _string_,
4989 /// @return The director of the currently selected movie in a container.
4990 /// <p><hr>
4991 /// @skinning_v15 **[Infolabel Updated]** \link ListItem_Director `ListItem.Director`\endlink
4992 /// also supports EPG.
4993 /// <p>
4994 /// }
4995 /// \table_row3{ <b>`ListItem.Country`</b>,
4996 /// \anchor ListItem_Country
4997 /// _string_,
4998 /// @return The production country of the currently selected movie in a
4999 /// container.
5000 /// <p>
5001 /// }
5002 /// \table_row3{ <b>`ListItem.Episode`</b>,
5003 /// \anchor ListItem_Episode
5004 /// _string_,
5005 /// @return The episode number value for the currently selected episode. It
5006 /// also returns the number of total\, watched or unwatched episodes for the
5007 /// currently selected tvshow or season\, based on the the current watched
5008 /// filter.
5009 /// <p><hr>
5010 /// @skinning_v15 **[Infolabel Updated]** \link ListItem_Episode `ListItem.Episode`\endlink
5011 /// also supports EPG.
5012 /// <p>
5013 /// }
5014 /// \table_row3{ <b>`ListItem.Season`</b>,
5015 /// \anchor ListItem_Season
5016 /// _string_,
5017 /// @return The season value for the currently selected tvshow.
5018 /// <p><hr>
5019 /// @skinning_v15 **[Infolabel Updated]** \link ListItem_Season `ListItem.Season`\endlink
5020 /// also supports EPG.
5021 /// <p>
5022 /// }
5023 /// \table_row3{ <b>`ListItem.TVShowTitle`</b>,
5024 /// \anchor ListItem_TVShowTitle
5025 /// _string_,
5026 /// @return The name value for the currently selected tvshow in the season and
5027 /// episode depth of the video library.
5028 /// <p>
5029 /// }
5030 /// \table_row3{ <b>`ListItem.Property(TotalSeasons)`</b>,
5031 /// \anchor ListItem_Property_TotalSeasons
5032 /// _string_,
5033 /// @return The total number of seasons for the currently selected tvshow.
5034 /// <p>
5035 /// }
5036 /// \table_row3{ <b>`ListItem.Property(TotalEpisodes)`</b>,
5037 /// \anchor ListItem_Property_TotalEpisodes
5038 /// _string_,
5039 /// @return the total number of episodes for the currently selected tvshow or
5040 /// season.
5041 /// <p>
5042 /// }
5043 /// \table_row3{ <b>`ListItem.Property(WatchedEpisodes)`</b>,
5044 /// \anchor ListItem_Property_WatchedEpisodes
5045 /// _string_,
5046 /// @return The number of watched episodes for the currently selected tvshow
5047 /// or season.
5048 /// <p>
5049 /// }
5050 /// \table_row3{ <b>`ListItem.Property(UnWatchedEpisodes)`</b>,
5051 /// \anchor ListItem_Property_UnWatchedEpisodes
5052 /// _string_,
5053 /// @return The number of unwatched episodes for the currently selected tvshow
5054 /// or season.
5055 /// <p>
5056 /// }
5057 /// \table_row3{ <b>`ListItem.Property(NumEpisodes)`</b>,
5058 /// \anchor ListItem_Property_NumEpisodes
5059 /// _string_,
5060 /// @return The number of total\, watched or unwatched episodes for the
5061 /// currently selected tvshow or season\, based on the the current watched filter.
5062 /// <p>
5063 /// }
5064 /// \table_row3{ <b>`ListItem.Property(WatchedEpisodePercent)`</b>,
5065 /// \anchor ListItem_Property_WatchedEpisodePercent
5066 /// _string_,
5067 /// @return The percentage of watched episodes in the tvshow (watched/total*100) or season.
5068 /// <p><hr>
5069 /// @skinning_v20 **[New Infolabel]** \link ListItem_Property_WatchedEpisodePercent `ListItem.Property(WatchedEpisodePercent)`\endlink
5070 /// <p>
5071 /// }
5072 /// \table_row3{ <b>`ListItem.PictureAperture`</b>,
5073 /// \anchor ListItem_PictureAperture
5074 /// _string_,
5075 /// @return The F-stop used to take the selected picture.
5076 /// @note This is the value of the EXIF FNumber tag (hex code 0x829D).
5077 /// <p>
5078 /// }
5079 /// \table_row3{ <b>`ListItem.PictureAuthor`</b>,
5080 /// \anchor ListItem_PictureAuthor
5081 /// _string_,
5082 /// @return The name of the person involved in writing about the selected picture.
5083 /// @note This is the value of the IPTC Writer tag (hex code 0x7A).
5084 /// <p><hr>
5085 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureAuthor `ListItem.PictureAuthor`\endlink
5086 /// <p>
5087 /// }
5088 /// \table_row3{ <b>`ListItem.PictureByline`</b>,
5089 /// \anchor ListItem_PictureByline
5090 /// _string_,
5091 /// @return The name of the person who created the selected picture.
5092 /// @note This is the value of the IPTC Byline tag (hex code 0x50).
5093 /// <p><hr>
5094 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureByline `ListItem.PictureByline`\endlink
5095 /// <p>
5096 /// }
5097 /// \table_row3{ <b>`ListItem.PictureBylineTitle`</b>,
5098 /// \anchor ListItem_PictureBylineTitle
5099 /// _string_,
5100 /// @return The title of the person who created the selected picture.
5101 /// @note This is the value of the IPTC BylineTitle tag (hex code 0x55).
5102 /// <p><hr>
5103 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureBylineTitle `ListItem.PictureBylineTitle`\endlink
5104 /// <p>
5105 /// }
5106 /// \table_row3{ <b>`ListItem.PictureCamMake`</b>,
5107 /// \anchor ListItem_PictureCamMake
5108 /// _string_,
5109 /// @return The manufacturer of the camera used to take the selected picture.
5110 /// @note This is the value of the EXIF Make tag (hex code 0x010F).
5111 /// <p>
5112 /// }
5113 /// \table_row3{ <b>`ListItem.PictureCamModel`</b>,
5114 /// \anchor ListItem_PictureCamModel
5115 /// _string_,
5116 /// @return The manufacturer's model name or number of the camera used to take
5117 /// the selected picture.
5118 /// @note This is the value of the EXIF Model tag (hex code 0x0110).
5119 /// <p>
5120 /// }
5121 /// \table_row3{ <b>`ListItem.PictureCaption`</b>,
5122 /// \anchor ListItem_PictureCaption
5123 /// _string_,
5124 /// @return A description of the selected picture.
5125 /// @note This is the value of the IPTC Caption tag (hex code 0x78).
5126 /// <p>
5127 /// }
5128 /// \table_row3{ <b>`ListItem.PictureCategory`</b>,
5129 /// \anchor ListItem_PictureCategory
5130 /// _string_,
5131 /// @return The subject of the selected picture as a category code.
5132 /// @note This is the value of the IPTC Category tag (hex code 0x0F).
5133 /// <p><hr>
5134 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureCategory `ListItem.PictureCategory`\endlink
5135 /// <p>
5136 /// }
5137 /// \table_row3{ <b>`ListItem.PictureCCDWidth`</b>,
5138 /// \anchor ListItem_PictureCCDWidth
5139 /// _string_,
5140 /// @return The width of the CCD in the camera used to take the selected
5141 /// picture.
5142 /// @note This is calculated from three EXIF tags (0xA002 * 0xA210 / 0xA20e).
5143 /// <p><hr>
5144 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureCCDWidth `ListItem.PictureCCDWidth`\endlink
5145 /// <p>
5146 /// }
5147 /// \table_row3{ <b>`ListItem.PictureCity`</b>,
5148 /// \anchor ListItem_PictureCity
5149 /// _string_,
5150 /// @return The city where the selected picture was taken.
5151 /// @note This is the value of the IPTC City tag (hex code 0x5A).
5152 /// <p><hr>
5153 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureCity `ListItem.PictureCity`\endlink
5154 /// <p>
5155 /// }
5156 /// \table_row3{ <b>`ListItem.PictureColour`</b>,
5157 /// \anchor ListItem_PictureColour
5158 /// _string_,
5159 /// @return Whether the selected picture is "Colour" or "Black and White".
5160 /// <p><hr>
5161 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureColour `ListItem.PictureColour`\endlink
5162 /// <p>
5163 /// }
5164 /// \table_row3{ <b>`ListItem.PictureComment`</b>,
5165 /// \anchor ListItem_PictureComment
5166 /// _string_,
5167 /// @return A description of the selected picture.
5168 /// @note This is the value of the
5169 /// EXIF User Comment tag (hex code 0x9286). This is the same value as
5170 /// \ref Slideshow_SlideComment "Slideshow.SlideComment".
5171 /// <p>
5172 /// }
5173 /// \table_row3{ <b>`ListItem.PictureCopyrightNotice`</b>,
5174 /// \anchor ListItem_PictureCopyrightNotice
5175 /// _string_,
5176 /// @return The copyright notice of the selected picture.
5177 /// @note This is the value of the IPTC Copyright tag (hex code 0x74).
5178 /// <p><hr>
5179 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureCopyrightNotice `ListItem.PictureCopyrightNotice`\endlink
5180 /// <p>
5181 /// }
5182 /// \table_row3{ <b>`ListItem.PictureCountry`</b>,
5183 /// \anchor ListItem_PictureCountry
5184 /// _string_,
5185 /// @return The full name of the country where the selected picture was taken.
5186 /// @note This is the value of the IPTC CountryName tag (hex code 0x65).
5187 /// <p><hr>
5188 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureCountry `ListItem.PictureCountry`\endlink
5189 /// <p>
5190 /// }
5191 /// \table_row3{ <b>`ListItem.PictureCountryCode`</b>,
5192 /// \anchor ListItem_PictureCountryCode
5193 /// _string_,
5194 /// @return The country code of the country where the selected picture was
5195 /// taken.
5196 /// @note This is the value of the IPTC CountryCode tag (hex code 0x64).
5197 /// <p><hr>
5198 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureCountryCode `ListItem.PictureCountryCode`\endlink
5199 /// <p>
5200 /// }
5201 /// \table_row3{ <b>`ListItem.PictureCredit`</b>,
5202 /// \anchor ListItem_PictureCredit
5203 /// _string_,
5204 /// @return Who provided the selected picture.
5205 /// @note This is the value of the IPTC Credit tag (hex code 0x6E).
5206 /// <p><hr>
5207 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureCredit `ListItem.PictureCredit`\endlink
5208 /// <p>
5209 /// }
5210 /// \table_row3{ <b>`ListItem.PictureDate`</b>,
5211 /// \anchor ListItem_PictureDate
5212 /// _string_,
5213 /// @return The localized date of the selected picture. The short form of the
5214 /// date is used.
5215 /// @note The value of the EXIF DateTimeOriginal tag (hex code 0x9003)
5216 /// is preferred. If the DateTimeOriginal tag is not found\, the value of
5217 /// DateTimeDigitized (hex code 0x9004) or of DateTime (hex code 0x0132) might
5218 /// be used.
5219 /// <p><hr>
5220 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureDate `ListItem.PictureDate`\endlink
5221 /// <p>
5222 /// }
5223 /// \table_row3{ <b>`ListItem.PictureDatetime`</b>,
5224 /// \anchor ListItem_PictureDatetime
5225 /// _string_,
5226 /// @return The date/timestamp of the selected picture. The localized short form
5227 /// of the date and time is used.
5228 /// @note The value of the EXIF DateTimeOriginal tag (hex code 0x9003) is preferred.
5229 /// If the DateTimeOriginal tag is not found\, the value of DateTimeDigitized
5230 /// (hex code 0x9004) or of DateTime (hex code 0x0132) might be used.
5231 /// <p><hr>
5232 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureDatetime `ListItem.PictureDatetime`\endlink
5233 /// <p>
5234 /// }
5235 /// \table_row3{ <b>`ListItem.PictureDesc`</b>,
5236 /// \anchor ListItem_PictureDesc
5237 /// _string_,
5238 /// @return A short description of the selected picture. The SlideComment\,
5239 /// EXIFComment\, or Caption values might contain a longer description.
5240 /// @note This is the value of the EXIF ImageDescription tag (hex code 0x010E).
5241 /// <p>
5242 /// }
5243 /// \table_row3{ <b>`ListItem.PictureDigitalZoom`</b>,
5244 /// \anchor ListItem_PictureDigitalZoom
5245 /// _string_,
5246 /// @return The digital zoom ratio when the selected picture was taken.
5247 /// @note This is the value of the EXIF DigitalZoomRatio tag (hex code 0xA404).
5248 /// <p><hr>
5249 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureDigitalZoom `ListItem.PictureDigitalZoom`\endlink
5250 /// <p>
5251 /// }
5252 /// \table_row3{ <b>`ListItem.PictureExpMode`</b>,
5253 /// \anchor ListItem_PictureExpMode
5254 /// _string_,
5255 /// @return The exposure mode of the selected picture.
5256 /// The possible values are:
5257 /// - <b>"Automatic"</b>
5258 /// - <b>"Manual"</b>
5259 /// - <b>"Auto bracketing"</b>
5260 /// @note This is the value of the EXIF ExposureMode tag (hex code 0xA402).
5261 /// <p>
5262 /// }
5263 /// \table_row3{ <b>`ListItem.PictureExposure`</b>,
5264 /// \anchor ListItem_PictureExposure
5265 /// _string_,
5266 /// @return The class of the program used by the camera to set exposure when
5267 /// the selected picture was taken. Values include:
5268 /// - <b>"Manual"</b>
5269 /// - <b>"Program (Auto)"</b>
5270 /// - <b>"Aperture priority (Semi-Auto)"</b>
5271 /// - <b>"Shutter priority (semi-auto)"</b>
5272 /// - etc
5273 /// @note This is the value of the EXIF ExposureProgram tag (hex code 0x8822).
5274 /// <p><hr>
5275 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureExposure `ListItem.PictureExposure`\endlink
5276 /// <p>
5277 /// }
5278 /// \table_row3{ <b>`ListItem.PictureExposureBias`</b>,
5279 /// \anchor ListItem_PictureExposureBias
5280 /// _string_,
5281 /// @return The exposure bias of the selected picture.
5282 /// Typically this is a number between -99.99 and 99.99.
5283 /// @note This is the value of the EXIF ExposureBiasValue tag (hex code 0x9204).
5284 /// <p><hr>
5285 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureExposureBias `ListItem.PictureExposureBias`\endlink
5286 /// <p>
5287 /// }
5288 /// \table_row3{ <b>`ListItem.PictureExpTime`</b>,
5289 /// \anchor ListItem_PictureExpTime
5290 /// _string_,
5291 /// @return The exposure time of the selected picture\, in seconds.
5292 /// @note This is the value of the EXIF ExposureTime tag (hex code 0x829A).
5293 /// If the ExposureTime tag is not found\, the ShutterSpeedValue tag (hex code 0x9201)
5294 /// might be used.
5295 /// <p>
5296 /// }
5297 /// \table_row3{ <b>`ListItem.PictureFlashUsed`</b>,
5298 /// \anchor ListItem_PictureFlashUsed
5299 /// _string_,
5300 /// @return The status of flash when the selected picture was taken. The value
5301 /// will be either "Yes" or "No"\, and might include additional information.
5302 /// @note This is the value of the EXIF Flash tag (hex code 0x9209).
5303 /// <p><hr>
5304 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureFlashUsed `ListItem.PictureFlashUsed`\endlink
5305 /// <p>
5306 /// }
5307 /// \table_row3{ <b>`ListItem.PictureFocalLen`</b>,
5308 /// \anchor ListItem_PictureFocalLen
5309 /// _string_,
5310 /// @return The lens focal length of the selected picture.
5311 /// <p>
5312 /// }
5313 /// \table_row3{ <b>`ListItem.PictureFocusDist`</b>,
5314 /// \anchor ListItem_PictureFocusDist
5315 /// _string_,
5316 /// @return The focal length of the lens\, in mm.
5317 /// @note This is the value of the EXIF FocalLength tag (hex code 0x920A).
5318 /// }
5319 /// \table_row3{ <b>`ListItem.PictureGPSLat`</b>,
5320 /// \anchor ListItem_PictureGPSLat
5321 /// _string_,
5322 /// @return The latitude where the selected picture was taken (degrees\,
5323 /// minutes\, seconds North or South).
5324 /// @note This is the value of the EXIF GPSInfo.GPSLatitude and GPSInfo.GPSLatitudeRef tags.
5325 /// <p>
5326 /// }
5327 /// \table_row3{ <b>`ListItem.PictureGPSLon`</b>,
5328 /// \anchor ListItem_PictureGPSLon
5329 /// _string_,
5330 /// @return The longitude where the selected picture was taken (degrees\,
5331 /// minutes\, seconds East or West).
5332 /// @note This is the value of the EXIF GPSInfo.GPSLongitude and GPSInfo.GPSLongitudeRef tags.
5333 /// <p>
5334 /// }
5335 /// \table_row3{ <b>`ListItem.PictureGPSAlt`</b>,
5336 /// \anchor ListItem_PictureGPSAlt
5337 /// _string_,
5338 /// @return The altitude in meters where the selected picture was taken.
5339 /// @note This is the value of the EXIF GPSInfo.GPSAltitude tag.
5340 /// <p>
5341 /// }
5342 /// \table_row3{ <b>`ListItem.PictureHeadline`</b>,
5343 /// \anchor ListItem_PictureHeadline
5344 /// _string_,
5345 /// @return A synopsis of the contents of the selected picture.
5346 /// @note This is the value of the IPTC Headline tag (hex code 0x69).
5347 /// <p><hr>
5348 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureHeadline `ListItem.PictureHeadline`\endlink
5349 /// <p>
5350 /// }
5351 /// \table_row3{ <b>`ListItem.PictureImageType`</b>,
5352 /// \anchor ListItem_PictureImageType
5353 /// _string_,
5354 /// @return The color components of the selected picture.
5355 /// @note This is the value of the IPTC ImageType tag (hex code 0x82).
5356 /// <p><hr>
5357 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureImageType `ListItem.PictureImageType`\endlink
5358 /// <p>
5359 /// }
5360 /// \table_row3{ <b>`ListItem.PictureIPTCDate`</b>,
5361 /// \anchor ListItem_PictureIPTCDate
5362 /// _string_,
5363 /// @return The date when the intellectual content of the selected picture was
5364 /// created\, rather than when the picture was created.
5365 /// @note This is the value of the IPTC DateCreated tag (hex code 0x37).
5366 /// <p><hr>
5367 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureIPTCDate `ListItem.PictureIPTCDate`\endlink
5368 /// <p>
5369 /// }
5370 /// \table_row3{ <b>`ListItem.PictureIPTCTime`</b>,
5371 /// \anchor ListItem_PictureIPTCTime
5372 /// _string_,
5373 /// @return The time when the intellectual content of the selected picture was
5374 /// created\, rather than when the picture was created.
5375 /// @note This is the value of the IPTC TimeCreated tag (hex code 0x3C).
5376 /// <p><hr>
5377 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureIPTCTime `ListItem.PictureIPTCTime`\endlink
5378 /// <p>
5379 /// }
5380 /// \table_row3{ <b>`ListItem.PictureISO`</b>,
5381 /// \anchor ListItem_PictureISO
5382 /// _string_,
5383 /// @return The ISO speed of the camera when the selected picture was taken.
5384 /// @note This is the value of the EXIF ISOSpeedRatings tag (hex code 0x8827).
5385 /// <p>
5386 /// }
5387 /// \table_row3{ <b>`ListItem.PictureKeywords`</b>,
5388 /// \anchor ListItem_PictureKeywords
5389 /// _string_,
5390 /// @return The keywords assigned to the selected picture.
5391 /// @note This is the value of the IPTC Keywords tag (hex code 0x19).
5392 /// <p>
5393 /// }
5394 /// \table_row3{ <b>`ListItem.PictureLightSource`</b>,
5395 /// \anchor ListItem_PictureLightSource
5396 /// _string_,
5397 /// @return The kind of light source when the picture was taken. Possible
5398 /// values include:
5399 /// - <b>"Daylight"</b>
5400 /// - <b>"Fluorescent"</b>
5401 /// - <b>"Incandescent"</b>
5402 /// - etc
5403 /// @note This is the value of the EXIF LightSource tag (hex code 0x9208).
5404 /// <p><hr>
5405 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureLightSource `ListItem.PictureLightSource`\endlink
5406 /// <p>
5407 /// }
5408 /// \table_row3{ <b>`ListItem.PictureLongDate`</b>,
5409 /// \anchor ListItem_PictureLongDate
5410 /// _string_,
5411 /// @return Only the localized date of the selected picture. The long form of
5412 /// the date is used.
5413 /// @note The value of the EXIF DateTimeOriginal tag (hex code
5414 /// 0x9003) is preferred. If the DateTimeOriginal tag is not found\, the
5415 /// value of DateTimeDigitized (hex code 0x9004) or of DateTime (hex code
5416 /// 0x0132) might be used.
5417 /// <p><hr>
5418 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureLongDate `ListItem.PictureLongDate`\endlink
5419 /// <p>
5420 /// }
5421 /// \table_row3{ <b>`ListItem.PictureLongDatetime`</b>,
5422 /// \anchor ListItem_PictureLongDatetime
5423 /// _string_,
5424 /// @return The date/timestamp of the selected picture. The localized long
5425 /// form of the date and time is used.
5426 /// @note The value of the EXIF DateTimeOriginal
5427 /// tag (hex code 0x9003) is preferred. if the DateTimeOriginal tag is not
5428 /// found\, the value of DateTimeDigitized (hex code 0x9004) or of DateTime
5429 /// (hex code 0x0132) might be used.
5430 /// <p>
5431 /// }
5432 /// \table_row3{ <b>`ListItem.PictureMeteringMode`</b>,
5433 /// \anchor ListItem_PictureMeteringMode
5434 /// _string_,
5435 /// @return The metering mode used when the selected picture was taken. The
5436 /// possible values are:
5437 /// - <b>"Center weight"</b>
5438 /// - <b>"Spot"</b>
5439 /// - <b>"Matrix"</b>
5440 /// @note This is the value of the EXIF MeteringMode tag (hex code 0x9207).
5441 /// <p><hr>
5442 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureMeteringMode `ListItem.PictureMeteringMode`\endlink
5443 /// <p>
5444 /// }
5445 /// \table_row3{ <b>`ListItem.PictureObjectName`</b>,
5446 /// \anchor ListItem_PictureObjectName
5447 /// _string_,
5448 /// @return A shorthand reference for the selected picture.
5449 /// @note This is the value of the IPTC ObjectName tag (hex code 0x05).
5450 /// <p><hr>
5451 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureObjectName `ListItem.PictureObjectName`\endlink
5452 /// <p>
5453 /// }
5454 /// \table_row3{ <b>`ListItem.PictureOrientation`</b>,
5455 /// \anchor ListItem_PictureOrientation
5456 /// _string_,
5457 /// @return The orientation of the selected picture. Possible values are:
5458 /// - <b>"Top Left"</b>
5459 /// - <b>"Top Right"</b>
5460 /// - <b>"Left Top"</b>
5461 /// - <b>"Right Bottom"</b>
5462 /// - etc
5463 /// @note This is the value of the EXIF Orientation tag (hex code 0x0112).
5464 /// <p><hr>
5465 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureOrientation `ListItem.PictureOrientation`\endlink
5466 /// <p>
5467 /// }
5468 /// \table_row3{ <b>`ListItem.PicturePath`</b>,
5469 /// \anchor ListItem_PicturePath
5470 /// _string_,
5471 /// @return The filename and path of the selected picture.
5472 /// <p>
5473 /// }
5474 /// \table_row3{ <b>`ListItem.PictureProcess`</b>,
5475 /// \anchor ListItem_PictureProcess
5476 /// _string_,
5477 /// @return The process used to compress the selected picture.
5478 /// <p><hr>
5479 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureProcess `ListItem.PictureProcess`\endlink
5480 /// <p>
5481 /// }
5482 /// \table_row3{ <b>`ListItem.PictureReferenceService`</b>,
5483 /// \anchor ListItem_PictureReferenceService
5484 /// _string_,
5485 /// @return The Service Identifier of a prior envelope to which the selected
5486 /// picture refers.
5487 /// @note This is the value of the IPTC ReferenceService tag (hex code 0x2D).
5488 /// <p><hr>
5489 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureReferenceService `ListItem.PictureReferenceService`\endlink
5490 /// <p>
5491 /// }
5492 /// \table_row3{ <b>`ListItem.PictureResolution`</b>,
5493 /// \anchor ListItem_PictureResolution
5494 /// _string_,
5495 /// @return The dimensions of the selected picture.
5496 /// <p>
5497 /// }
5498 /// \table_row3{ <b>`ListItem.PictureSource`</b>,
5499 /// \anchor ListItem_PictureSource
5500 /// _string_,
5501 /// @return The original owner of the selected picture.
5502 /// @note This is the value of the IPTC Source tag (hex code 0x73).
5503 /// <p><hr>
5504 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureSource `ListItem.PictureSource`\endlink
5505 /// <p>
5506 /// }
5507 /// \table_row3{ <b>`ListItem.PictureSpecialInstructions`</b>,
5508 /// \anchor ListItem_PictureSpecialInstructions
5509 /// _string_,
5510 /// @return Other editorial instructions concerning the use of the selected
5511 /// picture.
5512 /// @note This is the value of the IPTC SpecialInstructions tag (hex code 0x28).
5513 /// <p><hr>
5514 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureSpecialInstructions `ListItem.PictureSpecialInstructions`\endlink
5515 /// <p>
5516 /// }
5517 /// \table_row3{ <b>`ListItem.PictureState`</b>,
5518 /// \anchor ListItem_PictureState
5519 /// _string_,
5520 /// @return The State/Province where the selected picture was taken.
5521 /// @note This is the value of the IPTC ProvinceState tag (hex code 0x5F).
5522 /// <p><hr>
5523 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureState `ListItem.PictureState`\endlink
5524 /// <p>
5525 /// }
5526 /// \table_row3{ <b>`ListItem.PictureSublocation`</b>,
5527 /// \anchor ListItem_PictureSublocation
5528 /// _string_,
5529 /// @return The location within a city where the selected picture was taken -
5530 /// might indicate the nearest landmark.
5531 /// @note This is the value of the IPTC SubLocation tag (hex code 0x5C).
5532 /// <p><hr>
5533 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureSublocation `ListItem.PictureSublocation`\endlink
5534 /// <p>
5535 /// }
5536 /// \table_row3{ <b>`ListItem.PictureSupplementalCategories`</b>,
5537 /// \anchor ListItem_PictureSupplementalCategories
5538 /// _string_,
5539 /// @return A supplemental category codes to further refine the subject of the
5540 /// selected picture.
5541 /// @note This is the value of the IPTC SuppCategory tag (hex code 0x14).
5542 /// <p><hr>
5543 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureSupplementalCategories `ListItem.PictureSupplementalCategories`\endlink
5544 /// <p>
5545 /// }
5546 /// \table_row3{ <b>`ListItem.PictureTransmissionReference`</b>,
5547 /// \anchor ListItem_PictureTransmissionReference
5548 /// _string_,
5549 /// @return A code representing the location of original transmission of the
5550 /// selected picture.
5551 /// @note This is the value of the IPTC TransmissionReference tag (hex code 0x67).
5552 /// <p><hr>
5553 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureTransmissionReference `ListItem.PictureTransmissionReference`\endlink
5554 /// <p>
5555 /// }
5556 /// \table_row3{ <b>`ListItem.PictureUrgency`</b>,
5557 /// \anchor ListItem_PictureUrgency
5558 /// _string_,
5559 /// @return The urgency of the selected picture. Values are 1-9.
5560 /// @note The "1" is most urgent. Some image management programs use urgency to indicate
5561 /// picture rating\, where urgency "1" is 5 stars and urgency "5" is 1 star.
5562 /// Urgencies 6-9 are not used for rating. This is the value of the IPTC
5563 /// Urgency tag (hex code 0x0A).
5564 /// <p><hr>
5565 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureUrgency `ListItem.PictureUrgency`\endlink
5566 /// <p>
5567 /// }
5568 /// \table_row3{ <b>`ListItem.PictureWhiteBalance`</b>,
5569 /// \anchor ListItem_PictureWhiteBalance
5570 /// _string_,
5571 /// @return The white balance mode set when the selected picture was taken.
5572 /// The possible values are:
5573 /// - <b>"Manual"</b>
5574 /// - <b>"Auto"</b>
5575 /// @note This is the value of the EXIF WhiteBalance tag (hex code 0xA403).
5576 /// <p><hr>
5577 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureWhiteBalance `ListItem.PictureWhiteBalance`\endlink
5578 /// <p>
5579 /// }
5580 /// \table_row3{ <b>`ListItem.FileName`</b>,
5581 /// \anchor ListItem_FileName
5582 /// _string_,
5583 /// @return The filename of the currently selected song or movie in a container.
5584 /// <p>
5585 /// }
5586 /// \table_row3{ <b>`ListItem.Path`</b>,
5587 /// \anchor ListItem_Path
5588 /// _string_,
5589 /// @return The complete path of the currently selected song or movie in a
5590 /// container.
5591 /// <p>
5592 /// }
5593 /// \table_row3{ <b>`ListItem.FolderName`</b>,
5594 /// \anchor ListItem_FolderName
5595 /// _string_,
5596 /// @return The top most folder of the path of the currently selected song or
5597 /// movie in a container.
5598 /// <p>
5599 /// }
5600 /// \table_row3{ <b>`ListItem.FolderPath`</b>,
5601 /// \anchor ListItem_FolderPath
5602 /// _string_,
5603 /// @return The complete path of the currently selected song or movie in a
5604 /// container (without user details).
5605 /// <p>
5606 /// }
5607 /// \table_row3{ <b>`ListItem.FileNameAndPath`</b>,
5608 /// \anchor ListItem_FileNameAndPath
5609 /// _string_,
5610 /// @return The full path with filename of the currently selected song or
5611 /// movie in a container.
5612 /// <p>
5613 /// }
5614 /// \table_row3{ <b>`ListItem.FileExtension`</b>,
5615 /// \anchor ListItem_FileExtension
5616 /// _string_,
5617 /// @return The file extension (without leading dot) of the currently selected
5618 /// item in a container.
5619 /// <p>
5620 /// }
5621 /// \table_row3{ <b>`ListItem.FileNameNoExtension`</b>,
5622 /// \anchor ListItem_FileName_No_Extension
5623 /// _string_,
5624 /// @return The filename without extension of the currently selected
5625 /// item in a container.
5626 /// <p><hr>
5627 /// @skinning_v19 **[New Infolabel]** \link ListItem_FileName_No_Extension `ListItem.FileNameNoExtension`\endlink
5628 /// <p>
5629 /// }
5630 /// \table_row3{ <b>`ListItem.Date`</b>,
5631 /// \anchor ListItem_Date
5632 /// _string_,
5633 /// @return The file date of the currently selected song or movie in a
5634 /// container / Aired date of an episode / Day\, start time and end time of
5635 /// current selected TV programme (PVR).
5636 /// <p>
5637 /// }
5638 /// \table_row3{ <b>`ListItem.DateTime`</b>,
5639 /// \anchor ListItem_DateTime
5640 /// _string_,
5641 /// @return The date and time a certain event happened (event log).
5642 /// <p><hr>
5643 /// @skinning_v16 **[New Infolabel]** \link ListItem_DateTime `ListItem.DateTime`\endlink
5644 /// <p>
5645 /// }
5646 /// \table_row3{ <b>`ListItem.DateAdded`</b>,
5647 /// \anchor ListItem_DateAdded
5648 /// _string_,
5649 /// @return The date the currently selected item was added to the
5650 /// library / Date and time of an event in the EventLog window.
5651 /// <p>
5652 /// }
5653 /// \table_row3{ <b>`ListItem.Size`</b>,
5654 /// \anchor ListItem_Size
5655 /// _string_,
5656 /// @return The file size of the currently selected song or movie in a
5657 /// container.
5658 /// <p>
5659 /// }
5660 /// \table_row3{ <b>`ListItem.Rating([name])`</b>,
5661 /// \anchor ListItem_Rating
5662 /// _string_,
5663 /// @return The scraped rating of the currently selected item in a container (1-10).
5664 /// @param name - [opt] you can specify the name of the scraper to retrieve a specific rating\,
5665 /// for use in dialogvideoinfo.xml.
5666 /// <p><hr>
5667 /// @skinning_v18 **[Infolabel Updated]** \link ListItem_Rating `ListItem.Rating([name])`\endlink replaces
5668 /// the old `ListItem.Ratings([name])` infolabel.
5669 /// @skinning_v17 **[New Infolabel]** \link ListItem_Rating `ListItem.Ratings([name])`\endlink
5670 /// @skinning_v17 **[Infolabel Updated]** \link ListItem_Rating `ListItem.Ratings`\endlink
5671 /// for songs it's now the scraped rating.
5672 /// <p>
5673 /// }
5674 /// \table_row3{ <b>`ListItem.Set`</b>,
5675 /// \anchor ListItem_Set
5676 /// _string_,
5677 /// @return The name of the set the movie is part of.
5678 /// <p><hr>
5679 /// @skinning_v17 **[New Infolabel]** \link ListItem_Set `ListItem.Set`\endlink
5680 /// <p>
5681 /// }
5682 /// \table_row3{ <b>`ListItem.SetId`</b>,
5683 /// \anchor ListItem_SetId
5684 /// _string_,
5685 /// @return The id of the set the movie is part of.
5686 /// <p><hr>
5687 /// @skinning_v17 **[New Infolabel]** \link ListItem_SetId `ListItem.SetId`\endlink
5688 /// <p>
5689 /// }
5690 /// \table_row3{ <b>`ListItem.Status`</b>,
5691 /// \anchor ListItem_Status
5692 /// _string_,
5693 /// @return One of the following status:
5694 /// - <b>"returning series"</b>
5695 /// - <b>"in production"</b>
5696 /// - <b>"planned"</b>
5697 /// - <b>"cancelled"</b>
5698 /// - <b>"ended"</b>
5699 /// <p>
5700 /// @note For use with tv shows.
5701 /// <p><hr>
5702 /// @skinning_v17 **[New Infolabel]** \link ListItem_Status `ListItem.Status`\endlink
5703 /// <p>
5704 /// }
5705 /// \table_row3{ <b>`ListItem.EndTimeResume`</b>,
5706 /// \anchor ListItem_EndTimeResume
5707 /// _string_,
5708 /// @return Returns the time a video will end if you resume it\, instead of playing it from the beginning.
5709 /// <p><hr>
5710 /// @skinning_v17 **[New Infolabel]** \link ListItem_EndTimeResume `ListItem.EndTimeResume`\endlink
5711 /// <p>
5712 /// }
5713 /// \table_row3{ <b>`ListItem.UserRating`</b>,
5714 /// \anchor ListItem_UserRating
5715 /// _string_,
5716 /// @return The user rating of the currently selected item in a container (1-10).
5717 /// <p><hr>
5718 /// @skinning_v17 **[Infolabel Updated]** \link ListItem_UserRating `ListItem.UserRating`\endlink
5719 /// now available for albums/songs.
5720 /// @skinning_v16 **[New Infolabel]** \link ListItem_UserRating `ListItem.UserRating`\endlink
5721 /// <p>
5722 /// }
5723 /// \table_row3{ <b>`ListItem.Votes([name])`</b>,
5724 /// \anchor ListItem_Votes
5725 /// _string_,
5726 /// @return The scraped votes of the currently selected movie in a container.
5727 /// @param name - [opt] you can specify the name of the scraper to retrieve specific votes\,
5728 /// for use in `dialogvideoinfo.xml`.
5729 /// <p><hr>
5730 /// @skinning_v17 **[Infolabel Updated]** \link ListItem_Votes `ListItem.Votes([name])`\endlink
5731 /// add optional param <b>name</b> to specify the scrapper.
5732 /// @skinning_v13 **[New Infolabel]** \link ListItem_Votes `ListItem.Votes`\endlink
5733 /// <p>
5734 /// }
5735 /// \table_row3{ <b>`ListItem.RatingAndVotes([name])`</b>,
5736 /// \anchor ListItem_RatingAndVotes
5737 /// _string_,
5738 /// @return The scraped rating and votes of the currently selected movie in a
5739 /// container (1-10).
5740 /// @param name - [opt] you can specify the name of the scraper to retrieve specific votes\,
5741 /// for use in `dialogvideoinfo.xml`.
5742 /// <p><hr>
5743 /// @skinning_v17 **[New Infolabel]** \link ListItem_RatingAndVotes `ListItem.RatingAndVotes([name])`\endlink
5744 /// @skinning_v17 **[Infolabel Updated]** \link ListItem_RatingAndVotes `ListItem.RatingAndVotes`\endlink
5745 /// now available for albums/songs.
5746 /// <p>
5747 /// }
5748 /// \table_row3{ <b>`ListItem.Mood`</b>,
5749 /// \anchor ListItem_Mood
5750 /// _string_,
5751 /// @return The mood of the selected song.
5752 /// <p><hr>
5753 /// @skinning_v17 **[New Infolabel]** \link ListItem_Mood `ListItem.Mood`\endlink
5754 /// <p>
5755 /// }
5756 /// \table_row3{ <b>`ListItem.Mpaa`</b>,
5757 /// \anchor ListItem_Mpaa
5758 /// _string_,
5759 /// @return The MPAA rating of the currently selected movie in a container.
5760 /// <p>
5761 /// }
5762 /// \table_row3{ <b>`ListItem.ProgramCount`</b>,
5763 /// \anchor ListItem_ProgramCount
5764 /// _string_,
5765 /// @return The number of times an xbe has been run from "my programs".
5766 /// @todo description might be outdated
5767 /// <p>
5768 /// }
5769 /// \table_row3{ <b>`ListItem.Duration`</b>,
5770 /// \anchor ListItem_Duration
5771 /// _string_,
5772 /// @return The duration of the currently selected item in a container
5773 /// in the format <b>hh:mm:ss</b>.
5774 /// @note <b>hh:</b> will be omitted if hours value is zero.
5775 /// <p><hr>
5776 /// @skinning_v18 **[Infolabel Updated]** \link ListItem_Duration `ListItem.Duration`\endlink will
5777 /// return <b>hh:mm:ss</b> instead of the duration in minutes.
5778 /// <p>
5779 /// }
5780 /// \table_row3{ <b>`ListItem.Duration(format)`</b>,
5781 /// \anchor ListItem_Duration_format
5782 /// _string_,
5783 /// @return The duration of the currently selected item in a container in
5784 /// different formats.
5785 /// @param format [opt] The format of the return time value.
5786 /// See \ref TIME_FORMAT for the list of possible values.
5787 /// <p>
5788 /// }
5789 /// \table_row3{ <b>`ListItem.DBTYPE`</b>,
5790 /// \anchor ListItem_DBTYPE
5791 /// _string_,
5792 /// @return The database type of the \ref ListItem_DBID "ListItem.DBID" for videos (movie\, set\,
5793 /// genre\, actor\, tvshow\, season\, episode). It does not return any value
5794 /// for the music library.
5795 /// @note Beware with season\, the "*all seasons" entry does
5796 /// give a DBTYPE "season" and a DBID\, but you can't get the details of that
5797 /// entry since it's a virtual entry in the Video Library.
5798 /// <p><hr>
5799 /// @skinning_v17 **[Infolabel Updated]** \link ListItem_DBTYPE `ListItem.DBTYPE`\endlink
5800 /// now available in the music library.
5801 /// <p>
5802 /// }
5803 /// \table_row3{ <b>`ListItem.DBID`</b>,
5804 /// \anchor ListItem_DBID
5805 /// _string_,
5806 /// @return The database id of the currently selected listitem in a container.
5807 /// <p>
5808 /// }
5809 /// \table_row3{ <b>`ListItem.Appearances`</b>,
5810 /// \anchor ListItem_Appearances
5811 /// _string_,
5812 /// @return The number of movies featuring the selected actor / directed by the selected director.
5813 /// <p><hr>
5814 /// @skinning_v17 **[New Infolabel]** \link ListItem_Appearances `ListItem.Appearances`\endlink
5815 /// <p>
5816 /// }
5817 /// \table_row3{ <b>`ListItem.Cast`</b>,
5818 /// \anchor ListItem_Cast
5819 /// _string_,
5820 /// @return A concatenated string of cast members of the currently selected
5821 /// movie\, for use in dialogvideoinfo.xml.
5822 /// <p><hr>
5823 /// @skinning_v15 **[Infolabel Updated]** \link ListItem_Cast `ListItem.Cast`\endlink
5824 /// also supports EPG.
5825 /// <p>
5826 /// }
5827 /// \table_row3{ <b>`ListItem.CastAndRole`</b>,
5828 /// \anchor ListItem_CastAndRole
5829 /// _string_,
5830 /// @return A concatenated string of cast members and roles of the currently
5831 /// selected movie\, for use in dialogvideoinfo.xml.
5832 /// <p>
5833 /// }
5834 /// \table_row3{ <b>`ListItem.Studio`</b>,
5835 /// \anchor ListItem_Studio
5836 /// _string_,
5837 /// @return The studio of current selected Music Video in a container.
5838 /// <p>
5839 /// }
5840 /// \table_row3{ <b>`ListItem.Top250`</b>,
5841 /// \anchor ListItem_Top250
5842 /// _string_,
5843 /// @return The IMDb top250 position of the currently selected listitem in a
5844 /// container.
5845 /// <p>
5846 /// }
5847 /// \table_row3{ <b>`ListItem.Trailer`</b>,
5848 /// \anchor ListItem_Trailer
5849 /// _string_,
5850 /// @return The full trailer path with filename of the currently selected
5851 /// movie in a container.
5852 /// <p>
5853 /// }
5854 /// \table_row3{ <b>`ListItem.Writer`</b>,
5855 /// \anchor ListItem_Writer
5856 /// _string_,
5857 /// @return The name of Writer of current Video in a container.
5858 /// <p><hr>
5859 /// @skinning_v15 **[Infolabel Updated]** \link ListItem_Writer `ListItem.Writer`\endlink
5860 /// also supports EPG.
5861 /// <p>
5862 /// }
5863 /// \table_row3{ <b>`ListItem.Tag`</b>,
5864 /// \anchor ListItem_Tag
5865 /// _string_,
5866 /// @return The summary of current Video in a container.
5867 /// <p><hr>
5868 /// @skinning_v17 **[New Infolabel]** \link ListItem_Tag `ListItem.Tag`\endlink
5869 /// <p>
5870 /// }
5871 /// \table_row3{ <b>`ListItem.Tagline`</b>,
5872 /// \anchor ListItem_Tagline
5873 /// _string_,
5874 /// @return A Small Summary of current Video in a container.
5875 /// <p>
5876 /// }
5877 /// \table_row3{ <b>`ListItem.PlotOutline`</b>,
5878 /// \anchor ListItem_PlotOutline
5879 /// _string_,
5880 /// @return A small Summary of current Video in a container.
5881 /// <p>
5882 /// }
5883 /// \table_row3{ <b>`ListItem.Plot`</b>,
5884 /// \anchor ListItem_Plot
5885 /// _string_,
5886 /// @return The complete Text Summary of Video in a container.
5887 /// <p>
5888 /// }
5889 /// \table_row3{ <b>`ListItem.IMDBNumber`</b>,
5890 /// \anchor ListItem_IMDBNumber
5891 /// _string_,
5892 /// @return The IMDb ID of the selected Video in a container.
5893 /// <p><hr>
5894 /// @skinning_v15 **[New Infolabel]** \link ListItem_IMDBNumber `ListItem.IMDBNumber`\endlink
5895 /// <p>
5896 /// }
5897 /// \table_row3{ <b>`ListItem.EpisodeName`</b>,
5898 /// \anchor ListItem_EpisodeName
5899 /// _string_,
5900 /// @return The name of the episode if the selected EPG item is a TV Show (PVR).
5901 /// <p><hr>
5902 /// @skinning_v15 **[New Infolabel]** \link ListItem_EpisodeName `ListItem.EpisodeName`\endlink
5903 /// <p>
5904 /// }
5905 /// \table_row3{ <b>`ListItem.PercentPlayed`</b>,
5906 /// \anchor ListItem_PercentPlayed
5907 /// _string_,
5908 /// @return The percentage value [0-100] of how far the selected video has been
5909 /// played.
5910 /// <p>
5911 /// }
5912 /// \table_row3{ <b>`ListItem.LastPlayed`</b>,
5913 /// \anchor ListItem_LastPlayed
5914 /// _string_,
5915 /// @return The last play date of Video in a container.
5916 /// <p>
5917 /// }
5918 /// \table_row3{ <b>`ListItem.PlayCount`</b>,
5919 /// \anchor ListItem_PlayCount
5920 /// _string_,
5921 /// @return The playcount of Video in a container.
5922 /// <p>
5923 /// }
5924 /// \table_row3{ <b>`ListItem.ChannelName`</b>,
5925 /// \anchor ListItem_ChannelName
5926 /// _string_,
5927 /// @return The name of current selected TV channel in a container.
5928 /// <p>
5929 /// }
5930 /// \table_row3{ <b>`ListItem.VideoCodec`</b>,
5931 /// \anchor ListItem_VideoCodec
5932 /// _string_,
5933 /// @return The video codec of the currently selected video. Common values:
5934 /// - <b>3iv2</b>
5935 /// - <b>av1</b>
5936 /// - <b>avc1</b>
5937 /// - <b>div2</b>
5938 /// - <b>div3</b>
5939 /// - <b>divx</b>
5940 /// - <b>divx 4</b>
5941 /// - <b>dx50</b>
5942 /// - <b>flv</b>
5943 /// - <b>h264</b>
5944 /// - <b>microsoft</b>
5945 /// - <b>mp42</b>
5946 /// - <b>mp43</b>
5947 /// - <b>mp4v</b>
5948 /// - <b>mpeg1video</b>
5949 /// - <b>mpeg2video</b>
5950 /// - <b>mpg4</b>
5951 /// - <b>rv40</b>
5952 /// - <b>svq1</b>
5953 /// - <b>svq3</b>
5954 /// - <b>theora</b>
5955 /// - <b>vp6f</b>
5956 /// - <b>wmv2</b>
5957 /// - <b>wmv3</b>
5958 /// - <b>wvc1</b>
5959 /// - <b>xvid</b>
5960 /// - etc
5961 /// <p>
5962 /// }
5963 /// \table_row3{ <b>`ListItem.VideoResolution`</b>,
5964 /// \anchor ListItem_VideoResolution
5965 /// _string_,
5966 /// @return The resolution of the currently selected video. Possible values:
5967 /// - <b>480</b>
5968 /// - <b>576</b>
5969 /// - <b>540</b>
5970 /// - <b>720</b>
5971 /// - <b>1080</b>
5972 /// - <b>4K</b>
5973 /// - <b>8K</b>
5974 /// @note 540 usually means a widescreen
5975 /// format (around 960x540) while 576 means PAL resolutions (normally
5976 /// 720x576)\, therefore 540 is actually better resolution than 576.
5977 /// <p><hr>
5978 /// @skinning_v18 **[Updated Infolabel]** \link ListItem_VideoResolution ListItem.VideoResolution\endlink
5979 /// added <b>8K</b> as a possible value.
5980 /// <p>
5981 /// }
5982 /// \table_row3{ <b>`ListItem.VideoAspect`</b>,
5983 /// \anchor ListItem_VideoAspect
5984 /// _string_,
5985 /// @return The aspect ratio of the currently selected video. Possible values:
5986 /// - <b>1.00</b>
5987 /// - <b>1.19</b>
5988 /// - <b>1.33</b>
5989 /// - <b>1.37</b>
5990 /// - <b>1.66</b>
5991 /// - <b>1.78</b>
5992 /// - <b>1.85</b>
5993 /// - <b>2.00</b>
5994 /// - <b>2.20</b>
5995 /// - <b>2.35</b>
5996 /// - <b>2.40</b>
5997 /// - <b>2.55</b>
5998 /// - <b>2.76</b>
5999 /// <p>
6000 /// }
6001 /// \table_row3{ <b>`ListItem.AudioCodec`</b>,
6002 /// \anchor ListItem_AudioCodec
6003 /// _string_,
6004 /// @return The audio codec of the currently selected video. Common values:
6005 /// - <b>aac</b>
6006 /// - <b>ac3</b>
6007 /// - <b>cook</b>
6008 /// - <b>dca</b>
6009 /// - <b>dtshd_hra</b>
6010 /// - <b>dtshd_ma</b>
6011 /// - <b>eac3</b>
6012 /// - <b>mp1</b>
6013 /// - <b>mp2</b>
6014 /// - <b>mp3</b>
6015 /// - <b>pcm_s16be</b>
6016 /// - <b>pcm_s16le</b>
6017 /// - <b>pcm_u8</b>
6018 /// - <b>truehd</b>
6019 /// - <b>vorbis</b>
6020 /// - <b>wmapro</b>
6021 /// - <b>wmav2</b>
6022 /// <p>
6023 /// }
6024 /// \table_row3{ <b>`ListItem.AudioChannels`</b>,
6025 /// \anchor ListItem_AudioChannels
6026 /// _string_,
6027 /// @return The number of audio channels of the currently selected video. Possible values:
6028 /// - <b>1</b>
6029 /// - <b>2</b>
6030 /// - <b>4</b>
6031 /// - <b>5</b>
6032 /// - <b>6</b>
6033 /// - <b>8</b>
6034 /// - <b>10</b>
6035 /// <p><hr>
6036 /// @skinning_v16 **[Infolabel Updated]** \link ListItem_AudioChannels `ListItem.AudioChannels`\endlink
6037 /// if a video contains no audio\, these infolabels will now return empty.
6038 /// (they used to return 0)
6039 /// <p>
6040 /// }
6041 /// \table_row3{ <b>`ListItem.AudioLanguage`</b>,
6042 /// \anchor ListItem_AudioLanguage
6043 /// _string_,
6044 /// @return The audio language of the currently selected video (an
6045 /// ISO 639-2 three character code: e.g. eng\, epo\, deu)
6046 /// <p>
6047 /// }
6048 /// \table_row3{ <b>`ListItem.SubtitleLanguage`</b>,
6049 /// \anchor ListItem_SubtitleLanguage
6050 /// _string_,
6051 /// @return The subtitle language of the currently selected video (an
6052 /// ISO 639-2 three character code: e.g. eng\, epo\, deu)
6053 /// <p>
6054 /// }
6055 /// \table_row3{ <b>`ListItem.Property(AudioCodec.[n])`</b>,
6056 /// \anchor ListItem_Property_AudioCodec
6057 /// _string_,
6058 /// @return The audio codec of the currently selected video
6059 /// @param n - the number of the audiostream (values: see \ref ListItem_AudioCodec "ListItem.AudioCodec")
6060 /// <p><hr>
6061 /// @skinning_v16 **[New Infolabel]** \link ListItem_Property_AudioCodec `ListItem.Property(AudioCodec.[n])`\endlink
6062 /// <p>
6063 /// }
6064 /// \table_row3{ <b>`ListItem.Property(AudioChannels.[n])`</b>,
6065 /// \anchor ListItem_Property_AudioChannels
6066 /// _string_,
6067 /// @return The number of audio channels of the currently selected video
6068 /// @param n - the number of the audiostream (values: see
6069 /// \ref ListItem_AudioChannels "ListItem.AudioChannels")
6070 /// <p><hr>
6071 /// @skinning_v16 **[New Infolabel]** \link ListItem_Property_AudioChannels `ListItem.Property(AudioChannels.[n])`\endlink
6072 /// <p>
6073 /// }
6074 /// \table_row3{ <b>`ListItem.Property(AudioLanguage.[n])`</b>,
6075 /// \anchor ListItem_Property_AudioLanguage
6076 /// _string_,
6077 /// @return The audio language of the currently selected video
6078 /// @param n - the number of the audiostream (values: see \ref ListItem_AudioLanguage "ListItem.AudioLanguage")
6079 /// <p><hr>
6080 /// @skinning_v16 **[New Infolabel]** \link ListItem_Property_AudioLanguage `ListItem.Property(AudioLanguage.[n])`\endlink
6081 /// <p>
6082 /// }
6083 /// \table_row3{ <b>`ListItem.Property(SubtitleLanguage.[n])`</b>,
6084 /// \anchor ListItem_Property_SubtitleLanguage
6085 /// _string_,
6086 /// @return The subtitle language of the currently selected video
6087 /// @param n - the number of the subtitle (values: see \ref ListItem_SubtitleLanguage "ListItem.SubtitleLanguage")
6088 /// <p><hr>
6089 /// @skinning_v16 **[New Infolabel]** \link ListItem_Property_SubtitleLanguage `ListItem.Property(SubtitleLanguage.[n])`\endlink
6090 /// <p>
6091 /// }
6092 /// \table_row3{ <b>`ListItem.Property(Addon.Disclaimer)`</b>,
6093 /// \anchor ListItem_Property_AddonDisclaimer
6094 /// _string_,
6095 /// @return The disclaimer of the currently selected addon.
6096 /// <p>
6097 /// }
6098 /// \table_row3{ <b>`ListItem.Property(Addon.Changelog)`</b>,
6099 /// \anchor ListItem_Property_AddonChangelog
6100 /// _string_,
6101 /// @return The changelog of the currently selected addon.
6102 /// <p>
6103 /// }
6104 /// \table_row3{ <b>`ListItem.Property(Addon.ID)`</b>,
6105 /// \anchor ListItem_Property_AddonID
6106 /// _string_,
6107 /// @return The identifier of the currently selected addon.
6108 /// <p>
6109 /// }
6110 /// \table_row3{ <b>`ListItem.Property(Addon.Status)`</b>,
6111 /// \anchor ListItem_Property_AddonStatus
6112 /// _string_,
6113 /// @return The status of the currently selected addon.
6114 /// @todo missing reference in GuiInfoManager.cpp making it hard to track.
6115 /// <p>
6116 /// }
6117 /// \table_row3{ <b>`ListItem.Property(Addon.Orphaned)`</b>,
6118 /// \anchor ListItem_Property_AddonOrphaned
6119 /// _boolean_,
6120 /// @return **True** if the Addon is orphanad.
6121 /// @todo missing reference in GuiInfoManager.cpp making it hard to track.
6122 /// <p><hr>
6123 /// @skinning_v17 **[New Boolean Condition]** \link ListItem_Property_AddonOrphaned `ListItem.Property(Addon.Orphaned)`\endlink
6124 /// <p>
6125 /// }
6126 /// \table_row3{ <b>`ListItem.Property(Addon.Path)`</b>,
6127 /// \anchor ListItem_Property_AddonPath
6128 /// _string_,
6129 /// @return The path of the currently selected addon.
6130 /// <p>
6131 /// }
6132 /// \table_row3{ <b>`ListItem.StartTime`</b>,
6133 /// \anchor ListItem_StartTime
6134 /// _string_,
6135 /// @return The start time of current selected TV programme in a container.
6136 /// <p>
6137 /// }
6138 /// \table_row3{ <b>`ListItem.EndTime`</b>,
6139 /// \anchor ListItem_EndTime
6140 /// _string_,
6141 /// @return The end time of current selected TV programme in a container.
6142 /// <p>
6143 /// }
6144 /// \table_row3{ <b>`ListItem.StartDate`</b>,
6145 /// \anchor ListItem_StartDate
6146 /// _string_,
6147 /// @return The start date of current selected TV programme in a container.
6148 /// <p>
6149 /// }
6150 /// \table_row3{ <b>`ListItem.EndDate`</b>,
6151 /// \anchor ListItem_EndDate
6152 /// _string_,
6153 /// @return The end date of current selected TV programme in a container.
6154 /// <p>
6155 /// }
6156 /// \table_row3{ <b>`ListItem.NextTitle`</b>,
6157 /// \anchor ListItem_NextTitle
6158 /// _string_,
6159 /// @return The title of the next item (PVR).
6160 /// <p>
6161 /// }
6162 /// \table_row3{ <b>`ListItem.NextGenre`</b>,
6163 /// \anchor ListItem_NextGenre
6164 /// _string_,
6165 /// @return The genre of the next item (PVR).
6166 /// <p>
6167 /// }
6168 /// \table_row3{ <b>`ListItem.NextPlot`</b>,
6169 /// \anchor ListItem_NextPlot
6170 /// _string_,
6171 /// @return The plot of the next item (PVR).
6172 /// <p>
6173 /// }
6174 /// \table_row3{ <b>`ListItem.NextPlotOutline`</b>,
6175 /// \anchor ListItem_NextPlotOutline
6176 /// _string_,
6177 /// @return The plot outline of the next item (PVR).
6178 /// <p>
6179 /// }
6180 /// \table_row3{ <b>`ListItem.NextStartTime`</b>,
6181 /// \anchor ListItem_NextStartTime
6182 /// _string_,
6183 /// @return The start time of the next item (PVR).
6184 /// <p>
6185 /// }
6186 /// \table_row3{ <b>`ListItem.NextEndTime`</b>,
6187 /// \anchor ListItem_NextEndTime
6188 /// _string_,
6189 /// @return The end of the next item (PVR).
6190 /// <p>
6191 /// }
6192 /// \table_row3{ <b>`ListItem.NextStartDate`</b>,
6193 /// \anchor ListItem_NextStartDate
6194 /// _string_,
6195 /// @return The start date of the next item (PVR).
6196 /// <p>
6197 /// }
6198 /// \table_row3{ <b>`ListItem.NextEndDate`</b>,
6199 /// \anchor ListItem_NextEndDate
6200 /// _string_,
6201 /// @return The end date of the next item (PVR).
6202 /// <p>
6203 /// }
6204 /// \table_row3{ <b>`ListItem.NextDuration`</b>,
6205 /// \anchor ListItem_NextDuration
6206 /// _string_,
6207 /// @return The duration of the next item (PVR) in the format <b>hh:mm:ss</b>.
6208 /// @note <b>hh:</b> will be omitted if hours value is zero.
6209 /// <p><hr>
6210 /// @skinning_v18 **[New Infolabel]** \link ListItem_NextDuration `ListItem.NextDuration`\endlink
6211 /// <p>
6212 /// }
6213 /// \table_row3{ <b>`ListItem.NextDuration(format)`</b>,
6214 /// \anchor ListItem_NextDuration_format
6215 /// _string_,
6216 /// @return The duration of the next item (PVR) in different formats.
6217 /// @param format [opt] The format of the return time value.
6218 /// See \ref TIME_FORMAT for the list of possible values.
6219 /// <p><hr>
6220 /// @skinning_v18 **[New Infolabel]** \link ListItem_NextDuration_format `ListItem.NextDuration(format)`\endlink
6221 /// <p>
6222 /// }
6223 /// \table_row3{ <b>`ListItem.ChannelGroup`</b>,
6224 /// \anchor ListItem_ChannelGroup
6225 /// _string_,
6226 /// @return The channel group of the selected item (PVR).
6227 /// <p>
6228 /// }
6229 /// \table_row3{ <b>`ListItem.ChannelNumberLabel`</b>,
6230 /// \anchor ListItem_ChannelNumberLabel
6231 /// _string_,
6232 /// @return The channel and subchannel number of the currently selected channel that's
6233 /// currently playing (PVR).
6234 /// <p><hr>
6235 /// @skinning_v14 **[New Infolabel]** \link ListItem_ChannelNumberLabel `ListItem.ChannelNumberLabel`\endlink
6236 /// <p>
6237 /// }
6238 /// \table_row3{ <b>`ListItem.Progress`</b>,
6239 /// \anchor ListItem_Progress
6240 /// _string_,
6241 /// @return The part of the programme that's been played (PVR).
6242 /// <p>
6243 /// }
6244 /// \table_row3{ <b>`ListItem.StereoscopicMode`</b>,
6245 /// \anchor ListItem_StereoscopicMode
6246 /// _string_,
6247 /// @return The stereomode of the selected video:
6248 /// - <b>mono</b>
6249 /// - <b>split_vertical</b>
6250 /// - <b>split_horizontal</b>
6251 /// - <b>row_interleaved</b>
6252 /// - <b>anaglyph_cyan_red</b>
6253 /// - <b>anaglyph_green_magenta</b>
6254 /// <p><hr>
6255 /// @skinning_v13 **[New Infolabel]** \link ListItem_StereoscopicMode `ListItem.StereoscopicMode`\endlink
6256 /// <p>
6257 /// }
6258 /// \table_row3{ <b>`ListItem.HasTimerSchedule`</b>,
6259 /// \anchor ListItem_HasTimerSchedule
6260 /// _boolean_,
6261 /// @return **True** if the item was scheduled by a timer rule (PVR).
6262 /// <p><hr>
6263 /// @skinning_v16 **[New Boolean Condition]** \ref ListItem_HasTimerSchedule "ListItem.HasTimerSchedule"
6264 /// <p>
6265 /// }
6266 /// \table_row3{ <b>`ListItem.HasReminder`</b>,
6267 /// \anchor ListItem_HasReminder
6268 /// _boolean_,
6269 /// @return **True** if the item has a reminder set (PVR).
6270 /// <p><hr>
6271 /// @skinning_v19 **[New Boolean Condition]** \ref ListItem_HasReminder "ListItem.HasReminder"
6272 /// <p>
6273 /// }
6274 /// \table_row3{ <b>`ListItem.HasReminderRule`</b>,
6275 /// \anchor ListItem_ListItem.HasReminderRule
6276 /// _boolean_,
6277 /// @return **True** if the item was scheduled by a reminder timer rule (PVR).
6278 /// <p><hr>
6279 /// @skinning_v19 **[New Boolean Condition]** \ref ListItem_HasReminderRule "ListItem.HasReminderRule"
6280 /// <p>
6281 /// }
6282 /// \table_row3{ <b>`ListItem.HasRecording`</b>,
6283 /// \anchor ListItem_HasRecording
6284 /// _boolean_,
6285 /// @return **True** if a given epg tag item currently gets recorded or has been recorded.
6286 /// <p>
6287 /// }
6288 /// \table_row3{ <b>`ListItem.TimerHasError`</b>,
6289 /// \anchor ListItem_TimerHasError
6290 /// _boolean_,
6291 /// @return **True** if the item has a timer and it won't be recorded because of an error (PVR).
6292 /// <p><hr>
6293 /// @skinning_v17 **[New Boolean Condition]** \ref ListItem_TimerHasError "ListItem.TimerHasError"
6294 /// <p>
6295 /// }
6296 /// \table_row3{ <b>`ListItem.TimerHasConflict`</b>,
6297 /// \anchor ListItem_TimerHasConflict
6298 /// _boolean_,
6299 /// @return **True** if the item has a timer and it won't be recorded because of a conflict (PVR).
6300 /// <p><hr>
6301 /// @skinning_v17 **[New Boolean Condition]** \ref ListItem_TimerHasConflict "ListItem.TimerHasConflict"
6302 /// <p>
6303 /// }
6304 /// \table_row3{ <b>`ListItem.TimerIsActive`</b>,
6305 /// \anchor ListItem_TimerIsActive
6306 /// _boolean_,
6307 /// @return **True** if the item has a timer that will be recorded\, i.e. the timer is enabled (PVR).
6308 /// <p><hr>
6309 /// @skinning_v17 **[New Boolean Condition]** \ref ListItem_TimerIsActive "ListItem.TimerIsActive"
6310 /// <p>
6311 /// }
6312 /// \table_row3{ <b>`ListItem.Comment`</b>,
6313 /// \anchor ListItem_Comment
6314 /// _string_,
6315 /// @return The comment assigned to the item (PVR/MUSIC).
6316 /// <p>
6317 /// }
6318 /// \table_row3{ <b>`ListItem.TimerType`</b>,
6319 /// \anchor ListItem_TimerType
6320 /// _string_,
6321 /// @return The type of the PVR timer / timer rule item as a human readable string.
6322 /// <p>
6323 /// }
6324 /// \table_row3{ <b>`ListItem.EpgEventTitle`</b>,
6325 /// \anchor ListItem_EpgEventTitle
6326 /// _string_,
6327 /// @return The title of the epg event associated with the item\, if any.
6328 /// <p>
6329 /// }
6330 /// \table_row3{ <b>`ListItem.EpgEventIcon`</b>,
6331 /// \anchor ListItem_EpgEventIcon
6332 /// _string_,
6333 /// @return The thumbnail for the EPG event associated with the item (if it exists).
6334 /// <p><hr>
6335 /// @skinning_v18 **[New Infolabel]** \link ListItem_EpgEventIcon `ListItem.EpgEventIcon`\endlink
6336 /// <p>
6337 /// }
6338 /// \table_row3{ <b>`ListItem.InProgress`</b>,
6339 /// \anchor ListItem_InProgress
6340 /// _boolean_,
6341 /// @return **True** if the EPG event item is currently active (time-wise).
6342 /// <p>
6343 /// }
6344 /// \table_row3{ <b>`ListItem.IsParentFolder`</b>,
6345 /// \anchor ListItem_IsParentFolder
6346 /// _boolean_,
6347 /// @return **True** if the current list item is the goto parent folder '..'.
6348 /// <p><hr>
6349 /// @skinning_v17 **[New Boolean Condition]** \link ListItem_IsParentFolder `ListItem.IsParentFolder`\endlink
6350 /// <p>
6351 /// }
6352 /// \table_row3{ <b>`ListItem.AddonName`</b>,
6353 /// \anchor ListItem_AddonName
6354 /// _string_,
6355 /// @return The name of the currently selected addon.
6356 /// <p><hr>
6357 /// @skinning_v17 **[Infolabel Updated]** \link ListItem_AddonName `ListItem.AddonName`\endlink
6358 /// replaces `ListItem.Property(Addon.Name)`.
6359 /// <p>
6360 /// }
6361 /// \table_row3{ <b>`ListItem.AddonVersion`</b>,
6362 /// \anchor ListItem_AddonVersion
6363 /// _string_,
6364 /// @return The version of the currently selected addon.
6365 /// <p><hr>
6366 /// @skinning_v17 **[Infolabel Updated]** \link ListItem_AddonVersion `ListItem.AddonVersion`\endlink
6367 /// replaces `ListItem.Property(Addon.Version)`.
6368 /// <p>
6369 /// }
6370 /// \table_row3{ <b>`ListItem.AddonCreator`</b>,
6371 /// \anchor ListItem_AddonCreator
6372 /// _string_,
6373 /// @return The name of the author the currently selected addon.
6374 /// <p><hr>
6375 /// @skinning_v17 **[Infolabel Updated]** \link ListItem_AddonCreator `ListItem.AddonCreator`\endlink
6376 /// replaces `ListItem.Property(Addon.Creator)`.
6377 /// <p>
6378 /// }
6379 /// \table_row3{ <b>`ListItem.AddonSummary`</b>,
6380 /// \anchor ListItem_AddonSummary
6381 /// _string_,
6382 /// @return A short description of the currently selected addon.
6383 /// <p><hr>
6384 /// @skinning_v17 **[Infolabel Updated]** \link ListItem_AddonSummary `ListItem.AddonSummary`\endlink
6385 /// replaces `ListItem.Property(Addon.Summary)`.
6386 /// <p>
6387 /// }
6388 /// \table_row3{ <b>`ListItem.AddonDescription`</b>,
6389 /// \anchor ListItem_AddonDescription
6390 /// _string_,
6391 /// @return The full description of the currently selected addon.
6392 /// <p><hr>
6393 /// @skinning_v17 **[Infolabel Updated]** \link ListItem_AddonDescription `ListItem.AddonDescription`\endlink
6394 /// replaces `ListItem.Property(Addon.Description)`.
6395 /// <p>
6396 /// }
6397 /// \table_row3{ <b>`ListItem.AddonDisclaimer`</b>,
6398 /// \anchor ListItem_AddonDisclaimer
6399 /// _string_,
6400 /// @return The disclaimer of the currently selected addon.
6401 /// <p><hr>
6402 /// @skinning_v17 **[Infolabel Updated]** \link ListItem_AddonDisclaimer `ListItem.AddonDisclaimer`\endlink
6403 /// replaces `ListItem.Property(Addon.Disclaimer)`.
6404 /// <p>
6405 /// }
6406 /// \table_row3{ <b>`ListItem.AddonBroken`</b>,
6407 /// \anchor ListItem_AddonBroken
6408 /// _string_,
6409 /// @return A message when the addon is marked as broken in the repo.
6410 /// @deprecated but still available\, use \ref ListItem_AddonLifecycleDesc "ListItem.AddonLifecycleDesc"
6411 /// instead
6412 /// <p><hr>
6413 /// @skinning_v17 **[Infolabel Updated]** \link ListItem_AddonBroken `ListItem.AddonBroken`\endlink
6414 /// replaces `ListItem.Property(Addon.Broken)`.
6415 /// <p>
6416 /// }
6417 /// \table_row3{ <b>`ListItem.AddonLifecycleType`</b>,
6418 /// \anchor ListItem_AddonLifecycleType
6419 /// _string_,
6420 /// @return String name when the addon is marked as special condition in the repo.
6421 /// - <b>Label: 24169 (Normal)</b> - Used if an add-on has no special lifecycle state which is the default state
6422 /// - <b>Label: 24170 (Deprecated)</b> - The add-on should be marked as deprecated but is still usable
6423 /// - <b>Label: 24171 (Broken)</b> - The add-on should marked as broken in the repository
6424 /// <p><hr>
6425 /// @skinning_v19 **[New Infolabel]** \link ListItem_AddonLifecycleType `ListItem.AddonLifecycleType`\endlink
6426 /// replaces `ListItem.AddonBroken`.
6427 /// <p>
6428 /// }
6429 /// \table_row3{ <b>`ListItem.AddonLifecycleDesc`</b>,
6430 /// \anchor ListItem_AddonLifecycleDesc
6431 /// _string_,
6432 /// @return From addon defined message text when it is marked as special condition inside repository.
6433 /// <p><hr>
6434 /// @skinning_v19 **[New Infolabel]** \link ListItem_AddonLifecycleDesc `ListItem.AddonLifecycleDesc``\endlink
6435 /// replaces `ListItem.AddonBroken`.
6436 /// <p>
6437 /// }
6439 /// \table_row3{ <b>`ListItem.AddonType`</b>,
6440 /// \anchor ListItem_AddonType
6441 /// _string_,
6442 /// @return The type (screensaver\, script\, skin\, etc...) of the currently selected addon.
6443 /// <p><hr>
6444 /// @skinning_v17 **[Infolabel Updated]** \link ListItem_AddonType `ListItem.AddonType`\endlink
6445 /// replaces `ListItem.Property(Addon.Type)`.
6446 /// <p>
6447 /// }
6448 /// \table_row3{ <b>`ListItem.AddonInstallDate`</b>,
6449 /// \anchor ListItem_AddonInstallDate
6450 /// _string_,
6451 /// @return The date the addon was installed.
6452 /// <p><hr>
6453 /// @skinning_v17 **[New Infolabel]** \link ListItem_AddonInstallDate `ListItem.AddonInstallDate`\endlink
6454 /// <p>
6455 /// }
6456 /// \table_row3{ <b>`ListItem.AddonLastUpdated`</b>,
6457 /// \anchor ListItem_AddonLastUpdated
6458 /// _string_,
6459 /// @return The date the addon was last updated.
6460 /// <p><hr>
6461 /// @skinning_v17 **[New Infolabel]** \link ListItem_AddonLastUpdated `ListItem.AddonLastUpdated`\endlink
6462 /// <p>
6463 /// }
6464 /// \table_row3{ <b>`ListItem.AddonLastUsed`</b>,
6465 /// \anchor ListItem_AddonLastUsed
6466 /// _string_,
6467 /// @return The date the addon was used last.
6468 /// <p><hr>
6469 /// @skinning_v17 **[New Infolabel]** \link ListItem_AddonLastUsed `ListItem.AddonLastUsed`\endlink
6470 /// <p>
6471 /// }
6472 /// \table_row3{ <b>`ListItem.AddonNews`</b>,
6473 /// \anchor ListItem_AddonNews
6474 /// _string_,
6475 /// @return A brief changelog\, taken from the addons' `addon.xml` file.
6476 /// <p><hr>
6477 /// @skinning_v17 **[New Infolabel]** \link ListItem_AddonNews `ListItem.AddonNews`\endlink
6478 /// <p>
6479 /// }
6480 /// \table_row3{ <b>`ListItem.AddonSize`</b>,
6481 /// \anchor ListItem_AddonSize
6482 /// _string_,
6483 /// @return The filesize of the addon.
6484 /// <p><hr>
6485 /// @skinning_v17 **[New Infolabel]** \link ListItem_AddonSize `ListItem.AddonSize`\endlink
6486 /// <p>
6487 /// }
6488 /// \table_row3{ <b>`ListItem.AddonOrigin`</b>,
6489 /// \anchor ListItem_AddonOrigin
6490 /// _string_,
6491 /// @return The name of the repository the add-on originates from.
6492 /// <p>
6493 /// }
6494 /// \table_row3{ <b>`ListItem.ExpirationDate`</b>,
6495 /// \anchor ListItem_ExpirationDate
6496 /// _string_,
6497 /// @return The expiration date of the selected item in a container\, empty string if not supported.
6498 /// <p>
6499 /// }
6500 /// \table_row3{ <b>`ListItem.ExpirationTime`</b>,
6501 /// \anchor ListItem_ExpirationTime
6502 /// _string_,
6503 /// @return The expiration time of the selected item in a container\, empty string if not supported
6504 /// <p>
6505 /// }
6506 /// \table_row3{ <b>`ListItem.Art(type)`</b>,
6507 /// \anchor ListItem_Art_Type
6508 /// _string_,
6509 /// @return A particular art type for an item.
6510 /// @param type - the art type. It can be any value (set by scripts and scrappers). Common values:
6511 /// - <b>clearart</b> - the clearart (if it exists) of the currently selected movie or tv show.
6512 /// - <b>clearlogo</b> - the clearlogo (if it exists) of the currently selected movie or tv show.
6513 /// - <b>landscape</b> - the 16:9 landscape (if it exists) of the currently selected item.
6514 /// - <b>thumb</b> - the thumbnail of the currently selected item.
6515 /// - <b>poster</b> - the poster of the currently selected movie or tv show.
6516 /// - <b>banner</b> - the banner of the currently selected tv show.
6517 /// - <b>fanart</b> - the fanart image of the currently selected item.
6518 /// - <b>set.fanart</b> - the fanart image of the currently selected movieset.
6519 /// - <b>tvshow.poster</b> - the tv show poster of the parent container.
6520 /// - <b>tvshow.banner</b> - the tv show banner of the parent container.
6521 /// - <b>tvshow.clearlogo</b> - the tv show clearlogo (if it exists) of the parent container.
6522 /// - <b>tvshow.landscape</b> - the tv show landscape (if it exists) of the parent container.
6523 /// - <b>tvshow.clearart</b> - the tv show clearart (if it exists) of the parent container.
6524 /// - <b>season.poster</b> - the season poster of the currently selected season. (Only available in DialogVideoInfo.xml).
6525 /// - <b>season.banner</b> - the season banner of the currently selected season. (Only available in DialogVideoInfo.xml).
6526 /// - <b>season.fanart</b> - the fanart image of the currently selected season. (Only available in DialogVideoInfo.xml)
6527 /// - <b>artist.thumb</b> - the artist thumb of an album or song item.
6528 /// - <b>artist.fanart</b> - the artist fanart of an album or song item.
6529 /// - <b>album.thumb</b> - the album thumb (cover) of a song item.
6530 /// - <b>artist[n].*</b> - in case a song has multiple artists\, a digit is added to the art type for the 2nd artist onwards
6531 /// e.g `Listitem.Art(artist1.thumb)` gives the thumb of the 2nd artist of a song.
6532 /// - <b>albumartist[n].*</b> - n case a song has multiple album artists\, a digit is added to the art type for the 2nd artist
6533 /// onwards e.g `Listitem.Art(artist1.thumb)` gives the thumb of the 2nd artist of a song.
6534 /// <p>
6535 /// @todo Find a better way of finding the art types instead of manually defining them here.
6536 /// <p><hr>
6537 /// @skinning_v18 **[Infolabel Updated]** \link ListItem_Art_Type `ListItem.Art(type)`\endlink add <b>artist[n].*</b> and
6538 /// <b>albumartist[n].*</b> as possible targets for <b>type</b>
6539 /// <p>
6540 /// }
6541 /// \table_row3{ <b>`ListItem.Platform`</b>,
6542 /// \anchor ListItem_Platform
6543 /// _string_,
6544 /// @return The game platform (e.g. "Atari 2600") (RETROPLAYER).
6545 /// <p><hr>
6546 /// @skinning_v18 **[New Infolabel]** \link ListItem_Platform `ListItem.Platform`\endlink
6547 /// <p>
6548 /// }
6549 /// \table_row3{ <b>`ListItem.Genres`</b>,
6550 /// \anchor ListItem_Genres
6551 /// _string_,
6552 /// @return The game genres (e.g. "["Action"\,"Strategy"]") (RETROPLAYER).
6553 /// <p><hr>
6554 /// @skinning_v18 **[New Infolabel]** \link ListItem_Genres `ListItem.Genres`\endlink
6555 /// <p>
6556 /// }
6557 /// \table_row3{ <b>`ListItem.Publisher`</b>,
6558 /// \anchor ListItem_Publisher
6559 /// _string_,
6560 /// @return The game publisher (e.g. "Nintendo") (RETROPLAYER).
6561 /// <p><hr>
6562 /// @skinning_v18 **[New Infolabel]** \link ListItem_Publisher `ListItem.Publisher`\endlink
6563 /// <p>
6564 /// }
6565 /// \table_row3{ <b>`ListItem.Developer`</b>,
6566 /// \anchor ListItem_Developer
6567 /// _string_,
6568 /// @return The game developer (e.g. "Square") (RETROPLAYER).
6569 /// <p><hr>
6570 /// @skinning_v18 **[New Infolabel]** \link ListItem_Developer `ListItem.Developer`\endlink
6571 /// <p>
6572 /// }
6573 /// \table_row3{ <b>`ListItem.Overview`</b>,
6574 /// \anchor ListItem_Overview
6575 /// _string_,
6576 /// @return The game overview/summary (RETROPLAYER).
6577 /// <p><hr>
6578 /// @skinning_v18 **[New Infolabel]** \link ListItem_Overview `ListItem.Overview`\endlink
6579 /// <p>
6580 /// }
6581 /// \table_row3{ <b>`ListItem.GameClient`</b>,
6582 /// \anchor ListItem_GameClient
6583 /// _string_,
6584 /// @return The add-on ID of the game client (a.k.a. emulator) to use for playing the game
6585 /// (e.g. game.libretro.fceumm) (RETROPLAYER).
6586 /// <p><hr>
6587 /// @skinning_v18 **[New Infolabel]** \link ListItem_GameClient `ListItem.GameClient`\endlink
6588 /// <p>
6589 /// }
6590 /// \table_row3{ <b>`ListItem.Property(propname)`</b>,
6591 /// \anchor ListItem_Property_Propname
6592 /// _string_,
6593 /// @return The requested property of a ListItem.
6594 /// @param propname - the property requested
6595 /// <p>
6596 /// }
6597 /// \table_row3{ <b>`ListItem.Property(Role.Composer)`</b>,
6598 /// \anchor ListItem_Property_Role_Composer
6599 /// _string_,
6600 /// @return The name of the person who composed the selected song.
6601 /// <p><hr>
6602 /// @skinning_v17 **[New Infolabel]** \link ListItem_Property_Role_Composer `ListItem.Property(Role.Composer)`\endlink
6603 /// <p>
6604 /// }
6605 /// \table_row3{ <b>`ListItem.Property(Role.Conductor)`</b>,
6606 /// \anchor ListItem_Property_Role_Conductor
6607 /// _string_,
6608 /// @return The name of the person who conducted the selected song.
6609 /// <p><hr>
6610 /// @skinning_v17 **[New Infolabel]** \link ListItem_Property_Role_Conductor `ListItem.Property(Role.Conductor)`\endlink
6611 /// <p>
6612 /// }
6613 /// \table_row3{ <b>`ListItem.Property(Role.Orchestra)`</b>,
6614 /// \anchor ListItem_Property_Role_Orchestra
6615 /// _string_,
6616 /// @return The name of the orchestra performing the selected song.
6617 /// <p><hr>
6618 /// @skinning_v17 **[New Infolabel]** \link ListItem_Property_Role_Orchestra `ListItem.Property(Role.Orchestra)`\endlink
6619 /// <p>
6620 /// }
6621 /// \table_row3{ <b>`ListItem.Property(Role.Lyricist)`</b>,
6622 /// \anchor ListItem_Property_Role_Lyricist
6623 /// _string_,
6624 /// @return The name of the person who wrote the lyrics of the selected song.
6625 /// <p><hr>
6626 /// @skinning_v17 **[New Infolabel]** \link ListItem_Property_Role_Lyricist `ListItem.Property(Role.Lyricist)`\endlink
6627 /// <p>
6628 /// }
6629 /// \table_row3{ <b>`ListItem.Property(Role.Remixer)`</b>,
6630 /// \anchor ListItem_Property_Role_Remixer
6631 /// _string_,
6632 /// @return The name of the person who remixed the selected song.
6633 /// <p><hr>
6634 /// @skinning_v17 **[New Infolabel]** \link ListItem_Property_Role_Remixer `ListItem.Property(Role.Remixer)`\endlink
6635 /// <p>
6636 /// }
6637 /// \table_row3{ <b>`ListItem.Property(Role.Arranger)`</b>,
6638 /// \anchor ListItem_Property_Role_Arranger
6639 /// _string_,
6640 /// @return The name of the person who arranged the selected song.
6641 /// <p><hr>
6642 /// @skinning_v17 **[New Infolabel]** \link ListItem_Property_Role_Arranger `ListItem.Property(Role.Arranger)`\endlink
6643 /// <p>
6644 /// }
6645 /// \table_row3{ <b>`ListItem.Property(Role.Engineer)`</b>,
6646 /// \anchor ListItem_Property_Role_Engineer
6647 /// _string_,
6648 /// @return The name of the person who was the engineer of the selected song.
6649 /// <p><hr>
6650 /// @skinning_v17 **[New Infolabel]** \link ListItem_Property_Role_Engineer `ListItem.Property(Role.Engineer)`\endlink
6651 /// <p>
6652 /// }
6653 /// \table_row3{ <b>`ListItem.Property(Role.Producer)`</b>,
6654 /// \anchor ListItem_Property_Role_Producer
6655 /// _string_,
6656 /// @return The name of the person who produced the selected song.
6657 /// <p><hr>
6658 /// @skinning_v17 **[New Infolabel]** \link ListItem_Property_Role_Producer `ListItem.Property(Role.Producer)`\endlink
6659 /// <p>
6660 /// }
6661 /// \table_row3{ <b>`ListItem.Property(Role.DJMixer)`</b>,
6662 /// \anchor ListItem_Property_Role_DJMixer
6663 /// _string_,
6664 /// @return The name of the dj who remixed the selected song.
6665 /// <p><hr>
6666 /// @skinning_v17 **[New Infolabel]** \link ListItem_Property_Role_DJMixer `ListItem.Property(Role.DJMixer)`\endlink
6667 /// <p>
6668 /// }
6669 /// \table_row3{ <b>`ListItem.Property(Role.Mixer)`</b>,
6670 /// \anchor ListItem_Property_Role_Mixer
6671 /// _string_,
6672 /// @return The name of the person who mixed the selected song.
6673 /// <p><hr>
6674 /// @skinning_v17 **[New Infolabel]** \link ListItem_Property_Role_DJMixer `ListItem.Property(Role.DJMixer)`\endlink
6675 /// <p>
6676 /// }
6677 /// \table_row3{ <b>`ListItem.Property(Game.VideoFilter)`</b>,
6678 /// \anchor ListItem_Property_Game_VideoFilter
6679 /// _string_,
6680 /// @return The video filter of the list item representing a
6681 /// gamewindow control (RETROPLAYER).
6682 /// See \link RetroPlayer_VideoFilter RetroPlayer.VideoFilter \endlink
6683 /// for the possible values.
6684 /// <p><hr>
6685 /// @skinning_v18 **[New Infolabel]** \link ListItem_Property_Game_VideoFilter `ListItem.Property(Game.VideoFilter)`\endlink
6686 /// <p>
6687 /// }
6688 /// \table_row3{ <b>`ListItem.Property(Game.StretchMode)`</b>,
6689 /// \anchor ListItem_Property_Game_StretchMode
6690 /// _string_,
6691 /// @return The stretch mode of the list item representing a
6692 /// gamewindow control (RETROPLAYER).
6693 /// See \link RetroPlayer_StretchMode RetroPlayer.StretchMode \endlink
6694 /// for the possible values.
6695 /// <p><hr>
6696 /// @skinning_v18 **[New Infolabel]** \link ListItem_Property_Game_StretchMode `ListItem.Property(Game.StretchMode)`\endlink
6697 /// <p>
6698 /// }
6699 /// \table_row3{ <b>`ListItem.Property(Game.VideoRotation)`</b>,
6700 /// \anchor ListItem_Property_Game_VideoRotation
6701 /// _integer_,
6702 /// @return The video rotation of the list item representing a
6703 /// gamewindow control (RETROPLAYER).
6704 /// See \link RetroPlayer_VideoRotation RetroPlayer.VideoRotation \endlink
6705 /// for the possible values.
6706 /// <p><hr>
6707 /// @skinning_v18 **[New Infolabel]** \link ListItem_Property_Game_VideoRotation `ListItem.Property(Game.VideoRotation)`\endlink
6708 /// <p>
6709 /// }
6710 /// \table_row3{ <b>`ListItem.ParentalRating`</b>,
6711 /// \anchor ListItem_ParentalRating
6712 /// _string_,
6713 /// @return The parental rating of the list item (PVR).
6714 /// <p>
6715 /// }
6716 /// \table_row3{ <b>`ListItem.CurrentItem`</b>,
6717 /// \anchor ListItem_CurrentItem
6718 /// _string_,
6719 /// @return The current index of the item in a container starting at 1.
6720 /// <p><hr>
6721 /// @skinning_v19 **[New Infolabel]** \link ListItem_CurrentItem `ListItem.CurrentItem`\endlink
6722 /// <p>
6723 /// }
6724 /// \table_row3{ <b>`ListItem.IsNew`</b>,
6725 /// \anchor ListItem_IsNew
6726 /// _boolean_,
6727 /// @return **True** if the item is new (for example\, a Live TV show that will be first aired).
6728 /// <p><hr>
6729 /// @skinning_v19 **[New Infolabel]** \link ListItem_IsNew `ListItem.IsNew`\endlink
6730 /// <p>
6731 /// }
6732 /// \table_row3{ <b>`ListItem.IsPremiere`</b>,
6733 /// \anchor ListItem_IsPremiere
6734 /// _boolean_,
6735 /// @return **True** if the item is a premiere (for example\, a Movie first showing or season first on Live TV).
6736 /// <p><hr>
6737 /// @skinning_v19 **[New Infolabel]** \link ListItem_IsPremiere `ListItem.IsPremiere`\endlink
6738 /// <p>
6739 /// }
6740 /// \table_row3{ <b>`ListItem.IsFinale`</b>,
6741 /// \anchor ListItem_IsFinale
6742 /// _boolean_,
6743 /// @return **True** if the item is a finale (for example\, a season finale showing on Live TV).
6744 /// <p><hr>
6745 /// @skinning_v19 **[New Infolabel]** \link ListItem_IsFinale `ListItem.IsFinale`\endlink
6746 /// <p>
6747 /// }
6748 /// \table_row3{ <b>`ListItem.IsLive`</b>,
6749 /// \anchor ListItem_IsLive
6750 /// _boolean_,
6751 /// @return **True** if the item is live (for example\, a Live TV sports event).
6752 /// <p><hr>
6753 /// @skinning_v19 **[New Infolabel]** \link ListItem_IsLive `ListItem.IsLive`\endlink
6754 /// <p>
6755 /// }
6756 /// \table_row3{ <b>`ListItem.DiscTitle`</b>,
6757 /// \anchor ListItem_DiscTitle
6758 /// _string_,
6759 /// @return The disc title of the currently selected album or song.
6760 /// <p><hr>
6761 /// @skinning_v19 **[New Infolabel]** \link ListItem_DiscTitle `ListItem.DiscTitle`\endlink
6762 /// <p>
6763 /// }
6764 /// \table_row3{ <b>`ListItem.IsBoxset`</b>,
6765 /// \anchor ListItem_IsBoxset
6766 /// _boolean_,
6767 /// @return **True** if the item is part of a boxset album.
6768 /// <p><hr>
6769 /// @skinning_v19 **[New Infolabel]** \link ListItem_IsBoxset `ListItem.IsBoxset`\endlink
6770 /// <p>
6771 /// }
6772 /// \table_row3{ <b>`ListItem.TotalDiscs`</b>,
6773 /// \anchor ListItem_TotalDiscs
6774 /// _boolean_,
6775 /// @return The total number of discs belonging to an album.
6776 /// <p><hr>
6777 /// @skinning_v19 **[New Infolabel]** \link ListItem_TotalDiscs `ListItem.TotalDiscs`\endlink
6778 /// <p>
6779 /// }
6780 /// \table_row3{ <b>`ListItem.ReleaseDate`</b>,
6781 /// \anchor ListItem_ReleaseDate
6782 /// _string_,
6783 /// @return The release date of the item.
6784 /// <p><hr>
6785 /// @skinning_v19 **[New Infolabel]** \link ListItem_ReleaseDate `ListItem.ReleaseDate`\endlink
6786 /// <p>
6787 /// }
6788 /// \table_row3{ <b>`ListItem.OriginalDate`</b>,
6789 /// \anchor ListItem_OriginalDate
6790 /// _string_,
6791 /// @return The original release date of the item. Can be full or partial date.
6792 /// <p><hr>
6793 /// @skinning_v19 **[New Infolabel]** \link ListItem_OriginalDate `ListItem.OriginalDate`\endlink
6794 /// <p>
6795 /// }
6796 /// \table_row3{ <b>`ListItem.BPM`</b>,
6797 /// \anchor ListItem_BPM
6798 /// _string_,
6799 /// @return The BPM of a song.
6800 /// <p><hr>
6801 /// @skinning_v19 **[New Infolabel]** \link ListItem_BPM `ListItem.BPM`\endlink
6802 /// <p>
6803 /// }
6804 /// \table_row3{ <b>`ListItem.UniqueID(name)`</b>,
6805 /// \anchor ListItem_UniqueID
6806 /// _string_,
6807 /// @return The scraped metadata id of the currently selected item in a container\,
6808 /// for use in dialogvideoinfo.xml.
6809 /// @param name - the name of the metadata provider.
6810 /// <p><hr>
6811 /// @skinning_v19 **[New Infolabel]** \link ListItem_UniqueID `ListItem.UniqueID(name)`\endlink
6812 /// <p>
6813 /// }
6814 /// \table_row3{ <b>`ListItem.BitRate`</b>,
6815 /// \anchor ListItem_BitRate
6816 /// _string_,
6817 /// @return The bitrate of a song. Actual rate for CBR\, average rate for VBR.
6818 /// <p><hr>
6819 /// @skinning_v19 **[New Infolabel]** \link ListItem_BitRate `ListItem.BitRate`\endlink
6820 /// <p>
6821 /// }
6822 /// \table_row3{ <b>`ListItem.SampleRate`</b>,
6823 /// \anchor ListItem_SampleRate
6824 /// _string_,
6825 /// @return The sample rate of a song / 1000.0 eg 44.1\, 48\, 96 etc.
6826 /// <p><hr>
6827 /// @skinning_v19 **[New Infolabel]** \link ListItem_SampleRate `ListItem.SampleRate`\endlink
6828 /// <p>
6829 /// }
6830 /// \table_row3{ <b>`ListItem.MusicChannels`</b>,
6831 /// \anchor ListItem_MusicChannels
6832 /// _string_,
6833 /// @return The number of audio channels of a song.
6834 /// <p><hr>
6835 /// @skinning_v19 **[New Infolabel]** \link ListItem_No_Of_Channels `ListItem.NoOfChannels`\endlink
6836 /// <p>
6837 /// }
6838 /// \table_row3{ <b>`ListItem.TvShowDBID`</b>,
6839 /// \anchor ListItem_TvShowDBID
6840 /// _string_,
6841 /// @return The database id of the TvShow for the currently selected Season or Episode.
6842 /// <p><hr>
6843 /// @skinning_v19 **[New Infolabel]** \link ListItem_TvShowDBID `ListItem.TvShowDBID`\endlink
6844 /// <p>
6845 /// }
6846 /// \table_row3{ <b>`ListItem.AlbumStatus`</b>,
6847 /// \anchor ListItem_AlbumStatus
6848 /// _string_,
6849 /// @return The Musicbrainz release status of the album (official, bootleg, promotion etc)
6850 /// <p><hr>
6851 /// @skinning_v19 **[New Infolabel]** \link ListItem_AlbumStatus `ListItem.AlbumStatus`\endlink
6852 /// }
6853 /// \table_row3{ <b>`ListItem.HdrType`</b>,
6854 /// \anchor ListItem_HdrType
6855 /// _string_,
6856 /// @return String containing the name of the detected HDR type or empty if not HDR. See \ref StreamHdrType for the list of possible values.
6857 /// <p><hr>
6858 /// @skinning_v20 **[New Infolabel]** \link ListItem_HdrType `ListItem.HdrType`\endlink
6859 /// }
6860 /// \table_end
6862 /// -----------------------------------------------------------------------------
6863 const infomap listitem_labels[]= {{ "thumb", LISTITEM_THUMB },
6864 { "icon", LISTITEM_ICON },
6865 { "actualicon", LISTITEM_ACTUAL_ICON },
6866 { "overlay", LISTITEM_OVERLAY },
6867 { "label", LISTITEM_LABEL },
6868 { "label2", LISTITEM_LABEL2 },
6869 { "title", LISTITEM_TITLE },
6870 { "tracknumber", LISTITEM_TRACKNUMBER },
6871 { "artist", LISTITEM_ARTIST },
6872 { "album", LISTITEM_ALBUM },
6873 { "albumartist", LISTITEM_ALBUM_ARTIST },
6874 { "year", LISTITEM_YEAR },
6875 { "genre", LISTITEM_GENRE },
6876 { "contributors", LISTITEM_CONTRIBUTORS },
6877 { "contributorandrole", LISTITEM_CONTRIBUTOR_AND_ROLE },
6878 { "director", LISTITEM_DIRECTOR },
6879 { "disctitle", LISTITEM_DISC_TITLE },
6880 { "filename", LISTITEM_FILENAME },
6881 { "filenameandpath", LISTITEM_FILENAME_AND_PATH },
6882 { "fileextension", LISTITEM_FILE_EXTENSION },
6883 { "filenamenoextension", LISTITEM_FILENAME_NO_EXTENSION },
6884 { "date", LISTITEM_DATE },
6885 { "datetime", LISTITEM_DATETIME },
6886 { "size", LISTITEM_SIZE },
6887 { "rating", LISTITEM_RATING },
6888 { "ratingandvotes", LISTITEM_RATING_AND_VOTES },
6889 { "userrating", LISTITEM_USER_RATING },
6890 { "votes", LISTITEM_VOTES },
6891 { "mood", LISTITEM_MOOD },
6892 { "programcount", LISTITEM_PROGRAM_COUNT },
6893 { "duration", LISTITEM_DURATION },
6894 { "isselected", LISTITEM_ISSELECTED },
6895 { "isplaying", LISTITEM_ISPLAYING },
6896 { "plot", LISTITEM_PLOT },
6897 { "plotoutline", LISTITEM_PLOT_OUTLINE },
6898 { "episode", LISTITEM_EPISODE },
6899 { "season", LISTITEM_SEASON },
6900 { "tvshowtitle", LISTITEM_TVSHOW },
6901 { "premiered", LISTITEM_PREMIERED },
6902 { "comment", LISTITEM_COMMENT },
6903 { "path", LISTITEM_PATH },
6904 { "foldername", LISTITEM_FOLDERNAME },
6905 { "folderpath", LISTITEM_FOLDERPATH },
6906 { "picturepath", LISTITEM_PICTURE_PATH },
6907 { "pictureresolution",LISTITEM_PICTURE_RESOLUTION },
6908 { "picturedatetime", LISTITEM_PICTURE_DATETIME },
6909 { "picturedate", LISTITEM_PICTURE_DATE },
6910 { "picturelongdatetime",LISTITEM_PICTURE_LONGDATETIME },
6911 { "picturelongdate", LISTITEM_PICTURE_LONGDATE },
6912 { "picturecomment", LISTITEM_PICTURE_COMMENT },
6913 { "picturecaption", LISTITEM_PICTURE_CAPTION },
6914 { "picturedesc", LISTITEM_PICTURE_DESC },
6915 { "picturekeywords", LISTITEM_PICTURE_KEYWORDS },
6916 { "picturecammake", LISTITEM_PICTURE_CAM_MAKE },
6917 { "picturecammodel", LISTITEM_PICTURE_CAM_MODEL },
6918 { "pictureaperture", LISTITEM_PICTURE_APERTURE },
6919 { "picturefocallen", LISTITEM_PICTURE_FOCAL_LEN },
6920 { "picturefocusdist", LISTITEM_PICTURE_FOCUS_DIST },
6921 { "pictureexpmode", LISTITEM_PICTURE_EXP_MODE },
6922 { "pictureexptime", LISTITEM_PICTURE_EXP_TIME },
6923 { "pictureiso", LISTITEM_PICTURE_ISO },
6924 { "pictureauthor", LISTITEM_PICTURE_AUTHOR },
6925 { "picturebyline", LISTITEM_PICTURE_BYLINE },
6926 { "picturebylinetitle", LISTITEM_PICTURE_BYLINE_TITLE },
6927 { "picturecategory", LISTITEM_PICTURE_CATEGORY },
6928 { "pictureccdwidth", LISTITEM_PICTURE_CCD_WIDTH },
6929 { "picturecity", LISTITEM_PICTURE_CITY },
6930 { "pictureurgency", LISTITEM_PICTURE_URGENCY },
6931 { "picturecopyrightnotice", LISTITEM_PICTURE_COPYRIGHT_NOTICE },
6932 { "picturecountry", LISTITEM_PICTURE_COUNTRY },
6933 { "picturecountrycode", LISTITEM_PICTURE_COUNTRY_CODE },
6934 { "picturecredit", LISTITEM_PICTURE_CREDIT },
6935 { "pictureiptcdate", LISTITEM_PICTURE_IPTCDATE },
6936 { "picturedigitalzoom", LISTITEM_PICTURE_DIGITAL_ZOOM },
6937 { "pictureexposure", LISTITEM_PICTURE_EXPOSURE },
6938 { "pictureexposurebias", LISTITEM_PICTURE_EXPOSURE_BIAS },
6939 { "pictureflashused", LISTITEM_PICTURE_FLASH_USED },
6940 { "pictureheadline", LISTITEM_PICTURE_HEADLINE },
6941 { "picturecolour", LISTITEM_PICTURE_COLOUR },
6942 { "picturelightsource", LISTITEM_PICTURE_LIGHT_SOURCE },
6943 { "picturemeteringmode", LISTITEM_PICTURE_METERING_MODE },
6944 { "pictureobjectname", LISTITEM_PICTURE_OBJECT_NAME },
6945 { "pictureorientation", LISTITEM_PICTURE_ORIENTATION },
6946 { "pictureprocess", LISTITEM_PICTURE_PROCESS },
6947 { "picturereferenceservice", LISTITEM_PICTURE_REF_SERVICE },
6948 { "picturesource", LISTITEM_PICTURE_SOURCE },
6949 { "picturespecialinstructions", LISTITEM_PICTURE_SPEC_INSTR },
6950 { "picturestate", LISTITEM_PICTURE_STATE },
6951 { "picturesupplementalcategories", LISTITEM_PICTURE_SUP_CATEGORIES },
6952 { "picturetransmissionreference", LISTITEM_PICTURE_TX_REFERENCE },
6953 { "picturewhitebalance", LISTITEM_PICTURE_WHITE_BALANCE },
6954 { "pictureimagetype", LISTITEM_PICTURE_IMAGETYPE },
6955 { "picturesublocation", LISTITEM_PICTURE_SUBLOCATION },
6956 { "pictureiptctime", LISTITEM_PICTURE_TIMECREATED },
6957 { "picturegpslat", LISTITEM_PICTURE_GPS_LAT },
6958 { "picturegpslon", LISTITEM_PICTURE_GPS_LON },
6959 { "picturegpsalt", LISTITEM_PICTURE_GPS_ALT },
6960 { "studio", LISTITEM_STUDIO },
6961 { "country", LISTITEM_COUNTRY },
6962 { "mpaa", LISTITEM_MPAA },
6963 { "cast", LISTITEM_CAST },
6964 { "castandrole", LISTITEM_CAST_AND_ROLE },
6965 { "writer", LISTITEM_WRITER },
6966 { "tagline", LISTITEM_TAGLINE },
6967 { "status", LISTITEM_STATUS },
6968 { "top250", LISTITEM_TOP250 },
6969 { "trailer", LISTITEM_TRAILER },
6970 { "sortletter", LISTITEM_SORT_LETTER },
6971 { "tag", LISTITEM_TAG },
6972 { "set", LISTITEM_SET },
6973 { "setid", LISTITEM_SETID },
6974 { "videocodec", LISTITEM_VIDEO_CODEC },
6975 { "videoresolution", LISTITEM_VIDEO_RESOLUTION },
6976 { "videoaspect", LISTITEM_VIDEO_ASPECT },
6977 { "audiocodec", LISTITEM_AUDIO_CODEC },
6978 { "audiochannels", LISTITEM_AUDIO_CHANNELS },
6979 { "audiolanguage", LISTITEM_AUDIO_LANGUAGE },
6980 { "subtitlelanguage", LISTITEM_SUBTITLE_LANGUAGE },
6981 { "isresumable", LISTITEM_IS_RESUMABLE},
6982 { "percentplayed", LISTITEM_PERCENT_PLAYED},
6983 { "isfolder", LISTITEM_IS_FOLDER },
6984 { "isparentfolder", LISTITEM_IS_PARENTFOLDER },
6985 { "iscollection", LISTITEM_IS_COLLECTION },
6986 { "originaltitle", LISTITEM_ORIGINALTITLE },
6987 { "lastplayed", LISTITEM_LASTPLAYED },
6988 { "playcount", LISTITEM_PLAYCOUNT },
6989 { "discnumber", LISTITEM_DISC_NUMBER },
6990 { "starttime", LISTITEM_STARTTIME },
6991 { "endtime", LISTITEM_ENDTIME },
6992 { "endtimeresume", LISTITEM_ENDTIME_RESUME },
6993 { "startdate", LISTITEM_STARTDATE },
6994 { "enddate", LISTITEM_ENDDATE },
6995 { "nexttitle", LISTITEM_NEXT_TITLE },
6996 { "nextgenre", LISTITEM_NEXT_GENRE },
6997 { "nextplot", LISTITEM_NEXT_PLOT },
6998 { "nextplotoutline", LISTITEM_NEXT_PLOT_OUTLINE },
6999 { "nextstarttime", LISTITEM_NEXT_STARTTIME },
7000 { "nextendtime", LISTITEM_NEXT_ENDTIME },
7001 { "nextstartdate", LISTITEM_NEXT_STARTDATE },
7002 { "nextenddate", LISTITEM_NEXT_ENDDATE },
7003 { "nextduration", LISTITEM_NEXT_DURATION },
7004 { "channelname", LISTITEM_CHANNEL_NAME },
7005 { "channelnumberlabel", LISTITEM_CHANNEL_NUMBER },
7006 { "channelgroup", LISTITEM_CHANNEL_GROUP },
7007 { "hasepg", LISTITEM_HAS_EPG },
7008 { "hastimer", LISTITEM_HASTIMER },
7009 { "hastimerschedule", LISTITEM_HASTIMERSCHEDULE },
7010 { "hasreminder", LISTITEM_HASREMINDER },
7011 { "hasreminderrule", LISTITEM_HASREMINDERRULE },
7012 { "hasrecording", LISTITEM_HASRECORDING },
7013 { "isrecording", LISTITEM_ISRECORDING },
7014 { "isplayable", LISTITEM_ISPLAYABLE },
7015 { "hasarchive", LISTITEM_HASARCHIVE },
7016 { "inprogress", LISTITEM_INPROGRESS },
7017 { "isencrypted", LISTITEM_ISENCRYPTED },
7018 { "progress", LISTITEM_PROGRESS },
7019 { "dateadded", LISTITEM_DATE_ADDED },
7020 { "dbtype", LISTITEM_DBTYPE },
7021 { "dbid", LISTITEM_DBID },
7022 { "appearances", LISTITEM_APPEARANCES },
7023 { "stereoscopicmode", LISTITEM_STEREOSCOPIC_MODE },
7024 { "isstereoscopic", LISTITEM_IS_STEREOSCOPIC },
7025 { "imdbnumber", LISTITEM_IMDBNUMBER },
7026 { "episodename", LISTITEM_EPISODENAME },
7027 { "timertype", LISTITEM_TIMERTYPE },
7028 { "epgeventtitle", LISTITEM_EPG_EVENT_TITLE },
7029 { "epgeventicon", LISTITEM_EPG_EVENT_ICON },
7030 { "timerisactive", LISTITEM_TIMERISACTIVE },
7031 { "timerhaserror", LISTITEM_TIMERHASERROR },
7032 { "timerhasconflict", LISTITEM_TIMERHASCONFLICT },
7033 { "addonname", LISTITEM_ADDON_NAME },
7034 { "addonversion", LISTITEM_ADDON_VERSION },
7035 { "addoncreator", LISTITEM_ADDON_CREATOR },
7036 { "addonsummary", LISTITEM_ADDON_SUMMARY },
7037 { "addondescription", LISTITEM_ADDON_DESCRIPTION },
7038 { "addondisclaimer", LISTITEM_ADDON_DISCLAIMER },
7039 { "addonnews", LISTITEM_ADDON_NEWS },
7040 { "addonbroken", LISTITEM_ADDON_BROKEN },
7041 { "addonlifecycletype", LISTITEM_ADDON_LIFECYCLE_TYPE },
7042 { "addonlifecycledesc", LISTITEM_ADDON_LIFECYCLE_DESC },
7043 { "addontype", LISTITEM_ADDON_TYPE },
7044 { "addoninstalldate", LISTITEM_ADDON_INSTALL_DATE },
7045 { "addonlastupdated", LISTITEM_ADDON_LAST_UPDATED },
7046 { "addonlastused", LISTITEM_ADDON_LAST_USED },
7047 { "addonorigin", LISTITEM_ADDON_ORIGIN },
7048 { "addonsize", LISTITEM_ADDON_SIZE },
7049 { "expirationdate", LISTITEM_EXPIRATION_DATE },
7050 { "expirationtime", LISTITEM_EXPIRATION_TIME },
7051 { "art", LISTITEM_ART },
7052 { "property", LISTITEM_PROPERTY },
7053 { "parentalrating", LISTITEM_PARENTAL_RATING },
7054 { "currentitem", LISTITEM_CURRENTITEM },
7055 { "isnew", LISTITEM_IS_NEW },
7056 { "isboxset", LISTITEM_IS_BOXSET },
7057 { "totaldiscs", LISTITEM_TOTALDISCS },
7058 { "releasedate", LISTITEM_RELEASEDATE },
7059 { "originaldate", LISTITEM_ORIGINALDATE },
7060 { "bpm", LISTITEM_BPM },
7061 { "uniqueid", LISTITEM_UNIQUEID },
7062 { "bitrate", LISTITEM_BITRATE },
7063 { "samplerate", LISTITEM_SAMPLERATE },
7064 { "musicchannels", LISTITEM_MUSICCHANNELS },
7065 { "ispremiere", LISTITEM_IS_PREMIERE },
7066 { "isfinale", LISTITEM_IS_FINALE },
7067 { "islive", LISTITEM_IS_LIVE },
7068 { "tvshowdbid", LISTITEM_TVSHOWDBID },
7069 { "albumstatus", LISTITEM_ALBUMSTATUS },
7070 { "isautoupdateable", LISTITEM_ISAUTOUPDATEABLE },
7071 { "hdrtype", LISTITEM_VIDEO_HDR_TYPE },
7074 /// \page modules__infolabels_boolean_conditions
7075 /// \subsection modules__infolabels_boolean_conditions_Visualisation Visualisation
7076 /// \table_start
7077 /// \table_h3{ Labels, Type, Description }
7078 /// \table_row3{ <b>`Visualisation.Enabled`</b>,
7079 /// \anchor Visualisation_Enabled
7080 /// _boolean_,
7081 /// @return **True** if any visualisation has been set in settings (so not None).
7082 /// <p>
7083 /// }
7084 /// \table_row3{ <b>`Visualisation.HasPresets`</b>,
7085 /// \anchor Visualisation_HasPresets
7086 /// _boolean_,
7087 /// @return **True** if the visualisation has built in presets.
7088 /// <p><hr>
7089 /// @skinning_v16 **[New Boolean Condition]** \link Visualisation_HasPresets `Visualisation.HasPresets`\endlink
7090 /// <p>
7091 /// }
7092 /// \table_row3{ <b>`Visualisation.Locked`</b>,
7093 /// \anchor Visualisation_Locked
7094 /// _boolean_,
7095 /// @return **True** if the current visualisation preset is locked (e.g. in Milkdrop).
7096 /// <p>
7097 /// }
7098 /// \table_row3{ <b>`Visualisation.Preset`</b>,
7099 /// \anchor Visualisation_Preset
7100 /// _string_,
7101 /// @return The current preset of the visualisation.
7102 /// <p>
7103 /// }
7104 /// \table_row3{ <b>`Visualisation.Name`</b>,
7105 /// \anchor Visualisation_Name
7106 /// _string_,
7107 /// @return the name of the visualisation.
7108 /// <p>
7109 /// }
7110 /// \table_end
7112 /// -----------------------------------------------------------------------------
7113 const infomap visualisation[] = {{ "locked", VISUALISATION_LOCKED },
7114 { "preset", VISUALISATION_PRESET },
7115 { "haspresets", VISUALISATION_HAS_PRESETS },
7116 { "name", VISUALISATION_NAME },
7117 { "enabled", VISUALISATION_ENABLED }};
7119 /// \page modules__infolabels_boolean_conditions
7120 /// \subsection modules__infolabels_boolean_conditions_Fanart Fanart
7121 /// \table_start
7122 /// \table_h3{ Labels, Type, Description }
7123 /// \table_row3{ <b>`Fanart.Color1`</b>,
7124 /// \anchor Fanart_Color1
7125 /// _string_,
7126 /// @return The first of three colors included in the currently selected
7127 /// Fanart theme for the parent TV Show.
7128 /// @note Colors are arranged Lightest to Darkest.
7129 /// <p>
7130 /// }
7131 /// \table_row3{ <b>`Fanart.Color2`</b>,
7132 /// \anchor Fanart_Color2
7133 /// _string_,
7134 /// @return The second of three colors included in the currently selected
7135 /// Fanart theme for the parent TV Show.
7136 /// @note Colors are arranged Lightest to Darkest.
7137 /// <p>
7138 /// }
7139 /// \table_row3{ <b>`Fanart.Color3`</b>,
7140 /// \anchor Fanart_Color3
7141 /// _string_,
7142 /// @return The third of three colors included in the currently selected
7143 /// Fanart theme for the parent TV Show.
7144 /// @note Colors are arranged Lightest to Darkest.
7145 /// <p>
7146 /// }
7147 /// \table_row3{ <b>`Fanart.Image`</b>,
7148 /// \anchor Fanart_Image
7149 /// _string_,
7150 /// @return The fanart image\, if any
7151 /// <p>
7152 /// }
7153 /// \table_end
7155 /// -----------------------------------------------------------------------------
7156 const infomap fanart_labels[] = {{ "color1", FANART_COLOR1 },
7157 { "color2", FANART_COLOR2 },
7158 { "color3", FANART_COLOR3 },
7159 { "image", FANART_IMAGE }};
7161 /// \page modules__infolabels_boolean_conditions
7162 /// \subsection modules__infolabels_boolean_conditions_Skin Skin
7163 /// \table_start
7164 /// \table_h3{ Labels, Type, Description }
7165 /// \table_row3{ <b>`Skin.HasSetting(setting)`</b>,
7166 /// \anchor Skin_HasSetting
7167 /// _boolean_,
7168 /// @param setting - the requested skin setting
7169 /// @return **True** if the requested skin setting is true\, false otherwise.
7170 /// @sa \link Skin_SetBool `Skin.SetBool(setting[\,value])`
7171 /// <p>
7172 /// }
7173 /// \table_row3{ <b>`Skin.String(setting)`</b>,
7174 /// \anchor Skin_StringValue
7175 /// _string_,
7176 /// @param setting - the requested skin setting
7177 /// @return The value of the requested string setting (as a string)
7178 /// @sa \link Skin_SetString `Skin.SetString(setting[\,value])`\endlink
7179 /// <p>
7180 /// }
7181 /// \table_row3{ <b>`Skin.String(setting[\,value])`</b>,
7182 /// \anchor Skin_StringCompare
7183 /// _boolean_,
7184 /// @param setting - the requested skin setting
7185 /// @param value [opt] - the string value to compare the requested setting to
7186 /// @return **True** if the setting value equals the provided value\, false otherwise.
7187 /// @sa \link Skin_SetString `Skin.SetString(setting[\,value])`\endlink
7188 /// <p>
7189 /// }
7190 /// \table_row3{ <b>`Skin.HasTheme(theme)`</b>,
7191 /// \anchor Skin_HasTheme
7192 /// _boolean_,
7193 /// @param theme - the requested skin theme
7194 /// @return **True** if the requested theme is enabled\, false otherwise.
7195 /// @sa \link Skin_CycleTheme `Skin.Theme()`\endlink and \link Skin_CurrentTheme `Skin.CurrentTheme`\endlink.
7196 /// <p>
7197 /// }
7198 /// \table_row3{ <b>`Skin.CurrentTheme`</b>,
7199 /// \anchor Skin_CurrentTheme
7200 /// _string_,
7201 /// @return The current selected skin theme.
7202 /// <p>
7203 /// }
7204 /// \table_row3{ <b>`Skin.CurrentColourTheme`</b>,
7205 /// \anchor Skin_CurrentColourTheme
7206 /// _string_,
7207 /// @return the current selected colour theme of the skin.
7208 /// <p>
7209 /// }
7210 /// \table_row3{ <b>`Skin.AspectRatio`</b>,
7211 /// \anchor Skin_AspectRatio
7212 /// _string_,
7213 /// @return The closest aspect ratio match using the resolution info from the skin's `addon.xml` file.
7214 /// <p>
7215 /// }
7216 /// \table_row3{ <b>`Skin.Font`</b>,
7217 /// \anchor Skin_Font
7218 /// _string_,
7219 /// @return the current fontset from `Font.xml`.
7220 /// <p><hr>
7221 /// @skinning_v18 **[New Infolabel]** \link Skin_Font `Skin.Font`\endlink
7222 /// <p>
7223 /// }
7224 /// \table_row3{ <b>`Skin.Numeric(settingid)`</b>,
7225 /// \anchor Skin_Numeric
7226 /// _integer_,
7227 /// @return return the setting value as an integer/numeric value.
7228 /// @sa \link Skin_SetNumeric `Skin.SetNumeric(settingid)`\endlink
7229 /// <p><hr>
7230 /// @skinning_v20 **[New Infolabel]** \link Skin_Numeric `Skin.Numeric(settingid)`\endlink
7231 /// <p>
7232 /// }
7233 /// \table_row3{ <b>`Skin.TimerElapsedSecs(timer)`</b>,
7234 /// \anchor Skin_TimerElapsedSecs
7235 /// _integer_ \, _string_,
7236 /// @return The elapsed time in seconds for the provided `timer`.
7237 /// @param timer - the timer name
7238 /// <p><hr>
7239 /// @skinning_v20 **[New Infolabel]** \link Skin_TimerElapsedSecs `Skin.TimerElapsedSecs(timer)`\endlink
7240 /// <p>
7241 /// }
7242 /// \table_row3{ <b>`Skin.TimerIsRunning(timer)`</b>,
7243 /// \anchor Skin_TimerIsRunning
7244 /// _boolean_,
7245 /// @return **True** if the given `timer` is active\, false otherwise.
7246 /// @param timer - the timer name
7247 /// <p><hr>
7248 /// @skinning_v20 **[New Infolabel]** \link Skin_TimerIsRunning `Skin.TimerIsRunning(timer)`\endlink
7249 /// <p>
7250 /// }
7251 /// \table_end
7253 /// -----------------------------------------------------------------------------
7254 const infomap skin_labels[] = {{ "currenttheme", SKIN_THEME },
7255 { "currentcolourtheme",SKIN_COLOUR_THEME },
7256 { "aspectratio", SKIN_ASPECT_RATIO},
7257 { "font", SKIN_FONT}};
7259 /// \page modules__infolabels_boolean_conditions
7260 /// \subsection modules__infolabels_boolean_conditions_Window Window
7261 /// \table_start
7262 /// \table_h3{ Labels, Type, Description }
7263 /// \table_row3{ <b>`Window.IsMedia`</b>,
7264 /// \anchor Window_IsMedia
7265 /// _boolean_,
7266 /// @return **True** if this window is a media window (programs\, music\, video\,
7267 /// scripts\, pictures)
7268 /// <p>
7269 /// }
7270 /// \table_row3{ <b>`Window.Is(window)`</b>,
7271 /// \anchor Window_Is
7272 /// _boolean_,
7273 /// @return **True** if the window with the given name is the window which is currently rendered.
7274 /// @param window - the name of the window
7275 /// @note Useful in xml files that are shared between multiple windows or dialogs.
7276 /// <p><hr>
7277 /// @skinning_v17 **[New Boolean Condition]** \ref Window_Is "Window.Is(window)"
7278 /// <p>
7279 /// }
7280 /// \table_row3{ <b>`Window.IsActive(window)`</b>,
7281 /// \anchor Window_IsActive
7282 /// _boolean_,
7283 /// @return **True** if the window with id or title _window_ is active
7284 /// @param window - the id or name of the window
7285 /// @note Excludes fade out time on dialogs
7286 /// <p>
7287 /// }
7288 /// \table_row3{ <b>`Window.IsVisible(window)`</b>,
7289 /// \anchor Window_IsVisible
7290 /// _boolean_,
7291 /// @return **True** if the window is visible
7292 /// @note Includes fade out time on dialogs
7293 /// <p>
7294 /// }
7295 /// \table_row3{ <b>`Window.IsTopmost(window)`</b>,
7296 /// \anchor Window_IsTopmost
7297 /// _boolean_,
7298 /// @return **True** if the window with id or title _window_ is on top of the
7299 /// window stack.
7300 /// @param window - the id or name of the window
7301 /// @note Excludes fade out time on dialogs
7302 /// @deprecated use \ref Window_IsDialogTopmost "Window.IsDialogTopmost(dialog)" instead
7303 /// <p>
7304 /// }
7305 /// \table_row3{ <b>`Window.IsDialogTopmost(dialog)`</b>,
7306 /// \anchor Window_IsDialogTopmost
7307 /// _boolean_,
7308 /// @return **True** if the dialog with id or title _dialog_ is on top of the
7309 /// dialog stack.
7310 /// @param window - the id or name of the window
7311 /// @note Excludes fade out time on dialogs
7312 /// <p>
7313 /// }
7314 /// \table_row3{ <b>`Window.IsModalDialogTopmost(dialog)`</b>,
7315 /// \anchor Window_IsModalDialogTopmost
7316 /// _boolean_,
7317 /// @return **True** if the dialog with id or title _dialog_ is on top of the
7318 /// modal dialog stack
7319 /// @note Excludes fade out time on dialogs
7320 /// <p>
7321 /// }
7322 /// \table_row3{ <b>`Window.Previous(window)`</b>,
7323 /// \anchor Window_Previous
7324 /// _boolean_,
7325 /// @return **True** if the window with id or title _window_ is being moved from.
7326 /// @param window - the window id or title
7327 /// @note Only valid while windows are changing.
7328 /// <p>
7329 /// }
7330 /// \table_row3{ <b>`Window.Next(window)`</b>,
7331 /// \anchor Window_Next
7332 /// _boolean_,
7333 /// @return **True** if the window with id or title _window_ is being moved to.
7334 /// @param window - the window id or title
7335 /// @note Only valid while windows are changing.
7336 /// <p>
7337 /// }
7338 /// \table_row3{ <b>`Window.Property(Addon.ID)`</b>,
7339 /// \anchor Window_Property_AddonId
7340 /// _string_,
7341 /// @return The id of the selected addon\, in `DialogAddonSettings.xml`.
7342 /// <p><hr>
7343 /// @skinning_v17 **[New Infolabel]** \link Window_Property_AddonId `Window.Property(Addon.ID)`\endlink
7344 /// <p>
7345 /// }
7346 /// \table_row3{ <b>`Window.Property(IsRadio)`</b>,
7347 /// \anchor Window_Property_IsRadio
7348 /// _string_,
7349 /// @return "true" if the window is a radio window\, empty string otherwise (for use in the PVR windows).
7350 /// <p>
7351 /// }
7352 /// \table_row3{ <b>`Window([window]).Property(key)`</b>,
7353 /// \anchor Window_Window_Property_key
7354 /// _string_,
7355 /// @return A window property.
7356 /// @param window - [opt] window id or name.
7357 /// @param key - any value.
7358 /// <p>
7359 /// }
7360 /// \table_row3{ <b>`Window(AddonBrowser).Property(Updated)`</b>,
7361 /// \anchor Window_Addonbrowser_Property_Updated
7362 /// _string_,
7363 /// @return The date and time the addon repo was last checked for updates.
7364 /// @todo move to a future window document.
7365 /// <p><hr>
7366 /// @skinning_v15 **[New Infolabel]** \link Window_Addonbrowser_Property_Updated `Window(AddonBrowser).Property(Updated)`\endlink
7367 /// <p>
7368 /// }
7369 /// \table_row3{ <b>`Window(Weather).Property(property)`</b>,
7370 /// \anchor Window_Weather_Property
7371 /// _string_,
7372 /// @return The property for the weather window.
7373 /// @param property - The requested property. The following are available:
7374 /// - Current.ConditionIcon
7375 /// - Day[0-6].OutlookIcon
7376 /// - Current.FanartCode
7377 /// - Day[0-6].FanartCode
7378 /// - WeatherProviderLogo
7379 /// - Daily.%i.OutlookIcon
7380 /// - 36Hour.%i.OutlookIcon
7381 /// - Weekend.%i.OutlookIcon
7382 /// - Hourly.%i.OutlookIcon
7383 /// @todo move to a future window document.
7384 /// <p><hr>
7385 /// @skinning_v16 **[Updated infolabel]** \link Window_Weather_Property `Window(Weather).Property(property)`\endlink
7386 /// For skins that support extended weather info\, the following infolabels have been changed:
7387 /// - Daily.%i.OutlookIcon
7388 /// - 36Hour.%i.OutlookIcon
7389 /// - Weekend.%i.OutlookIcon
7390 /// - Hourly.%i.OutlookIcon
7392 /// previously the openweathermap addon would provide the full\, hardcoded path to the icon
7393 /// ie. `resource://resource.images.weathericons.default/28.png`
7394 /// to make it easier for skins to work with custom icon sets\, it now will return the filename only
7395 /// i.e. 28.png
7396 /// @skinning_v13 **[Infolabel Updated]** \link Window_Weather_Property `Window(Weather).Property(property)`\endlink
7397 /// added `WeatherProviderLogo` property - weather provider logo (for weather addons that support it).
7398 /// <p>
7399 /// }
7400 /// \table_end
7402 /// -----------------------------------------------------------------------------
7403 const infomap window_bools[] = {{ "ismedia", WINDOW_IS_MEDIA },
7404 { "is", WINDOW_IS },
7405 { "isactive", WINDOW_IS_ACTIVE },
7406 { "isvisible", WINDOW_IS_VISIBLE },
7407 { "istopmost", WINDOW_IS_DIALOG_TOPMOST }, //! @deprecated, remove in v19
7408 { "isdialogtopmost", WINDOW_IS_DIALOG_TOPMOST },
7409 { "ismodaldialogtopmost", WINDOW_IS_MODAL_DIALOG_TOPMOST },
7410 { "previous", WINDOW_PREVIOUS },
7411 { "next", WINDOW_NEXT }};
7413 /// \page modules__infolabels_boolean_conditions
7414 /// \subsection modules__infolabels_boolean_conditions_Control Control
7415 /// \table_start
7416 /// \table_h3{ Labels, Type, Description }
7417 /// \table_row3{ <b>`Control.HasFocus(id)`</b>,
7418 /// \anchor Control_HasFocus
7419 /// _boolean_,
7420 /// @return **True** if the currently focused control has id "id".
7421 /// @param id - The id of the control
7422 /// <p>
7423 /// }
7424 /// \table_row3{ <b>`Control.IsVisible(id)`</b>,
7425 /// \anchor Control_IsVisible
7426 /// _boolean_,
7427 /// @return **True** if the control with id "id" is visible.
7428 /// @param id - The id of the control
7429 /// <p>
7430 /// }
7431 /// \table_row3{ <b>`Control.IsEnabled(id)`</b>,
7432 /// \anchor Control_IsEnabled
7433 /// _boolean_,
7434 /// @return **True** if the control with id "id" is enabled.
7435 /// @param id - The id of the control
7436 /// <p>
7437 /// }
7438 /// \table_row3{ <b>`Control.GetLabel(id)[.index()]`</b>,
7439 /// \anchor Control_GetLabel
7440 /// _string_,
7441 /// @return The label value or texture name of the control with the given id.
7442 /// @param id - The id of the control
7443 /// @param index - [opt] Optionally you can specify index(1) to retrieve label2 from an Edit
7444 /// control.
7445 /// <p><hr>
7446 /// @skinning_v15 **[Infolabel Updated]** \link Control_GetLabel `Control.GetLabel(id)`\endlink
7447 /// added index parameter - allows skinner to retrieve label2 of a control. Only edit controls are supported.
7448 /// ** Example** : `Control.GetLabel(999).index(1)` where:
7449 /// - index(0) = label
7450 /// - index(1) = label2
7451 /// <p>
7452 /// }
7453 /// \table_end
7455 /// -----------------------------------------------------------------------------
7456 const infomap control_labels[] = {{ "hasfocus", CONTROL_HAS_FOCUS },
7457 { "isvisible", CONTROL_IS_VISIBLE },
7458 { "isenabled", CONTROL_IS_ENABLED },
7459 { "getlabel", CONTROL_GET_LABEL }};
7461 /// \page modules__infolabels_boolean_conditions
7462 /// \subsection modules__infolabels_boolean_conditions_Playlist Playlist
7463 /// \table_start
7464 /// \table_h3{ Labels, Type, Description }
7465 /// \table_row3{ <b>`Playlist.Length(media)`</b>,
7466 /// \anchor Playlist_Length
7467 /// _integer_,
7468 /// @return The total size of the current playlist.
7469 /// @param media - [opt] mediatype with is either
7470 /// video or music.
7471 /// <p>
7472 /// }
7473 /// \table_row3{ <b>`Playlist.Position(media)`</b>,
7474 /// \anchor Playlist_Position
7475 /// _integer_,
7476 /// @return The position of the current item in the current playlist.
7477 /// @param media - [opt] mediatype with is either
7478 /// video or music.
7479 /// <p>
7480 /// }
7481 /// \table_row3{ <b>`Playlist.Random`</b>,
7482 /// \anchor Playlist_Random
7483 /// _integer_,
7484 /// @return String ID for the random mode:
7485 /// - **16041** (On)
7486 /// - **591** (Off)
7487 /// <p><hr>
7488 /// @skinning_v18 **[Infolabel Updated]** \link Playlist_Random `Playlist.Random`\endlink will
7489 /// now return **On/Off**
7490 /// <p>
7491 /// }
7492 /// \table_row3{ <b>`Playlist.Repeat`</b>,
7493 /// \anchor Playlist_Repeat
7494 /// _integer_,
7495 /// @return The String Id for the repeat mode. It can be one of the following
7496 /// values:
7497 /// - **592** (Repeat One)
7498 /// - **593** (Repeat All)
7499 /// - **594** (Repeat Off)
7500 /// <p>
7501 /// }
7502 /// \table_row3{ <b>`Playlist.IsRandom`</b>,
7503 /// \anchor Playlist_IsRandom
7504 /// _boolean_,
7505 /// @return **True** if the player is in random mode.
7506 /// <p>
7507 /// }
7508 /// \table_row3{ <b>`Playlist.IsRepeat`</b>,
7509 /// \anchor Playlist_IsRepeat
7510 /// _boolean_,
7511 /// @return **True** if the player is in repeat all mode.
7512 /// <p>
7513 /// }
7514 /// \table_row3{ <b>`Playlist.IsRepeatOne`</b>,
7515 /// \anchor Playlist_IsRepeatOne
7516 /// _boolean_,
7517 /// @return **True** if the player is in repeat one mode.
7518 /// <p>
7519 /// }
7520 /// \table_end
7522 /// -----------------------------------------------------------------------------
7523 const infomap playlist[] = {{ "length", PLAYLIST_LENGTH },
7524 { "position", PLAYLIST_POSITION },
7525 { "random", PLAYLIST_RANDOM },
7526 { "repeat", PLAYLIST_REPEAT },
7527 { "israndom", PLAYLIST_ISRANDOM },
7528 { "isrepeat", PLAYLIST_ISREPEAT },
7529 { "isrepeatone", PLAYLIST_ISREPEATONE }};
7531 /// \page modules__infolabels_boolean_conditions
7532 /// \subsection modules__infolabels_boolean_conditions_Pvr Pvr
7533 /// \table_start
7534 /// \table_h3{ Labels, Type, Description }
7535 /// \table_row3{ <b>`PVR.IsRecording`</b>,
7536 /// \anchor PVR_IsRecording
7537 /// _boolean_,
7538 /// @return **True** when the system is recording a tv or radio programme.
7539 /// <p>
7540 /// }
7541 /// \table_row3{ <b>`PVR.HasTimer`</b>,
7542 /// \anchor PVR_HasTimer
7543 /// _boolean_,
7544 /// @return **True** when a recording timer is active.
7545 /// <p>
7546 /// }
7547 /// \table_row3{ <b>`PVR.HasTVChannels`</b>,
7548 /// \anchor PVR_HasTVChannels
7549 /// _boolean_,
7550 /// @return **True** if there are TV channels available.
7551 /// <p>
7552 /// }
7553 /// \table_row3{ <b>`PVR.HasRadioChannels`</b>,
7554 /// \anchor PVR_HasRadioChannels
7555 /// _boolean_,
7556 /// @return **True** if there are radio channels available.
7557 /// <p>
7558 /// }
7559 /// \table_row3{ <b>`PVR.HasNonRecordingTimer`</b>,
7560 /// \anchor PVR_HasNonRecordingTimer
7561 /// _boolean_,
7562 /// @return **True** if there are timers present who currently not do recording.
7563 /// <p>
7564 /// }
7565 /// \table_row3{ <b>`PVR.BackendName`</b>,
7566 /// \anchor PVR_BackendName
7567 /// _string_,
7568 /// @return The name of the backend being used.
7569 /// <p>
7570 /// }
7571 /// \table_row3{ <b>`PVR.BackendVersion`</b>,
7572 /// \anchor PVR_BackendVersion
7573 /// _string_,
7574 /// @return The version of the backend that's being used.
7575 /// <p>
7576 /// }
7577 /// \table_row3{ <b>`PVR.BackendHost`</b>,
7578 /// \anchor PVR_BackendHost
7579 /// _string_,
7580 /// @return The backend hostname.
7581 /// <p>
7582 /// }
7583 /// \table_row3{ <b>`PVR.BackendDiskSpace`</b>,
7584 /// \anchor PVR_BackendDiskSpace
7585 /// _string_,
7586 /// @return The available diskspace on the backend as string with size.
7587 /// <p>
7588 /// }
7589 /// \table_row3{ <b>`PVR.BackendDiskSpaceProgr`</b>,
7590 /// \anchor PVR_BackendDiskSpaceProgr
7591 /// _integer_,
7592 /// @return The available diskspace on the backend as percent value.
7593 /// <p><hr>
7594 /// @skinning_v14 **[New Infolabel]** \link PVR_BackendDiskSpaceProgr `PVR.BackendDiskSpaceProgr`\endlink
7595 /// <p>
7596 /// }
7597 /// \table_row3{ <b>`PVR.BackendChannels`</b>,
7598 /// \anchor PVR_BackendChannels
7599 /// _string (integer)_,
7600 /// @return The number of available channels the backend provides.
7601 /// <p>
7602 /// }
7603 /// \table_row3{ <b>`PVR.BackendTimers`</b>,
7604 /// \anchor PVR_BackendTimers
7605 /// _string (integer)_,
7606 /// @return The number of timers set for the backend.
7607 /// <p>
7608 /// }
7609 /// \table_row3{ <b>`PVR.BackendRecordings`</b>,
7610 /// \anchor PVR_BackendRecordings
7611 /// _string (integer)_,
7612 /// @return The number of recordings available on the backend.
7613 /// <p>
7614 /// }
7615 /// \table_row3{ <b>`PVR.BackendDeletedRecordings`</b>,
7616 /// \anchor PVR_BackendDeletedRecordings
7617 /// _string (integer)_,
7618 /// @return The number of deleted recordings present on the backend.
7619 /// <p>
7620 /// }
7621 /// \table_row3{ <b>`PVR.BackendNumber`</b>,
7622 /// \anchor PVR_BackendNumber
7623 /// _string_,
7624 /// @return The backend number.
7625 /// <p>
7626 /// }
7627 /// \table_row3{ <b>`PVR.TotalDiscSpace`</b>,
7628 /// \anchor PVR_TotalDiscSpace
7629 /// _string_,
7630 /// @return The total diskspace available for recordings.
7631 /// <p>
7632 /// }
7633 /// \table_row3{ <b>`PVR.NextTimer`</b>,
7634 /// \anchor PVR_NextTimer
7635 /// _boolean_,
7636 /// @return The next timer date.
7637 /// <p>
7638 /// }
7639 /// \table_row3{ <b>`PVR.IsPlayingTV`</b>,
7640 /// \anchor PVR_IsPlayingTV
7641 /// _boolean_,
7642 /// @return **True** when live tv is being watched.
7643 /// <p>
7644 /// }
7645 /// \table_row3{ <b>`PVR.IsPlayingRadio`</b>,
7646 /// \anchor PVR_IsPlayingRadio
7647 /// _boolean_,
7648 /// @return **True** when live radio is being listened to.
7649 /// <p>
7650 /// }
7651 /// \table_row3{ <b>`PVR.IsPlayingRecording`</b>,
7652 /// \anchor PVR_IsPlayingRecording
7653 /// _boolean_,
7654 /// @return **True** when a recording is being watched.
7655 /// <p>
7656 /// }
7657 /// \table_row3{ <b>`PVR.IsPlayingEpgTag`</b>,
7658 /// \anchor PVR_IsPlayingEpgTag
7659 /// _boolean_,
7660 /// @return **True** when an epg tag is being watched.
7661 /// <p>
7662 /// }
7663 /// \table_row3{ <b>`PVR.EpgEventProgress`</b>,
7664 /// \anchor PVR_EpgEventProgress
7665 /// _integer_,
7666 /// @return The percentage complete of the currently playing epg event.
7667 /// <p><hr>
7668 /// @skinning_v18 **[Infolabel Updated]** \link PVR_EpgEventProgress `PVR.EpgEventProgress`\endlink replaces
7669 /// the old `PVR.Progress` infolabel.
7670 /// <p>
7671 /// }
7672 /// \table_row3{ <b>`PVR.ActStreamClient`</b>,
7673 /// \anchor PVR_ActStreamClient
7674 /// _string_,
7675 /// @return The stream client name.
7676 /// <p>
7677 /// }
7678 /// \table_row3{ <b>`PVR.ActStreamDevice`</b>,
7679 /// \anchor PVR_ActStreamDevice
7680 /// _string_,
7681 /// @return The stream device name.
7682 /// <p>
7683 /// }
7684 /// \table_row3{ <b>`PVR.ActStreamStatus`</b>,
7685 /// \anchor PVR_ActStreamStatus
7686 /// _string_,
7687 /// @return The status of the stream.
7688 /// <p>
7689 /// }
7690 /// \table_row3{ <b>`PVR.ActStreamSignal`</b>,
7691 /// \anchor PVR_ActStreamSignal
7692 /// _string_,
7693 /// @return The signal quality of the stream.
7694 /// <p>
7695 /// }
7696 /// \table_row3{ <b>`PVR.ActStreamSnr`</b>,
7697 /// \anchor PVR_ActStreamSnr
7698 /// _string_,
7699 /// @return The signal to noise ratio of the stream.
7700 /// <p>
7701 /// }
7702 /// \table_row3{ <b>`PVR.ActStreamBer`</b>,
7703 /// \anchor PVR_ActStreamBer
7704 /// _string_,
7705 /// @return The bit error rate of the stream.
7706 /// <p>
7707 /// }
7708 /// \table_row3{ <b>`PVR.ActStreamUnc`</b>,
7709 /// \anchor PVR_ActStreamUnc
7710 /// _string_,
7711 /// @return The UNC value of the stream.
7712 /// <p>
7713 /// }
7714 /// \table_row3{ <b>`PVR.ActStreamProgrSignal`</b>,
7715 /// \anchor PVR_ActStreamProgrSignal
7716 /// _integer_,
7717 /// @return The signal quality of the programme.
7718 /// <p>
7719 /// }
7720 /// \table_row3{ <b>`PVR.ActStreamProgrSnr`</b>,
7721 /// \anchor PVR_ActStreamProgrSnr
7722 /// _integer_,
7723 /// @return The signal to noise ratio of the programme.
7724 /// <p>
7725 /// }
7726 /// \table_row3{ <b>`PVR.ActStreamIsEncrypted`</b>,
7727 /// \anchor PVR_ActStreamIsEncrypted
7728 /// _boolean_,
7729 /// @return **True** when channel is encrypted on source.
7730 /// <p>
7731 /// }
7732 /// \table_row3{ <b>`PVR.ActStreamEncryptionName`</b>,
7733 /// \anchor PVR_ActStreamEncryptionName
7734 /// _string_,
7735 /// @return The encryption used on the stream.
7736 /// <p>
7737 /// }
7738 /// \table_row3{ <b>`PVR.ActStreamServiceName`</b>,
7739 /// \anchor PVR_ActStreamServiceName
7740 /// _string_,
7741 /// @return The service name of played channel if available.
7742 /// <p>
7743 /// }
7744 /// \table_row3{ <b>`PVR.ActStreamMux`</b>,
7745 /// \anchor PVR_ActStreamMux
7746 /// _string_,
7747 /// @return The multiplex type of played channel if available.
7748 /// <p>
7749 /// }
7750 /// \table_row3{ <b>`PVR.ActStreamProviderName`</b>,
7751 /// \anchor PVR_ActStreamProviderName
7752 /// _string_,
7753 /// @return The provider name of the played channel if available.
7754 /// <p>
7755 /// }
7756 /// \table_row3{ <b>`PVR.IsTimeShift`</b>,
7757 /// \anchor PVR_IsTimeShift
7758 /// _boolean_,
7759 /// @return **True** when for channel is timeshift available.
7760 /// <p>
7761 /// }
7762 /// \table_row3{ <b>`PVR.TimeShiftProgress`</b>,
7763 /// \anchor PVR_TimeShiftProgress
7764 /// _integer_,
7765 /// @return The position of currently timeshifted title on TV as integer.
7766 /// <p>
7767 /// }
7768 /// \table_row3{ <b>`PVR.TimeShiftSeekbar`</b>,
7769 /// \anchor PVR_TimeShiftSeekbar
7770 /// _integer_,
7771 /// @return The percentage we are seeking to in a timeshifted title.
7772 /// <p><hr>
7773 /// @skinning_v19 **[New Infolabel]** \link PVR_TimeShiftSeekbar `PVR.TimeShiftSeekbar`\endlink
7774 /// <p>
7775 /// }
7776 /// \table_row3{ <b>`PVR.NowRecordingTitle`</b>,
7777 /// \anchor PVR_NowRecordingTitle
7778 /// _string_,
7779 /// @return The title of the programme being recorded.
7780 /// <p>
7781 /// }
7782 /// \table_row3{ <b>`PVR.NowRecordingDateTime`</b>,
7783 /// \anchor PVR_NowRecordingDateTime
7784 /// _Date/Time string_,
7785 /// @return The start date and time of the current recording.
7786 /// <p>
7787 /// }
7788 /// \table_row3{ <b>`PVR.NowRecordingChannel`</b>,
7789 /// \anchor PVR_NowRecordingChannel
7790 /// _string_,
7791 /// @return The channel name of the current recording.
7792 /// <p>
7793 /// }
7794 /// \table_row3{ <b>`PVR.NowRecordingChannelIcon`</b>,
7795 /// \anchor PVR_NowRecordingChannelIcon
7796 /// _string_,
7797 /// @return The icon of the current recording channel.
7798 /// <p>
7799 /// }
7800 /// \table_row3{ <b>`PVR.NextRecordingTitle`</b>,
7801 /// \anchor PVR_NextRecordingTitle
7802 /// _string_,
7803 /// @return The title of the next programme that will be recorded.
7804 /// <p>
7805 /// }
7806 /// \table_row3{ <b>`PVR.NextRecordingDateTime`</b>,
7807 /// \anchor PVR_NextRecordingDateTime
7808 /// _Date/Time string_,
7809 /// @return The start date and time of the next recording.
7810 /// <p>
7811 /// }
7812 /// \table_row3{ <b>`PVR.NextRecordingChannel`</b>,
7813 /// \anchor PVR_NextRecordingChannel
7814 /// _string_,
7815 /// @return The channel name of the next recording.
7816 /// <p>
7817 /// }
7818 /// \table_row3{ <b>`PVR.NextRecordingChannelIcon`</b>,
7819 /// \anchor PVR_NextRecordingChannelIcon
7820 /// _string_,
7821 /// @return The icon of the next recording channel.
7822 /// <p>
7823 /// }
7824 /// \table_row3{ <b>`PVR.TVNowRecordingTitle`</b>,
7825 /// \anchor PVR_TVNowRecordingTitle
7826 /// _string_,
7827 /// @return The title of the tv programme being recorded.
7828 /// <p><hr>
7829 /// @skinning_v17 **[New Infolabel]** \link PVR_TVNowRecordingTitle `PVR.TVNowRecordingTitle`\endlink
7830 /// <p>
7831 /// }
7832 /// \table_row3{ <b>`PVR.TVNowRecordingDateTime`</b>,
7833 /// \anchor PVR_TVNowRecordingDateTime
7834 /// _Date/Time string_,
7835 /// @return The start date and time of the current tv recording.
7836 /// <p><hr>
7837 /// @skinning_v17 **[New Infolabel]** \link PVR_TVNowRecordingDateTime `PVR.TVNowRecordingDateTime`\endlink
7838 /// <p>
7839 /// }
7840 /// \table_row3{ <b>`PVR.TVNowRecordingChannel`</b>,
7841 /// \anchor PVR_TVNowRecordingChannel
7842 /// _string_,
7843 /// @return The channel name of the current tv recording.
7844 /// <p><hr>
7845 /// @skinning_v17 **[New Infolabel]** \link PVR_TVNowRecordingChannel `PVR.TVNowRecordingChannel`\endlink
7846 /// <p>
7847 /// }
7848 /// \table_row3{ <b>`PVR.TVNowRecordingChannelIcon`</b>,
7849 /// \anchor PVR_TVNowRecordingChannelIcon
7850 /// _string_,
7851 /// @return The icon of the current recording TV channel.
7852 /// <p><hr>
7853 /// @skinning_v17 **[New Infolabel]** \link PVR_TVNowRecordingChannelIcon `PVR.TVNowRecordingChannelIcon`\endlink
7854 /// <p>
7855 /// }
7856 /// \table_row3{ <b>`PVR.TVNextRecordingTitle`</b>,
7857 /// \anchor PVR_TVNextRecordingTitle
7858 /// _string_,
7859 /// @return The title of the next tv programme that will be recorded.
7860 /// <p><hr>
7861 /// @skinning_v17 **[New Infolabel]** \link PVR_TVNextRecordingTitle `PVR.TVNextRecordingTitle`\endlink
7862 /// <p>
7863 /// }
7864 /// \table_row3{ <b>`PVR.TVNextRecordingDateTime`</b>,
7865 /// \anchor PVR_TVNextRecordingDateTime
7866 /// _Date/Time string_,
7867 /// @return The start date and time of the next tv recording.
7868 /// <p><hr>
7869 /// @skinning_v17 **[New Infolabel]** \link PVR_TVNextRecordingDateTime `PVR.TVNextRecordingDateTime`\endlink
7870 /// <p>
7871 /// }
7872 /// \table_row3{ <b>`PVR.TVNextRecordingChannel`</b>,
7873 /// \anchor PVR_TVNextRecordingChannel
7874 /// _string_,
7875 /// @return The channel name of the next tv recording.
7876 /// <p><hr>
7877 /// @skinning_v17 **[New Infolabel]** \link PVR_TVNextRecordingChannel `PVR.TVNextRecordingChannel`\endlink
7878 /// <p>
7879 /// }
7880 /// \table_row3{ <b>`PVR.TVNextRecordingChannelIcon`</b>,
7881 /// \anchor PVR_TVNextRecordingChannelIcon
7882 /// _string_,
7883 /// @return The icon of the next recording tv channel.
7884 /// <p><hr>
7885 /// @skinning_v17 **[New Infolabel]** \link PVR_TVNextRecordingChannelIcon `PVR.TVNextRecordingChannelIcon`\endlink
7886 /// <p>
7887 /// }
7888 /// \table_row3{ <b>`PVR.RadioNowRecordingTitle`</b>,
7889 /// \anchor PVR_RadioNowRecordingTitle
7890 /// _string_,
7891 /// @return The title of the radio programme being recorded.
7892 /// <p><hr>
7893 /// @skinning_v17 **[New Infolabel]** \link PVR_RadioNowRecordingTitle `PVR.RadioNowRecordingTitle`\endlink
7894 /// <p>
7895 /// }
7896 /// \table_row3{ <b>`PVR.RadioNowRecordingDateTime`</b>,
7897 /// \anchor PVR_RadioNowRecordingDateTime
7898 /// _Date/Time string_,
7899 /// @return The start date and time of the current radio recording.
7900 /// <p><hr>
7901 /// @skinning_v17 **[New Infolabel]** \link PVR_RadioNowRecordingDateTime `PVR.RadioNowRecordingDateTime`\endlink
7902 /// <p>
7903 /// }
7904 /// \table_row3{ <b>`PVR.RadioNowRecordingChannel`</b>,
7905 /// \anchor PVR_RadioNowRecordingChannel
7906 /// _string_,
7907 /// @return The channel name of the current radio recording.
7908 /// <p><hr>
7909 /// @skinning_v17 **[New Infolabel]** \link PVR_RadioNowRecordingChannel `PVR.RadioNowRecordingChannel`\endlink
7910 /// <p>
7911 /// }
7912 /// \table_row3{ <b>`PVR.RadioNowRecordingChannelIcon`</b>,
7913 /// \anchor PVR_RadioNowRecordingChannelIcon
7914 /// _string_,
7915 /// @return The icon of the current recording radio channel.
7916 /// <p><hr>
7917 /// @skinning_v17 **[New Infolabel]** \link PVR_RadioNowRecordingChannelIcon `PVR.RadioNowRecordingChannelIcon`\endlink
7918 /// <p>
7919 /// }
7920 /// \table_row3{ <b>`PVR.RadioNextRecordingTitle`</b>,
7921 /// \anchor PVR_RadioNextRecordingTitle
7922 /// _string_,
7923 /// @return The title of the next radio programme that will be recorded.
7924 /// <p><hr>
7925 /// @skinning_v17 **[New Infolabel]** \link PVR_RadioNextRecordingTitle `PVR.RadioNextRecordingTitle`\endlink
7926 /// <p>
7927 /// }
7928 /// \table_row3{ <b>`PVR.RadioNextRecordingDateTime`</b>,
7929 /// \anchor PVR_RadioNextRecordingDateTime
7930 /// _Date/Time string_,
7931 /// @return The start date and time of the next radio recording.
7932 /// <p><hr>
7933 /// @skinning_v17 **[New Infolabel]** \link PVR_RadioNextRecordingDateTime `PVR.RadioNextRecordingDateTime`\endlink
7934 /// <p>
7935 /// }
7936 /// \table_row3{ <b>`PVR.RadioNextRecordingChannel`</b>,
7937 /// \anchor PVR_RadioNextRecordingChannel
7938 /// _string_,
7939 /// @return The channel name of the next radio recording.
7940 /// <p><hr>
7941 /// @skinning_v17 **[New Infolabel]** \link PVR_RadioNextRecordingChannel `PVR.RadioNextRecordingChannel`\endlink
7942 /// <p>
7943 /// }
7944 /// \table_row3{ <b>`PVR.RadioNextRecordingChannelIcon`</b>,
7945 /// \anchor PVR_RadioNextRecordingChannelIcon
7946 /// _string_,
7947 /// @return The icon of the next recording radio channel.
7948 /// <p><hr>
7949 /// @skinning_v17 **[New Infolabel]** \link PVR_RadioNextRecordingChannelIcon `PVR.RadioNextRecordingChannelIcon`\endlink
7950 /// <p>
7951 /// }
7952 /// \table_row3{ <b>`PVR.IsRecordingTV`</b>,
7953 /// \anchor PVR_IsRecordingTV
7954 /// _boolean_,
7955 /// @return **True** when the system is recording a tv programme.
7956 /// <p><hr>
7957 /// @skinning_v17 **[New Boolean Condition]** \link PVR_IsRecordingTV `PVR.IsRecordingTV`\endlink
7958 /// <p>
7959 /// }
7960 /// \table_row3{ <b>`PVR.HasTVTimer`</b>,
7961 /// \anchor PVR_HasTVTimer
7962 /// _boolean_,
7963 /// @return **True** if at least one tv timer is active.
7964 /// <p><hr>
7965 /// @skinning_v17 **[New Boolean Condition]** \link PVR_HasTVTimer `PVR.HasTVTimer`\endlink
7966 /// <p>
7967 /// }
7968 /// \table_row3{ <b>`PVR.HasNonRecordingTVTimer`</b>,
7969 /// \anchor PVR_HasNonRecordingTVTimer
7970 /// _boolean_,
7971 /// @return **True** if there are tv timers present who currently not do recording.
7972 /// <p><hr>
7973 /// @skinning_v17 **[New Boolean Condition]** \link PVR_HasNonRecordingTVTimer `PVR.HasNonRecordingTVTimer`\endlink
7974 /// <p>
7975 /// }
7976 /// \table_row3{ <b>`PVR.IsRecordingRadio`</b>,
7977 /// \anchor PVR_IsRecordingRadio
7978 /// _boolean_,
7979 /// @return **True** when the system is recording a radio programme.
7980 /// <p><hr>
7981 /// @skinning_v17 **[New Boolean Condition]** \link PVR_IsRecordingRadio `PVR.IsRecordingRadio`\endlink
7982 /// <p>
7983 /// }
7984 /// \table_row3{ <b>`PVR.HasRadioTimer`</b>,
7985 /// \anchor PVR_HasRadioTimer
7986 /// _boolean_,
7987 /// @return **True** if at least one radio timer is active.
7988 /// <p><hr>
7989 /// @skinning_v17 **[New Boolean Condition]** \link PVR_HasRadioTimer `PVR.HasRadioTimer`\endlink
7990 /// <p>
7991 /// }
7992 /// \table_row3{ <b>`PVR.HasNonRecordingRadioTimer`</b>,
7993 /// \anchor PVR_HasNonRecordingRadioTimer
7994 /// _boolean_,
7995 /// @return **True** if there are radio timers present who currently not do recording.
7996 /// <p><hr>
7997 /// @skinning_v17 **[New Boolean Condition]** \link PVR_HasNonRecordingRadioTimer `PVR.HasRadioTimer`\endlink
7998 /// <p>
7999 /// }
8000 /// \table_row3{ <b>`PVR.ChannelNumberInput`</b>,
8001 /// \anchor PVR_ChannelNumberInput
8002 /// _string_,
8003 /// @return The currently entered channel number while in numeric channel input mode\, an empty string otherwise.
8004 /// <p><hr>
8005 /// @skinning_v18 **[New Infolabel]** \link PVR_ChannelNumberInput `PVR.ChannelNumberInput`\endlink
8006 /// <p>
8007 /// }
8008 /// \table_row3{ <b>`PVR.CanRecordPlayingChannel`</b>,
8009 /// \anchor PVR_CanRecordPlayingChannel
8010 /// _boolean_,
8011 /// @return **True** if PVR is currently playing a channel and if this channel can be recorded.
8012 /// <p><hr>
8013 /// @skinning_v18 **[Infolabel Updated]** \link PVR_CanRecordPlayingChannel `PVR.CanRecordPlayingChannel`\endlink replaces
8014 /// the old `Player.CanRecord` infolabel.
8015 /// <p>
8016 /// }
8017 /// \table_row3{ <b>`PVR.IsRecordingPlayingChannel`</b>,
8018 /// \anchor PVR_IsRecordingPlayingChannel
8019 /// _boolean_,
8020 /// @return **True** if PVR is currently playing a channel and if this channel is currently recorded.
8021 /// <p><hr>
8022 /// @skinning_v18 **[Infolabel Updated]** \link PVR_IsRecordingPlayingChannel `PVR.IsRecordingPlayingChannel`\endlink replaces
8023 /// the old `Player.Recording` infolabel.
8024 /// <p>
8025 /// }
8026 /// \table_row3{ <b>`PVR.IsPlayingActiveRecording`</b>,
8027 /// \anchor PVR_IsPlayingActiveRecording
8028 /// _boolean_,
8029 /// @return **True** if PVR is currently playing an in progress recording.
8030 /// <p><hr>
8031 /// @skinning_v19 **[New Infolabel]** \link PVR_IsPlayingActiveRecording `PVR.IsPlayingActiveRecording`\endlink
8032 /// <p>
8033 /// }
8034 /// \table_row3{ <b>`PVR.TimeshiftProgressPlayPos`</b>,
8035 /// \anchor PVR_TimeshiftProgressPlayPos
8036 /// _integer_,
8037 /// @return The percentage of the current play position within the PVR timeshift progress.
8038 /// <p><hr>
8039 /// @skinning_v18 **[New Infolabel]** \link PVR_TimeshiftProgressPlayPos `PVR.TimeshiftProgressPlayPos`\endlink
8040 /// <p>
8041 /// }
8042 /// \table_row3{ <b>`PVR.TimeshiftProgressEpgStart`</b>,
8043 /// \anchor PVR_TimeshiftProgressEpgStart
8044 /// _integer_,
8045 /// @return The percentage of the start of the currently playing epg event within the PVR timeshift progress.
8046 /// <p><hr>
8047 /// @skinning_v18 **[New Infolabel]** \link PVR_TimeshiftProgressEpgStart `PVR.TimeshiftProgressEpgStart`\endlink
8048 /// <p>
8049 /// }
8050 /// \table_row3{ <b>`PVR.TimeshiftProgressEpgEnd`</b>,
8051 /// \anchor PVR_TimeshiftProgressEpgEnd
8052 /// _integer_,
8053 /// @return The percentage of the end of the currently playing epg event within the PVR timeshift progress.
8054 /// <p><hr>
8055 /// @skinning_v18 **[New Infolabel]** \link PVR_TimeshiftProgressEpgEnd `PVR.TimeshiftProgressEpgEnd`\endlink
8056 /// <p>
8057 /// }
8058 /// \table_row3{ <b>`PVR.TimeshiftProgressBufferStart`</b>,
8059 /// \anchor PVR_TimeshiftProgressBufferStart
8060 /// _integer_,
8061 /// @return The percentage of the start of the timeshift buffer within the PVR timeshift progress.
8062 /// <p><hr>
8063 /// @skinning_v18 **[New Infolabel]** \link PVR_TimeshiftProgressBufferStart `PVR.TimeshiftProgressBufferStart`\endlink
8064 /// <p>
8065 /// }
8066 /// \table_row3{ <b>`PVR.TimeshiftProgressBufferEnd`</b>,
8067 /// \anchor PVR_TimeshiftProgressBufferEnd
8068 /// _integer_,
8069 /// @return The percentage of the end of the timeshift buffer within the PVR timeshift progress.
8070 /// <p><hr>
8071 /// @skinning_v18 **[New Infolabel]** \link PVR_TimeshiftProgressBufferEnd `PVR.TimeshiftProgressBufferEnd`\endlink
8072 /// <p>
8073 /// }
8074 /// \table_row3{ <b>`PVR.EpgEventIcon`</b>,
8075 /// \anchor PVR_EpgEventIcon
8076 /// _string_,
8077 /// @return The icon of the currently playing epg event\, if any.
8078 /// <p><hr>
8079 /// @skinning_v18 **[New Infolabel]** \link PVR_EpgEventIcon `PVR_EpgEventIcon`\endlink
8080 /// <p>
8081 /// }
8083 const infomap pvr[] = {{ "isrecording", PVR_IS_RECORDING },
8084 { "hastimer", PVR_HAS_TIMER },
8085 { "hastvchannels", PVR_HAS_TV_CHANNELS },
8086 { "hasradiochannels", PVR_HAS_RADIO_CHANNELS },
8087 { "hasnonrecordingtimer", PVR_HAS_NONRECORDING_TIMER },
8088 { "backendname", PVR_BACKEND_NAME },
8089 { "backendversion", PVR_BACKEND_VERSION },
8090 { "backendhost", PVR_BACKEND_HOST },
8091 { "backenddiskspace", PVR_BACKEND_DISKSPACE },
8092 { "backenddiskspaceprogr", PVR_BACKEND_DISKSPACE_PROGR },
8093 { "backendchannels", PVR_BACKEND_CHANNELS },
8094 { "backendtimers", PVR_BACKEND_TIMERS },
8095 { "backendrecordings", PVR_BACKEND_RECORDINGS },
8096 { "backenddeletedrecordings", PVR_BACKEND_DELETED_RECORDINGS },
8097 { "backendnumber", PVR_BACKEND_NUMBER },
8098 { "totaldiscspace", PVR_TOTAL_DISKSPACE },
8099 { "nexttimer", PVR_NEXT_TIMER },
8100 { "isplayingtv", PVR_IS_PLAYING_TV },
8101 { "isplayingradio", PVR_IS_PLAYING_RADIO },
8102 { "isplayingrecording", PVR_IS_PLAYING_RECORDING },
8103 { "isplayingepgtag", PVR_IS_PLAYING_EPGTAG },
8104 { "epgeventprogress", PVR_EPG_EVENT_PROGRESS },
8105 { "actstreamclient", PVR_ACTUAL_STREAM_CLIENT },
8106 { "actstreamdevice", PVR_ACTUAL_STREAM_DEVICE },
8107 { "actstreamstatus", PVR_ACTUAL_STREAM_STATUS },
8108 { "actstreamsignal", PVR_ACTUAL_STREAM_SIG },
8109 { "actstreamsnr", PVR_ACTUAL_STREAM_SNR },
8110 { "actstreamber", PVR_ACTUAL_STREAM_BER },
8111 { "actstreamunc", PVR_ACTUAL_STREAM_UNC },
8112 { "actstreamprogrsignal", PVR_ACTUAL_STREAM_SIG_PROGR },
8113 { "actstreamprogrsnr", PVR_ACTUAL_STREAM_SNR_PROGR },
8114 { "actstreamisencrypted", PVR_ACTUAL_STREAM_ENCRYPTED },
8115 { "actstreamencryptionname", PVR_ACTUAL_STREAM_CRYPTION },
8116 { "actstreamservicename", PVR_ACTUAL_STREAM_SERVICE },
8117 { "actstreammux", PVR_ACTUAL_STREAM_MUX },
8118 { "actstreamprovidername", PVR_ACTUAL_STREAM_PROVIDER },
8119 { "istimeshift", PVR_IS_TIMESHIFTING },
8120 { "timeshiftprogress", PVR_TIMESHIFT_PROGRESS },
8121 { "timeshiftseekbar", PVR_TIMESHIFT_SEEKBAR },
8122 { "nowrecordingtitle", PVR_NOW_RECORDING_TITLE },
8123 { "nowrecordingdatetime", PVR_NOW_RECORDING_DATETIME },
8124 { "nowrecordingchannel", PVR_NOW_RECORDING_CHANNEL },
8125 { "nowrecordingchannelicon", PVR_NOW_RECORDING_CHAN_ICO },
8126 { "nextrecordingtitle", PVR_NEXT_RECORDING_TITLE },
8127 { "nextrecordingdatetime", PVR_NEXT_RECORDING_DATETIME },
8128 { "nextrecordingchannel", PVR_NEXT_RECORDING_CHANNEL },
8129 { "nextrecordingchannelicon", PVR_NEXT_RECORDING_CHAN_ICO },
8130 { "tvnowrecordingtitle", PVR_TV_NOW_RECORDING_TITLE },
8131 { "tvnowrecordingdatetime", PVR_TV_NOW_RECORDING_DATETIME },
8132 { "tvnowrecordingchannel", PVR_TV_NOW_RECORDING_CHANNEL },
8133 { "tvnowrecordingchannelicon", PVR_TV_NOW_RECORDING_CHAN_ICO },
8134 { "tvnextrecordingtitle", PVR_TV_NEXT_RECORDING_TITLE },
8135 { "tvnextrecordingdatetime", PVR_TV_NEXT_RECORDING_DATETIME },
8136 { "tvnextrecordingchannel", PVR_TV_NEXT_RECORDING_CHANNEL },
8137 { "tvnextrecordingchannelicon", PVR_TV_NEXT_RECORDING_CHAN_ICO },
8138 { "radionowrecordingtitle", PVR_RADIO_NOW_RECORDING_TITLE },
8139 { "radionowrecordingdatetime", PVR_RADIO_NOW_RECORDING_DATETIME },
8140 { "radionowrecordingchannel", PVR_RADIO_NOW_RECORDING_CHANNEL },
8141 { "radionowrecordingchannelicon", PVR_RADIO_NOW_RECORDING_CHAN_ICO },
8142 { "radionextrecordingtitle", PVR_RADIO_NEXT_RECORDING_TITLE },
8143 { "radionextrecordingdatetime", PVR_RADIO_NEXT_RECORDING_DATETIME },
8144 { "radionextrecordingchannel", PVR_RADIO_NEXT_RECORDING_CHANNEL },
8145 { "radionextrecordingchannelicon", PVR_RADIO_NEXT_RECORDING_CHAN_ICO },
8146 { "isrecordingtv", PVR_IS_RECORDING_TV },
8147 { "hastvtimer", PVR_HAS_TV_TIMER },
8148 { "hasnonrecordingtvtimer", PVR_HAS_NONRECORDING_TV_TIMER },
8149 { "isrecordingradio", PVR_IS_RECORDING_RADIO },
8150 { "hasradiotimer", PVR_HAS_RADIO_TIMER },
8151 { "hasnonrecordingradiotimer", PVR_HAS_NONRECORDING_RADIO_TIMER },
8152 { "channelnumberinput", PVR_CHANNEL_NUMBER_INPUT },
8153 { "canrecordplayingchannel", PVR_CAN_RECORD_PLAYING_CHANNEL },
8154 { "isrecordingplayingchannel", PVR_IS_RECORDING_PLAYING_CHANNEL },
8155 { "isplayingactiverecording", PVR_IS_PLAYING_ACTIVE_RECORDING },
8156 { "timeshiftprogressplaypos", PVR_TIMESHIFT_PROGRESS_PLAY_POS },
8157 { "timeshiftprogressepgstart", PVR_TIMESHIFT_PROGRESS_EPG_START },
8158 { "timeshiftprogressepgend", PVR_TIMESHIFT_PROGRESS_EPG_END },
8159 { "timeshiftprogressbufferstart", PVR_TIMESHIFT_PROGRESS_BUFFER_START },
8160 { "timeshiftprogressbufferend", PVR_TIMESHIFT_PROGRESS_BUFFER_END },
8161 { "epgeventicon", PVR_EPG_EVENT_ICON }};
8163 /// \page modules__infolabels_boolean_conditions
8164 /// \table_row3{ <b>`PVR.EpgEventDuration`</b>,
8165 /// \anchor PVR_EpgEventDuration
8166 /// _string_,
8167 /// @return The duration of the currently playing epg event in the
8168 /// format <b>hh:mm:ss</b>.
8169 /// @note <b>hh:</b> will be omitted if hours value is zero.
8170 /// <p><hr>
8171 /// @skinning_v18 **[Infolabel Updated]** \link PVR_EpgEventDuration `PVR.EpgEventDuration`\endlink replaces
8172 /// the old `PVR.Duration` infolabel.
8173 /// <p>
8174 /// }
8175 /// \table_row3{ <b>`PVR.EpgEventDuration(format)`</b>,
8176 /// \anchor PVR_EpgEventDuration_format
8177 /// _string_,
8178 /// @return The duration of the currently playing EPG event in different formats.
8179 /// @param format [opt] The format of the return time value.
8180 /// See \ref TIME_FORMAT for the list of possible values.
8181 /// <p>
8182 /// }
8183 /// \table_row3{ <b>`PVR.EpgEventElapsedTime`</b>,
8184 /// \anchor PVR_EpgEventElapsedTime
8185 /// _string_,
8186 /// @return the time of the current position of the currently playing epg event in the
8187 /// format <b>hh:mm:ss</b>.
8188 /// @note <b>hh:</b> will be omitted if hours value is zero.
8189 /// <p><hr>
8190 /// @skinning_v18 **[Infolabel Updated]** \link PVR_EpgEventElapsedTime `PVR.EpgEventElapsedTime`\endlink replaces
8191 /// the old `PVR.Time` infolabel.
8192 /// <p>
8193 /// }
8194 /// \table_row3{ <b>`PVR.EpgEventElapsedTime(format)`</b>,
8195 /// \anchor PVR_EpgEventElapsedTime_format
8196 /// _string_,
8197 /// @return The time of the current position of the currently playing epg event in different formats.
8198 /// @param format [opt] The format of the return time value.
8199 /// See \ref TIME_FORMAT for the list of possible values.
8200 /// <p>
8201 /// }
8202 /// \table_row3{ <b>`PVR.EpgEventRemainingTime`</b>,
8203 /// \anchor PVR_EpgEventRemainingTime
8204 /// _string_,
8205 /// @return The remaining time for currently playing epg event in the
8206 /// format <b>hh:mm:ss</b>.
8207 /// @note <b>hh:</b> will be omitted if hours value is zero.
8208 /// <p><hr>
8209 /// @skinning_v18 **[New Infolabel]** \link PVR_EpgEventRemainingTime `PVR.EpgEventRemainingTime`\endlink
8210 /// <p>
8211 /// }
8212 /// \table_row3{ <b>`PVR.EpgEventRemainingTime(format)`</b>,
8213 /// \anchor PVR_EpgEventRemainingTime_format
8214 /// _string_,
8215 /// @return The remaining time for currently playing epg event in different formats.
8216 /// @param format [opt] The format of the return time value.
8217 /// See \ref TIME_FORMAT for the list of possible values.
8218 /// <p>
8219 /// }
8220 /// \table_row3{ <b>`PVR.EpgEventSeekTime`</b>,
8221 /// \anchor PVR_EpgEventSeekTime
8222 /// _string_,
8223 /// @return The time the user is seeking within the currently playing epg event in the
8224 /// format <b>hh:mm:ss</b>.
8225 /// @note <b>hh:</b> will be omitted if hours value is zero.
8226 /// <p><hr>
8227 /// @skinning_v18 **[New Infolabel]** \link PVR_EpgEventSeekTime `PVR.EpgEventSeekTime`\endlink
8228 /// <p>
8229 /// }
8230 /// \table_row3{ <b>`PVR.EpgEventSeekTime(format)`</b>,
8231 /// \anchor PVR_EpgEventSeekTime_format
8232 /// _string_,
8233 /// @return The time the user is seeking within the currently playing epg event in different formats.
8234 /// @param format [opt] The format of the return time value.
8235 /// See \ref TIME_FORMAT for the list of possible values.
8236 /// <p>
8237 /// }
8238 /// \table_row3{ <b>`PVR.EpgEventFinishTime`</b>,
8239 /// \anchor PVR_EpgEventFinishTime
8240 /// _string_,
8241 /// @return The time the currently playing epg event will end in the
8242 /// format <b>hh:mm:ss</b>.
8243 /// @note <b>hh:</b> will be omitted if hours value is zero.
8244 /// <p><hr>
8245 /// @skinning_v18 **[New Infolabel]** \link PVR_EpgEventFinishTime `PVR.EpgEventFinishTime`\endlink
8246 /// <p>
8247 /// }
8248 /// \table_row3{ <b>`PVR.EpgEventFinishTime(format)`</b>,
8249 /// \anchor PVR_EpgEventFinishTime_format
8250 /// _string_,
8251 /// Returns the time the currently playing epg event will end in different formats.
8252 /// @param format [opt] The format of the return time value.
8253 /// See \ref TIME_FORMAT for the list of possible values.
8254 /// <p>
8255 /// }
8256 /// \table_row3{ <b>`PVR.TimeShiftStart`</b>,
8257 /// \anchor PVR_TimeShiftStart
8258 /// _string_,
8259 /// @return The start time of the timeshift buffer in the
8260 /// format <b>hh:mm:ss</b>.
8261 /// @note <b>hh:</b> will be omitted if hours value is zero.
8262 /// <p>
8263 /// }
8264 /// \table_row3{ <b>`PVR.TimeShiftStart(format)`</b>,
8265 /// \anchor PVR_TimeShiftStart_format
8266 /// _string_,
8267 /// Returns the start time of the timeshift buffer in different formats.
8268 /// @param format [opt] The format of the return time value.
8269 /// See \ref TIME_FORMAT for the list of possible values.
8270 /// <p>
8271 /// }
8272 /// \table_row3{ <b>`PVR.TimeShiftEnd`</b>,
8273 /// \anchor PVR_TimeShiftEnd
8274 /// _string_,
8275 /// @return The end time of the timeshift buffer in the
8276 /// format <b>hh:mm:ss</b>.
8277 /// @note <b>hh:</b> will be omitted if hours value is zero.
8278 /// <p>
8279 /// }
8280 /// \table_row3{ <b>`PVR.TimeShiftEnd(format)`</b>,
8281 /// \anchor PVR_TimeShiftEnd_format
8282 /// _string_,
8283 /// @return The end time of the timeshift buffer in different formats.
8284 /// @param format [opt] The format of the return time value.
8285 /// See \ref TIME_FORMAT for the list of possible values.
8286 /// <p>
8287 /// }
8288 /// \table_row3{ <b>`PVR.TimeShiftCur`</b>,
8289 /// \anchor PVR_TimeShiftCur
8290 /// _string_,
8291 /// @return The current playback time within the timeshift buffer in the
8292 /// format <b>hh:mm:ss</b>.
8293 /// @note <b>hh:</b> will be omitted if hours value is zero.
8294 /// <p>
8295 /// }
8296 /// \table_row3{ <b>`PVR.TimeShiftCur(format)`</b>,
8297 /// \anchor PVR_TimeShiftCur_format
8298 /// _string_,
8299 /// Returns the current playback time within the timeshift buffer in different formats.
8300 /// @param format [opt] The format of the return time value.
8301 /// See \ref TIME_FORMAT for the list of possible values.
8302 /// <p>
8303 /// }
8304 /// \table_row3{ <b>`PVR.TimeShiftOffset`</b>,
8305 /// \anchor PVR_TimeShiftOffset
8306 /// _string_,
8307 /// @return The delta of timeshifted time to actual time in the
8308 /// format <b>hh:mm:ss</b>.
8309 /// @note <b>hh:</b> will be omitted if hours value is zero.
8310 /// <p>
8311 /// }
8312 /// \table_row3{ <b>`PVR.TimeShiftOffset(format)`</b>,
8313 /// \anchor PVR_TimeShiftOffset_format
8314 /// _string_,
8315 /// Returns the delta of timeshifted time to actual time in different formats.
8316 /// @param format [opt] The format of the return time value.
8317 /// See \ref TIME_FORMAT for the list of possible values.
8318 /// <p>
8319 /// }
8320 /// \table_row3{ <b>`PVR.TimeshiftProgressDuration`</b>,
8321 /// \anchor PVR_TimeshiftProgressDuration
8322 /// _string_,
8323 /// @return the duration of the PVR timeshift progress in the
8324 /// format <b>hh:mm:ss</b>.
8325 /// @note <b>hh:</b> will be omitted if hours value is zero.
8326 /// <p><hr>
8327 /// @skinning_v18 **[New Infolabel]** \link PVR_TimeshiftProgressDuration `PVR.TimeshiftProgressDuration`\endlink
8328 /// <p>
8329 /// }
8330 /// \table_row3{ <b>`PVR.TimeshiftProgressDuration(format)`</b>,
8331 /// \anchor PVR_TimeshiftProgressDuration_format
8332 /// _string_,
8333 /// @return The duration of the PVR timeshift progress in different formats.
8334 /// @param format [opt] The format of the return time value.
8335 /// See \ref TIME_FORMAT for the list of possible values.
8336 /// <p>
8337 /// }
8338 /// \table_row3{ <b>`PVR.TimeshiftProgressStartTime`</b>,
8339 /// \anchor PVR_TimeshiftProgressStartTime
8340 /// _string_,
8341 /// @return The start time of the PVR timeshift progress in the
8342 /// format <b>hh:mm:ss</b>.
8343 /// @note <b>hh:</b> will be omitted if hours value is zero.
8344 /// <p><hr>
8345 /// @skinning_v18 **[New Infolabel]** \link PVR_TimeshiftProgressStartTime `PVR.TimeshiftProgressStartTime`\endlink
8346 /// <p>
8347 /// }
8348 /// \table_row3{ <b>`PVR.TimeshiftProgressStartTime(format)`</b>,
8349 /// \anchor PVR_TimeshiftProgressStartTime_format
8350 /// _string_,
8351 /// @return The start time of the PVR timeshift progress in different formats.
8352 /// @param format [opt] The format of the return time value.
8353 /// See \ref TIME_FORMAT for the list of possible values.
8354 /// <p>
8355 /// }
8356 /// \table_row3{ <b>`PVR.TimeshiftProgressEndTime`</b>,
8357 /// \anchor PVR_TimeshiftProgressEndTime
8358 /// _string_,
8359 /// @return The end time of the PVR timeshift progress in the
8360 /// format <b>hh:mm:ss</b>.
8361 /// @note hh: will be omitted if hours value is zero.
8362 /// <p><hr>
8363 /// @skinning_v18 **[New Infolabel]** \link PVR_TimeshiftProgressEndTime `PVR.TimeshiftProgressEndTime`\endlink
8364 /// <p>
8365 /// }
8366 /// \table_row3{ <b>`PVR.TimeshiftProgressEndTime(format)`</b>,
8367 /// \anchor PVR_TimeshiftProgressEndTime_format
8368 /// _string_,
8369 /// @return The end time of the PVR timeshift progress in different formats.
8370 /// @param format [opt] The format of the return time value.
8371 /// See \ref TIME_FORMAT for the list of possible values.
8372 /// <p>
8373 /// }
8374 /// \table_end
8376 /// -----------------------------------------------------------------------------
8377 const infomap pvr_times[] = {{ "epgeventduration", PVR_EPG_EVENT_DURATION },
8378 { "epgeventelapsedtime", PVR_EPG_EVENT_ELAPSED_TIME },
8379 { "epgeventremainingtime", PVR_EPG_EVENT_REMAINING_TIME },
8380 { "epgeventfinishtime", PVR_EPG_EVENT_FINISH_TIME },
8381 { "epgeventseektime", PVR_EPG_EVENT_SEEK_TIME },
8382 { "timeshiftstart", PVR_TIMESHIFT_START_TIME },
8383 { "timeshiftend", PVR_TIMESHIFT_END_TIME },
8384 { "timeshiftcur", PVR_TIMESHIFT_PLAY_TIME },
8385 { "timeshiftoffset", PVR_TIMESHIFT_OFFSET },
8386 { "timeshiftprogressduration", PVR_TIMESHIFT_PROGRESS_DURATION },
8387 { "timeshiftprogressstarttime", PVR_TIMESHIFT_PROGRESS_START_TIME },
8388 { "timeshiftprogressendtime", PVR_TIMESHIFT_PROGRESS_END_TIME }};
8390 /// \page modules__infolabels_boolean_conditions
8391 /// \subsection modules__infolabels_boolean_conditions_RDS RDS
8392 /// @note Only supported if both the PVR backend and the Kodi client support RDS.
8394 /// \table_start
8395 /// \table_h3{ Labels, Type, Description }
8396 /// \table_row3{ <b>`RDS.HasRds`</b>,
8397 /// \anchor RDS_HasRds
8398 /// _boolean_,
8399 /// @return **True** if RDS is present.
8400 /// <p><hr>
8401 /// @skinning_v16 **[New Boolean Condition]** \link RDS_HasRds `RDS.HasRds`\endlink
8402 /// <p>
8403 /// }
8404 /// \table_row3{ <b>`RDS.HasRadioText`</b>,
8405 /// \anchor RDS_HasRadioText
8406 /// _boolean_,
8407 /// @return **True** if RDS contains also RadioText.
8408 /// <p><hr>
8409 /// @skinning_v16 **[New Boolean Condition]** \link RDS_HasRadioText `RDS.HasRadioText`\endlink
8410 /// <p>
8411 /// }
8412 /// \table_row3{ <b>`RDS.HasRadioTextPlus`</b>,
8413 /// \anchor RDS_HasRadioTextPlus
8414 /// _boolean_,
8415 /// @return **True** if RDS with RadioText contains also the plus information.
8416 /// <p><hr>
8417 /// @skinning_v16 **[New Boolean Condition]** \link RDS_HasRadioTextPlus `RDS.HasRadioTextPlus`\endlink
8418 /// <p>
8419 /// }
8420 /// \table_row3{ <b>`RDS.HasHotline`</b>,
8421 /// \anchor RDS_HasHotline
8422 /// _boolean_,
8423 /// @return **True** if a hotline phone number is present.
8424 /// @note Only available on RadioText Plus
8425 /// <p><hr>
8426 /// @skinning_v16 **[New Boolean Condition]** \link RDS_HasHotline `RDS.HasHotline`\endlink
8427 /// <p>
8428 /// }
8429 /// \table_row3{ <b>`RDS.HasStudio`</b>,
8430 /// \anchor RDS_HasStudio
8431 /// _boolean_,
8432 /// @return **True** if a studio name is present.
8433 /// @note Only available on RadioText Plus
8434 /// <p><hr>
8435 /// @skinning_v16 **[New Boolean Condition]** \link RDS_HasStudio `RDS.HasStudio`\endlink
8436 /// <p>
8437 /// }
8438 /// \table_row3{ <b>`RDS.AudioLanguage`</b>,
8439 /// \anchor RDS_AudioLanguage
8440 /// _string_,
8441 /// @return The RDS reported audio language of the channel.
8442 /// <p><hr>
8443 /// @skinning_v16 **[New Infolabel]** \link RDS_AudioLanguage `RDS.AudioLanguage`\endlink
8444 /// <p>
8445 /// }
8446 /// \table_row3{ <b>`RDS.ChannelCountry`</b>,
8447 /// \anchor RDS_ChannelCountry
8448 /// _string_,
8449 /// @return The country where the radio channel is broadcasted.
8450 /// <p><hr>
8451 /// @skinning_v16 **[New Infolabel]** \link RDS_ChannelCountry `RDS.ChannelCountry`\endlink
8452 /// <p>
8453 /// }
8454 /// \table_row3{ <b>`RDS.GetLine(number)`</b>,
8455 /// \anchor RDS_GetLine
8456 /// _string_,
8457 /// @return The last sent RDS text messages on given number.
8458 /// @param number - given number for RDS\, 0 is the
8459 /// last and 4 rows are supported (0-3)
8460 /// <p><hr>
8461 /// @skinning_v16 **[New Infolabel]** \link RDS_GetLine `RDS.GetLine(number)`\endlink
8462 /// <p>
8463 /// }
8464 /// \table_row3{ <b>`RDS.Title`</b>,
8465 /// \anchor RDS_Title
8466 /// _string_,
8467 /// @return The title of item; e.g. track title of an album.
8468 /// @note Only available on RadioText Plus
8469 /// <p><hr>
8470 /// @skinning_v16 **[New Infolabel]** \link RDS_Title `RDS.Title`\endlink
8471 /// <p>
8472 /// }
8473 /// \table_row3{ <b>`RDS.Artist`</b>,
8474 /// \anchor RDS_Artist
8475 /// _string_,
8476 /// @return A person or band/collective generally considered responsible for the work.
8477 /// @note Only available on RadioText Plus
8478 /// <p><hr>
8479 /// @skinning_v16 **[New Infolabel]** \link RDS_Artist `RDS.Artist`\endlink
8480 /// <p>
8481 /// }
8482 /// \table_row3{ <b>`RDS.Band`</b>,
8483 /// \anchor RDS_Band
8484 /// _string_,
8485 /// @return The band/orchestra/musician.
8486 /// @note Only available on RadioText Plus
8487 /// <p><hr>
8488 /// @skinning_v16 **[New Infolabel]** \link RDS_Band `RDS.Band`\endlink
8489 /// <p>
8490 /// }
8491 /// \table_row3{ <b>`RDS.Composer`</b>,
8492 /// \anchor RDS_Composer
8493 /// _string_,
8494 /// @return The name of the original composer/author.
8495 /// @note Only available on RadioText Plus
8496 /// <p><hr>
8497 /// @skinning_v16 **[New Infolabel]** \link RDS_Composer `RDS.Composer`\endlink
8498 /// <p>
8499 /// }
8500 /// \table_row3{ <b>`RDS.Conductor`</b>,
8501 /// \anchor RDS_Conductor
8502 /// _string_,
8503 /// @return The artist(s) who performed the work. In classical music this would be
8504 /// the conductor.
8505 /// @note Only available on RadioText Plus
8506 /// <p><hr>
8507 /// @skinning_v16 **[New Infolabel]** \link RDS_Conductor `RDS.Conductor`\endlink
8508 /// <p>
8509 /// }
8510 /// \table_row3{ <b>`RDS.Album`</b>,
8511 /// \anchor RDS_Album
8512 /// _string_,
8513 /// @return The album of the song.
8514 /// @note Only available on RadioText Plus
8515 /// <p><hr>
8516 /// @skinning_v16 **[New Infolabel]** \link RDS_Album `RDS.Album`\endlink
8517 /// <p>
8518 /// }
8519 /// \table_row3{ <b>`RDS.TrackNumber`</b>,
8520 /// \anchor RDS_TrackNumber
8521 /// _string_,
8522 /// @return The track number of the item on the album on which it was originally
8523 /// released.
8524 /// @note Only be available on RadioText Plus
8525 /// <p><hr>
8526 /// @skinning_v16 **[New Infolabel]** \link RDS_TrackNumber `RDS.TrackNumber`\endlink
8527 /// <p>
8528 /// }
8529 /// \table_row3{ <b>`RDS.RadioStyle`</b>,
8530 /// \anchor RDS_RadioStyle
8531 /// _string_,
8532 /// @return The style of current played radio channel\, it is always
8533 /// updated once the style changes\, e.g "popmusic" to "news" or "weather"...
8534 /// | RDS | RBDS |
8535 /// |:------------------------|:------------------------|
8536 /// | none | none |
8537 /// | news | news |
8538 /// | currentaffairs | information |
8539 /// | information | sport |
8540 /// | sport | talk |
8541 /// | education | rockmusic |
8542 /// | drama | classicrockmusic |
8543 /// | cultures | adulthits |
8544 /// | science | softrock |
8545 /// | variedspeech | top40 |
8546 /// | popmusic | countrymusic |
8547 /// | rockmusic | oldiesmusic |
8548 /// | easylistening | softmusic |
8549 /// | lightclassics | nostalgia |
8550 /// | seriousclassics | jazzmusic |
8551 /// | othermusic | classical |
8552 /// | weather | randb |
8553 /// | finance | softrandb |
8554 /// | childrensprogs | language |
8555 /// | socialaffairs | religiousmusic |
8556 /// | religion | religioustalk |
8557 /// | phonein | personality |
8558 /// | travelandtouring | public |
8559 /// | leisureandhobby | college |
8560 /// | jazzmusic | spanishtalk |
8561 /// | countrymusic | spanishmusic |
8562 /// | nationalmusic | hiphop |
8563 /// | oldiesmusic | |
8564 /// | folkmusic | |
8565 /// | documentary | weather |
8566 /// | alarmtest | alarmtest |
8567 /// | alarm-alarm | alarm-alarm |
8568 /// @note "alarm-alarm" is normally not used from radio stations\, is thought
8569 /// to inform about horrible messages who are needed asap to all people.
8570 /// <p><hr>
8571 /// @skinning_v16 **[New Infolabel]** \link RDS_RadioStyle `RDS.RadioStyle`\endlink
8572 /// <p>
8573 /// }
8574 /// \table_row3{ <b>`RDS.Comment`</b>,
8575 /// \anchor RDS_Comment
8576 /// _string_,
8577 /// @return The radio station comment string if available.
8578 /// @note Only available on RadioText Plus
8579 /// <p><hr>
8580 /// @skinning_v16 **[New Infolabel]** \link RDS_Comment `RDS.Comment`\endlink
8581 /// <p>
8582 /// }
8583 /// \table_row3{ <b>`RDS.InfoNews`</b>,
8584 /// \anchor RDS_InfoNews
8585 /// _string_,
8586 /// @return The message / headline (if available).
8587 /// @note Only available on RadioText Plus
8588 /// <p><hr>
8589 /// @skinning_v16 **[New Infolabel]** \link RDS_InfoNews `RDS.InfoNews`\endlink
8590 /// <p>
8591 /// }
8592 /// \table_row3{ <b>`RDS.InfoNewsLocal`</b>,
8593 /// \anchor RDS_InfoNewsLocal
8594 /// _string_,
8595 /// @return The local information news sended from radio channel (if available).
8596 /// @note Only available on RadioText Plus
8597 /// <p><hr>
8598 /// @skinning_v16 **[New Infolabel]** \link RDS_InfoNewsLocal `RDS.InfoNewsLocal`\endlink
8599 /// <p>
8600 /// }
8601 /// \table_row3{ <b>`RDS.InfoStock`</b>,
8602 /// \anchor RDS_InfoStock
8603 /// _string_,
8604 /// @return The stock information; either as one part or as several distinct parts:
8605 /// "name 99latest value 99change 99high 99low 99volume" (if available).
8606 /// @note Only available on RadioText Plus
8607 /// <p><hr>
8608 /// @skinning_v16 **[New Infolabel]** \link RDS_InfoStock `RDS.InfoStock`\endlink
8609 /// <p>
8610 /// }
8611 /// \table_row3{ <b>`RDS.InfoStockSize`</b>,
8612 /// \anchor RDS_InfoStockSize
8613 /// _string_,
8614 /// @return The number of rows present in stock information.
8615 /// @note Only available on RadioText Plus
8616 /// <p><hr>
8617 /// @skinning_v16 **[New Infolabel]** \link RDS_InfoStockSize `RDS.InfoStockSize`\endlink
8618 /// <p>
8619 /// }
8620 /// \table_row3{ <b>`RDS.InfoSport`</b>,
8621 /// \anchor RDS_InfoSport
8622 /// _string_,
8623 /// @return The result of a match; either as one part or as several distinct parts:
8624 /// "match 99result"\, e.g. "Bayern München : Borussia 995:5" (if available).
8625 /// @note Only available on RadioText Plus
8626 /// <p><hr>
8627 /// @skinning_v16 **[New Infolabel]** \link RDS_InfoSport `RDS.InfoSport`\endlink
8628 /// <p>
8629 /// }
8630 /// \table_row3{ <b>`RDS.InfoSportSize`</b>,
8631 /// \anchor RDS_InfoSportSize
8632 /// _string_,
8633 /// @return The number of rows present in sport information.
8634 /// @note Only available on RadioText Plus
8635 /// <p><hr>
8636 /// @skinning_v16 **[New Infolabel]** \link RDS_InfoSportSize `RDS.InfoSportSize`\endlink
8637 /// <p>
8638 /// }
8639 /// \table_row3{ <b>`RDS.InfoLottery`</b>,
8640 /// \anchor RDS_InfoLottery
8641 /// _string_,
8642 /// @return The raffle / lottery: "key word 99values" (if available).
8643 /// @note Only available on RadioText Plus
8644 /// <p><hr>
8645 /// @skinning_v16 **[New Infolabel]** \link RDS_InfoLottery `RDS.InfoLottery`\endlink
8646 /// <p>
8647 /// }
8648 /// \table_row3{ <b>`RDS.InfoLotterySize`</b>,
8649 /// \anchor RDS_InfoLotterySize
8650 /// _string_,
8651 /// @return The number of rows present in lottery information.
8652 /// @note Only available on RadioText Plus
8653 /// <p><hr>
8654 /// @skinning_v16 **[New Infolabel]** \link RDS_InfoLotterySize `RDS.InfoLotterySize`\endlink
8655 /// <p>
8656 /// }
8657 /// \table_row3{ <b>`RDS.InfoWeather`</b>,
8658 /// \anchor RDS_InfoWeather
8659 /// _string_,
8660 /// @return The weather information (if available).
8661 /// @note Only available on RadioText Plus
8662 /// <p><hr>
8663 /// @skinning_v16 **[New Infolabel]** \link RDS_InfoWeather `RDS.InfoWeather`\endlink
8664 /// <p>
8665 /// }
8666 /// \table_row3{ <b>`RDS.InfoWeatherSize`</b>,
8667 /// \anchor RDS_InfoWeatherSize
8668 /// _string_,
8669 /// @return The number of rows present in weather information.
8670 /// @note Only available on RadioText Plus
8671 /// <p><hr>
8672 /// @skinning_v16 **[New Infolabel]** \link RDS_InfoWeatherSize `RDS.InfoWeatherSize`\endlink
8673 /// <p>
8674 /// }
8675 /// \table_row3{ <b>`RDS.InfoCinema`</b>,
8676 /// \anchor RDS_InfoCinema
8677 /// _string_,
8678 /// @return The information about movies in cinema (if available).
8679 /// @note Only available on RadioText Plus
8680 /// <p><hr>
8681 /// @skinning_v16 **[New Infolabel]** \link RDS_InfoCinema `RDS.InfoCinema`\endlink
8682 /// <p>
8683 /// }
8684 /// \table_row3{ <b>`RDS.InfoCinemaSize`</b>,
8685 /// \anchor RDS_InfoCinemaSize
8686 /// _string_,
8687 /// @return The number of rows present in cinema information.
8688 /// @note Only available on RadioText Plus
8689 /// <p><hr>
8690 /// @skinning_v16 **[New Infolabel]** \link RDS_InfoCinemaSize `RDS.InfoCinemaSize`\endlink
8691 /// <p>
8692 /// }
8693 /// \table_row3{ <b>`RDS.InfoHoroscope`</b>,
8694 /// \anchor RDS_InfoHoroscope
8695 /// _string_,
8696 /// @return The horoscope; either as one part or as two distinct parts:
8697 /// "key word 99text"\, e.g. "sign of the zodiac 99blablabla" (if available).
8698 /// @note Only available on RadioText Plus
8699 /// <p><hr>
8700 /// @skinning_v16 **[New Infolabel]** \link RDS_InfoHoroscope `RDS.InfoHoroscope`\endlink
8701 /// <p>
8702 /// }
8703 /// \table_row3{ <b>`RDS.InfoHoroscopeSize`</b>,
8704 /// \anchor RDS_InfoHoroscopeSize
8705 /// _string_,
8706 /// @return The Number of rows present in horoscope information.
8707 /// @note Only available on RadioText Plus
8708 /// <p><hr>
8709 /// @skinning_v16 **[New Infolabel]** \link RDS_InfoHoroscopeSize `RDS.InfoHoroscopeSize`\endlink
8710 /// <p>
8711 /// }
8712 /// \table_row3{ <b>`RDS.InfoOther`</b>,
8713 /// \anchor RDS_InfoOther
8714 /// _string_,
8715 /// @return Other information\, not especially specified: "key word 99info" (if available).
8716 /// @note Only available on RadioText Plus
8717 /// <p><hr>
8718 /// @skinning_v16 **[New Infolabel]** \link RDS_InfoOther `RDS.InfoOther`\endlink
8719 /// <p>
8720 /// }
8721 /// \table_row3{ <b>`RDS.InfoOtherSize`</b>,
8722 /// \anchor RDS_InfoOtherSize
8723 /// _string_,
8724 /// @return The number of rows present with other information.
8725 /// @note Only available on RadioText Plus
8726 /// <p><hr>
8727 /// @skinning_v16 **[New Infolabel]** \link RDS_InfoOtherSize `RDS.InfoOtherSize`\endlink
8728 /// <p>
8729 /// }
8730 /// \table_row3{ <b>`RDS.ProgStation`</b>,
8731 /// \anchor RDS_ProgStation
8732 /// _string_,
8733 /// @return The name of the radio channel.
8734 /// @note becomes also set from epg if it is not available from RDS
8735 /// <p><hr>
8736 /// @skinning_v16 **[New Infolabel]** \link RDS_ProgStation `RDS.ProgStation`\endlink
8737 /// <p>
8738 /// }
8739 /// \table_row3{ <b>`RDS.ProgNow`</b>,
8740 /// \anchor RDS_ProgNow
8741 /// _string_,
8742 /// @return The now playing program name.
8743 /// @note becomes also be set from epg if from RDS not available
8744 /// <p><hr>
8745 /// @skinning_v16 **[New Infolabel]** \link RDS_ProgNow `RDS.ProgNow`\endlink
8746 /// <p>
8747 /// }
8748 /// \table_row3{ <b>`RDS.ProgNext`</b>,
8749 /// \anchor RDS_ProgNext
8750 /// _string_,
8751 /// @return The next played program name (if available).
8752 /// @note becomes also be set from epg if from RDS not available
8753 /// <p><hr>
8754 /// @skinning_v16 **[New Infolabel]** \link RDS_ProgNext `RDS.ProgNext`\endlink
8755 /// <p>
8756 /// }
8757 /// \table_row3{ <b>`RDS.ProgHost`</b>,
8758 /// \anchor RDS_ProgHost
8759 /// _string_,
8760 /// @return The name of the host of the radio show.
8761 /// <p><hr>
8762 /// @skinning_v16 **[New Infolabel]** \link RDS_ProgHost `RDS.ProgHost`\endlink
8763 /// <p>
8764 /// }
8765 /// \table_row3{ <b>`RDS.ProgEditStaff`</b>,
8766 /// \anchor RDS_ProgEditStaff
8767 /// _string_,
8768 /// @return The name of the editorial staff; e.g. name of editorial journalist.
8769 /// @note Only available on RadioText Plus
8770 /// <p><hr>
8771 /// @skinning_v16 **[New Infolabel]** \link RDS_ProgEditStaff `RDS.ProgEditStaff`\endlink
8772 /// <p>
8773 /// }
8774 /// \table_row3{ <b>`RDS.ProgHomepage`</b>,
8775 /// \anchor RDS_ProgHomepage
8776 /// _string_,
8777 /// @return The Link to radio station homepage
8778 /// @note Only available on RadioText Plus
8779 /// <p><hr>
8780 /// @skinning_v16 **[New Infolabel]** \link RDS_ProgHomepage `RDS.ProgHomepage`\endlink
8781 /// <p>
8782 /// }
8783 /// \table_row3{ <b>`RDS.ProgStyle`</b>,
8784 /// \anchor RDS_ProgStyle
8785 /// _string_,
8786 /// @return A human readable string about radiostyle defined from RDS or RBDS.
8787 /// <p><hr>
8788 /// @skinning_v16 **[New Infolabel]** \link RDS_ProgStyle `RDS.ProgStyle`\endlink
8789 /// <p>
8790 /// }
8791 /// \table_row3{ <b>`RDS.PhoneHotline`</b>,
8792 /// \anchor RDS_PhoneHotline
8793 /// _string_,
8794 /// @return The telephone number of the radio station's hotline.
8795 /// @note Only available on RadioText Plus
8796 /// <p><hr>
8797 /// @skinning_v16 **[New Infolabel]** \link RDS_PhoneHotline `RDS.PhoneHotline`\endlink
8798 /// <p>
8799 /// }
8800 /// \table_row3{ <b>`RDS.PhoneStudio`</b>,
8801 /// \anchor RDS_PhoneStudio
8802 /// _string_,
8803 /// @return The telephone number of the radio station's studio.
8804 /// @note Only available on RadioText Plus
8805 /// <p><hr>
8806 /// @skinning_v16 **[New Infolabel]** \link RDS_PhoneStudio `RDS.PhoneStudio`\endlink
8807 /// <p>
8808 /// }
8809 /// \table_row3{ <b>`RDS.SmsStudio`</b>,
8810 /// \anchor RDS_SmsStudio
8811 /// _string_,
8812 /// @return The sms number of the radio stations studio (to send directly a sms to
8813 /// the studio) (if available).
8814 /// @note Only available on RadioText Plus
8815 /// <p><hr>
8816 /// @skinning_v16 **[New Infolabel]** \link RDS_SmsStudio `RDS.SmsStudio`\endlink
8817 /// <p>
8818 /// }
8819 /// \table_row3{ <b>`RDS.EmailHotline`</b>,
8820 /// \anchor RDS_EmailHotline
8821 /// _string_,
8822 /// @return The email address of the radio stations hotline (if available).
8823 /// @note Only available on RadioText Plus
8824 /// <p><hr>
8825 /// @skinning_v16 **[New Infolabel]** \link RDS_EmailHotline `RDS.EmailHotline`\endlink
8826 /// <p>
8827 /// }
8828 /// \table_row3{ <b>`RDS.EmailStudio`</b>,
8829 /// \anchor RDS_EmailStudio
8830 /// _string_,
8831 /// @return The email address of the radio station's studio (if available).
8832 /// @note Only available on RadioText Plus
8833 /// <p><hr>
8834 /// @skinning_v16 **[New Infolabel]** \link RDS_EmailStudio `RDS.EmailStudio`\endlink
8835 /// <p>
8836 /// }
8837 /// \table_end
8839 /// -----------------------------------------------------------------------------
8840 const infomap rds[] = {{ "hasrds", RDS_HAS_RDS },
8841 { "hasradiotext", RDS_HAS_RADIOTEXT },
8842 { "hasradiotextplus", RDS_HAS_RADIOTEXT_PLUS },
8843 { "audiolanguage", RDS_AUDIO_LANG },
8844 { "channelcountry", RDS_CHANNEL_COUNTRY },
8845 { "title", RDS_TITLE },
8846 { "getline", RDS_GET_RADIOTEXT_LINE },
8847 { "artist", RDS_ARTIST },
8848 { "band", RDS_BAND },
8849 { "composer", RDS_COMPOSER },
8850 { "conductor", RDS_CONDUCTOR },
8851 { "album", RDS_ALBUM },
8852 { "tracknumber", RDS_ALBUM_TRACKNUMBER },
8853 { "radiostyle", RDS_GET_RADIO_STYLE },
8854 { "comment", RDS_COMMENT },
8855 { "infonews", RDS_INFO_NEWS },
8856 { "infonewslocal", RDS_INFO_NEWS_LOCAL },
8857 { "infostock", RDS_INFO_STOCK },
8858 { "infostocksize", RDS_INFO_STOCK_SIZE },
8859 { "infosport", RDS_INFO_SPORT },
8860 { "infosportsize", RDS_INFO_SPORT_SIZE },
8861 { "infolottery", RDS_INFO_LOTTERY },
8862 { "infolotterysize", RDS_INFO_LOTTERY_SIZE },
8863 { "infoweather", RDS_INFO_WEATHER },
8864 { "infoweathersize", RDS_INFO_WEATHER_SIZE },
8865 { "infocinema", RDS_INFO_CINEMA },
8866 { "infocinemasize", RDS_INFO_CINEMA_SIZE },
8867 { "infohoroscope", RDS_INFO_HOROSCOPE },
8868 { "infohoroscopesize", RDS_INFO_HOROSCOPE_SIZE },
8869 { "infoother", RDS_INFO_OTHER },
8870 { "infoothersize", RDS_INFO_OTHER_SIZE },
8871 { "progstation", RDS_PROG_STATION },
8872 { "prognow", RDS_PROG_NOW },
8873 { "prognext", RDS_PROG_NEXT },
8874 { "proghost", RDS_PROG_HOST },
8875 { "progeditstaff", RDS_PROG_EDIT_STAFF },
8876 { "proghomepage", RDS_PROG_HOMEPAGE },
8877 { "progstyle", RDS_PROG_STYLE },
8878 { "phonehotline", RDS_PHONE_HOTLINE },
8879 { "phonestudio", RDS_PHONE_STUDIO },
8880 { "smsstudio", RDS_SMS_STUDIO },
8881 { "emailhotline", RDS_EMAIL_HOTLINE },
8882 { "emailstudio", RDS_EMAIL_STUDIO },
8883 { "hashotline", RDS_HAS_HOTLINE_DATA },
8884 { "hasstudio", RDS_HAS_STUDIO_DATA }};
8886 /// \page modules__infolabels_boolean_conditions
8887 /// \subsection modules__infolabels_boolean_conditions_slideshow Slideshow
8888 /// \table_start
8889 /// \table_h3{ Labels, Type, Description }
8890 /// \table_row3{ <b>`Slideshow.IsActive`</b>,
8891 /// \anchor Slideshow_IsActive
8892 /// _boolean_,
8893 /// @return **True** if the picture slideshow is running.
8894 /// <p>
8895 /// }
8896 /// \table_row3{ <b>`Slideshow.IsPaused`</b>,
8897 /// \anchor Slideshow_IsPaused
8898 /// _boolean_,
8899 /// @return **True** if the picture slideshow is paused.
8900 /// <p>
8901 /// }
8902 /// \table_row3{ <b>`Slideshow.IsRandom`</b>,
8903 /// \anchor Slideshow_IsRandom
8904 /// _boolean_,
8905 /// @return **True** if the picture slideshow is in random mode.
8906 /// <p>
8907 /// }
8908 /// \table_row3{ <b>`Slideshow.IsVideo`</b>,
8909 /// \anchor Slideshow_IsVideo
8910 /// _boolean_,
8911 /// @return **True** if the picture slideshow is playing a video.
8912 /// <p><hr>
8913 /// @skinning_v13 **[New Boolean Condition]** \link Slideshow_IsVideo `Slideshow.IsVideo`\endlink
8914 /// <p>
8915 /// }
8916 /// \table_row3{ <b>`Slideshow.Altitude`</b>,
8917 /// \anchor Slideshow_Altitude
8918 /// _string_,
8919 /// @return The altitude in meters where the current picture was taken.
8920 /// @note This is the value of the EXIF GPSInfo.GPSAltitude tag.
8921 /// <p>
8922 /// }
8923 /// \table_row3{ <b>`Slideshow.Aperture`</b>,
8924 /// \anchor Slideshow_Aperture
8925 /// _string_,
8926 /// @return The F-stop used to take the current picture.
8927 /// @note This is the value of the EXIF FNumber tag (hex code 0x829D).
8928 /// <p>
8929 /// }
8930 /// \table_row3{ <b>`Slideshow.Author`</b>,
8931 /// \anchor Slideshow_Author
8932 /// _string_,
8933 /// @return The name of the person involved in writing about the current
8934 /// picture.
8935 /// @note This is the value of the IPTC Writer tag (hex code 0x7A).
8936 /// <p><hr>
8937 /// @skinning_v13 **[New Infolabel]** \link Slideshow_Author `Slideshow.Author`\endlink
8938 /// <p>
8939 /// }
8940 /// \table_row3{ <b>`Slideshow.Byline`</b>,
8941 /// \anchor Slideshow_Byline
8942 /// _string_,
8943 /// @return The name of the person who created the current picture.
8944 /// @note This is the value of the IPTC Byline tag (hex code 0x50).
8945 /// <p><hr>
8946 /// @skinning_v13 **[New Infolabel]** \link Slideshow_Byline `Slideshow.Byline`\endlink
8947 /// <p>
8948 /// }
8949 /// \table_row3{ <b>`Slideshow.BylineTitle`</b>,
8950 /// \anchor Slideshow_BylineTitle
8951 /// _string_,
8952 /// @return The title of the person who created the current picture.
8953 /// @note This is the value of the IPTC BylineTitle tag (hex code 0x55).
8954 /// <p><hr>
8955 /// @skinning_v13 **[New Infolabel]** \link Slideshow_BylineTitle `Slideshow.BylineTitle`\endlink
8956 /// <p>
8957 /// }
8958 /// \table_row3{ <b>`Slideshow.CameraMake`</b>,
8959 /// \anchor Slideshow_CameraMake
8960 /// _string_,
8961 /// @return The manufacturer of the camera used to take the current picture.
8962 /// @note This is the value of the EXIF Make tag (hex code 0x010F).
8963 /// <p>
8964 /// }
8965 /// \table_row3{ <b>`Slideshow.CameraModel`</b>,
8966 /// \anchor Slideshow_CameraModel
8967 /// _string_,
8968 /// @return The manufacturer's model name or number of the camera used to take
8969 /// the current picture.
8970 /// @note This is the value of the EXIF Model tag (hex code 0x0110).
8971 /// <p>
8972 /// }
8973 /// \table_row3{ <b>`Slideshow.Caption`</b>,
8974 /// \anchor Slideshow_Caption
8975 /// _string_,
8976 /// @return A description of the current picture.
8977 /// @note This is the value of the IPTC Caption tag (hex code 0x78).
8978 /// <p>
8979 /// }
8980 /// \table_row3{ <b>`Slideshow.Category`</b>,
8981 /// \anchor Slideshow_Category
8982 /// _string_,
8983 /// @return The subject of the current picture as a category code.
8984 /// @note This is the value of the IPTC Category tag (hex code 0x0F).
8985 /// <p><hr>
8986 /// @skinning_v13 **[New Infolabel]** \link Slideshow_Category `Slideshow.Category`\endlink
8987 /// <p>
8988 /// }
8989 /// \table_row3{ <b>`Slideshow.CCDWidth`</b>,
8990 /// \anchor Slideshow_CCDWidth
8991 /// _string_,
8992 /// @return The width of the CCD in the camera used to take the current
8993 /// picture.
8994 /// @note This is calculated from three EXIF tags (0xA002 * 0xA210 / 0xA20e).
8995 /// <p><hr>
8996 /// @skinning_v13 **[New Infolabel]** \link Slideshow_CCDWidth `Slideshow.CCDWidth`\endlink
8997 /// <p>
8998 /// }
8999 /// \table_row3{ <b>`Slideshow.City`</b>,
9000 /// \anchor Slideshow_City
9001 /// _string_,
9002 /// @return The city where the current picture was taken.
9003 /// @note This is the value of the IPTC City tag (hex code 0x5A).
9004 /// <p><hr>
9005 /// @skinning_v13 **[New Infolabel]** \link Slideshow_City `Slideshow.City`\endlink
9006 /// <p>
9007 /// }
9008 /// \table_row3{ <b>`Slideshow.Colour`</b>,
9009 /// \anchor Slideshow_Colour
9010 /// _string_,
9011 /// @return the colour of the picture. It can have one of the following values:
9012 /// - <b>"Colour"</b>
9013 /// - <b>"Black and White"</b>
9014 /// <p><hr>
9015 /// @skinning_v13 **[New Infolabel]** \link Slideshow_Colour `Slideshow.Colour`\endlink
9016 /// <p>
9017 /// }
9018 /// \table_row3{ <b>`Slideshow.CopyrightNotice`</b>,
9019 /// \anchor Slideshow_CopyrightNotice
9020 /// _string_,
9021 /// @return The copyright notice of the current picture.
9022 /// @note This is the value of the IPTC Copyright tag (hex code 0x74).
9023 /// <p><hr>
9024 /// @skinning_v13 **[New Infolabel]** \link Slideshow_CopyrightNotice `Slideshow.CopyrightNotice`\endlink
9025 /// <p>
9026 /// }
9027 /// \table_row3{ <b>`Slideshow.Country`</b>,
9028 /// \anchor Slideshow_Country
9029 /// _string_,
9030 /// @return The full name of the country where the current picture was taken.
9031 /// @note This is the value of the IPTC CountryName tag (hex code 0x65).
9032 /// <p><hr>
9033 /// @skinning_v13 **[New Infolabel]** \link Slideshow_Country `Slideshow.Country`\endlink
9034 /// <p>
9035 /// }
9036 /// \table_row3{ <b>`Slideshow.CountryCode`</b>,
9037 /// \anchor Slideshow_CountryCode
9038 /// _string_,
9039 /// @return The country code of the country where the current picture was
9040 /// taken.
9041 /// @note This is the value of the IPTC CountryCode tag (hex code 0x64).
9042 /// <p><hr>
9043 /// @skinning_v13 **[New Infolabel]** \link Slideshow_CountryCode `Slideshow.CountryCode`\endlink
9044 /// <p>
9045 /// }
9046 /// \table_row3{ <b>`Slideshow.Credit`</b>,
9047 /// \anchor Slideshow_Credit
9048 /// _string_,
9049 /// @return Who provided the current picture.
9050 /// @note This is the value of the IPTC Credit tag (hex code 0x6E).
9051 /// <p><hr>
9052 /// @skinning_v13 **[New Infolabel]** \link Slideshow_Credit `Slideshow.Credit`\endlink
9053 /// <p>
9054 /// }
9055 /// \table_row3{ <b>`Slideshow.DigitalZoom`</b>,
9056 /// \anchor Slideshow_DigitalZoom
9057 /// _string_,
9058 /// @return The digital zoom ratio when the current picture was taken.
9059 /// @note This is the value of the EXIF .DigitalZoomRatio tag (hex code 0xA404).
9060 /// <p><hr>
9061 /// @skinning_v13 **[New Infolabel]** \link Slideshow_DigitalZoom `Slideshow.DigitalZoom`\endlink
9062 /// <p>
9063 /// }
9064 /// \table_row3{ <b>`Slideshow.EXIFComment`</b>,
9065 /// \anchor Slideshow_EXIFComment
9066 /// _string_,
9067 /// @return A description of the current picture.
9068 /// @note This is the value of the EXIF User Comment tag (hex code 0x9286).
9069 /// This is the same value as \ref Slideshow_SlideComment "Slideshow.SlideComment".
9070 /// <p>
9071 /// }
9072 /// \table_row3{ <b>`Slideshow.EXIFDate`</b>,
9073 /// \anchor Slideshow_EXIFDate
9074 /// _string_,
9075 /// @return The localized date of the current picture. The short form of the
9076 /// date is used.
9077 /// @note The value of the EXIF DateTimeOriginal tag (hex code
9078 /// 0x9003) is preferred. If the DateTimeOriginal tag is not found\, the
9079 /// value of DateTimeDigitized (hex code 0x9004) or of DateTime (hex code
9080 /// 0x0132) might be used.
9081 /// <p><hr>
9082 /// @skinning_v13 **[New Infolabel]** \link Slideshow_EXIFDate `Slideshow.EXIFDate`\endlink
9083 /// <p>
9084 /// }
9085 /// \table_row3{ <b>`Slideshow.EXIFDescription`</b>,
9086 /// \anchor Slideshow_EXIFDescription
9087 /// _string_,
9088 /// @return A short description of the current picture. The SlideComment\,
9089 /// EXIFComment or Caption values might contain a longer description.
9090 /// @note This is the value of the EXIF ImageDescription tag (hex code 0x010E).
9091 /// <p>
9092 /// }
9093 /// \table_row3{ <b>`Slideshow.EXIFSoftware`</b>,
9094 /// \anchor Slideshow_EXIFSoftware
9095 /// _string_,
9096 /// @return The name and version of the firmware used by the camera that took
9097 /// the current picture.
9098 /// @note This is the value of the EXIF Software tag (hex code 0x0131).
9099 /// <p>
9100 /// }
9101 /// \table_row3{ <b>`Slideshow.EXIFTime`</b>,
9102 /// \anchor Slideshow_EXIFTime
9103 /// _string_,
9104 /// @return The date/timestamp of the current picture. The localized short
9105 /// form of the date and time is used.
9106 /// @note The value of the EXIF DateTimeOriginal tag (hex code 0x9003) is
9107 /// preferred. If the DateTimeOriginal tag is not found\, the value of
9108 /// DateTimeDigitized (hex code 0x9004) or of DateTime (hex code 0x0132)
9109 /// might be used.
9110 /// <p>
9111 /// }
9112 /// \table_row3{ <b>`Slideshow.Exposure`</b>,
9113 /// \anchor Slideshow_Exposure
9114 /// _string_,
9115 /// @return The class of the program used by the camera to set exposure when
9116 /// the current picture was taken. Values include:
9117 /// - <b>"Manual"</b>
9118 /// - <b>"Program (Auto)"</b>
9119 /// - <b>"Aperture priority (Semi-Auto)"</b>
9120 /// - <b>"Shutter priority (semi-auto)"</b>
9121 /// - etc...
9122 /// @note This is the value of the EXIF ExposureProgram tag
9123 /// (hex code 0x8822).
9124 /// <p><hr>
9125 /// @skinning_v13 **[New Infolabel]** \link Slideshow_Exposure `Slideshow.Exposure`\endlink
9126 /// <p>
9127 /// }
9128 /// \table_row3{ <b>`Slideshow.ExposureBias`</b>,
9129 /// \anchor Slideshow_ExposureBias
9130 /// _string_,
9131 /// @return The exposure bias of the current picture. Typically this is a
9132 /// number between -99.99 and 99.99.
9133 /// @note This is the value of the EXIF ExposureBiasValue tag (hex code 0x9204).
9134 /// <p><hr>
9135 /// @skinning_v13 **[New Infolabel]** \link Slideshow_ExposureBias `Slideshow.ExposureBias`\endlink
9136 /// <p>
9137 /// }
9138 /// \table_row3{ <b>`Slideshow.ExposureMode`</b>,
9139 /// \anchor Slideshow_ExposureMode
9140 /// _string_,
9141 /// @return The exposure mode of the current picture. The possible values are:
9142 /// - <b>"Automatic"</b>
9143 /// - <b>"Manual"</b>
9144 /// - <b>"Auto bracketing"</b>
9145 /// @note This is the value of the EXIF ExposureMode tag (hex code 0xA402).
9146 /// <p>
9147 /// }
9148 /// \table_row3{ <b>`Slideshow.ExposureTime`</b>,
9149 /// \anchor Slideshow_ExposureTime
9150 /// _string_,
9151 /// @return The exposure time of the current picture\, in seconds.
9152 /// @note This is the value of the EXIF ExposureTime tag (hex code 0x829A).
9153 /// If the ExposureTime tag is not found\, the ShutterSpeedValue tag (hex code
9154 /// 0x9201) might be used.
9155 /// <p>
9156 /// }
9157 /// \table_row3{ <b>`Slideshow.Filedate`</b>,
9158 /// \anchor Slideshow_Filedate
9159 /// _string_,
9160 /// @return The file date of the current picture.
9161 /// <p>
9162 /// }
9163 /// \table_row3{ <b>`Slideshow.Filename`</b>,
9164 /// \anchor Slideshow_Filename
9165 /// _string_,
9166 /// @return The file name of the current picture.
9167 /// <p>
9168 /// }
9169 /// \table_row3{ <b>`Slideshow.Filesize`</b>,
9170 /// \anchor Slideshow_Filesize
9171 /// _string_,
9172 /// @return The file size of the current picture.
9173 /// <p>
9174 /// }
9175 /// \table_row3{ <b>`Slideshow.FlashUsed`</b>,
9176 /// \anchor Slideshow_FlashUsed
9177 /// _string_,
9178 /// @return The status of flash when the current picture was taken. The value
9179 /// will be either <b>"Yes"</b> or <b>"No"</b>\, and might include additional information.
9180 /// @note This is the value of the EXIF Flash tag (hex code 0x9209).
9181 /// <p><hr>
9182 /// @skinning_v13 **[New Infolabel]** \link Slideshow_FlashUsed `Slideshow.FlashUsed`\endlink
9183 /// <p>
9184 /// }
9185 /// \table_row3{ <b>`Slideshow.FocalLength`</b>,
9186 /// \anchor Slideshow_FocalLength
9187 /// _string_,
9188 /// @return The focal length of the lens\, in mm.
9189 /// @note This is the value of the EXIF FocalLength tag (hex code 0x920A).
9190 /// <p>
9191 /// }
9192 /// \table_row3{ <b>`Slideshow.FocusDistance`</b>,
9193 /// \anchor Slideshow_FocusDistance
9194 /// _string_,
9195 /// @return The distance to the subject\, in meters.
9196 /// @note This is the value of the EXIF SubjectDistance tag (hex code 0x9206).
9197 /// <p>
9198 /// }
9199 /// \table_row3{ <b>`Slideshow.Headline`</b>,
9200 /// \anchor Slideshow_Headline
9201 /// _string_,
9202 /// @return A synopsis of the contents of the current picture.
9203 /// @note This is the value of the IPTC Headline tag (hex code 0x69).
9204 /// <p><hr>
9205 /// @skinning_v13 **[New Infolabel]** \link Slideshow_Headline `Slideshow.Headline`\endlink
9206 /// <p>
9207 /// }
9208 /// \table_row3{ <b>`Slideshow.ImageType`</b>,
9209 /// \anchor Slideshow_ImageType
9210 /// _string_,
9211 /// @return The color components of the current picture.
9212 /// @note This is the value of the IPTC ImageType tag (hex code 0x82).
9213 /// <p><hr>
9214 /// @skinning_v13 **[New Infolabel]** \link Slideshow_ImageType `Slideshow.ImageType`\endlink
9215 /// <p>
9216 /// }
9217 /// \table_row3{ <b>`Slideshow.IPTCDate`</b>,
9218 /// \anchor Slideshow_IPTCDate
9219 /// _string_,
9220 /// @return The date when the intellectual content of the current picture was
9221 /// created\, rather than when the picture was created.
9222 /// @note This is the value of the IPTC DateCreated tag (hex code 0x37).
9223 /// <p>
9224 /// }
9225 /// \table_row3{ <b>`Slideshow.ISOEquivalence`</b>,
9226 /// \anchor Slideshow_ISOEquivalence
9227 /// _string_,
9228 /// @return The ISO speed of the camera when the current picture was taken.
9229 /// @note This is the value of the EXIF ISOSpeedRatings tag (hex code 0x8827).
9230 /// <p>
9231 /// }
9232 /// \table_row3{ <b>`Slideshow.Keywords`</b>,
9233 /// \anchor Slideshow_Keywords
9234 /// _string_,
9235 /// @return The keywords assigned to the current picture.
9236 /// @note This is the value of the IPTC Keywords tag (hex code 0x19).
9237 /// <p>
9238 /// }
9239 /// \table_row3{ <b>`Slideshow.Latitude`</b>,
9240 /// \anchor Slideshow_Latitude
9241 /// _string_,
9242 /// @return The latitude where the current picture was taken (degrees\,
9243 /// minutes\, seconds North or South).
9244 /// @note This is the value of the EXIF GPSInfo.GPSLatitude and
9245 /// GPSInfo.GPSLatitudeRef tags.
9246 /// <p>
9247 /// }
9248 /// \table_row3{ <b>`Slideshow.LightSource`</b>,
9249 /// \anchor Slideshow_LightSource
9250 /// _string_,
9251 /// @return The kind of light source when the picture was taken. Possible
9252 /// values include:
9253 /// - <b>"Daylight"</b>
9254 /// - <b>"Fluorescent"</b>
9255 /// - <b>"Incandescent"</b>
9256 /// - etc...
9257 /// @note This is the value of the EXIF LightSource tag (hex code 0x9208).
9258 /// <p><hr>
9259 /// @skinning_v13 **[New Infolabel]** \link Slideshow_LightSource `Slideshow.LightSource`\endlink
9260 /// <p>
9261 /// }
9262 /// \table_row3{ <b>`Slideshow.LongEXIFDate`</b>,
9263 /// \anchor Slideshow_LongEXIFDate
9264 /// _string_,
9265 /// @return Only the localized date of the current picture. The long form of
9266 /// the date is used.
9267 /// @note The value of the EXIF DateTimeOriginal tag (hex code
9268 /// 0x9003) is preferred. If the DateTimeOriginal tag is not found\, the
9269 /// value of DateTimeDigitized (hex code 0x9004) or of DateTime (hex code
9270 /// 0x0132) might be used.
9271 /// <p><hr>
9272 /// @skinning_v13 **[New Infolabel]** \link Slideshow_LongEXIFDate `Slideshow.LongEXIFDate`\endlink
9273 /// <p>
9274 /// }
9275 /// \table_row3{ <b>`Slideshow.LongEXIFTime`</b>,
9276 /// \anchor Slideshow_LongEXIFTime
9277 /// _string_,
9278 /// @return The date/timestamp of the current picture. The localized long form
9279 /// of the date and time is used.
9280 /// @note The value of the EXIF DateTimeOriginal tag
9281 /// (hex code 0x9003) is preferred. if the DateTimeOriginal tag is not found\,
9282 /// the value of DateTimeDigitized (hex code 0x9004) or of DateTime (hex
9283 /// code 0x0132) might be used.
9284 /// <p><hr>
9285 /// @skinning_v13 **[New Infolabel]** \link Slideshow_LongEXIFTime `Slideshow.LongEXIFTime`\endlink
9286 /// <p>
9287 /// }
9288 /// \table_row3{ <b>`Slideshow.Longitude`</b>,
9289 /// \anchor Slideshow_Longitude
9290 /// _string_,
9291 /// @return The longitude where the current picture was taken (degrees\,
9292 /// minutes\, seconds East or West).
9293 /// @note This is the value of the EXIF GPSInfo.GPSLongitude and
9294 /// GPSInfo.GPSLongitudeRef tags.
9295 /// <p>
9296 /// }
9297 /// \table_row3{ <b>`Slideshow.MeteringMode`</b>,
9298 /// \anchor Slideshow_MeteringMode
9299 /// _string_,
9300 /// @return The metering mode used when the current picture was taken. The
9301 /// possible values are:
9302 /// - <b>"Center weight"</b>
9303 /// - <b>"Spot"</b>
9304 /// - <b>"Matrix"</b>
9305 /// @note This is the value of the EXIF MeteringMode tag (hex code 0x9207).
9306 /// <p><hr>
9307 /// @skinning_v13 **[New Infolabel]** \link Slideshow_MeteringMode `Slideshow.MeteringMode`\endlink
9308 /// <p>
9309 /// }
9310 /// \table_row3{ <b>`Slideshow.ObjectName`</b>,
9311 /// \anchor Slideshow_ObjectName
9312 /// _string_,
9313 /// @return a shorthand reference for the current picture.
9314 /// @note This is the value of the IPTC ObjectName tag (hex code 0x05).
9315 /// <p><hr>
9316 /// @skinning_v13 **[New Infolabel]** \link Slideshow_ObjectName `Slideshow.ObjectName`\endlink
9317 /// <p>
9318 /// }
9319 /// \table_row3{ <b>`Slideshow.Orientation`</b>,
9320 /// \anchor Slideshow_Orientation
9321 /// _string_,
9322 /// @return The orientation of the current picture. Possible values are:
9323 /// - <b>"Top Left"</b>
9324 /// - <b>"Top Right"</b>
9325 /// - <b>"Left Top"</b>
9326 /// - <b>"Right Bottom"</b>
9327 /// - etc...
9328 /// @note This is the value of the EXIF Orientation tag (hex code 0x0112).
9329 /// <p><hr>
9330 /// @skinning_v13 **[New Infolabel]** \link Slideshow_Orientation `Slideshow.Orientation`\endlink
9331 /// <p>
9332 /// }
9333 /// \table_row3{ <b>`Slideshow.Path`</b>,
9334 /// \anchor Slideshow_Path
9335 /// _string_,
9336 /// @return The file path of the current picture.
9337 /// <p>
9338 /// }
9339 /// \table_row3{ <b>`Slideshow.Process`</b>,
9340 /// \anchor Slideshow_Process
9341 /// _string_,
9342 /// @return The process used to compress the current picture.
9343 /// <p><hr>
9344 /// @skinning_v13 **[New Infolabel]** \link Slideshow_Process `Slideshow.Process`\endlink
9345 /// <p>
9346 /// }
9347 /// \table_row3{ <b>`Slideshow.ReferenceService`</b>,
9348 /// \anchor Slideshow_ReferenceService
9349 /// _string_,
9350 /// @return The Service Identifier of a prior envelope to which the current
9351 /// picture refers.
9352 /// @note This is the value of the IPTC ReferenceService tag (hex code 0x2D).
9353 /// <p><hr>
9354 /// @skinning_v13 **[New Infolabel]** \link Slideshow_ReferenceService `Slideshow.ReferenceService`\endlink
9355 /// <p>
9356 /// }
9357 /// \table_row3{ <b>`Slideshow.Resolution`</b>,
9358 /// \anchor Slideshow_Resolution
9359 /// _string_,
9360 /// @return The dimensions of the current picture (Width x Height)
9361 /// <p>
9362 /// }
9363 /// \table_row3{ <b>`Slideshow.SlideComment`</b>,
9364 /// \anchor Slideshow_SlideComment
9365 /// _string_,
9366 /// @return A description of the current picture.
9367 /// @note This is the value of the EXIF User Comment tag (hex code 0x9286).
9368 /// This is the same value as \ref Slideshow_EXIFComment "Slideshow.EXIFComment".
9369 /// <p>
9370 /// }
9371 /// \table_row3{ <b>`Slideshow.SlideIndex`</b>,
9372 /// \anchor Slideshow_SlideIndex
9373 /// _string_,
9374 /// @return The slide index of the current picture.
9375 /// <p>
9376 /// }
9377 /// \table_row3{ <b>`Slideshow.Source`</b>,
9378 /// \anchor Slideshow_Source
9379 /// _string_,
9380 /// @return The original owner of the current picture.
9381 /// @note This is the value of the IPTC Source tag (hex code 0x73).
9382 /// <p><hr>
9383 /// @skinning_v13 **[New Infolabel]** \link Slideshow_Source `Slideshow.Source`\endlink
9384 /// <p>
9385 /// }
9386 /// \table_row3{ <b>`Slideshow.SpecialInstructions`</b>,
9387 /// \anchor Slideshow_SpecialInstructions
9388 /// _string_,
9389 /// @return Other editorial instructions concerning the use of the current
9390 /// picture.
9391 /// @note This is the value of the IPTC SpecialInstructions tag (hex code 0x28).
9392 /// <p><hr>
9393 /// @skinning_v13 **[New Infolabel]** \link Slideshow_SpecialInstructions `Slideshow.SpecialInstructions`\endlink
9394 /// <p>
9395 /// }
9396 /// \table_row3{ <b>`Slideshow.State`</b>,
9397 /// \anchor Slideshow_State
9398 /// _string_,
9399 /// @return The State/Province where the current picture was taken.
9400 /// @note This is the value of the IPTC ProvinceState tag (hex code 0x5F).
9401 /// <p><hr>
9402 /// @skinning_v13 **[New Infolabel]** \link Slideshow_State `Slideshow.State`\endlink
9403 /// <p>
9404 /// }
9405 /// \table_row3{ <b>`Slideshow.Sublocation`</b>,
9406 /// \anchor Slideshow_Sublocation
9407 /// _string_,
9408 /// @return The location within a city where the current picture was taken -
9409 /// might indicate the nearest landmark.
9410 /// @note This is the value of the IPTC SubLocation tag (hex code 0x5C).
9411 /// <p><hr>
9412 /// @skinning_v13 **[New Infolabel]** \link Slideshow_Sublocation `Slideshow.Sublocation`\endlink
9413 /// <p>
9414 /// }
9415 /// \table_row3{ <b>`Slideshow.SupplementalCategories`</b>,
9416 /// \anchor Slideshow_SupplementalCategories
9417 /// _string_,
9418 /// @return The supplemental category codes to further refine the subject of the
9419 /// current picture.
9420 /// @note This is the value of the IPTC SuppCategory tag (hex
9421 /// code 0x14).
9422 /// <p><hr>
9423 /// @skinning_v13 **[New Infolabel]** \link Slideshow_SupplementalCategories `Slideshow.SupplementalCategories`\endlink
9424 /// <p>
9425 /// }
9426 /// \table_row3{ <b>`Slideshow.TimeCreated`</b>,
9427 /// \anchor Slideshow_TimeCreated
9428 /// _string_,
9429 /// @return The time when the intellectual content of the current picture was
9430 /// created\, rather than when the picture was created.
9431 /// @note This is the value of the IPTC TimeCreated tag (hex code 0x3C).
9432 /// <p><hr>
9433 /// @skinning_v13 **[New Infolabel]** \link Slideshow_TimeCreated `Slideshow.TimeCreated`\endlink
9434 /// <p>
9435 /// }
9436 /// \table_row3{ <b>`Slideshow.TransmissionReference`</b>,
9437 /// \anchor Slideshow_TransmissionReference
9438 /// _string_,
9439 /// @return A code representing the location of original transmission of the
9440 /// current picture.
9441 /// @note This is the value of the IPTC TransmissionReference tag
9442 /// (hex code 0x67).
9443 /// <p><hr>
9444 /// @skinning_v13 **[New Infolabel]** \link Slideshow_TransmissionReference `Slideshow.TransmissionReference`\endlink
9445 /// <p>
9446 /// }
9447 /// \table_row3{ <b>`Slideshow.Urgency`</b>,
9448 /// \anchor Slideshow_Urgency
9449 /// _string_,
9450 /// @return The urgency of the current picture. Values are 1-9. The 1 is most
9451 /// urgent.
9452 /// @note Some image management programs use urgency to indicate picture
9453 /// rating\, where urgency 1 is 5 stars and urgency 5 is 1 star. Urgencies
9454 /// 6-9 are not used for rating. This is the value of the IPTC Urgency tag
9455 /// (hex code 0x0A).
9456 /// <p><hr>
9457 /// @skinning_v13 **[New Infolabel]** \link Slideshow_Urgency `Slideshow.Urgency`\endlink
9458 /// <p>
9459 /// }
9460 /// \table_row3{ <b>`Slideshow.WhiteBalance`</b>,
9461 /// \anchor Slideshow_WhiteBalance
9462 /// _string_,
9463 /// @return The white balance mode set when the current picture was taken.
9464 /// The possible values are:
9465 /// - <b>"Manual"</b>
9466 /// - <b>"Auto"</b>
9467 /// <p>
9468 /// @note This is the value of the EXIF WhiteBalance tag (hex code 0xA403).
9469 /// <p><hr>
9470 /// @skinning_v13 **[New Infolabel]** \link Slideshow_WhiteBalance `Slideshow.WhiteBalance`\endlink
9471 /// <p>
9472 /// }
9473 /// \table_end
9475 /// -----------------------------------------------------------------------------
9476 const infomap slideshow[] = {{ "ispaused", SLIDESHOW_ISPAUSED },
9477 { "isactive", SLIDESHOW_ISACTIVE },
9478 { "isvideo", SLIDESHOW_ISVIDEO },
9479 { "israndom", SLIDESHOW_ISRANDOM },
9480 { "filename", SLIDESHOW_FILE_NAME },
9481 { "path", SLIDESHOW_FILE_PATH },
9482 { "filesize", SLIDESHOW_FILE_SIZE },
9483 { "filedate", SLIDESHOW_FILE_DATE },
9484 { "slideindex", SLIDESHOW_INDEX },
9485 { "resolution", SLIDESHOW_RESOLUTION },
9486 { "slidecomment", SLIDESHOW_COMMENT },
9487 { "colour", SLIDESHOW_COLOUR },
9488 { "process", SLIDESHOW_PROCESS },
9489 { "exiftime", SLIDESHOW_EXIF_DATE_TIME },
9490 { "exifdate", SLIDESHOW_EXIF_DATE },
9491 { "longexiftime", SLIDESHOW_EXIF_LONG_DATE_TIME },
9492 { "longexifdate", SLIDESHOW_EXIF_LONG_DATE },
9493 { "exifdescription", SLIDESHOW_EXIF_DESCRIPTION },
9494 { "cameramake", SLIDESHOW_EXIF_CAMERA_MAKE },
9495 { "cameramodel", SLIDESHOW_EXIF_CAMERA_MODEL },
9496 { "exifcomment", SLIDESHOW_EXIF_COMMENT },
9497 { "exifsoftware", SLIDESHOW_EXIF_SOFTWARE },
9498 { "aperture", SLIDESHOW_EXIF_APERTURE },
9499 { "focallength", SLIDESHOW_EXIF_FOCAL_LENGTH },
9500 { "focusdistance", SLIDESHOW_EXIF_FOCUS_DIST },
9501 { "exposure", SLIDESHOW_EXIF_EXPOSURE },
9502 { "exposuretime", SLIDESHOW_EXIF_EXPOSURE_TIME },
9503 { "exposurebias", SLIDESHOW_EXIF_EXPOSURE_BIAS },
9504 { "exposuremode", SLIDESHOW_EXIF_EXPOSURE_MODE },
9505 { "flashused", SLIDESHOW_EXIF_FLASH_USED },
9506 { "whitebalance", SLIDESHOW_EXIF_WHITE_BALANCE },
9507 { "lightsource", SLIDESHOW_EXIF_LIGHT_SOURCE },
9508 { "meteringmode", SLIDESHOW_EXIF_METERING_MODE },
9509 { "isoequivalence", SLIDESHOW_EXIF_ISO_EQUIV },
9510 { "digitalzoom", SLIDESHOW_EXIF_DIGITAL_ZOOM },
9511 { "ccdwidth", SLIDESHOW_EXIF_CCD_WIDTH },
9512 { "orientation", SLIDESHOW_EXIF_ORIENTATION },
9513 { "supplementalcategories", SLIDESHOW_IPTC_SUP_CATEGORIES },
9514 { "keywords", SLIDESHOW_IPTC_KEYWORDS },
9515 { "caption", SLIDESHOW_IPTC_CAPTION },
9516 { "author", SLIDESHOW_IPTC_AUTHOR },
9517 { "headline", SLIDESHOW_IPTC_HEADLINE },
9518 { "specialinstructions", SLIDESHOW_IPTC_SPEC_INSTR },
9519 { "category", SLIDESHOW_IPTC_CATEGORY },
9520 { "byline", SLIDESHOW_IPTC_BYLINE },
9521 { "bylinetitle", SLIDESHOW_IPTC_BYLINE_TITLE },
9522 { "credit", SLIDESHOW_IPTC_CREDIT },
9523 { "source", SLIDESHOW_IPTC_SOURCE },
9524 { "copyrightnotice", SLIDESHOW_IPTC_COPYRIGHT_NOTICE },
9525 { "objectname", SLIDESHOW_IPTC_OBJECT_NAME },
9526 { "city", SLIDESHOW_IPTC_CITY },
9527 { "state", SLIDESHOW_IPTC_STATE },
9528 { "country", SLIDESHOW_IPTC_COUNTRY },
9529 { "transmissionreference", SLIDESHOW_IPTC_TX_REFERENCE },
9530 { "iptcdate", SLIDESHOW_IPTC_DATE },
9531 { "urgency", SLIDESHOW_IPTC_URGENCY },
9532 { "countrycode", SLIDESHOW_IPTC_COUNTRY_CODE },
9533 { "referenceservice", SLIDESHOW_IPTC_REF_SERVICE },
9534 { "latitude", SLIDESHOW_EXIF_GPS_LATITUDE },
9535 { "longitude", SLIDESHOW_EXIF_GPS_LONGITUDE },
9536 { "altitude", SLIDESHOW_EXIF_GPS_ALTITUDE },
9537 { "timecreated", SLIDESHOW_IPTC_TIMECREATED },
9538 { "sublocation", SLIDESHOW_IPTC_SUBLOCATION },
9539 { "imagetype", SLIDESHOW_IPTC_IMAGETYPE },
9542 /// \page modules__infolabels_boolean_conditions
9543 /// \subsection modules__infolabels_boolean_conditions_Library Library
9544 /// @todo Make this annotate an array of infobools/labels to make it easier to track
9545 /// \table_start
9546 /// \table_h3{ Labels, Type, Description }
9547 /// \table_row3{ <b>`Library.IsScanning`</b>,
9548 /// \anchor Library_IsScanning
9549 /// _boolean_,
9550 /// @return **True** if the library is being scanned.
9551 /// <p>
9552 /// }
9553 /// \table_row3{ <b>`Library.IsScanningVideo`</b>,
9554 /// \anchor Library_IsScanningVideo
9555 /// _boolean_,
9556 /// @return **True** if the video library is being scanned.
9557 /// <p>
9558 /// }
9559 /// \table_row3{ <b>`Library.IsScanningMusic`</b>,
9560 /// \anchor Library_IsScanningMusic
9561 /// _boolean_,
9562 /// @return **True** if the music library is being scanned.
9563 /// <p>
9564 /// }
9565 /// \table_row3{ <b>`Library.HasContent(music)`</b>,
9566 /// \anchor Library_HasContent_Music
9567 /// _boolean_,
9568 /// @return **True** if the library has music content.
9569 /// <p>
9570 /// }
9571 /// \table_row3{ <b>`Library.HasContent(video)`</b>,
9572 /// \anchor Library_HasContent_Video
9573 /// _boolean_,
9574 /// @return **True** if the library has video content.
9575 /// <p>
9576 /// }
9577 /// \table_row3{ <b>`Library.HasContent(movies)`</b>,
9578 /// \anchor Library_HasContent_Movies
9579 /// _boolean_,
9580 /// @return **True** if the library has movies.
9581 /// <p>
9582 /// }
9583 /// \table_row3{ <b>`Library.HasContent(tvshows)`</b>,
9584 /// \anchor Library_HasContent_TVShows
9585 /// _boolean_,
9586 /// @return **True** if the library has tvshows.
9587 /// <p>
9588 /// }
9589 /// \table_row3{ <b>`Library.HasContent(musicvideos)`</b>,
9590 /// \anchor Library_HasContent_MusicVideos
9591 /// _boolean_,
9592 /// @return **True** if the library has music videos.
9593 /// <p>
9594 /// }
9595 /// \table_row3{ <b>`Library.HasContent(moviesets)`</b>,
9596 /// \anchor Library_HasContent_MovieSets
9597 /// _boolean_,
9598 /// @return **True** if the library has movie sets.
9599 /// <p>
9600 /// }
9601 /// \table_row3{ <b>`Library.HasContent(singles)`</b>,
9602 /// \anchor Library_HasContent_Singles
9603 /// _boolean_,
9604 /// @return **True** if the library has singles.
9605 /// <p>
9606 /// }
9607 /// \table_row3{ <b>`Library.HasContent(compilations)`</b>,
9608 /// \anchor Library_HasContent_Compilations
9609 /// _boolean_,
9610 /// @return **True** if the library has compilations.
9611 /// <p>
9612 /// }
9613 /// \table_row3{ <b>`Library.HasContent(Role.Composer)`</b>,
9614 /// \anchor Library_HasContent_Role_Composer
9615 /// _boolean_,
9616 /// @return **True** if there are songs in the library which have composers.
9617 /// <p><hr>
9618 /// @skinning_v17 **[New Boolean Condition]** \link Library_HasContent_Role_Composer `Library.HasContent(Role.Composer)`\endlink
9619 /// <p>
9620 /// }
9621 /// \table_row3{ <b>`Library.HasContent(Role.Conductor)`</b>,
9622 /// \anchor Library_HasContent_Role_Conductor
9623 /// _boolean_,
9624 /// @return **True** if there are songs in the library which have a conductor.
9625 /// <p><hr>
9626 /// @skinning_v17 **[New Boolean Condition]** \link Library_HasContent_Role_Conductor `Library.HasContent(Role.Conductor)`\endlink
9627 /// <p>
9628 /// }
9629 /// \table_row3{ <b>`Library.HasContent(Role.Orchestra)`</b>,
9630 /// \anchor Library_HasContent_Role_Orchestra
9631 /// _boolean_,
9632 /// @return **True** if there are songs in the library which have an orchestra.
9633 /// <p><hr>
9634 /// @skinning_v17 **[New Boolean Condition]** \link Library_HasContent_Role_Orchestra `Library.HasContent(Role.Orchestra)`\endlink
9635 /// <p>
9636 /// }
9637 /// \table_row3{ <b>`Library.HasContent(Role.Lyricist)`</b>,
9638 /// \anchor Library_HasContent_Role_Lyricist
9639 /// _boolean_,
9640 /// @return **True** if there are songs in the library which have a lyricist.
9641 /// <p><hr>
9642 /// @skinning_v17 **[New Boolean Condition]** \link Library_HasContent_Role_Lyricist `Library.HasContent(Role.Lyricist)`\endlink
9643 /// <p>
9644 /// }
9645 /// \table_row3{ <b>`Library.HasContent(Role.Remixer)`</b>,
9646 /// \anchor Library_HasContent_Role_Remixer
9647 /// _boolean_,
9648 /// @return **True** if there are songs in the library which have a remixer.
9649 /// <p><hr>
9650 /// @skinning_v17 **[New Boolean Condition]** \link Library_HasContent_Role_Remixer `Library.HasContent(Role.Remixer)`\endlink
9651 /// <p>
9652 /// }
9653 /// \table_row3{ <b>`Library.HasContent(Role.Arranger)`</b>,
9654 /// \anchor Library_HasContent_Role_Remixer
9655 /// _boolean_,
9656 /// @return **True** if there are songs in the library which have an arranger.
9657 /// <p><hr>
9658 /// @skinning_v17 **[New Boolean Condition]** \link Library_HasContent_Role_Remixer `Library.HasContent(Role.Arranger)`\endlink
9659 /// <p>
9660 /// }
9661 /// \table_row3{ <b>`Library.HasContent(Role.Engineer)`</b>,
9662 /// \anchor Library_HasContent_Role_Engineer
9663 /// _boolean_,
9664 /// @return **True** if there are songs in the library which have an engineer.
9665 /// <p><hr>
9666 /// @skinning_v17 **[New Boolean Condition]** \link Library_HasContent_Role_Engineer `Library.HasContent(Role.Engineer)`\endlink
9667 /// <p>
9668 /// }
9669 /// \table_row3{ <b>`Library.HasContent(Role.Producer)`</b>,
9670 /// \anchor Library_HasContent_Role_Producer
9671 /// _boolean_,
9672 /// @return **True** if there are songs in the library which have an producer.
9673 /// <p><hr>
9674 /// @skinning_v17 **[New Boolean Condition]** \link Library_HasContent_Role_Producer `Library.HasContent(Role.Producer)`\endlink
9675 /// <p>
9676 /// }
9677 /// \table_row3{ <b>`Library.HasContent(Role.DJMixer)`</b>,
9678 /// \anchor Library_HasContent_Role_DJMixer
9679 /// _boolean_,
9680 /// @return **True** if there are songs in the library which have a DJMixer.
9681 /// <p><hr>
9682 /// @skinning_v17 **[New Boolean Condition]** \link Library_HasContent_Role_DJMixer `Library.HasContent(Role.DJMixer)`\endlink
9683 /// <p>
9684 /// }
9685 /// \table_row3{ <b>`Library.HasContent(Role.Mixer)`</b>,
9686 /// \anchor Library_HasContent_Role_Mixer
9687 /// _boolean_,
9688 /// @return **True** if there are songs in the library which have a mixer.
9689 /// <p><hr>
9690 /// @skinning_v17 **[New Boolean Condition]** \link Library_HasContent_Role_Mixer `Library.HasContent(Role.Mixer)`\endlink
9691 /// <p>
9692 /// }
9693 /// \table_row3{ <b>`Library.HasContent(boxsets)`</b>,
9694 /// \anchor Library_HasContent_Boxsets
9695 /// _boolean_,
9696 /// @return **True** if there are albums in the library which are boxsets.
9697 /// <p><hr>
9698 /// @skinning_v19 **[New Boolean Condition]** \link Library_HasContent_Boxsets `Library.HasContent(boxsets)`\endlink
9699 /// <p>
9700 /// }
9701 /// \table_row3{ <b>`Library.HasNode(path)`</b>,
9702 /// \anchor Library_HasNode
9703 /// _boolean_,
9704 /// @return **True** if there the node is present in the library.
9705 /// <p><hr>
9706 /// @skinning_v19 **[New Boolean Condition]** \link Library_HasNode `Library.HasNode(path)`\endlink
9707 /// <p>
9708 /// }
9709 /// \table_end
9711 /// -----------------------------------------------------------------------------
9713 /// \page modules__infolabels_boolean_conditions
9714 /// \section modules_rm_infolabels_booleans Additional revision history for Infolabels and Boolean Conditions
9715 /// <hr>
9716 /// \subsection modules_rm_infolabels_booleans_v20 Kodi v20 (Nexus)
9717 /// @skinning_v20 **[Removed Boolean conditions]** The following boolean conditions have been removed:
9718 /// - `Player.DisplayAfterSeek` - use \link Player_HasPerformedSeek `Player.HasPerformedSeek(interval)`\endlink instead
9720 /// <hr>
9721 /// \subsection modules_rm_infolabels_booleans_v19 Kodi v19 (Matrix)
9722 /// @skinning_v19 **[Removed Infolabels]** The following infolabels have been removed:
9723 /// - `System.Platform.Linux.RaspberryPi` - use \link System_Platform_Linux `System.Platform.Linux`\endlink instead
9725 /// <hr>
9726 /// \subsection modules_rm_infolabels_booleans_v18 Kodi v18 (Leia)
9728 /// @skinning_v18 **[Removed Infolabels]** The following infolabels have been removed:
9729 /// - `Listitem.Property(artistthumbs)`, `Listitem.Property(artistthumb)` - use
9730 /// \link ListItem_Art_Type `ListItem.Art(type)`\endlink with <b>albumartist[n].*</b> or <b>artist[n].*</b> as <b>type</b>
9731 /// - `ADSP.ActiveStreamType`
9732 /// - `ADSP.DetectedStreamType`
9733 /// - `ADSP.MasterName`
9734 /// - `ADSP.MasterInfo`
9735 /// - `ADSP.MasterOwnIcon`
9736 /// - `ADSP.MasterOverrideIcon`
9737 /// - `ListItem.ChannelNumber`, `ListItem.SubChannelNumber`, `MusicPlayer.ChannelNumber`,
9738 /// `MusicPlayer.SubChannelNumber`, `VideoPlayer.ChannelNumber`,
9739 /// `VideoPlayer.SubChannelNumber`. Please use the following alternatives
9740 /// \link ListItem_ChannelNumberLabel `ListItem.ChannelNumberLabel` \endlink,
9741 /// \link MusicPlayer_ChannelNumberLabel `MusicPlayer.ChannelNumberLabel` \endlink
9742 /// \link VideoPlayer_ChannelNumberLabel `VideoPlayer.ChannelNumberLabel` \endlink from now on.
9744 /// @skinning_v18 **[Removed Boolean Conditions]** The following infobools have been removed:
9745 /// - `System.HasModalDialog` - use \link System_HasActiveModalDialog `System.HasActiveModalDialog` \endlink and
9746 /// \link System_HasVisibleModalDialog `System.HasVisibleModalDialog`\endlink instead
9747 /// - `StringCompare()` - use \link String_IsEqual `String.IsEqual(info,string)`\endlink instead
9748 /// - `SubString()` - use \link String_Contains `String.Contains(info,substring)`\endlink instead
9749 /// - `IntegerGreaterThan()` - use \link Integer_IsGreater `Integer.IsGreater(info,number)`\endlink instead
9750 /// - `IsEmpty()` - use \link String_IsEmpty `String.IsEmpty(info)`\endlink instead
9751 /// - `System.HasADSP`
9752 /// - `ADSP.IsActive`
9753 /// - `ADSP.HasInputResample`
9754 /// - `ADSP.HasPreProcess`
9755 /// - `ADSP.HasMasterProcess`
9756 /// - `ADSP.HasPostProcess`
9757 /// - `ADSP.HasOutputResample`
9758 /// - `ADSP.MasterActive`
9759 /// <hr>
9760 /// \subsection modules_rm_infolabels_booleans_v17 Kodi v17 (Krypton)
9761 /// @skinning_v17 **[Removed Infolabels]** The following infolabels have been removed:
9762 /// - `ListItem.StarRating` - use the other ratings instead.
9764 /// @skinning_v17 **[Removed Boolean Conditions]** The following infobools have been removed:
9765 /// - `on` - use `true` instead
9766 /// - `off` - use `false` instead
9767 /// - `Player.ShowCodec`
9768 /// - `System.GetBool(pvrmanager.enabled)`
9769 /// <hr>
9770 /// \subsection modules_rm_infolabels_booleans_v16 Kodi v16 (Jarvis)
9771 /// @skinning_v16 **[New Boolean Conditions]** The following infobools were added:
9772 /// - `System.HasADSP`
9773 /// - `ADSP.IsActive`
9774 /// - `ADSP.HasInputResample`
9775 /// - `ADSP.HasPreProcess`
9776 /// - `ADSP.HasMasterProcess`
9777 /// - `ADSP.HasPostProcess`
9778 /// - `ADSP.HasOutputResample`
9779 /// - `ADSP.MasterActive`
9780 /// - `System.HasModalDialog`
9782 /// @skinning_v16 **[New Infolabels]** The following infolabels were added:
9783 /// - `ADSP.ActiveStreamType`
9784 /// - `ADSP.DetectedStreamType`
9785 /// - `ADSP.MasterName`
9786 /// - `ADSP.MasterInfo`
9787 /// - `ADSP.MasterOwnIcon`
9788 /// - `ADSP.MasterOverrideIcon`
9790 /// @skinning_v16 **[Removed Boolean Conditions]** The following infobols were removed:
9791 /// - `System.Platform.ATV2`
9793 /// <hr>
9794 /// \subsection modules_rm_infolabels_booleans_v15 Kodi v15 (Isengard)
9795 /// <hr>
9796 /// \subsection modules_rm_infolabels_booleans_v14 Kodi v14 (Helix)
9797 /// @skinning_v14 **[New Infolabels]** The following infolabels were added:
9798 /// - `ListItem.SubChannelNumber`
9799 /// - `MusicPlayer.SubChannelNumber`
9800 /// - `VideoPlayer.SubChannelNumber`
9802 /// <hr>
9803 /// \subsection modules_rm_infolabels_booleans_v13 XBMC v13 (Gotham)
9804 /// @skinning_v13 **[Removed Infolabels]** The following infolabels were removed:
9805 /// - `Network.SubnetAddress`
9807 /// <hr>
9808 // Crazy part, to use tableofcontents must it be on end
9809 /// \page modules__infolabels_boolean_conditions
9810 /// \tableofcontents
9812 CGUIInfoManager::Property::Property(const std::string &property, const std::string &parameters)
9813 : name(property)
9815 CUtil::SplitParams(parameters, params);
9818 const std::string &CGUIInfoManager::Property::param(unsigned int n /* = 0 */) const
9820 if (n < params.size())
9821 return params[n];
9822 return StringUtils::Empty;
9825 unsigned int CGUIInfoManager::Property::num_params() const
9827 return params.size();
9830 void CGUIInfoManager::SplitInfoString(const std::string &infoString, std::vector<Property> &info)
9832 // our string is of the form:
9833 // category[(params)][.info(params).info2(params)] ...
9834 // so we need to split on . while taking into account of () pairs
9835 unsigned int parentheses = 0;
9836 std::string property;
9837 std::string param;
9838 for (size_t i = 0; i < infoString.size(); ++i)
9840 if (infoString[i] == '(')
9842 if (!parentheses++)
9843 continue;
9845 else if (infoString[i] == ')')
9847 if (!parentheses)
9848 CLog::Log(LOGERROR, "unmatched parentheses in {}", infoString);
9849 else if (!--parentheses)
9850 continue;
9852 else if (infoString[i] == '.' && !parentheses)
9854 if (!property.empty()) // add our property and parameters
9856 StringUtils::ToLower(property);
9857 info.emplace_back(Property(property, param));
9859 property.clear();
9860 param.clear();
9861 continue;
9863 if (parentheses)
9864 param += infoString[i];
9865 else
9866 property += infoString[i];
9869 if (parentheses)
9870 CLog::Log(LOGERROR, "unmatched parentheses in {}", infoString);
9872 if (!property.empty())
9874 StringUtils::ToLower(property);
9875 info.emplace_back(Property(property, param));
9879 /// \brief Translates a string as given by the skin into an int that we use for more
9880 /// efficient retrieval of data.
9881 int CGUIInfoManager::TranslateSingleString(const std::string &strCondition)
9883 bool listItemDependent;
9884 return TranslateSingleString(strCondition, listItemDependent);
9887 int CGUIInfoManager::TranslateSingleString(const std::string &strCondition, bool &listItemDependent)
9889 /* We need to disable caching in INFO::InfoBool::Get if either of the following are true:
9890 * 1. if condition is between LISTITEM_START and LISTITEM_END
9891 * 2. if condition is string or integer the corresponding label is between LISTITEM_START and LISTITEM_END
9892 * This is achieved by setting the bool pointed at by listItemDependent, either here or in a recursive call
9894 // trim whitespaces
9895 std::string strTest = strCondition;
9896 StringUtils::Trim(strTest);
9898 std::vector< Property> info;
9899 SplitInfoString(strTest, info);
9901 if (info.empty())
9902 return 0;
9904 const Property &cat = info[0];
9905 if (info.size() == 1)
9906 { // single category
9907 if (cat.name == "false" || cat.name == "no")
9908 return SYSTEM_ALWAYS_FALSE;
9909 else if (cat.name == "true" || cat.name == "yes")
9910 return SYSTEM_ALWAYS_TRUE;
9912 else if (info.size() == 2)
9914 const Property &prop = info[1];
9915 if (cat.name == "string")
9917 if (prop.name == "isempty")
9919 return AddMultiInfo(CGUIInfo(STRING_IS_EMPTY, TranslateSingleString(prop.param(), listItemDependent)));
9921 else if (prop.num_params() == 2)
9923 for (const infomap& string_bool : string_bools)
9925 if (prop.name == string_bool.str)
9927 int data1 = TranslateSingleString(prop.param(0), listItemDependent);
9928 // pipe our original string through the localize parsing then make it lowercase (picks up $LBRACKET etc.)
9929 std::string label = CGUIInfoLabel::GetLabel(prop.param(1), INFO::DEFAULT_CONTEXT);
9930 StringUtils::ToLower(label);
9931 // 'true', 'false', 'yes', 'no' are valid strings, do not resolve them to SYSTEM_ALWAYS_TRUE or SYSTEM_ALWAYS_FALSE
9932 if (label != "true" && label != "false" && label != "yes" && label != "no")
9934 int data2 = TranslateSingleString(prop.param(1), listItemDependent);
9935 if (data2 > 0)
9936 return AddMultiInfo(CGUIInfo(string_bool.val, data1, -data2));
9938 return AddMultiInfo(CGUIInfo(string_bool.val, data1, label));
9943 if (cat.name == "integer")
9945 if (prop.name == "valueof")
9947 int value = -1;
9948 std::from_chars(prop.param(0).data(), prop.param(0).data() + prop.param(0).size(), value);
9949 return AddMultiInfo(CGUIInfo(INTEGER_VALUEOF, value));
9952 for (const infomap& integer_bool : integer_bools)
9954 if (prop.name == integer_bool.str)
9956 std::array<int, 2> data = {-1, -1};
9957 for (size_t i = 0; i < data.size(); i++)
9959 std::from_chars_result result = std::from_chars(
9960 prop.param(i).data(), prop.param(i).data() + prop.param(i).size(), data.at(i));
9961 if (result.ec == std::errc::invalid_argument)
9963 // could not translate provided value to int, translate the info string
9964 data.at(i) = TranslateSingleString(prop.param(i), listItemDependent);
9966 else
9968 // conversion succeeded, integer value provided - translate it to an Integer.ValueOf() info.
9969 data.at(i) = AddMultiInfo(CGUIInfo(INTEGER_VALUEOF, data.at(i)));
9972 return AddMultiInfo(CGUIInfo(integer_bool.val, data.at(0), data.at(1)));
9976 else if (cat.name == "player")
9978 for (const infomap& player_label : player_labels)
9980 if (prop.name == player_label.str)
9981 return player_label.val;
9983 for (const infomap& player_time : player_times)
9985 if (prop.name == player_time.str)
9986 return AddMultiInfo(CGUIInfo(player_time.val, TranslateTimeFormat(prop.param())));
9988 if (prop.name == "process" && prop.num_params())
9990 for (const infomap& player_proces : player_process)
9992 if (StringUtils::EqualsNoCase(prop.param(), player_proces.str))
9993 return player_proces.val;
9996 if (prop.num_params() == 1)
9998 for (const infomap& i : player_param)
10000 if (prop.name == i.str)
10001 return AddMultiInfo(CGUIInfo(i.val, prop.param()));
10005 else if (cat.name == "addon")
10007 for (const infomap& i : addons)
10009 if (prop.name == i.str && prop.num_params() == 2)
10010 return AddMultiInfo(CGUIInfo(i.val, prop.param(0), prop.param(1)));
10013 else if (cat.name == "weather")
10015 for (const infomap& i : weather)
10017 if (prop.name == i.str)
10018 return i.val;
10021 else if (cat.name == "network")
10023 for (const infomap& network_label : network_labels)
10025 if (prop.name == network_label.str)
10026 return network_label.val;
10029 else if (cat.name == "musicpartymode")
10031 for (const infomap& i : musicpartymode)
10033 if (prop.name == i.str)
10034 return i.val;
10037 else if (cat.name == "system")
10039 for (const infomap& system_label : system_labels)
10041 if (prop.name == system_label.str)
10042 return system_label.val;
10044 if (prop.num_params() == 1)
10046 const std::string &param = prop.param();
10047 if (prop.name == "getbool")
10049 std::string paramCopy = param;
10050 StringUtils::ToLower(paramCopy);
10051 return AddMultiInfo(CGUIInfo(SYSTEM_GET_BOOL, paramCopy));
10053 for (const infomap& i : system_param)
10055 if (prop.name == i.str)
10056 return AddMultiInfo(CGUIInfo(i.val, param));
10058 if (prop.name == "memory")
10060 if (param == "free")
10061 return SYSTEM_FREE_MEMORY;
10062 else if (param == "free.percent")
10063 return SYSTEM_FREE_MEMORY_PERCENT;
10064 else if (param == "used")
10065 return SYSTEM_USED_MEMORY;
10066 else if (param == "used.percent")
10067 return SYSTEM_USED_MEMORY_PERCENT;
10068 else if (param == "total")
10069 return SYSTEM_TOTAL_MEMORY;
10071 else if (prop.name == "addontitle")
10073 // Example: System.AddonTitle(Skin.String(HomeVideosButton1)) => skin string HomeVideosButton1 holds an addon identifier string
10074 int infoLabel = TranslateSingleString(param, listItemDependent);
10075 if (infoLabel > 0)
10076 return AddMultiInfo(CGUIInfo(SYSTEM_ADDON_TITLE, infoLabel, 0));
10077 std::string label = CGUIInfoLabel::GetLabel(param, INFO::DEFAULT_CONTEXT);
10078 StringUtils::ToLower(label);
10079 return AddMultiInfo(CGUIInfo(SYSTEM_ADDON_TITLE, label, 1));
10081 else if (prop.name == "addonicon")
10083 int infoLabel = TranslateSingleString(param, listItemDependent);
10084 if (infoLabel > 0)
10085 return AddMultiInfo(CGUIInfo(SYSTEM_ADDON_ICON, infoLabel, 0));
10086 std::string label = CGUIInfoLabel::GetLabel(param, INFO::DEFAULT_CONTEXT);
10087 StringUtils::ToLower(label);
10088 return AddMultiInfo(CGUIInfo(SYSTEM_ADDON_ICON, label, 1));
10090 else if (prop.name == "addonversion")
10092 int infoLabel = TranslateSingleString(param, listItemDependent);
10093 if (infoLabel > 0)
10094 return AddMultiInfo(CGUIInfo(SYSTEM_ADDON_VERSION, infoLabel, 0));
10095 std::string label = CGUIInfoLabel::GetLabel(param, INFO::DEFAULT_CONTEXT);
10096 StringUtils::ToLower(label);
10097 return AddMultiInfo(CGUIInfo(SYSTEM_ADDON_VERSION, label, 1));
10099 else if (prop.name == "idletime")
10100 return AddMultiInfo(CGUIInfo(SYSTEM_IDLE_TIME, atoi(param.c_str())));
10102 if (prop.name == "alarmlessorequal" && prop.num_params() == 2)
10103 return AddMultiInfo(CGUIInfo(SYSTEM_ALARM_LESS_OR_EQUAL, prop.param(0), atoi(prop.param(1).c_str())));
10104 else if (prop.name == "date")
10106 if (prop.num_params() == 2)
10107 return AddMultiInfo(CGUIInfo(SYSTEM_DATE, StringUtils::DateStringToYYYYMMDD(prop.param(0)) % 10000, StringUtils::DateStringToYYYYMMDD(prop.param(1)) % 10000));
10108 else if (prop.num_params() == 1)
10110 int dateformat = StringUtils::DateStringToYYYYMMDD(prop.param(0));
10111 if (dateformat <= 0) // not concrete date
10112 return AddMultiInfo(CGUIInfo(SYSTEM_DATE, prop.param(0), -1));
10113 else
10114 return AddMultiInfo(CGUIInfo(SYSTEM_DATE, dateformat % 10000));
10116 return SYSTEM_DATE;
10118 else if (prop.name == "time")
10120 if (prop.num_params() == 0)
10121 return AddMultiInfo(CGUIInfo(SYSTEM_TIME, TIME_FORMAT_GUESS));
10122 if (prop.num_params() == 1)
10124 TIME_FORMAT timeFormat = TranslateTimeFormat(prop.param(0));
10125 if (timeFormat == TIME_FORMAT_GUESS)
10126 return AddMultiInfo(CGUIInfo(SYSTEM_TIME, StringUtils::TimeStringToSeconds(prop.param(0))));
10127 return AddMultiInfo(CGUIInfo(SYSTEM_TIME, timeFormat));
10129 else
10130 return AddMultiInfo(CGUIInfo(SYSTEM_TIME, StringUtils::TimeStringToSeconds(prop.param(0)), StringUtils::TimeStringToSeconds(prop.param(1))));
10133 else if (cat.name == "library")
10135 if (prop.name == "isscanning")
10136 return LIBRARY_IS_SCANNING;
10137 else if (prop.name == "isscanningvideo")
10138 return LIBRARY_IS_SCANNING_VIDEO; //! @todo change to IsScanning(Video)
10139 else if (prop.name == "isscanningmusic")
10140 return LIBRARY_IS_SCANNING_MUSIC;
10141 else if (prop.name == "hascontent" && prop.num_params())
10143 std::string cat = prop.param(0);
10144 StringUtils::ToLower(cat);
10145 if (cat == "music")
10146 return LIBRARY_HAS_MUSIC;
10147 else if (cat == "video")
10148 return LIBRARY_HAS_VIDEO;
10149 else if (cat == "movies")
10150 return LIBRARY_HAS_MOVIES;
10151 else if (cat == "tvshows")
10152 return LIBRARY_HAS_TVSHOWS;
10153 else if (cat == "musicvideos")
10154 return LIBRARY_HAS_MUSICVIDEOS;
10155 else if (cat == "moviesets")
10156 return LIBRARY_HAS_MOVIE_SETS;
10157 else if (cat == "singles")
10158 return LIBRARY_HAS_SINGLES;
10159 else if (cat == "compilations")
10160 return LIBRARY_HAS_COMPILATIONS;
10161 else if (cat == "boxsets")
10162 return LIBRARY_HAS_BOXSETS;
10163 else if (cat == "role" && prop.num_params() > 1)
10164 return AddMultiInfo(CGUIInfo(LIBRARY_HAS_ROLE, prop.param(1), 0));
10166 else if (prop.name == "hasnode" && prop.num_params())
10168 std::string node = prop.param(0);
10169 StringUtils::ToLower(node);
10170 return AddMultiInfo(CGUIInfo(LIBRARY_HAS_NODE, prop.param(), 0));
10173 else if (cat.name == "musicplayer")
10175 for (const infomap& player_time : player_times) //! @todo remove these, they're repeats
10177 if (prop.name == player_time.str)
10178 return AddMultiInfo(CGUIInfo(player_time.val, TranslateTimeFormat(prop.param())));
10180 if (prop.name == "content" && prop.num_params())
10181 return AddMultiInfo(CGUIInfo(MUSICPLAYER_CONTENT, prop.param(), 0));
10182 else if (prop.name == "property")
10184 if (StringUtils::EqualsNoCase(prop.param(), "fanart_image"))
10185 return AddMultiInfo(CGUIInfo(PLAYER_ITEM_ART, "fanart"));
10187 return AddMultiInfo(CGUIInfo(MUSICPLAYER_PROPERTY, prop.param()));
10189 return TranslateMusicPlayerString(prop.name);
10191 else if (cat.name == "videoplayer")
10193 if (prop.name != "starttime") // player.starttime is semantically different from videoplayer.starttime which has its own implementation!
10195 for (const infomap& player_time : player_times) //! @todo remove these, they're repeats
10197 if (prop.name == player_time.str)
10198 return AddMultiInfo(CGUIInfo(player_time.val, TranslateTimeFormat(prop.param())));
10201 if (prop.name == "content" && prop.num_params())
10203 return AddMultiInfo(CGUIInfo(VIDEOPLAYER_CONTENT, prop.param(), 0));
10205 if (prop.name == "uniqueid" && prop.num_params())
10207 return AddMultiInfo(CGUIInfo(VIDEOPLAYER_UNIQUEID, prop.param(), 0));
10209 if (prop.name == "art" && prop.num_params() > 0)
10211 return AddMultiInfo(CGUIInfo(VIDEOPLAYER_ART, prop.param(), 0));
10213 return TranslateVideoPlayerString(prop.name);
10215 else if (cat.name == "retroplayer")
10217 for (const infomap& i : retroplayer)
10219 if (prop.name == i.str)
10220 return i.val;
10223 else if (cat.name == "slideshow")
10225 for (const infomap& i : slideshow)
10227 if (prop.name == i.str)
10228 return i.val;
10231 else if (cat.name == "container")
10233 for (const infomap& i : mediacontainer) // these ones don't have or need an id
10235 if (prop.name == i.str)
10236 return i.val;
10238 int id = atoi(cat.param().c_str());
10239 for (const infomap& container_bool : container_bools) // these ones can have an id (but don't need to?)
10241 if (prop.name == container_bool.str)
10242 return id ? AddMultiInfo(CGUIInfo(container_bool.val, id)) : container_bool.val;
10244 for (const infomap& container_int : container_ints) // these ones can have an int param on the property
10246 if (prop.name == container_int.str)
10247 return AddMultiInfo(CGUIInfo(container_int.val, id, atoi(prop.param().c_str())));
10249 for (const infomap& i : container_str) // these ones have a string param on the property
10251 if (prop.name == i.str)
10252 return AddMultiInfo(CGUIInfo(i.val, id, prop.param()));
10254 if (prop.name == "sortdirection")
10256 SortOrder order = SortOrderNone;
10257 if (StringUtils::EqualsNoCase(prop.param(), "ascending"))
10258 order = SortOrderAscending;
10259 else if (StringUtils::EqualsNoCase(prop.param(), "descending"))
10260 order = SortOrderDescending;
10261 return AddMultiInfo(CGUIInfo(CONTAINER_SORT_DIRECTION, order));
10264 else if (cat.name == "listitem" ||
10265 cat.name == "listitemposition" ||
10266 cat.name == "listitemnowrap" ||
10267 cat.name == "listitemabsolute")
10269 int ret = TranslateListItem(cat, prop, 0, false);
10270 if (ret)
10271 listItemDependent = true;
10272 return ret;
10274 else if (cat.name == "visualisation")
10276 for (const infomap& i : visualisation)
10278 if (prop.name == i.str)
10279 return i.val;
10282 else if (cat.name == "fanart")
10284 for (const infomap& fanart_label : fanart_labels)
10286 if (prop.name == fanart_label.str)
10287 return fanart_label.val;
10290 else if (cat.name == "skin")
10292 for (const infomap& skin_label : skin_labels)
10294 if (prop.name == skin_label.str)
10295 return skin_label.val;
10297 if (prop.num_params())
10299 if (prop.name == "string")
10301 if (prop.num_params() == 2)
10302 return AddMultiInfo(CGUIInfo(SKIN_STRING_IS_EQUAL, CSkinSettings::GetInstance().TranslateString(prop.param(0)), prop.param(1)));
10303 else
10304 return AddMultiInfo(CGUIInfo(SKIN_STRING, CSkinSettings::GetInstance().TranslateString(prop.param(0))));
10306 else if (prop.name == "numeric")
10308 return AddMultiInfo(
10309 CGUIInfo(SKIN_INTEGER, CSkinSettings::GetInstance().TranslateString(prop.param(0))));
10311 else if (prop.name == "hassetting")
10312 return AddMultiInfo(CGUIInfo(SKIN_BOOL, CSkinSettings::GetInstance().TranslateBool(prop.param(0))));
10313 else if (prop.name == "hastheme")
10314 return AddMultiInfo(CGUIInfo(SKIN_HAS_THEME, prop.param(0)));
10315 else if (prop.name == "timerisrunning")
10316 return AddMultiInfo(CGUIInfo(SKIN_TIMER_IS_RUNNING, prop.param(0)));
10317 else if (prop.name == "timerelapsedsecs")
10318 return AddMultiInfo(CGUIInfo(SKIN_TIMER_ELAPSEDSECS, prop.param(0)));
10321 else if (cat.name == "window")
10323 if (prop.name == "property" && prop.num_params() == 1)
10324 { //! @todo this doesn't support foo.xml
10325 int winID = cat.param().empty() ? 0 : CWindowTranslator::TranslateWindow(cat.param());
10326 if (winID != WINDOW_INVALID)
10327 return AddMultiInfo(CGUIInfo(WINDOW_PROPERTY, winID, prop.param()));
10329 for (const infomap& window_bool : window_bools)
10331 if (prop.name == window_bool.str)
10332 { //! @todo The parameter for these should really be on the first not the second property
10333 if (prop.param().find("xml") != std::string::npos)
10334 return AddMultiInfo(CGUIInfo(window_bool.val, 0, prop.param()));
10335 int winID = prop.param().empty() ? WINDOW_INVALID : CWindowTranslator::TranslateWindow(prop.param());
10336 return AddMultiInfo(CGUIInfo(window_bool.val, winID, 0));
10340 else if (cat.name == "control")
10342 for (const infomap& control_label : control_labels)
10344 if (prop.name == control_label.str)
10345 { //! @todo The parameter for these should really be on the first not the second property
10346 int controlID = atoi(prop.param().c_str());
10347 if (controlID)
10348 return AddMultiInfo(CGUIInfo(control_label.val, controlID, 0));
10349 return 0;
10353 else if (cat.name == "controlgroup" && prop.name == "hasfocus")
10355 int groupID = atoi(cat.param().c_str());
10356 if (groupID)
10357 return AddMultiInfo(CGUIInfo(CONTROL_GROUP_HAS_FOCUS, groupID, atoi(prop.param(0).c_str())));
10359 else if (cat.name == "playlist")
10361 int ret = -1;
10362 for (const infomap& i : playlist)
10364 if (prop.name == i.str)
10366 ret = i.val;
10367 break;
10370 if (ret >= 0)
10372 if (prop.num_params() <= 0)
10373 return ret;
10374 else
10376 PLAYLIST::Id playlistid = PLAYLIST::TYPE_NONE;
10377 if (StringUtils::EqualsNoCase(prop.param(), "video"))
10378 playlistid = PLAYLIST::TYPE_VIDEO;
10379 else if (StringUtils::EqualsNoCase(prop.param(), "music"))
10380 playlistid = PLAYLIST::TYPE_MUSIC;
10382 if (playlistid != PLAYLIST::TYPE_NONE)
10383 return AddMultiInfo(CGUIInfo(ret, playlistid, 1));
10387 else if (cat.name == "pvr")
10389 for (const infomap& i : pvr)
10391 if (prop.name == i.str)
10392 return i.val;
10394 for (const infomap& pvr_time : pvr_times)
10396 if (prop.name == pvr_time.str)
10397 return AddMultiInfo(CGUIInfo(pvr_time.val, TranslateTimeFormat(prop.param())));
10400 else if (cat.name == "rds")
10402 if (prop.name == "getline")
10403 return AddMultiInfo(CGUIInfo(RDS_GET_RADIOTEXT_LINE, atoi(prop.param(0).c_str())));
10405 for (const infomap& rd : rds)
10407 if (prop.name == rd.str)
10408 return rd.val;
10412 else if (info.size() == 3 || info.size() == 4)
10414 if (info[0].name == "system" && info[1].name == "platform")
10415 { //! @todo replace with a single system.platform
10416 std::string platform = info[2].name;
10417 if (platform == "linux")
10418 return SYSTEM_PLATFORM_LINUX;
10419 else if (platform == "windows")
10420 return SYSTEM_PLATFORM_WINDOWS;
10421 else if (platform == "uwp")
10422 return SYSTEM_PLATFORM_UWP;
10423 else if (platform == "darwin")
10424 return SYSTEM_PLATFORM_DARWIN;
10425 else if (platform == "osx")
10426 return SYSTEM_PLATFORM_DARWIN_OSX;
10427 else if (platform == "ios")
10428 return SYSTEM_PLATFORM_DARWIN_IOS;
10429 else if (platform == "tvos")
10430 return SYSTEM_PLATFORM_DARWIN_TVOS;
10431 else if (platform == "android")
10432 return SYSTEM_PLATFORM_ANDROID;
10434 if (info[0].name == "musicplayer")
10435 { //! @todo these two don't allow duration(foo) and also don't allow more than this number of levels...
10436 if (info[1].name == "position")
10438 int position = atoi(info[1].param().c_str());
10439 int value = TranslateMusicPlayerString(info[2].name); // musicplayer.position(foo).bar
10440 return AddMultiInfo(CGUIInfo(value, 2, position)); // 2 => absolute (0 used for not set)
10442 else if (info[1].name == "offset")
10444 int position = atoi(info[1].param().c_str());
10445 int value = TranslateMusicPlayerString(info[2].name); // musicplayer.offset(foo).bar
10446 return AddMultiInfo(CGUIInfo(value, 1, position)); // 1 => relative
10449 else if (info[0].name == "videoplayer")
10450 { //! @todo these two don't allow duration(foo) and also don't allow more than this number of levels...
10451 if (info[1].name == "position")
10453 int position = atoi(info[1].param().c_str());
10454 int value = TranslateVideoPlayerString(info[2].name); // videoplayer.position(foo).bar
10455 // additional param for the requested infolabel, e.g. VideoPlayer.Position(1).Art(poster): art is the value, poster is the param
10456 const std::string& param = info[2].param();
10457 return AddMultiInfo(
10458 CGUIInfo(value, 2, position, param)); // 2 => absolute (0 used for not set)
10460 else if (info[1].name == "offset")
10462 int position = atoi(info[1].param().c_str());
10463 int value = TranslateVideoPlayerString(info[2].name); // videoplayer.offset(foo).bar
10464 // additional param for the requested infolabel, e.g. VideoPlayer.Offset(1).Art(poster): art is the value, poster is the param
10465 const std::string& param = info[2].param();
10466 return AddMultiInfo(CGUIInfo(value, 1, position, param)); // 1 => relative
10469 else if (info[0].name == "player")
10470 { //! @todo these two don't allow duration(foo) and also don't allow more than this number of levels...
10471 if (info[1].name == "position")
10473 int position = atoi(info[1].param().c_str());
10474 int value = TranslatePlayerString(info[2].name); // player.position(foo).bar
10475 return AddMultiInfo(CGUIInfo(value, 2, position)); // 2 => absolute (0 used for not set)
10477 else if (info[1].name == "offset")
10479 int position = atoi(info[1].param().c_str());
10480 int value = TranslatePlayerString(info[2].name); // player.offset(foo).bar
10481 return AddMultiInfo(CGUIInfo(value, 1, position)); // 1 => relative
10484 else if (info[0].name == "container")
10486 if (info[1].name == "listitem" ||
10487 info[1].name == "listitemposition" ||
10488 info[1].name == "listitemabsolute" ||
10489 info[1].name == "listitemnowrap")
10491 int id = atoi(info[0].param().c_str());
10492 int ret = TranslateListItem(info[1], info[2], id, true);
10493 if (ret)
10494 listItemDependent = true;
10495 return ret;
10498 else if (info[0].name == "control")
10500 const Property &prop = info[1];
10501 for (const infomap& control_label : control_labels)
10503 if (prop.name == control_label.str)
10504 { //! @todo The parameter for these should really be on the first not the second property
10505 int controlID = atoi(prop.param().c_str());
10506 if (controlID)
10507 return AddMultiInfo(CGUIInfo(control_label.val, controlID, atoi(info[2].param(0).c_str())));
10508 return 0;
10514 return 0;
10517 int CGUIInfoManager::TranslateListItem(const Property& cat, const Property& prop, int id, bool container)
10519 int ret = 0;
10520 std::string data3;
10521 int data4 = 0;
10522 if (prop.num_params() == 1)
10524 // special case: map 'property(fanart_image)' to 'art(fanart)'
10525 if (prop.name == "property" && StringUtils::EqualsNoCase(prop.param(), "fanart_image"))
10527 ret = LISTITEM_ART;
10528 data3 = "fanart";
10530 else if (prop.name == "property" ||
10531 prop.name == "art" ||
10532 prop.name == "rating" ||
10533 prop.name == "votes" ||
10534 prop.name == "ratingandvotes" ||
10535 prop.name == "uniqueid")
10537 data3 = prop.param();
10539 else if (prop.name == "duration" || prop.name == "nextduration")
10541 data4 = TranslateTimeFormat(prop.param());
10545 if (ret == 0)
10547 for (const infomap& listitem_label : listitem_labels) // these ones don't have or need an id
10549 if (prop.name == listitem_label.str)
10551 ret = listitem_label.val;
10552 break;
10557 if (ret)
10559 int offset = std::atoi(cat.param().c_str());
10561 int flags = 0;
10562 if (cat.name == "listitem")
10563 flags = INFOFLAG_LISTITEM_WRAP;
10564 else if (cat.name == "listitemposition")
10565 flags = INFOFLAG_LISTITEM_POSITION;
10566 else if (cat.name == "listitemabsolute")
10567 flags = INFOFLAG_LISTITEM_ABSOLUTE;
10568 else if (cat.name == "listitemnowrap")
10569 flags = INFOFLAG_LISTITEM_NOWRAP;
10571 if (container)
10572 flags |= INFOFLAG_LISTITEM_CONTAINER;
10574 return AddMultiInfo(CGUIInfo(ret, id, offset, flags, data3, data4));
10577 return 0;
10580 int CGUIInfoManager::TranslateMusicPlayerString(const std::string &info) const
10582 for (const infomap& i : musicplayer)
10584 if (info == i.str)
10585 return i.val;
10587 return 0;
10590 int CGUIInfoManager::TranslateVideoPlayerString(const std::string& info) const
10592 for (const infomap& i : videoplayer)
10594 if (info == i.str)
10595 return i.val;
10597 return 0;
10600 int CGUIInfoManager::TranslatePlayerString(const std::string& info) const
10602 for (const infomap& i : player_labels)
10604 if (info == i.str)
10605 return i.val;
10607 return 0;
10610 TIME_FORMAT CGUIInfoManager::TranslateTimeFormat(const std::string &format)
10612 if (format.empty())
10613 return TIME_FORMAT_GUESS;
10614 else if (StringUtils::EqualsNoCase(format, "hh"))
10615 return TIME_FORMAT_HH;
10616 else if (StringUtils::EqualsNoCase(format, "mm"))
10617 return TIME_FORMAT_MM;
10618 else if (StringUtils::EqualsNoCase(format, "ss"))
10619 return TIME_FORMAT_SS;
10620 else if (StringUtils::EqualsNoCase(format, "hh:mm"))
10621 return TIME_FORMAT_HH_MM;
10622 else if (StringUtils::EqualsNoCase(format, "mm:ss"))
10623 return TIME_FORMAT_MM_SS;
10624 else if (StringUtils::EqualsNoCase(format, "hh:mm:ss"))
10625 return TIME_FORMAT_HH_MM_SS;
10626 else if (StringUtils::EqualsNoCase(format, "hh:mm:ss xx"))
10627 return TIME_FORMAT_HH_MM_SS_XX;
10628 else if (StringUtils::EqualsNoCase(format, "h"))
10629 return TIME_FORMAT_H;
10630 else if (StringUtils::EqualsNoCase(format, "m"))
10631 return TIME_FORMAT_M;
10632 else if (StringUtils::EqualsNoCase(format, "h:mm:ss"))
10633 return TIME_FORMAT_H_MM_SS;
10634 else if (StringUtils::EqualsNoCase(format, "h:mm:ss xx"))
10635 return TIME_FORMAT_H_MM_SS_XX;
10636 else if (StringUtils::EqualsNoCase(format, "xx"))
10637 return TIME_FORMAT_XX;
10638 else if (StringUtils::EqualsNoCase(format, "secs"))
10639 return TIME_FORMAT_SECS;
10640 else if (StringUtils::EqualsNoCase(format, "mins"))
10641 return TIME_FORMAT_MINS;
10642 else if (StringUtils::EqualsNoCase(format, "hours"))
10643 return TIME_FORMAT_HOURS;
10644 return TIME_FORMAT_GUESS;
10647 std::string CGUIInfoManager::GetLabel(int info, int contextWindow, std::string *fallback) const
10649 if (info >= CONDITIONAL_LABEL_START && info <= CONDITIONAL_LABEL_END)
10651 return GetSkinVariableString(info, contextWindow, false);
10653 else if (info >= MULTI_INFO_START && info <= MULTI_INFO_END)
10655 return GetMultiInfoLabel(m_multiInfo[info - MULTI_INFO_START], contextWindow);
10657 else if (info >= LISTITEM_START && info <= LISTITEM_END)
10659 const CGUIListItemPtr item = GUIINFO::GetCurrentListItem(contextWindow);
10660 if (item && item->IsFileItem())
10661 return GetItemLabel(static_cast<CFileItem*>(item.get()), contextWindow, info, fallback);
10664 std::string strLabel;
10665 m_infoProviders.GetLabel(strLabel, m_currentFile, contextWindow, CGUIInfo(info), fallback);
10666 return strLabel;
10669 bool CGUIInfoManager::GetInt(int &value, int info, int contextWindow, const CGUIListItem *item /* = nullptr */) const
10671 if (info >= MULTI_INFO_START && info <= MULTI_INFO_END)
10673 return GetMultiInfoInt(value, m_multiInfo[info - MULTI_INFO_START], contextWindow, item);
10675 else if (info >= LISTITEM_START && info <= LISTITEM_END)
10677 CGUIListItemPtr itemPtr;
10678 if (!item)
10680 itemPtr = GUIINFO::GetCurrentListItem(contextWindow);
10681 item = itemPtr.get();
10683 return GetItemInt(value, item, contextWindow, info);
10686 value = 0;
10687 return m_infoProviders.GetInt(value, m_currentFile, contextWindow, CGUIInfo(info));
10690 INFO::InfoPtr CGUIInfoManager::Register(const std::string &expression, int context)
10692 std::string condition(CGUIInfoLabel::ReplaceLocalize(expression));
10693 StringUtils::Trim(condition);
10695 if (condition.empty())
10696 return INFO::InfoPtr();
10698 std::unique_lock<CCriticalSection> lock(m_critInfo);
10699 std::pair<INFOBOOLTYPE::iterator, bool> res;
10701 if (condition.find_first_of("|+[]!") != condition.npos)
10702 res = m_bools.insert(std::make_shared<InfoExpression>(condition, context, m_refreshCounter));
10703 else
10704 res = m_bools.insert(std::make_shared<InfoSingle>(condition, context, m_refreshCounter));
10706 if (res.second)
10707 res.first->get()->Initialize();
10709 return *(res.first);
10712 void CGUIInfoManager::UnRegister(const INFO::InfoPtr& expression)
10714 std::unique_lock<CCriticalSection> lock(m_critInfo);
10715 m_bools.erase(expression);
10718 bool CGUIInfoManager::EvaluateBool(const std::string &expression, int contextWindow /* = 0 */, const CGUIListItemPtr &item /* = nullptr */)
10720 INFO::InfoPtr info = Register(expression, contextWindow);
10721 if (info)
10722 return info->Get(contextWindow, item.get());
10723 return false;
10726 bool CGUIInfoManager::GetBool(int condition1, int contextWindow, const CGUIListItem *item)
10728 bool bReturn = false;
10729 int condition = std::abs(condition1);
10731 if (condition >= LISTITEM_START && condition < LISTITEM_END)
10733 CGUIListItemPtr itemPtr;
10734 if (!item)
10736 itemPtr = GUIINFO::GetCurrentListItem(contextWindow);
10737 item = itemPtr.get();
10739 bReturn = GetItemBool(item, contextWindow, condition);
10741 else if (condition >= MULTI_INFO_START && condition <= MULTI_INFO_END)
10743 bReturn = GetMultiInfoBool(m_multiInfo[condition - MULTI_INFO_START], contextWindow, item);
10745 else if (!m_infoProviders.GetBool(bReturn, m_currentFile, contextWindow, CGUIInfo(condition)))
10747 // default: use integer value different from 0 as true
10748 int val;
10749 bReturn = GetInt(val, condition, DEFAULT_CONTEXT) && val != 0;
10752 return (condition1 < 0) ? !bReturn : bReturn;
10755 bool CGUIInfoManager::GetMultiInfoBool(const CGUIInfo &info, int contextWindow, const CGUIListItem *item)
10757 bool bReturn = false;
10758 int condition = std::abs(info.m_info);
10760 if (condition >= LISTITEM_START && condition <= LISTITEM_END)
10762 CGUIListItemPtr itemPtr;
10763 if (!item)
10765 itemPtr = GUIINFO::GetCurrentListItem(contextWindow, info.GetData1(), info.GetData2(), info.GetInfoFlag());
10766 item = itemPtr.get();
10768 if (item)
10770 if (condition == LISTITEM_PROPERTY)
10772 if (item->HasProperty(info.GetData3()))
10773 bReturn = item->GetProperty(info.GetData3()).asBoolean();
10775 else
10776 bReturn = GetItemBool(item, contextWindow, condition);
10778 else
10780 bReturn = false;
10783 else if (!m_infoProviders.GetBool(bReturn, m_currentFile, contextWindow, info))
10785 switch (condition)
10787 case STRING_IS_EMPTY:
10788 // note: Get*Image() falls back to Get*Label(), so this should cover all of them
10789 if (item && item->IsFileItem() && IsListItemInfo(info.GetData1()))
10790 bReturn = GetItemImage(item, contextWindow, info.GetData1()).empty();
10791 else
10792 bReturn = GetImage(info.GetData1(), contextWindow).empty();
10793 break;
10794 case STRING_STARTS_WITH:
10795 case STRING_ENDS_WITH:
10796 case STRING_CONTAINS:
10797 case STRING_IS_EQUAL:
10799 std::string compare;
10800 if (info.GetData2() < 0) // info labels are stored with negative numbers
10802 int info2 = -info.GetData2();
10803 CGUIListItemPtr item2;
10805 if (IsListItemInfo(info2))
10807 int iResolvedInfo2 = ResolveMultiInfo(info2);
10808 if (iResolvedInfo2 != 0)
10810 const GUIINFO::CGUIInfo& resolvedInfo2 = m_multiInfo[iResolvedInfo2 - MULTI_INFO_START];
10811 if (resolvedInfo2.GetInfoFlag() & INFOFLAG_LISTITEM_CONTAINER)
10812 item2 = GUIINFO::GetCurrentListItem(contextWindow, resolvedInfo2.GetData1()); // data1 contains the container id
10816 if (item2 && item2->IsFileItem())
10817 compare = GetItemImage(item2.get(), contextWindow, info2);
10818 else if (item && item->IsFileItem())
10819 compare = GetItemImage(item, contextWindow, info2);
10820 else
10821 compare = GetImage(info2, contextWindow);
10823 else if (!info.GetData3().empty())
10824 { // conditional string
10825 compare = info.GetData3();
10827 StringUtils::ToLower(compare);
10829 std::string label;
10830 if (item && item->IsFileItem() && IsListItemInfo(info.GetData1()))
10831 label = GetItemImage(item, contextWindow, info.GetData1());
10832 else
10833 label = GetImage(info.GetData1(), contextWindow);
10834 StringUtils::ToLower(label);
10836 if (condition == STRING_STARTS_WITH)
10837 bReturn = StringUtils::StartsWith(label, compare);
10838 else if (condition == STRING_ENDS_WITH)
10839 bReturn = StringUtils::EndsWith(label, compare);
10840 else if (condition == STRING_CONTAINS)
10841 bReturn = label.find(compare) != std::string::npos;
10842 else
10843 bReturn = StringUtils::EqualsNoCase(label, compare);
10845 break;
10846 case INTEGER_IS_EQUAL:
10847 case INTEGER_GREATER_THAN:
10848 case INTEGER_GREATER_OR_EQUAL:
10849 case INTEGER_LESS_THAN:
10850 case INTEGER_LESS_OR_EQUAL:
10851 case INTEGER_EVEN:
10852 case INTEGER_ODD:
10854 auto getIntValue = [this, &item, &contextWindow](int infoNum) {
10855 int intValue = 0;
10856 if (!GetInt(intValue, infoNum, contextWindow, item))
10858 std::string value;
10859 if (item && item->IsFileItem() && IsListItemInfo(infoNum))
10860 value = GetItemImage(item, contextWindow, infoNum);
10861 else
10862 value = GetImage(infoNum, contextWindow);
10864 // Handle the case when a value contains time separator (:). This makes Integer.IsGreater
10865 // useful for Player.Time* members without adding a separate set of members returning time in seconds
10866 if (value.find_first_of(':') != value.npos)
10867 intValue = StringUtils::TimeStringToSeconds(value);
10868 else
10869 std::from_chars(value.data(), value.data() + value.size(), intValue);
10871 return intValue;
10874 int leftIntValue = getIntValue(info.GetData1());
10875 int rightIntValue = getIntValue(info.GetData2());
10877 // compare
10878 if (condition == INTEGER_IS_EQUAL)
10879 bReturn = leftIntValue == rightIntValue;
10880 else if (condition == INTEGER_GREATER_THAN)
10881 bReturn = leftIntValue > rightIntValue;
10882 else if (condition == INTEGER_GREATER_OR_EQUAL)
10883 bReturn = leftIntValue >= rightIntValue;
10884 else if (condition == INTEGER_LESS_THAN)
10885 bReturn = leftIntValue < rightIntValue;
10886 else if (condition == INTEGER_LESS_OR_EQUAL)
10887 bReturn = leftIntValue <= rightIntValue;
10888 else if (condition == INTEGER_EVEN)
10889 bReturn = leftIntValue % 2 == 0;
10890 else if (condition == INTEGER_ODD)
10891 bReturn = leftIntValue % 2 != 0;
10893 break;
10896 return (info.m_info < 0) ? !bReturn : bReturn;
10899 bool CGUIInfoManager::GetMultiInfoInt(int &value, const CGUIInfo &info, int contextWindow, const CGUIListItem *item) const
10901 if (info.m_info == INTEGER_VALUEOF)
10903 value = info.GetData1();
10904 return true;
10906 else if (info.m_info >= LISTITEM_START && info.m_info <= LISTITEM_END)
10908 CGUIListItemPtr itemPtr;
10909 if (!item)
10911 itemPtr = GUIINFO::GetCurrentListItem(contextWindow, info.GetData1(), info.GetData2(), info.GetInfoFlag());
10912 item = itemPtr.get();
10914 if (item)
10916 if (info.m_info == LISTITEM_PROPERTY)
10918 if (item->HasProperty(info.GetData3()))
10920 value = item->GetProperty(info.GetData3()).asInteger();
10921 return true;
10923 return false;
10925 else
10926 return GetItemInt(value, item, contextWindow, info.m_info);
10928 else
10930 return false;
10934 return m_infoProviders.GetInt(value, m_currentFile, contextWindow, info);
10937 std::string CGUIInfoManager::GetMultiInfoLabel(const CGUIInfo &constinfo, int contextWindow, std::string *fallback) const
10939 CGUIInfo info(constinfo);
10941 if (info.m_info >= LISTITEM_START && info.m_info <= LISTITEM_END)
10943 const CGUIListItemPtr item = GUIINFO::GetCurrentListItem(contextWindow, info.GetData1(), info.GetData2(), info.GetInfoFlag());
10944 if (item)
10946 // Image prioritizes images over labels (in the case of music item ratings for instance)
10947 return GetMultiInfoItemImage(dynamic_cast<CFileItem*>(item.get()), contextWindow, info, fallback);
10949 else
10951 return std::string();
10954 else if (info.m_info == SYSTEM_ADDON_TITLE ||
10955 info.m_info == SYSTEM_ADDON_ICON ||
10956 info.m_info == SYSTEM_ADDON_VERSION)
10958 if (info.GetData2() == 0)
10960 // resolve the addon id
10961 const std::string addonId = GetLabel(info.GetData1(), contextWindow);
10962 info = CGUIInfo(info.m_info, addonId);
10966 std::string strValue;
10967 m_infoProviders.GetLabel(strValue, m_currentFile, contextWindow, info, fallback);
10968 return strValue;
10971 /// \brief Obtains the filename of the image to show from whichever subsystem is needed
10972 std::string CGUIInfoManager::GetImage(int info, int contextWindow, std::string *fallback)
10974 if (info >= CONDITIONAL_LABEL_START && info <= CONDITIONAL_LABEL_END)
10976 return GetSkinVariableString(info, contextWindow, true);
10978 else if (info >= MULTI_INFO_START && info <= MULTI_INFO_END)
10980 return GetMultiInfoLabel(m_multiInfo[info - MULTI_INFO_START], contextWindow, fallback);
10982 else if (info == LISTITEM_THUMB ||
10983 info == LISTITEM_ICON ||
10984 info == LISTITEM_ACTUAL_ICON ||
10985 info == LISTITEM_OVERLAY ||
10986 info == LISTITEM_ART)
10988 const CGUIListItemPtr item = GUIINFO::GetCurrentListItem(contextWindow);
10989 if (item && item->IsFileItem())
10990 return GetItemImage(item.get(), contextWindow, info, fallback);
10993 return GetLabel(info, contextWindow, fallback);
10996 void CGUIInfoManager::ResetCurrentItem()
10998 m_currentFile->Reset();
10999 m_infoProviders.InitCurrentItem(nullptr);
11002 void CGUIInfoManager::UpdateCurrentItem(const CFileItem &item)
11004 m_currentFile->UpdateInfo(item);
11007 void CGUIInfoManager::SetCurrentItem(const CFileItem &item)
11009 *m_currentFile = item;
11010 m_currentFile->FillInDefaultIcon();
11012 m_infoProviders.InitCurrentItem(m_currentFile);
11014 CServiceBroker::GetAnnouncementManager()->Announce(ANNOUNCEMENT::Info, "OnChanged");
11017 void CGUIInfoManager::SetCurrentAlbumThumb(const std::string &thumbFileName)
11019 if (CFileUtils::Exists(thumbFileName))
11020 m_currentFile->SetArt("thumb", thumbFileName);
11021 else
11023 m_currentFile->SetArt("thumb", "");
11024 m_currentFile->FillInDefaultIcon();
11028 void CGUIInfoManager::Clear()
11030 std::unique_lock<CCriticalSection> lock(m_critInfo);
11031 m_skinVariableStrings.clear();
11034 Erase any info bools that are unused. We do this repeatedly as each run
11035 will remove those bools that are no longer dependencies of other bools
11036 in the vector.
11038 INFOBOOLTYPE swapList(&InfoBoolComparator);
11041 swapList.clear();
11042 for (auto &item : m_bools)
11043 if (!item.unique())
11044 swapList.insert(item);
11045 m_bools.swap(swapList);
11046 } while (swapList.size() != m_bools.size());
11048 // log which ones are used - they should all be gone by now
11049 for (INFOBOOLTYPE::const_iterator i = m_bools.begin(); i != m_bools.end(); ++i)
11050 CLog::Log(LOGDEBUG, "Infobool '{}' still used by {} instances", (*i)->GetExpression(),
11051 (unsigned int)i->use_count());
11054 void CGUIInfoManager::UpdateAVInfo()
11056 if (CServiceBroker::GetDataCacheCore().HasAVInfoChanges())
11058 VideoStreamInfo video;
11059 AudioStreamInfo audio;
11060 SubtitleStreamInfo subtitle;
11062 auto& components = CServiceBroker::GetAppComponents();
11063 const auto appPlayer = components.GetComponent<CApplicationPlayer>();
11064 appPlayer->GetVideoStreamInfo(CURRENT_STREAM, video);
11065 appPlayer->GetAudioStreamInfo(CURRENT_STREAM, audio);
11066 appPlayer->GetSubtitleStreamInfo(CURRENT_STREAM, subtitle);
11068 m_infoProviders.UpdateAVInfo(audio, video, subtitle);
11072 int CGUIInfoManager::AddMultiInfo(const CGUIInfo &info)
11074 // check to see if we have this info already
11075 for (unsigned int i = 0; i < m_multiInfo.size(); ++i)
11076 if (m_multiInfo[i] == info)
11077 return static_cast<int>(i) + MULTI_INFO_START;
11078 // return the new offset
11079 m_multiInfo.emplace_back(info);
11080 int id = static_cast<int>(m_multiInfo.size()) + MULTI_INFO_START - 1;
11081 if (id > MULTI_INFO_END)
11082 CLog::Log(LOGERROR, "{} - too many multiinfo bool/labels in this skin", __FUNCTION__);
11083 return id;
11086 int CGUIInfoManager::ResolveMultiInfo(int info) const
11088 int iLastInfo = 0;
11090 int iResolvedInfo = info;
11091 while (iResolvedInfo >= MULTI_INFO_START && iResolvedInfo <= MULTI_INFO_END)
11093 iLastInfo = iResolvedInfo;
11094 iResolvedInfo = m_multiInfo[iResolvedInfo - MULTI_INFO_START].m_info;
11097 return iLastInfo;
11100 bool CGUIInfoManager::IsListItemInfo(int info) const
11102 int iResolvedInfo = info;
11103 while (iResolvedInfo >= MULTI_INFO_START && iResolvedInfo <= MULTI_INFO_END)
11104 iResolvedInfo = m_multiInfo[iResolvedInfo - MULTI_INFO_START].m_info;
11106 return (iResolvedInfo >= LISTITEM_START && iResolvedInfo <= LISTITEM_END);
11109 bool CGUIInfoManager::GetItemInt(int &value, const CGUIListItem *item, int contextWindow, int info) const
11111 value = 0;
11113 if (!item)
11114 return false;
11116 return m_infoProviders.GetInt(value, item, contextWindow, CGUIInfo(info));
11119 std::string CGUIInfoManager::GetItemLabel(const CFileItem *item, int contextWindow, int info, std::string *fallback /* = nullptr */) const
11121 return GetMultiInfoItemLabel(item, contextWindow, CGUIInfo(info), fallback);
11124 std::string CGUIInfoManager::GetMultiInfoItemLabel(const CFileItem *item, int contextWindow, const CGUIInfo &info, std::string *fallback /* = nullptr */) const
11126 if (!item)
11127 return std::string();
11129 std::string value;
11131 if (info.m_info >= CONDITIONAL_LABEL_START && info.m_info <= CONDITIONAL_LABEL_END)
11133 return GetSkinVariableString(info.m_info, contextWindow, false, item);
11135 else if (info.m_info >= MULTI_INFO_START && info.m_info <= MULTI_INFO_END)
11137 return GetMultiInfoItemLabel(item, contextWindow, m_multiInfo[info.m_info - MULTI_INFO_START], fallback);
11139 else if (!m_infoProviders.GetLabel(value, item, contextWindow, info, fallback))
11141 switch (info.m_info)
11143 case LISTITEM_PROPERTY:
11144 return item->GetProperty(info.GetData3()).asString();
11145 case LISTITEM_LABEL:
11146 return item->GetLabel();
11147 case LISTITEM_LABEL2:
11148 return item->GetLabel2();
11149 case LISTITEM_FILENAME:
11150 case LISTITEM_FILE_EXTENSION:
11151 case LISTITEM_FILENAME_NO_EXTENSION:
11153 std::string strFile = URIUtils::GetFileName(item->GetPath());
11154 if (info.m_info == LISTITEM_FILE_EXTENSION)
11156 std::string strExtension = URIUtils::GetExtension(strFile);
11157 return StringUtils::TrimLeft(strExtension, ".");
11159 else if (info.m_info == LISTITEM_FILENAME_NO_EXTENSION)
11161 URIUtils::RemoveExtension(strFile);
11163 return strFile;
11165 case LISTITEM_DATE:
11166 if (item->m_dateTime.IsValid())
11167 return item->m_dateTime.GetAsLocalizedDate();
11168 break;
11169 case LISTITEM_DATETIME:
11170 if (item->m_dateTime.IsValid())
11171 return item->m_dateTime.GetAsLocalizedDateTime();
11172 break;
11173 case LISTITEM_SIZE:
11174 if (!item->m_bIsFolder || item->m_dwSize)
11175 return StringUtils::SizeToString(item->m_dwSize);
11176 break;
11177 case LISTITEM_PROGRAM_COUNT:
11178 return std::to_string(item->m_iprogramCount);
11179 case LISTITEM_ACTUAL_ICON:
11180 return item->GetArt("icon");
11181 case LISTITEM_ICON:
11183 std::string strThumb = item->GetThumbHideIfUnwatched(item);
11184 if (strThumb.empty())
11185 strThumb = item->GetArt("icon");
11186 if (fallback)
11187 *fallback = item->GetArt("icon");
11188 return strThumb;
11190 case LISTITEM_ART:
11191 return item->GetArt(info.GetData3());
11192 case LISTITEM_OVERLAY:
11193 return item->GetOverlayImage();
11194 case LISTITEM_THUMB:
11195 return item->GetThumbHideIfUnwatched(item);
11196 case LISTITEM_FOLDERPATH:
11197 return CURL(item->GetPath()).GetWithoutUserDetails();
11198 case LISTITEM_FOLDERNAME:
11199 case LISTITEM_PATH:
11201 std::string path;
11202 URIUtils::GetParentPath(item->GetPath(), path);
11203 path = CURL(path).GetWithoutUserDetails();
11204 if (info.m_info == LISTITEM_FOLDERNAME)
11206 URIUtils::RemoveSlashAtEnd(path);
11207 path = URIUtils::GetFileName(path);
11209 return path;
11211 case LISTITEM_FILENAME_AND_PATH:
11213 std::string path = item->GetPath();
11214 path = CURL(path).GetWithoutUserDetails();
11215 return path;
11217 case LISTITEM_SORT_LETTER:
11219 std::string letter;
11220 std::wstring character(1, item->GetSortLabel()[0]);
11221 StringUtils::ToUpper(character);
11222 g_charsetConverter.wToUTF8(character, letter);
11223 return letter;
11225 case LISTITEM_STARTTIME:
11227 if (item->m_dateTime.IsValid())
11228 return item->m_dateTime.GetAsLocalizedTime("", false);
11229 break;
11231 case LISTITEM_STARTDATE:
11233 if (item->m_dateTime.IsValid())
11234 return item->m_dateTime.GetAsLocalizedDate(true);
11235 break;
11237 case LISTITEM_CURRENTITEM:
11238 return std::to_string(item->GetCurrentItem());
11242 return value;
11245 std::string CGUIInfoManager::GetItemImage(const CGUIListItem *item, int contextWindow, int info, std::string *fallback /*= nullptr*/) const
11247 if (!item || !item->IsFileItem())
11248 return std::string();
11250 return GetMultiInfoItemImage(static_cast<const CFileItem*>(item), contextWindow, CGUIInfo(info), fallback);
11253 std::string CGUIInfoManager::GetMultiInfoItemImage(const CFileItem *item, int contextWindow, const CGUIInfo &info, std::string *fallback /*= nullptr*/) const
11255 if (info.m_info >= CONDITIONAL_LABEL_START && info.m_info <= CONDITIONAL_LABEL_END)
11257 return GetSkinVariableString(info.m_info, contextWindow, true, item);
11259 else if (info.m_info >= MULTI_INFO_START && info.m_info <= MULTI_INFO_END)
11261 return GetMultiInfoItemImage(item, contextWindow, m_multiInfo[info.m_info - MULTI_INFO_START], fallback);
11264 return GetMultiInfoItemLabel(item, contextWindow, info, fallback);
11267 bool CGUIInfoManager::GetItemBool(const CGUIListItem *item, int contextWindow, int condition) const
11269 if (!item)
11270 return false;
11272 bool value = false;
11273 if (!m_infoProviders.GetBool(value, item, contextWindow, CGUIInfo(condition)))
11275 switch (condition)
11277 case LISTITEM_ISSELECTED:
11278 return item->IsSelected();
11279 case LISTITEM_IS_FOLDER:
11280 return item->m_bIsFolder;
11281 case LISTITEM_IS_PARENTFOLDER:
11283 if (item->IsFileItem())
11285 const CFileItem *pItem = static_cast<const CFileItem *>(item);
11286 return pItem->IsParentFolder();
11288 break;
11293 return value;
11296 void CGUIInfoManager::ResetCache()
11298 // mark our infobools as dirty
11299 std::unique_lock<CCriticalSection> lock(m_critInfo);
11300 ++m_refreshCounter;
11303 void CGUIInfoManager::SetCurrentVideoTag(const CVideoInfoTag &tag)
11305 m_currentFile->SetFromVideoInfoTag(tag);
11306 m_currentFile->SetStartOffset(0);
11309 void CGUIInfoManager::SetCurrentSongTag(const MUSIC_INFO::CMusicInfoTag &tag)
11311 m_currentFile->SetFromMusicInfoTag(tag);
11312 m_currentFile->SetStartOffset(0);
11315 const MUSIC_INFO::CMusicInfoTag* CGUIInfoManager::GetCurrentSongTag() const
11317 if (m_currentFile->HasMusicInfoTag())
11318 return m_currentFile->GetMusicInfoTag();
11320 return nullptr;
11323 const CVideoInfoTag* CGUIInfoManager::GetCurrentMovieTag() const
11325 if (m_currentFile->HasVideoInfoTag())
11326 return m_currentFile->GetVideoInfoTag();
11328 return nullptr;
11331 int CGUIInfoManager::RegisterSkinVariableString(const CSkinVariableString* info)
11333 if (!info)
11334 return 0;
11336 std::unique_lock<CCriticalSection> lock(m_critInfo);
11337 m_skinVariableStrings.emplace_back(*info);
11338 delete info;
11339 return CONDITIONAL_LABEL_START + m_skinVariableStrings.size() - 1;
11342 int CGUIInfoManager::TranslateSkinVariableString(const std::string& name, int context)
11344 for (std::vector<CSkinVariableString>::const_iterator it = m_skinVariableStrings.begin();
11345 it != m_skinVariableStrings.end(); ++it)
11347 if (StringUtils::EqualsNoCase(it->GetName(), name) && it->GetContext() == context)
11348 return it - m_skinVariableStrings.begin() + CONDITIONAL_LABEL_START;
11350 return 0;
11353 std::string CGUIInfoManager::GetSkinVariableString(int info,
11354 int contextWindow,
11355 bool preferImage /*= false*/,
11356 const CGUIListItem* item /*= nullptr*/) const
11358 info -= CONDITIONAL_LABEL_START;
11359 if (info >= 0 && info < static_cast<int>(m_skinVariableStrings.size()))
11360 return m_skinVariableStrings[info].GetValue(contextWindow, preferImage, item);
11362 return "";
11365 bool CGUIInfoManager::ConditionsChangedValues(const std::map<INFO::InfoPtr, bool>& map)
11367 for (std::map<INFO::InfoPtr, bool>::const_iterator it = map.begin() ; it != map.end() ; ++it)
11369 if (it->first->Get(INFO::DEFAULT_CONTEXT) != it->second)
11370 return true;
11372 return false;
11375 int CGUIInfoManager::GetMessageMask()
11377 return TMSG_MASK_GUIINFOMANAGER;
11380 void CGUIInfoManager::OnApplicationMessage(KODI::MESSAGING::ThreadMessage* pMsg)
11382 switch (pMsg->dwMessage)
11384 case TMSG_GUI_INFOLABEL:
11386 if (pMsg->lpVoid)
11388 auto infoLabels = static_cast<std::vector<std::string>*>(pMsg->lpVoid);
11389 for (auto& param : pMsg->params)
11390 infoLabels->emplace_back(GetLabel(TranslateString(param), DEFAULT_CONTEXT));
11393 break;
11395 case TMSG_GUI_INFOBOOL:
11397 if (pMsg->lpVoid)
11399 auto infoLabels = static_cast<std::vector<bool>*>(pMsg->lpVoid);
11400 for (auto& param : pMsg->params)
11401 infoLabels->push_back(EvaluateBool(param, DEFAULT_CONTEXT));
11404 break;
11406 case TMSG_UPDATE_CURRENT_ITEM:
11408 CFileItem* item = static_cast<CFileItem*>(pMsg->lpVoid);
11409 if (!item)
11410 return;
11412 if (pMsg->param1 == 1 && item->HasMusicInfoTag()) // only grab music tag
11413 SetCurrentSongTag(*item->GetMusicInfoTag());
11414 else if (pMsg->param1 == 2 && item->HasVideoInfoTag()) // only grab video tag
11415 SetCurrentVideoTag(*item->GetVideoInfoTag());
11416 else
11417 SetCurrentItem(*item);
11419 delete item;
11421 break;
11423 default:
11424 break;
11428 void CGUIInfoManager::RegisterInfoProvider(IGUIInfoProvider *provider)
11430 if (!CServiceBroker::GetWinSystem())
11431 return;
11433 std::unique_lock<CCriticalSection> lock(CServiceBroker::GetWinSystem()->GetGfxContext());
11435 m_infoProviders.RegisterProvider(provider, false);
11438 void CGUIInfoManager::UnregisterInfoProvider(IGUIInfoProvider *provider)
11440 if (!CServiceBroker::GetWinSystem())
11441 return;
11443 std::unique_lock<CCriticalSection> lock(CServiceBroker::GetWinSystem()->GetGfxContext());
11445 m_infoProviders.UnregisterProvider(provider);