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.
9 #include "GUIInfoManager.h"
12 #include "ServiceBroker.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"
42 using namespace KODI::GUILIB
;
43 using namespace KODI::GUILIB::GUIINFO
;
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)
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
);
84 /// \page modules__infolabels_boolean_conditions Infolabels and Boolean conditions
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>.
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>.
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
108 /// \table_h3{ Labels, Type, Description }
109 /// \table_row3{ <b>`true`</b>,
110 /// \anchor Global_True
112 /// @return Always evaluates to **true**.
115 /// \table_row3{ <b>`false`</b>,
116 /// \anchor Global_False
118 /// @return Always evaluates to **false**.
121 /// \table_row3{ <b>`yes`</b>,
122 /// \anchor Global_Yes
124 /// @return same as \link Global_True `true` \endlink.
127 /// \table_row3{ <b>`no`</b>,
128 /// \anchor Global_No
130 /// @return same as \link Global_False `false` \endlink.
135 /// -----------------------------------------------------------------------------
137 /// \page modules__infolabels_boolean_conditions
138 /// \subsection modules__infolabels_boolean_conditions_Addon Addon
140 /// \table_h3{ Labels, Type, Description }
141 /// \table_row3{ <b>`Addon.SettingStr(addon_id\,setting_id)`</b>,
142 /// \anchor Addon_SettingString
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
148 /// @skinning_v20 **[New Infolabel]** \link Addon_SettingString `Addon.SettingStr(addon_id\,setting_id)`\endlink
151 /// \table_row3{ <b>`Addon.SettingBool(addon_id\,setting_id)`</b>,
152 /// \anchor Addon_SettingBool
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
160 /// @skinning_v20 **[New Boolean Condition]** \link Addon_SettingBool `Addon.SettingBool(addon_id\,setting_id)`\endlink
163 /// \table_row3{ <b>`Addon.SettingInt(addon_id\,setting_id)`</b>,
164 /// \anchor Addon_SettingInt
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
172 /// @skinning_v20 **[New Integer Info]** \link Addon_SettingInt `Addon.SettingInt(addon_id\,setting_id)`\endlink
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
187 /// \table_h3{ Labels, Type, Description }
188 /// \table_row3{ <b>`String.IsEmpty(info)`</b>,
189 /// \anchor String_IsEmpty
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
198 /// @skinning_v17 **[New Boolean Condition]** \link String_IsEmpty `String.IsEmpty(info)`\endlink
201 /// \table_row3{ <b>`String.IsEqual(info\,string)`</b>,
202 /// \anchor String_IsEqual
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
212 /// @skinning_v17 **[New Boolean Condition]** \link String_IsEqual `String.IsEqual(info\,string)`\endlink
215 /// \table_row3{ <b>`String.StartsWith(info\,substring)`</b>,
216 /// \anchor String_StartsWith
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
226 /// @skinning_v17 **[New Boolean Condition]** \link String_StartsWith `String.StartsWith(info\,substring)`\endlink
229 /// \table_row3{ <b>`String.EndsWith(info\,substring)`</b>,
230 /// \anchor String_EndsWith
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
240 /// @skinning_v17 **[New Boolean Condition]** \link String_EndsWith `String.EndsWith(info\,substring)`\endlink
243 /// \table_row3{ <b>`String.Contains(info\,substring)`</b>,
244 /// \anchor String_Contains
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
254 /// @skinning_v17 **[New Boolean Condition]** \link String_Contains `String.Contains(info\,substring)`\endlink
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
271 /// \table_h3{ Labels, Type, Description }
272 /// \table_row3{ <b>`Integer.ValueOf(number)`</b>,
273 /// \anchor Integer_ValueOf
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.
281 /// @skinning_v20 **[New InfoLabel]** \link Integer_ValueOf `Integer.ValueOf(number)`\endlink
284 /// \table_row3{ <b>`Integer.IsEqual(info\,number)`</b>,
285 /// \anchor Integer_IsEqual
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)`
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.
297 /// \table_row3{ <b>`Integer.IsGreater(info\,number)`</b>,
298 /// \anchor Integer_IsGreater
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)`
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.
310 /// \table_row3{ <b>`Integer.IsGreaterOrEqual(info\,number)`</b>,
311 /// \anchor Integer_IsGreaterOrEqual
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)`
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.
324 /// \table_row3{ <b>`Integer.IsLess(info\,number)`</b>,
325 /// \anchor Integer_IsLess
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)`
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.
337 /// \table_row3{ <b>`Integer.IsLessOrEqual(info\,number)`</b>,
338 /// \anchor Integer_IsLessOrEqual
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)`
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.
350 /// \table_row3{ <b>`Integer.IsEven(info)`</b>,
351 /// \anchor Integer_IsEven
353 /// @return **True** if the value of the infolabel is odd
354 /// @param info - infolabel
355 /// @note **Example:** `Integer.IsEven(ListItem.CurrentItem)`
357 /// @skinning_v19 **[New Boolean Condition]** \link Integer_IsEven `Integer.IsEven(info)`\endlink
360 /// \table_row3{ <b>`Integer.IsOdd(info)`</b>,
361 /// \anchor Integer_IsOdd
363 /// @return **True** if the value of the infolabel is odd
364 /// @param info - infolabel
365 /// @note **Example:** `Integer.IsOdd(ListItem.CurrentItem)`
367 /// @skinning_v19 **[New Boolean Condition]** \link Integer_IsOdd `Integer.IsOdd(info)`\endlink
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
386 /// \table_h3{ Labels, Type, Description }
387 /// \table_row3{ <b>`Player.HasAudio`</b>,
388 /// \anchor Player_HasAudio
390 /// @return **True** if the player has an audio file.
393 /// \table_row3{ <b>`Player.HasGame`</b>,
394 /// \anchor Player_HasGame
396 /// @return **True** if the player has a game file (RETROPLAYER).
398 /// @skinning_v18 **[New Boolean Condition]** \link Player_HasGame `Player.HasGame`\endlink
401 /// \table_row3{ <b>`Player.HasMedia`</b>,
402 /// \anchor Player_HasMedia
404 /// @return **True** if the player has an audio or video file.
407 /// \table_row3{ <b>`Player.HasVideo`</b>,
408 /// \anchor Player_HasVideo
410 /// @return **True** if the player has a video file.
413 /// \table_row3{ <b>`Player.Paused`</b>,
414 /// \anchor Player_Paused
416 /// @return **True** if the player is paused.
419 /// \table_row3{ <b>`Player.Playing`</b>,
420 /// \anchor Player_Playing
422 /// @return **True** if the player is currently playing (i.e. not ffwding\,
423 /// rewinding or paused.)
426 /// \table_row3{ <b>`Player.Rewinding`</b>,
427 /// \anchor Player_Rewinding
429 /// @return **True** if the player is rewinding.
432 /// \table_row3{ <b>`Player.Rewinding2x`</b>,
433 /// \anchor Player_Rewinding2x
435 /// @return **True** if the player is rewinding at 2x.
438 /// \table_row3{ <b>`Player.Rewinding4x`</b>,
439 /// \anchor Player_Rewinding4x
441 /// @return **True** if the player is rewinding at 4x.
444 /// \table_row3{ <b>`Player.Rewinding8x`</b>,
445 /// \anchor Player_Rewinding8x
447 /// @return **True** if the player is rewinding at 8x.
450 /// \table_row3{ <b>`Player.Rewinding16x`</b>,
451 /// \anchor Player_Rewinding16x
453 /// @return **True** if the player is rewinding at 16x.
456 /// \table_row3{ <b>`Player.Rewinding32x`</b>,
457 /// \anchor Player_Rewinding32x
459 /// @return **True** if the player is rewinding at 32x.
462 /// \table_row3{ <b>`Player.Forwarding`</b>,
463 /// \anchor Player_Forwarding
465 /// @return **True** if the player is fast forwarding.
468 /// \table_row3{ <b>`Player.Forwarding2x`</b>,
469 /// \anchor Player_Forwarding2x
471 /// @return **True** if the player is fast forwarding at 2x.
474 /// \table_row3{ <b>`Player.Forwarding4x`</b>,
475 /// \anchor Player_Forwarding4x
477 /// @return **True** if the player is fast forwarding at 4x.
480 /// \table_row3{ <b>`Player.Forwarding8x`</b>,
481 /// \anchor Player_Forwarding8x
483 /// @return **True** if the player is fast forwarding at 8x.
486 /// \table_row3{ <b>`Player.Forwarding16x`</b>,
487 /// \anchor Player_Forwarding16x
489 /// @return **True** if the player is fast forwarding at 16x.
492 /// \table_row3{ <b>`Player.Forwarding32x`</b>,
493 /// \anchor Player_Forwarding32x
495 /// @return **True** if the player is fast forwarding at 32x.
498 /// \table_row3{ <b>`Player.Caching`</b>,
499 /// \anchor Player_Caching
501 /// @return **True** if the player is current re-caching data (internet based
505 /// \table_row3{ <b>`Player.DisplayAfterSeek`</b>,
506 /// \anchor Player_DisplayAfterSeek
508 /// @return **True** for the first 2.5 seconds after a seek.
511 /// \table_row3{ <b>`Player.Seekbar`</b>,
512 /// \anchor Player_Seekbar
514 /// @return The percentage of one seek to other position.
517 /// \table_row3{ <b>`Player.Seeking`</b>,
518 /// \anchor Player_Seeking
520 /// @return **True** if a seek is in progress.
523 /// \table_row3{ <b>`Player.ShowTime`</b>,
524 /// \anchor Player_ShowTime
526 /// @return **True** if the user has requested the time to show (occurs in video
530 /// \table_row3{ <b>`Player.ShowInfo`</b>,
531 /// \anchor Player_ShowInfo
533 /// @return **True** if the user has requested the song info to show (occurs in
534 /// visualisation fullscreen and slideshow).
537 /// \table_row3{ <b>`Player.Title`</b>,
538 /// \anchor Player_Title
540 /// @return The Musicplayer title for audio and the Videoplayer title for
544 /// \table_row3{ <b>`Player.offset(number).Title`</b>,
545 /// \anchor Player_Offset_Title
547 /// @return The title of audio or video which has an offset `number` with respect to the currently playing item.
549 /// @skinning_v19 **[New Infolabel]** \link Player_Offset_Title `Player.offset(number).Title`\endlink
552 /// \table_row3{ <b>`Player.position(number).Title`</b>,
553 /// \anchor Player_Position_Title
555 /// @return The title of the audio or video which has an offset `number` with respect to the start of the playlist.
557 /// @skinning_v19 **[New Infolabel]** \link Player_Position_Title `Player.position(number).Title`\endlink
560 /// \table_row3{ <b>`Player.Muted`</b>,
561 /// \anchor Player_Muted
563 /// @return **True** if the volume is muted.
566 /// \table_row3{ <b>`Player.HasDuration`</b>,
567 /// \anchor Player_HasDuration
569 /// @return **True** if Media is not a true stream.
572 /// \table_row3{ <b>`Player.Passthrough`</b>,
573 /// \anchor Player_Passthrough
575 /// @return **True** if the player is using audio passthrough.
578 /// \table_row3{ <b>`Player.CacheLevel`</b>,
579 /// \anchor Player_CacheLevel
581 /// @return The used cache level as a string with an integer number.
584 /// \table_row3{ <b>`Player.Progress`</b>,
585 /// \anchor Player_Progress
586 /// _integer_ / _string_,
587 /// @return The progress position as percentage.
589 /// @skinning_v19 \link Player_Progress `Player.Progress`\endlink infolabel
590 /// also exposed as a string.
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
598 /// @skinning_v19 \link Player_ProgressCache `Player.ProgressCache`\endlink
599 /// infolabel also exposed as a string.
602 /// \table_row3{ <b>`Player.Volume`</b>,
603 /// \anchor Player_Volume
605 /// @return The current player volume with the format `%2.1f` dB
608 /// \table_row3{ <b>`Player.SubtitleDelay`</b>,
609 /// \anchor Player_SubtitleDelay
611 /// @return The used subtitle delay with the format `%2.3f` s
614 /// \table_row3{ <b>`Player.AudioDelay`</b>,
615 /// \anchor Player_AudioDelay
617 /// @return The used audio delay with the format `%2.3f` s
620 /// \table_row3{ <b>`Player.Chapter`</b>,
621 /// \anchor Player_Chapter
623 /// @return The current chapter of current playing media.
626 /// \table_row3{ <b>`Player.ChapterCount`</b>,
627 /// \anchor Player_ChapterCount
629 /// @return The total number of chapters of current playing media.
632 /// \table_row3{ <b>`Player.ChapterName`</b>,
633 /// \anchor Player_ChapterName
635 /// @return The name of currently used chapter if available.
638 /// \table_row3{ <b>`Player.Folderpath`</b>,
639 /// \anchor Player_Folderpath
641 /// @return The full path of the currently playing song or movie
644 /// \table_row3{ <b>`Player.offset(number).Folderpath`</b>,
645 /// \anchor Player_Offset_Folderpath
647 /// @return The full path of the audio or video file which has an offset `number` with respect to the currently playing item.
649 /// @skinning_v19 **[New Infolabel]** \link Player_Offset_Folderpath `Player.offset(number).Folderpath`\endlink
652 /// \table_row3{ <b>`Player.position(number).Folderpath`</b>,
653 /// \anchor Player_Position_Folderpath
655 /// @return The full path of the audio or video file which has an offset `number` with respect to the start of the playlist.
657 /// @skinning_v19 **[New Infolabel]** \link Player_Position_Folderpath `Player.position(number).Folderpath`\endlink
660 /// \table_row3{ <b>`Player.FilenameAndPath`</b>,
661 /// \anchor Player_FilenameAndPath
663 /// @return The full path with filename of the currently
664 /// playing song or movie
667 /// \table_row3{ <b>`Player.offset(number).FilenameAndPath`</b>,
668 /// \anchor Player_Offset_FilenameAndPath
670 /// @return The full path with filename of audio or video file which has an offset `number` with respect to the currently playing item.
672 /// @skinning_v19 **[New Infolabel]** \link Player_Offset_FilenameAndPath `Player.offset(number).FilenameAndPath`\endlink
675 /// \table_row3{ <b>`Player.position(number).FilenameAndPath`</b>,
676 /// \anchor Player_Position_FilenameAndPath
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.
680 /// @skinning_v19 **[New Infolabel]** \link Player_Position_FilenameAndPath `Player.position(number).FilenameAndPath`\endlink
683 /// \table_row3{ <b>`Player.Filename`</b>,
684 /// \anchor Player_Filename
686 /// @return The filename of the currently playing media.
688 /// @skinning_v13 **[New Infolabel]** \link Player_Filename `Player.Filename`\endlink
691 /// \table_row3{ <b>`Player.offset(number).Filename`</b>,
692 /// \anchor Player_Offset_Filename
694 /// @return The filename of audio or video file which has an offset `number` with respect to the currently playing item.
696 /// @skinning_v19 **[New Infolabel]** \link Player_Offset_Filename `Player.offset(number).Filename`\endlink
699 /// \table_row3{ <b>`Player.position(number).Filename`</b>,
700 /// \anchor Player_Position_Filename
702 /// @return The filename of the audio or video file which has an offset `number` with respect to the start of the playlist.
704 /// @skinning_v19 **[New Infolabel]** \link Player_Position_Filename `Player.position(number).Filename`\endlink
707 /// \table_row3{ <b>`Player.IsInternetStream`</b>,
708 /// \anchor Player_IsInternetStream
710 /// @return **True** if the player is playing an internet stream.
713 /// \table_row3{ <b>`Player.PauseEnabled`</b>,
714 /// \anchor Player_PauseEnabled
716 /// @return **True** if played stream is paused.
719 /// \table_row3{ <b>`Player.SeekEnabled`</b>,
720 /// \anchor Player_SeekEnabled
722 /// @return **True** if seek on playing is enabled.
725 /// \table_row3{ <b>`Player.ChannelPreviewActive`</b>,
726 /// \anchor Player_ChannelPreviewActive
728 /// @return **True** if PVR channel preview is active (used
729 /// channel tag different from played tag)
732 /// \table_row3{ <b>`Player.TempoEnabled`</b>,
733 /// \anchor Player_TempoEnabled
735 /// @return **True** if player supports tempo (i.e. speed up/down normal
738 /// @skinning_v17 **[New Boolean Condition]** \link Player_TempoEnabled `Player.TempoEnabled`\endlink
741 /// \table_row3{ <b>`Player.IsTempo`</b>,
742 /// \anchor Player_IsTempo
744 /// @return **True** if player has tempo (i.e. is playing with a playback speed higher or
745 /// lower than normal playback speed)
747 /// @skinning_v17 **[New Boolean Condition]** \link Player_IsTempo `Player.IsTempo`\endlink
750 /// \table_row3{ <b>`Player.PlaySpeed`</b>,
751 /// \anchor Player_PlaySpeed
753 /// @return The player playback speed with the format `%1.2f` (1.00 means normal
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.
760 /// \table_row3{ <b>`Player.HasResolutions`</b>,
761 /// \anchor Player_HasResolutions
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)
766 /// @skinning_v18 **[New Boolean Condition]** \link Player_HasResolutions `Player.HasResolutions`\endlink
769 /// \table_row3{ <b>`Player.HasPrograms`</b>,
770 /// \anchor Player_HasPrograms
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.
777 /// \table_row3{ <b>`Player.FrameAdvance`</b>,
778 /// \anchor Player_FrameAdvance
780 /// @return **True** if player is in frame advance mode.
781 /// @note Skins should hide seek bar in this mode
783 /// @skinning_v18 **[New Boolean Condition]** \link Player_FrameAdvance `Player.FrameAdvance`\endlink
786 /// \table_row3{ <b>`Player.Icon`</b>,
787 /// \anchor Player_Icon
789 /// @return The thumbnail of the currently playing item. If no thumbnail image exists\,
790 /// the icon will be returned\, if available.
792 /// @skinning_v18 **[New Infolabel]** \link Player_Icon `Player.Icon`\endlink
795 /// \table_row3{ <b>`Player.Cutlist`</b>,
796 /// \anchor Player_Cutlist
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.
801 /// @deprecated \link Player_Cutlist `Player.Cutlist`\endlink is deprecated and will be removed in the next version.
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
807 /// \table_row3{ <b>`Player.Editlist`</b>,
808 /// \anchor Player_Editlist
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.
815 /// @skinning_v20 **[New Infolabel]** \link Player_Editlist `Player.Editlist`\endlink
818 /// \table_row3{ <b>`Player.Cuts`</b>,
819 /// \anchor Player_Cuts
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.
824 /// @skinning_v20 **[New Infolabel]** \link Player_Cuts `Player.Cuts`\endlink
827 /// \table_row3{ <b>`Player.SceneMarkers`</b>,
828 /// \anchor Player_SceneMarkers
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.
833 /// @skinning_v20 **[New Infolabel]** \link Player_SceneMarkers `Player.SceneMarkers`\endlink
836 /// \table_row3{ <b>`Player.HasSceneMarkers`</b>,
837 /// \anchor Player_HasSceneMarkers
839 /// @return **True** if the item being played has scene markers\, **False** otherwise
841 /// @skinning_v20 **[New Infolabel]** \link Player_HasSceneMarkers `Player.HasSceneMarkers`\endlink
844 /// \table_row3{ <b>`Player.Chapters`</b>,
845 /// \anchor Player_Chapters
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.
850 /// @skinning_v19 **[New Infolabel]** \link Player_Chapters `Player.Chapters`\endlink
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
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:
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.
929 /// \table_row3{ <b>`Player.HasPerformedSeek(interval)`</b>,
930 /// \anchor Player_HasPerformedSeek
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)
935 /// @skinning_v20 **[New Boolean Condition]** \link Player_HasPerformedSeek `Player.HasPerformedSeek(interval)`\endlink
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
946 /// @return The time to which the user is seeking.
949 /// \table_row3{ <b>`Player.SeekOffset([format])`</b>,
950 /// \anchor Player_SeekOffset_format
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.
956 /// @note **Example:** user presses BigStepForward\, player.seekoffset returns +10:00
959 /// \table_row3{ <b>`Player.SeekStepSize`</b>,
960 /// \anchor Player_SeekStepSize
962 /// @return The seek step size.
965 /// @skinning_v15 **[New Infolabel]** \link Player_SeekStepSize `Player.SeekStepSize`\endlink
968 /// \table_row3{ <b>`Player.TimeRemaining([format])`</b>,
969 /// \anchor Player_TimeRemaining_format
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.
976 /// \table_row3{ <b>`Player.TimeSpeed`</b>,
977 /// \anchor Player_TimeSpeed
979 /// @return The time and the playspeed formatted: "1:23 (2x)".
982 /// \table_row3{ <b>`Player.Time([format])`</b>,
983 /// \anchor Player_Time_format
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.
990 /// \table_row3{ <b>`Player.Duration([format])`</b>,
991 /// \anchor Player_Duration_format
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.
998 /// \table_row3{ <b>`Player.FinishTime([format])`</b>,
999 /// \anchor Player_FinishTime_format
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.
1006 /// \table_row3{ <b>`Player.StartTime([format])`</b>,
1007 /// \anchor Player_StartTime_format
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.
1014 /// \table_row3{ <b>`Player.SeekNumeric([format])`</b>,
1015 /// \anchor Player_SeekNumeric_format
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.
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
1038 /// @return **True** if the currently playing video is decoded in hardware.
1040 /// @skinning_v17 **[New Boolean Condition]** \link Player_Process_videohwdecoder `Player.Process(videohwdecoder)`\endlink
1043 /// \table_row3{ <b>`Player.Process(videodecoder)`</b>,
1044 /// \anchor Player_Process_videodecoder
1046 /// @return The videodecoder name of the currently playing video.
1048 /// @skinning_v17 **[New Infolabel]** \link Player_Process_videodecoder `Player.Process(videodecoder)`\endlink
1051 /// \table_row3{ <b>`Player.Process(deintmethod)`</b>,
1052 /// \anchor Player_Process_deintmethod
1054 /// @return The deinterlace method of the currently playing video.
1056 /// @skinning_v17 **[New Infolabel]** \link Player_Process_deintmethod `Player.Process(deintmethod)`\endlink
1059 /// \table_row3{ <b>`Player.Process(pixformat)`</b>,
1060 /// \anchor Player_Process_pixformat
1062 /// @return The pixel format of the currently playing video.
1064 /// @skinning_v17 **[New Infolabel]** \link Player_Process_pixformat `Player.Process(pixformat)`\endlink
1067 /// \table_row3{ <b>`Player.Process(videowidth)`</b>,
1068 /// \anchor Player_Process_videowidth
1070 /// @return The width of the currently playing video.
1072 /// @skinning_v17 **[New Infolabel]** \link Player_Process_videowidth `Player.Process(videowidth)`\endlink
1075 /// \table_row3{ <b>`Player.Process(videoheight)`</b>,
1076 /// \anchor Player_Process_videoheight
1078 /// @return The width of the currently playing video.
1080 /// @skinning_v17 **[New Infolabel]** \link Player_Process_videoheight `Player.Process(videoheight)`\endlink
1083 /// \table_row3{ <b>`Player.Process(videoscantype)`</b>,
1084 /// \anchor Player_Process_videoscantype
1086 /// @return The scan type identifier of the currently playing video **p** (for progressive) or **i** (for interlaced).
1088 /// @skinning_v20 **[New Infolabel]** \link Player_Process_videoscantype `Player.Process(videoscantype)`\endlink
1091 /// \table_row3{ <b>`Player.Process(videofps)`</b>,
1092 /// \anchor Player_Process_videofps
1094 /// @return The video framerate of the currently playing video.
1096 /// @skinning_v17 **[New Infolabel]** \link Player_Process_videofps `Player.Process(videofps)`\endlink
1099 /// \table_row3{ <b>`Player.Process(videodar)`</b>,
1100 /// \anchor Player_Process_videodar
1102 /// @return The display aspect ratio of the currently playing video.
1104 /// @skinning_v17 **[New Infolabel]** \link Player_Process_videodar `Player.Process(videodar)`\endlink
1107 /// \table_row3{ <b>`Player.Process(audiodecoder)`</b>,
1108 /// \anchor Player_Process_audiodecoder
1110 /// @return The audiodecoder name of the currently playing item.
1112 /// @skinning_v17 **[New Infolabel]** \link Player_Process_videodar `Player.Process(audiodecoder)`\endlink
1115 /// \table_row3{ <b>`Player.Process(audiochannels)`</b>,
1116 /// \anchor Player_Process_audiochannels
1118 /// @return The audiodecoder name of the currently playing item.
1120 /// @skinning_v17 **[New Infolabel]** \link Player_Process_audiochannels `Player.Process(audiochannels)`\endlink
1123 /// \table_row3{ <b>`Player.Process(audiosamplerate)`</b>,
1124 /// \anchor Player_Process_audiosamplerate
1126 /// @return The samplerate of the currently playing item.
1128 /// @skinning_v17 **[New Infolabel]** \link Player_Process_audiosamplerate `Player.Process(audiosamplerate)`\endlink
1131 /// \table_row3{ <b>`Player.Process(audiobitspersample)`</b>,
1132 /// \anchor Player_Process_audiobitspersample
1134 /// @return The bits per sample of the currently playing item.
1136 /// @skinning_v17 **[New Infolabel]** \link Player_Process_audiobitspersample `Player.Process(audiobitspersample)`\endlink
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
1160 /// \table_h3{ Labels, Type, Description }
1161 /// \table_row3{ <b>`Weather.IsFetched`</b>,
1162 /// \anchor Weather_IsFetched
1164 /// @return **True** if the weather data has been downloaded.
1167 /// \table_row3{ <b>`Weather.Conditions`</b>,
1168 /// \anchor Weather_Conditions
1170 /// @return The current weather conditions as textual description.
1171 /// @note This is looked up in a background process.
1174 /// \table_row3{ <b>`Weather.ConditionsIcon`</b>,
1175 /// \anchor Weather_ConditionsIcon
1177 /// @return The current weather conditions as an icon.
1178 /// @note This is looked up in a background process.
1181 /// \table_row3{ <b>`Weather.Temperature`</b>,
1182 /// \anchor Weather_Temperature
1184 /// @return The current weather temperature.
1187 /// \table_row3{ <b>`Weather.Location`</b>,
1188 /// \anchor Weather_Location
1190 /// @return The city/town which the above two items are for.
1193 /// \table_row3{ <b>`Weather.Fanartcode`</b>,
1194 /// \anchor Weather_fanartcode
1196 /// @return The current weather fanartcode.
1199 /// \table_row3{ <b>`Weather.Plugin`</b>,
1200 /// \anchor Weather_plugin
1202 /// @return The current weather plugin.
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
1220 /// \table_h3{ Labels, Type, Description }
1221 /// \table_row3{ <b>`System.AlarmLessOrEqual(alarmname\,seconds)`</b>,
1222 /// \anchor System_AlarmLessOrEqual
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:
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
1233 /// \table_row3{ <b>`System.HasNetwork`</b>,
1234 /// \anchor System_HasNetwork
1236 /// @return **True** if the Kodi host has a network available.
1239 /// \table_row3{ <b>`System.HasMediadvd`</b>,
1240 /// \anchor System_HasMediadvd
1242 /// @return **True** if there is a CD or DVD in the DVD-ROM drive.
1245 /// \table_row3{ <b>`System.HasMediaAudioCD`</b>,
1246 /// \anchor System_HasMediaAudioCD
1248 /// @return **True** if there is an audio CD in the optical drive. **False** if no drive
1249 /// available\, empty drive or other medium.
1251 /// @skinning_v18 **[New Boolean Condition]** \link System_HasMediaAudioCD
1252 /// `System.HasMediaAudioCD` \endlink <p>
1254 /// \table_row3{ <b>`System.DVDReady`</b>,
1255 /// \anchor System_DVDReady
1257 /// @return **True** if the disc is ready to use.
1260 /// \table_row3{ <b>`System.TrayOpen`</b>,
1261 /// \anchor System_TrayOpen
1263 /// @return **True** if the disc tray is open.
1266 /// \table_row3{ <b>`System.HasLocks`</b>,
1267 /// \anchor System_HasLocks
1269 /// @return **True** if the system has an active lock mode.
1272 /// \table_row3{ <b>`System.IsMaster`</b>,
1273 /// \anchor System_IsMaster
1275 /// @return **True** if the system is in master mode.
1278 /// \table_row3{ <b>`System.ShowExitButton`</b>,
1279 /// \anchor System_ShowExitButton
1281 /// @return **True** if the exit button should be shown (configurable via advanced settings).
1284 /// \table_row3{ <b>`System.DPMSActive`</b>,
1285 /// \anchor System_DPMSActive
1287 /// @return **True** if DPMS (VESA Display Power Management Signaling) mode is active.
1290 /// \table_row3{ <b>`System.IsStandalone`</b>,
1291 /// \anchor System_IsStandalone
1293 /// @return **True** if Kodi is running in standalone mode.
1296 /// \table_row3{ <b>`System.IsFullscreen`</b>,
1297 /// \anchor System_IsFullscreen
1299 /// @return **True** if Kodi is running fullscreen.
1302 /// \table_row3{ <b>`System.LoggedOn`</b>,
1303 /// \anchor System_LoggedOn
1305 /// @return **True** if a user is currently logged on under a profile.
1308 /// \table_row3{ <b>`System.HasLoginScreen`</b>,
1309 /// \anchor System_HasLoginScreen
1311 /// @return **True** if the profile login screen is enabled.
1314 /// \table_row3{ <b>`System.HasPVR`</b>,
1315 /// \anchor System_HasPVR
1317 /// @return **True** if PVR is supported from Kodi.
1318 /// @note normally always true
1321 /// \table_row3{ <b>`System.HasPVRAddon`</b>,
1322 /// \anchor System_HasPVRAddon
1324 /// @return **True** if at least one pvr client addon is installed and enabled.
1325 /// @param id - addon id of the PVR addon
1327 /// @skinning_v17 **[New Boolean Condition]** \link System_HasPVRAddon
1328 /// `System.HasPVRAddon`\endlink <p>
1330 /// \table_row3{ <b>`System.HasCMS`</b>,
1331 /// \anchor System_HasCMS
1333 /// @return **True** if colour management is supported from Kodi.
1334 /// @note currently only supported for OpenGL
1336 /// @skinning_v17 **[New Boolean Condition]** \link System_HasCMS `System.HasCMS`\endlink
1339 /// \table_row3{ <b>`System.HasActiveModalDialog`</b>,
1340 /// \anchor System_HasActiveModalDialog
1342 /// @return **True** if a modal dialog is active.
1344 /// @skinning_v18 **[New Boolean Condition]** \link System_HasActiveModalDialog
1345 /// `System.HasActiveModalDialog`\endlink <p>
1347 /// \table_row3{ <b>`System.HasVisibleModalDialog`</b>,
1348 /// \anchor System_HasVisibleModalDialog
1350 /// @return **True** if a modal dialog is visible.
1352 /// @skinning_v18 **[New Boolean Condition]** \link System_HasVisibleModalDialog
1353 /// `System.HasVisibleModalDialog`\endlink <p>
1355 /// \table_row3{ <b>`System.Platform.Linux`</b>,
1356 /// \anchor System_PlatformLinux
1358 /// @return **True** if Kodi is running on a linux/unix based computer.
1361 /// \table_row3{ <b>`System.Platform.Windows`</b>,
1362 /// \anchor System_PlatformWindows
1364 /// @return **True** if Kodi is running on a windows based computer.
1367 /// \table_row3{ <b>`System.Platform.UWP`</b>,
1368 /// \anchor System_PlatformUWP
1370 /// @return **True** if Kodi is running on Universal Windows Platform (UWP).
1372 /// @skinning_v18 **[New Boolean Condition]** \link System_PlatformUWP
1373 /// `System.Platform.UWP`\endlink <p>
1375 /// \table_row3{ <b>`System.Platform.OSX`</b>,
1376 /// \anchor System_PlatformOSX
1378 /// @return **True** if Kodi is running on an OSX based computer.
1381 /// \table_row3{ <b>`System.Platform.IOS`</b>,
1382 /// \anchor System_PlatformIOS
1384 /// @return **True** if Kodi is running on an IOS device.
1387 /// \table_row3{ <b>`System.Platform.TVOS`</b>,
1388 /// \anchor System_PlatformTVOS
1390 /// @return **True** if Kodi is running on a tvOS device.
1392 /// @skinning_v19 **[New Boolean Condition]** \link System_PlatformTVOS
1393 /// `System.Platform.TVOS`\endlink <p>
1395 /// \table_row3{ <b>`System.Platform.Darwin`</b>,
1396 /// \anchor System_PlatformDarwin
1398 /// @return **True** if Kodi is running on an OSX or IOS system.
1401 /// \table_row3{ <b>`System.Platform.Android`</b>,
1402 /// \anchor System_PlatformAndroid
1404 /// @return **True** if Kodi is running on an android device.
1407 /// \table_row3{ <b>`System.CanPowerDown`</b>,
1408 /// \anchor System_CanPowerDown
1410 /// @return **True** if Kodi can powerdown the system.
1413 /// \table_row3{ <b>`System.CanSuspend`</b>,
1414 /// \anchor System_CanSuspend
1416 /// @return **True** if Kodi can suspend the system.
1419 /// \table_row3{ <b>`System.CanHibernate`</b>,
1420 /// \anchor System_CanHibernate
1422 /// @return **True** if Kodi can hibernate the system.
1425 /// \table_row3{ <b>`System.HasHiddenInput`</b>,
1426 /// \anchor System_HasHiddenInput
1428 /// @return **True** when to osd keyboard/numeric dialog requests a
1429 /// password/pincode.
1431 /// @skinning_v16 **[New Boolean Condition]** \link System_HasHiddenInput
1432 /// `System.HasHiddenInput`\endlink <p>
1434 /// \table_row3{ <b>`System.CanReboot`</b>,
1435 /// \anchor System_CanReboot
1437 /// @return **True** if Kodi can reboot the system.
1440 /// \table_row3{ <b>`System.ScreenSaverActive`</b>,
1441 /// \anchor System_ScreenSaverActive
1443 /// @return **True** if ScreenSaver is active.
1446 /// \table_row3{ <b>`System.IdleShutdownInhibited`</b>,
1447 /// \anchor System_IdleShutdownInhibited
1449 /// @return **True** when shutdown on idle is disabled.
1452 /// \table_row3{ <b>`System.HasShutdown`</b>,
1453 /// \anchor System_HasShutdown
1455 /// @return **True** if Kodi can shutdown the system.
1458 /// \table_row3{ <b>`System.Time`</b>,
1459 /// \anchor System_Time
1461 /// @return The current time.
1464 /// \table_row3{ <b>`System.Time(format)`</b>,
1465 /// \anchor System_Time_format
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.
1472 /// \table_row3{ <b>`System.Time(startTime[\,endTime])`</b>,
1473 /// \anchor System_Time
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
1479 /// @note Time must be specified in the format HH:mm\, using
1480 /// a 24 hour clock.
1483 /// \table_row3{ <b>`System.Date`</b>,
1484 /// \anchor System_Date
1486 /// @return The current date.
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
1493 /// \table_row3{ <b>`System.Date(format)`</b>,
1494 /// \anchor System_Date_format
1496 /// @return The current date using a specified format.
1497 /// @param format - the format for the date. It can be one of the following
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
1511 /// \table_row3{ <b>`System.Date(startDate[\,endDate])`</b>,
1512 /// \anchor System_Date
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.
1520 /// \table_row3{ <b>`System.AlarmPos`</b>,
1521 /// \anchor System_AlarmPos
1523 /// @return The shutdown Timer position.
1526 /// \table_row3{ <b>`System.BatteryLevel`</b>,
1527 /// \anchor System_BatteryLevel
1529 /// @return The remaining battery level in range 0-100.
1532 /// \table_row3{ <b>`System.FreeSpace`</b>,
1533 /// \anchor System_FreeSpace
1535 /// @return The total Freespace on the drive.
1538 /// \table_row3{ <b>`System.UsedSpace`</b>,
1539 /// \anchor System_UsedSpace
1541 /// @return The total Usedspace on the drive.
1544 /// \table_row3{ <b>`System.TotalSpace`</b>,
1545 /// \anchor System_TotalSpace
1547 /// @return The total space on the drive.
1550 /// \table_row3{ <b>`System.UsedSpacePercent`</b>,
1551 /// \anchor System_UsedSpacePercent
1553 /// @return The total Usedspace Percent on the drive.
1556 /// \table_row3{ <b>`System.FreeSpacePercent`</b>,
1557 /// \anchor System_FreeSpacePercent
1559 /// @return The total Freespace Percent on the drive.
1562 /// \table_row3{ <b>`System.CPUTemperature`</b>,
1563 /// \anchor System_CPUTemperature
1565 /// @return The current CPU temperature.
1568 /// \table_row3{ <b>`System.CpuUsage`</b>,
1569 /// \anchor System_CpuUsage
1571 /// @return The the cpu usage for each individual cpu core.
1574 /// \table_row3{ <b>`System.GPUTemperature`</b>,
1575 /// \anchor System_GPUTemperature
1577 /// @return The current GPU temperature.
1580 /// \table_row3{ <b>`System.FanSpeed`</b>,
1581 /// \anchor System_FanSpeed
1583 /// @return The current fan speed.
1586 /// \table_row3{ <b>`System.BuildVersion`</b>,
1587 /// \anchor System_BuildVersion
1589 /// @return The version of build.
1592 /// \table_row3{ <b>`System.BuildVersionShort`</b>,
1593 /// \anchor System_BuildVersionShort
1595 /// @return The shorter string with version of build.
1598 /// \table_row3{ <b>`System.BuildDate`</b>,
1599 /// \anchor System_BuildDate
1601 /// @return The date of build.
1604 /// \table_row3{ <b>`System.BuildVersionCode`</b>,
1605 /// \anchor System_BuildVersionCode
1607 /// @return The version code of build.
1610 /// \table_row3{ <b>`System.BuildVersionGit`</b>,
1611 /// \anchor System_BuildVersionGit
1613 /// @return The git version of build.
1616 /// \table_row3{ <b>`System.FriendlyName`</b>,
1617 /// \anchor System_FriendlyName
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)"
1624 /// \table_row3{ <b>`System.FPS`</b>,
1625 /// \anchor System_FPS
1627 /// @return The current rendering speed (frames per second).
1630 /// \table_row3{ <b>`System.FreeMemory`</b>,
1631 /// \anchor System_FreeMemory
1633 /// @return The amount of free memory in Mb.
1636 /// \table_row3{ <b>`System.ScreenMode`</b>,
1637 /// \anchor System_ScreenMode
1639 /// @return The screenmode (eg windowed / fullscreen).
1642 /// \table_row3{ <b>`System.ScreenWidth`</b>,
1643 /// \anchor System_ScreenWidth
1645 /// @return The width of screen in pixels.
1648 /// \table_row3{ <b>`System.ScreenHeight`</b>,
1649 /// \anchor System_ScreenHeight
1651 /// @return The height of screen in pixels.
1654 /// \table_row3{ <b>`System.StartupWindow`</b>,
1655 /// \anchor System_StartupWindow
1657 /// @return The Window Kodi will load on startup.
1659 /// @skinning_v13 **[New Infolabel]** \link System_StartupWindow `System.StartupWindow`\endlink
1662 /// \table_row3{ <b>`System.CurrentWindow`</b>,
1663 /// \anchor System_CurrentWindow
1665 /// @return The current Window in use.
1668 /// \table_row3{ <b>`System.CurrentControl`</b>,
1669 /// \anchor System_CurrentControl
1671 /// @return The current focused control
1674 /// \table_row3{ <b>`System.CurrentControlId`</b>,
1675 /// \anchor System_CurrentControlId
1677 /// @return The ID of the currently focused control.
1680 /// \table_row3{ <b>`System.DVDLabel`</b>,
1681 /// \anchor System_DVDLabel
1683 /// @return the label of the disk in the DVD-ROM drive.
1686 /// \table_row3{ <b>`System.KernelVersion`</b>,
1687 /// \anchor System_KernelVersion
1689 /// @return The System kernel version.
1692 /// \table_row3{ <b>`System.OSVersionInfo`</b>,
1693 /// \anchor System_OSVersionInfo
1695 /// @return The system name + kernel version.
1698 /// \table_row3{ <b>`System.Uptime`</b>,
1699 /// \anchor System_Uptime
1701 /// @return The system current uptime.
1704 /// \table_row3{ <b>`System.TotalUptime`</b>,
1705 /// \anchor System_TotalUptime
1707 /// @return The system total uptime.
1710 /// \table_row3{ <b>`System.CpuFrequency`</b>,
1711 /// \anchor System_CpuFrequency
1713 /// @return The system cpu frequency.
1716 /// \table_row3{ <b>`System.ScreenResolution`</b>,
1717 /// \anchor System_ScreenResolution
1719 /// @return The screen resolution.
1722 /// \table_row3{ <b>`System.VideoEncoderInfo`</b>,
1723 /// \anchor System_VideoEncoderInfo
1725 /// @return The video encoder info.
1728 /// \table_row3{ <b>`System.InternetState`</b>,
1729 /// \anchor System_InternetState
1731 /// @return The internet state: connected or not connected.
1732 /// @warning Do not use to check status in a pythonscript since it is threaded.
1735 /// \table_row3{ <b>`System.Language`</b>,
1736 /// \anchor System_Language
1738 /// @return the current language.
1741 /// \table_row3{ <b>`System.ProfileName`</b>,
1742 /// \anchor System_ProfileName
1744 /// @return The user name of the currently logged in Kodi user
1747 /// \table_row3{ <b>`System.ProfileThumb`</b>,
1748 /// \anchor System_ProfileThumb
1750 /// @return The thumbnail image of the currently logged in Kodi user
1753 /// \table_row3{ <b>`System.ProfileCount`</b>,
1754 /// \anchor System_ProfileCount
1756 /// @return The number of defined profiles.
1759 /// \table_row3{ <b>`System.ProfileAutoLogin`</b>,
1760 /// \anchor System_ProfileAutoLogin
1762 /// @return The profile Kodi will auto login to.
1764 /// @skinning_v13 **[New Infolabel]** \link System_ProfileAutoLogin
1765 /// `System.ProfileAutoLogin`\endlink <p>
1767 /// \table_row3{ <b>`System.StereoscopicMode`</b>,
1768 /// \anchor System_StereoscopicMode
1770 /// @return The preferred stereoscopic mode.
1771 /// @note Configured in settings > video > playback).
1773 /// @skinning_v13 **[New Infolabel]** \link System_StereoscopicMode
1774 /// `System.StereoscopicMode`\endlink <p>
1776 /// \table_row3{ <b>`System.TemperatureUnits`</b>,
1777 /// \anchor System_TemperatureUnits
1779 /// @return the Celsius or the Fahrenheit symbol.
1782 /// \table_row3{ <b>`System.Progressbar`</b>,
1783 /// \anchor System_Progressbar
1785 /// @return The percentage of the currently active progress.
1788 /// \table_row3{ <b>`System.GetBool(boolean)`</b>,
1789 /// \anchor System_GetBool
1791 /// @return The value of any standard system boolean setting.
1792 /// @note Will not work with settings in advancedsettings.xml
1795 /// \table_row3{ <b>`System.Memory(type)`</b>,
1796 /// \anchor System_Memory
1798 /// @return The memory value depending on the requested type.
1799 /// @param type - Can be one of the following:
1801 /// - <b>free.percent</b>
1803 /// - <b>used.percent</b>
1807 /// \table_row3{ <b>`System.AddonTitle(id)`</b>,
1808 /// \anchor System_AddonTitle
1810 /// @return The title of the addon with the given id
1811 /// @param id - the addon id
1814 /// \table_row3{ <b>`System.AddonVersion(id)`</b>,
1815 /// \anchor System_AddonVersion
1817 /// @return The version of the addon with the given id.
1818 /// @param id - the addon id
1820 /// @skinning_v13 **[New Infolabel]** \link System_AddonVersion
1821 /// `System.AddonVersion(id)`\endlink <p>
1823 /// \table_row3{ <b>`System.AddonIcon(id)`</b>,
1824 /// \anchor System_AddonVersion
1826 /// @return The icon of the addon with the given id.
1827 /// @param id - the addon id
1830 /// \table_row3{ <b>`System.AddonUpdateCount`</b>,
1831 /// \anchor System_AddonUpdateCount
1833 /// @return The number of available addon updates.
1835 /// @skinning_v19 **[New Infolabel]** \link System_AddonUpdateCount `
1836 /// System.AddonUpdateCount`\endlink <p>
1838 /// \table_row3{ <b>`System.IdleTime(time)`</b>,
1839 /// \anchor System_IdleTime
1841 /// @return **True** if Kodi has had no input for `time` amount of seconds.
1842 /// @param time - elapsed seconds to check for idle activity.
1845 /// \table_row3{ <b>`System.PrivacyPolicy`</b>,
1846 /// \anchor System_PrivacyPolicy
1848 /// @return The official Kodi privacy policy.
1850 /// @skinning_v17 **[New Infolabel]** \link System_PrivacyPolicy `System.PrivacyPolicy`\endlink
1853 /// \table_row3{ <b>`System.SupportsCPUUsage`</b>,
1854 /// \anchor System_SupportsCPUUsage
1856 /// @return **True** if the system can provide CPU usage information.
1858 /// @skinning_v19 **[New Boolean Condition]** \link System_SupportsCPUUsage `
1859 /// System.SupportsCPUUsage`\endlink <p>
1861 /// \table_row3{ <b>`System.SupportedHDRTypes`</b>,
1862 /// \anchor System_SupportedHDRTypes
1864 /// @return The display's supported HDR types.
1866 /// @skinning_v20 **[New Infolabel]** \link System_SupportedHDRTypes `System.SupportedHDRTypes`\endlink
1869 /// \table_row3{ <b>`System.IsScreensaverInhibited`</b>,
1870 /// \anchor System_IsScreensaverInhibited
1872 /// @return **True** when screensaver on idle is disabled.
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
},
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
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
1962 /// \table_row3{ <b>`System.AddonIsEnabled(id)`</b>,
1963 /// \anchor System_AddonIsEnabled
1965 /// @return **True** if the specified addon is enabled on the system.
1966 /// @param id - The addon Id
1968 /// @skinning_v19 **[New Boolean Condition]** \link System_AddonIsEnabled `System.AddonIsEnabled(id)`\endlink
1971 /// \table_row3{ <b>`System.HasCoreId(id)`</b>,
1972 /// \anchor System_HasCoreId
1974 /// @return **True** if the CPU core with the given 'id' exists.
1975 /// @param id - the id of the CPU core
1978 /// \table_row3{ <b>`System.HasAlarm(alarm)`</b>,
1979 /// \anchor System_HasAlarm
1981 /// @return **True** if the system has the `alarm` alarm set.
1982 /// @param alarm - the name of the alarm
1985 /// \table_row3{ <b>`System.CoreUsage(id)`</b>,
1986 /// \anchor System_CoreUsage
1988 /// @return the usage of the CPU core with the given 'id'
1989 /// @param id - the id of the CPU core
1992 /// \table_row3{ <b>`System.Setting(hidewatched)`</b>,
1993 /// \anchor System_Setting
1995 /// @return **True** if 'hide watched items' is selected.
1998 /// \table_row3{ <b>`System.Setting(hideunwatchedepisodethumbs)`</b>,
1999 /// \anchor System_Setting_HideUnwatchedEpisodeThumbs
2001 /// @return **True** if 'hide unwatched episode setting is enabled'\, **False** otherwise.
2003 /// @skinning_v20 **[New Boolean Condition]** \link System_Setting_HideUnwatchedEpisodeThumbs `System.Setting(hideunwatchedepisodethumbs)`\endlink
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
2019 /// \table_h3{ Labels, Type, Description }
2020 /// \table_row3{ <b>`Network.IsDHCP`</b>,
2021 /// \anchor Network_IsDHCP
2023 /// @return **True** if the network type is DHCP.
2024 /// @note Network type can be either DHCP or FIXED
2027 /// \table_row3{ <b>`Network.IPAddress`</b>,
2028 /// \anchor Network_IPAddress
2030 /// @return The system's IP Address. e.g. 192.168.1.15
2033 /// \table_row3{ <b>`Network.LinkState`</b>,
2034 /// \anchor Network_LinkState
2036 /// @return The network linkstate e.g. 10mbit/100mbit etc.
2039 /// \table_row3{ <b>`Network.MacAddress`</b>,
2040 /// \anchor Network_MacAddress
2042 /// @return The system's MAC address.
2045 /// \table_row3{ <b>`Network.SubnetMask`</b>,
2046 /// \anchor Network_SubnetMask
2048 /// @return The network subnet mask.
2051 /// \table_row3{ <b>`Network.GatewayAddress`</b>,
2052 /// \anchor Network_GatewayAddress
2054 /// @return The network gateway address.
2057 /// \table_row3{ <b>`Network.DNS1Address`</b>,
2058 /// \anchor Network_DNS1Address
2060 /// @return The network DNS 1 address.
2063 /// \table_row3{ <b>`Network.DNS2Address`</b>,
2064 /// \anchor Network_DNS2Address
2066 /// @return The network DNS 2 address.
2069 /// \table_row3{ <b>`Network.DHCPAddress`</b>,
2070 /// \anchor Network_DHCPAddress
2072 /// @return The DHCP IP address.
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
2091 /// \table_h3{ Labels, Type, Description }
2092 /// \table_row3{ <b>`MusicPartyMode.Enabled`</b>,
2093 /// \anchor MusicPartyMode_Enabled
2095 /// @return **True** if Party Mode is enabled.
2098 /// \table_row3{ <b>`MusicPartyMode.SongsPlayed`</b>,
2099 /// \anchor MusicPartyMode_SongsPlayed
2101 /// @return The number of songs played during Party Mode.
2104 /// \table_row3{ <b>`MusicPartyMode.MatchingSongs`</b>,
2105 /// \anchor MusicPartyMode_MatchingSongs
2107 /// @return The number of songs available to Party Mode.
2110 /// \table_row3{ <b>`MusicPartyMode.MatchingSongsPicked`</b>,
2111 /// \anchor MusicPartyMode_MatchingSongsPicked
2113 /// @return The number of songs picked already for Party Mode.
2116 /// \table_row3{ <b>`MusicPartyMode.MatchingSongsLeft`</b>,
2117 /// \anchor MusicPartyMode_MatchingSongsLeft
2119 /// @return The number of songs left to be picked from for Party Mode.
2122 /// \table_row3{ <b>`MusicPartyMode.RelaxedSongsPicked`</b>,
2123 /// \anchor MusicPartyMode_RelaxedSongsPicked
2125 /// @todo Not currently used
2128 /// \table_row3{ <b>`MusicPartyMode.RandomSongsPicked`</b>,
2129 /// \anchor MusicPartyMode_RandomSongsPicked
2131 /// @return The number of unique random songs picked during Party Mode.
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
2148 /// \table_h3{ Labels, Type, Description }
2149 /// \table_row3{ <b>`MusicPlayer.Offset(number).Exists`</b>,
2150 /// \anchor MusicPlayer_Offset
2152 /// @return **True** if the music players playlist has a song queued in
2153 /// position (number).
2154 /// @param number - song position
2157 /// \table_row3{ <b>`MusicPlayer.Title`</b>,
2158 /// \anchor MusicPlayer_Title
2160 /// @return The title of the currently playing song.
2163 /// \table_row3{ <b>`MusicPlayer.offset(number).Title`</b>,
2164 /// \anchor MusicPlayer_Offset_Title
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
2171 /// \table_row3{ <b>`MusicPlayer.Position(number).Title`</b>,
2172 /// \anchor MusicPlayer_Position_Title
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
2179 /// \table_row3{ <b>`MusicPlayer.Album`</b>,
2180 /// \anchor MusicPlayer_Album
2182 /// @return The album from which the current song is from.
2185 /// \table_row3{ <b>`MusicPlayer.offset(number).Album`</b>,
2186 /// \anchor MusicPlayer_OffSet_Album
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
2193 /// \table_row3{ <b>`MusicPlayer.Position(number).Album`</b>,
2194 /// \anchor MusicPlayer_Position_Album
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
2201 /// \table_row3{ <b>`MusicPlayer.Property(Album_Mood)`</b>,
2202 /// \anchor MusicPlayer_Property_Album_Mood
2204 /// @return The moods of the currently playing Album
2207 /// \table_row3{ <b>`MusicPlayer.Property(Role.Composer)`</b>,
2208 /// \anchor MusicPlayer_Property_Role_Composer
2210 /// @return The name of the person who composed the selected song.
2212 /// @skinning_v17 **[New Infolabel]** \link MusicPlayer_Property_Role_Composer `MusicPlayer.Property(Role.Composer)`\endlink
2215 /// \table_row3{ <b>`MusicPlayer.Property(Role.Conductor)`</b>,
2216 /// \anchor MusicPlayer_Property_Role_Conductor
2218 /// @return The name of the person who conducted the selected song.
2220 /// @skinning_v17 **[New Infolabel]** \link MusicPlayer_Property_Role_Conductor `MusicPlayer.Property(Role.Conductor)`\endlink
2223 /// \table_row3{ <b>`MusicPlayer.Property(Role.Orchestra)`</b>,
2224 /// \anchor MusicPlayer_Property_Role_Orchestra
2226 /// @return The name of the orchestra performing the selected song.
2228 /// @skinning_v17 **[New Infolabel]** \link MusicPlayer_Property_Role_Orchestra `MusicPlayer.Property(Role.Orchestra)`\endlink
2231 /// \table_row3{ <b>`MusicPlayer.Property(Role.Lyricist)`</b>,
2232 /// \anchor MusicPlayer_Property_Role_Lyricist
2234 /// @return The name of the person who wrote the lyrics of the selected song.
2236 /// @skinning_v17 **[New Infolabel]** \link MusicPlayer_Property_Role_Lyricist `MusicPlayer.Property(Role.Lyricist)`\endlink
2239 /// \table_row3{ <b>`MusicPlayer.Property(Role.Remixer)`</b>,
2240 /// \anchor MusicPlayer_Property_Role_Remixer
2242 /// @return The name of the person who remixed the selected song.
2244 /// @skinning_v17 **[New Infolabel]** \link MusicPlayer_Property_Role_Remixer `MusicPlayer.Property(Role.Remixer)`\endlink
2247 /// \table_row3{ <b>`MusicPlayer.Property(Role.Arranger)`</b>,
2248 /// \anchor MusicPlayer_Property_Role_Arranger
2250 /// @return The name of the person who arranged the selected song.
2252 /// @skinning_v17 **[New Infolabel]** \link MusicPlayer_Property_Role_Arranger `MusicPlayer.Property(Role.Arranger)`\endlink
2255 /// \table_row3{ <b>`MusicPlayer.Property(Role.Engineer)`</b>,
2256 /// \anchor MusicPlayer_Property_Role_Engineer
2258 /// @return The name of the person who was the engineer of the selected song.
2260 /// @skinning_v17 **[New Infolabel]** \link MusicPlayer_Property_Role_Engineer `MusicPlayer.Property(Role.Engineer)`\endlink
2263 /// \table_row3{ <b>`MusicPlayer.Property(Role.Producer)`</b>,
2264 /// \anchor MusicPlayer_Property_Role_Producer
2266 /// @return The name of the person who produced the selected song.
2268 /// @skinning_v17 **[New Infolabel]** \link MusicPlayer_Property_Role_Producer `MusicPlayer.Property(Role.Producer)`\endlink
2271 /// \table_row3{ <b>`MusicPlayer.Property(Role.DJMixer)`</b>,
2272 /// \anchor MusicPlayer_Property_Role_DJMixer
2274 /// @return The name of the dj who remixed the selected song.
2276 /// @skinning_v17 **[New Infolabel]** \link MusicPlayer_Property_Role_DJMixer `MusicPlayer.Property(Role.DJMixer)`\endlink
2279 /// \table_row3{ <b>`MusicPlayer.Property(Role.Mixer)`</b>,
2280 /// \anchor MusicPlayer_Property_Role_Mixer
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.
2290 /// @skinning_v17 **[New Infolabel]** \link MusicPlayer_Property_Role_Mixer `MusicPlayer.Property(Role.Mixer)`\endlink
2293 /// \table_row3{ <b>`MusicPlayer.Property(Album_Mood)`</b>,
2294 /// \anchor MusicPlayer_Property_Album_Mood
2296 /// @return the moods of the currently playing Album
2299 /// \table_row3{ <b>`MusicPlayer.Property(Album_Style)`</b>,
2300 /// \anchor MusicPlayer_Property_Album_Style
2302 /// @return the styles of the currently playing Album.
2305 /// \table_row3{ <b>`MusicPlayer.Property(Album_Theme)`</b>,
2306 /// \anchor MusicPlayer_Property_Album_Theme
2308 /// @return The themes of the currently playing Album
2311 /// \table_row3{ <b>`MusicPlayer.Property(Album_Type)`</b>,
2312 /// \anchor MusicPlayer_Property_Album_Type
2314 /// @return The album type (e.g. compilation\, enhanced\, explicit lyrics) of the
2315 /// currently playing album.
2318 /// \table_row3{ <b>`MusicPlayer.Property(Album_Label)`</b>,
2319 /// \anchor MusicPlayer_Property_Album_Label
2321 /// @return The record label of the currently playing album.
2324 /// \table_row3{ <b>`MusicPlayer.Property(Album_Description)`</b>,
2325 /// \anchor MusicPlayer_Property_Album_Description
2327 /// @return A review of the currently playing album
2330 /// \table_row3{ <b>`MusicPlayer.Artist`</b>,
2331 /// \anchor MusicPlayer_Artist
2333 /// @return Artist(s) of current song.
2336 /// \table_row3{ <b>`MusicPlayer.offset(number).Artist`</b>,
2337 /// \anchor MusicPlayer_Offset_Artist
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
2345 /// \table_row3{ <b>`MusicPlayer.Position(number).Artist`</b>,
2346 /// \anchor MusicPlayer_Position_Artist
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
2354 /// \table_row3{ <b>`MusicPlayer.AlbumArtist`</b>,
2355 /// \anchor MusicPlayer_AlbumArtist
2357 /// @return The album artist of the currently playing song.
2360 /// \table_row3{ <b>`MusicPlayer.Cover`</b>,
2361 /// \anchor MusicPlayer_Cover
2363 /// @return The album cover of currently playing song.
2366 /// \table_row3{ <b>`MusicPlayer.Property(Artist_Sortname)`</b>,
2367 /// \anchor MusicPlayer_Property_Artist_Sortname
2369 /// @return The sortname of the currently playing Artist.
2371 /// @skinning_v18 **[New Infolabel]** \link MusicPlayer_Property_Artist_Sortname `MusicPlayer.Property(Artist_Sortname)`\endlink
2374 /// \table_row3{ <b>`MusicPlayer.Property(Artist_Type)`</b>,
2375 /// \anchor MusicPlayer_Property_Artist_Type
2377 /// @return The type of the currently playing Artist - person\,
2378 /// group\, orchestra\, choir etc.
2380 /// @skinning_v18 **[New Infolabel]** \link MusicPlayer_Property_Artist_Type `MusicPlayer.Property(Artist_Type)`\endlink
2383 /// \table_row3{ <b>`MusicPlayer.Property(Artist_Gender)`</b>,
2384 /// \anchor MusicPlayer_Property_Artist_Gender
2386 /// @return The gender of the currently playing Artist - male\,
2389 /// @skinning_v18 **[New Infolabel]** \link MusicPlayer_Property_Artist_Gender `MusicPlayer.Property(Artist_Gender)`\endlink
2392 /// \table_row3{ <b>`MusicPlayer.Property(Artist_Disambiguation)`</b>,
2393 /// \anchor MusicPlayer_Property_Artist_Disambiguation
2395 /// @return A brief description of the currently playing Artist that differentiates them
2396 /// from others with the same name.
2398 /// @skinning_v18 **[New Infolabel]** \link MusicPlayer_Property_Artist_Disambiguation `MusicPlayer.Property(Artist_Disambiguation)`\endlink
2401 /// \table_row3{ <b>`MusicPlayer.Property(Artist_Born)`</b>,
2402 /// \anchor MusicPlayer_Property_Artist_Born
2404 /// @return The date of Birth of the currently playing Artist.
2407 /// \table_row3{ <b>`MusicPlayer.Property(Artist_Died)`</b>,
2408 /// \anchor MusicPlayer_Property_Artist_Died
2410 /// @return The date of Death of the currently playing Artist.
2413 /// \table_row3{ <b>`MusicPlayer.Property(Artist_Formed)`</b>,
2414 /// \anchor MusicPlayer_Property_Artist_Formed
2416 /// @return The Formation date of the currently playing Artist/Band.
2419 /// \table_row3{ <b>`MusicPlayer.Property(Artist_Disbanded)`</b>,
2420 /// \anchor MusicPlayer_Property_Artist_Disbanded
2422 /// @return The disbanding date of the currently playing Artist/Band.
2425 /// \table_row3{ <b>`MusicPlayer.Property(Artist_YearsActive)`</b>,
2426 /// \anchor MusicPlayer_Property_Artist_YearsActive
2428 /// @return The years the currently Playing artist has been active.
2431 /// \table_row3{ <b>`MusicPlayer.Property(Artist_Instrument)`</b>,
2432 /// \anchor MusicPlayer_Property_Artist_Instrument
2434 /// @return The instruments played by the currently playing artist.
2437 /// \table_row3{ <b>`MusicPlayer.Property(Artist_Description)`</b>,
2438 /// \anchor MusicPlayer_Property_Artist_Description
2440 /// @return A biography of the currently playing artist.
2443 /// \table_row3{ <b>`MusicPlayer.Property(Artist_Mood)`</b>,
2444 /// \anchor MusicPlayer_Property_Artist_Mood
2446 /// @return The moods of the currently playing artist.
2449 /// \table_row3{ <b>`MusicPlayer.Property(Artist_Style)`</b>,
2450 /// \anchor MusicPlayer_Property_Artist_Style
2452 /// @return The styles of the currently playing artist.
2455 /// \table_row3{ <b>`MusicPlayer.Property(Artist_Genre)`</b>,
2456 /// \anchor MusicPlayer_Property_Artist_Genre
2458 /// @return The genre of the currently playing artist.
2461 /// \table_row3{ <b>`MusicPlayer.Genre`</b>,
2462 /// \anchor MusicPlayer_Genre
2464 /// @return The genre(s) of current song.
2467 /// \table_row3{ <b>`MusicPlayer.offset(number).Genre`</b>,
2468 /// \anchor MusicPlayer_OffSet_Genre
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
2476 /// \table_row3{ <b>`MusicPlayer.Position(number).Genre`</b>,
2477 /// \anchor MusicPlayer_Position_Genre
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
2486 /// \table_row3{ <b>`MusicPlayer.Lyrics`</b>,
2487 /// \anchor MusicPlayer_Lyrics
2489 /// @return The lyrics of current song stored in ID tag info.
2492 /// \table_row3{ <b>`MusicPlayer.Year`</b>,
2493 /// \anchor MusicPlayer_Year
2495 /// @return The year of release of current song.
2498 /// \table_row3{ <b>`MusicPlayer.offset(number).Year`</b>,
2499 /// \anchor MusicPlayer_Offset_Year
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.
2506 /// \table_row3{ <b>`MusicPlayer.Position(number).Year`</b>,
2507 /// \anchor MusicPlayer_Position_Year
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
2515 /// \table_row3{ <b>`MusicPlayer.Rating`</b>,
2516 /// \anchor MusicPlayer_Rating
2518 /// @return The numeric Rating of current song (1-10).
2521 /// \table_row3{ <b>`MusicPlayer.offset(number).Rating`</b>,
2522 /// \anchor MusicPlayer_OffSet_Rating
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
2529 /// \table_row3{ <b>`MusicPlayer.Position(number).Rating`</b>,
2530 /// \anchor MusicPlayer_Position_Rating
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
2537 /// \table_row3{ <b>`MusicPlayer.RatingAndVotes`</b>,
2538 /// \anchor MusicPlayer_RatingAndVotes
2540 /// @return The scraped rating and votes of currently playing song\, if it's in the database.
2543 /// \table_row3{ <b>`MusicPlayer.UserRating`</b>,
2544 /// \anchor MusicPlayer_UserRating
2546 /// @return The scraped rating of the currently playing song (1-10).
2548 /// @skinning_v17 **[New Infolabel]** \link MusicPlayer_UserRating `MusicPlayer.UserRating`\endlink
2551 /// \table_row3{ <b>`MusicPlayer.Votes`</b>,
2552 /// \anchor MusicPlayer_Votes
2554 /// @return The scraped votes of currently playing song\, if it's in the database.
2557 /// \table_row3{ <b>`MusicPlayer.DiscNumber`</b>,
2558 /// \anchor MusicPlayer_DiscNumber
2560 /// @return The Disc Number of current song stored in ID tag info.
2563 /// \table_row3{ <b>`MusicPlayer.offset(number).DiscNumber`</b>,
2564 /// \anchor MusicPlayer_Offset_DiscNumber
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
2572 /// \table_row3{ <b>`MusicPlayer.Position(number).DiscNumber`</b>,
2573 /// \anchor MusicPlayer_Position_DiscNumber
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.
2581 /// \table_row3{ <b>`MusicPlayer.Comment`</b>,
2582 /// \anchor MusicPlayer_Comment
2584 /// @return The Comment of current song stored in ID tag info.
2587 /// \table_row3{ <b>`MusicPlayer.offset(number).Comment`</b>,
2588 /// \anchor MusicPlayer_Offset_Comment
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
2596 /// \table_row3{ <b>`MusicPlayer.Position(number).Comment`</b>,
2597 /// \anchor MusicPlayer_Position_Comment
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.
2605 /// \table_row3{ <b>`MusicPlayer.Contributors`</b>,
2606 /// \anchor MusicPlayer_Contributors
2608 /// @return The list of all people who've contributed to the currently playing song
2610 /// @skinning_v17 **[New Infolabel]** \link MusicPlayer_Contributors `MusicPlayer.Contributors`\endlink
2613 /// \table_row3{ <b>`MusicPlayer.ContributorAndRole`</b>,
2614 /// \anchor MusicPlayer_ContributorAndRole
2616 /// @return The list of all people and their role who've contributed to the currently playing song.
2618 /// @skinning_v17 **[New Infolabel]** \link MusicPlayer_ContributorAndRole `MusicPlayer.ContributorAndRole`\endlink
2621 /// \table_row3{ <b>`MusicPlayer.Mood`</b>,
2622 /// \anchor MusicPlayer_Mood
2624 /// @return The mood of the currently playing song.
2626 /// @skinning_v17 **[New Infolabel]** \link MusicPlayer_Mood `MusicPlayer.Mood`\endlink
2629 /// \table_row3{ <b>`MusicPlayer.PlaylistPlaying`</b>,
2630 /// \anchor MusicPlayer_PlaylistPlaying
2632 /// @return **True** if a playlist is currently playing.
2635 /// \table_row3{ <b>`MusicPlayer.Exists(relative\,position)`</b>,
2636 /// \anchor MusicPlayer_Exists
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.
2644 /// \table_row3{ <b>`MusicPlayer.HasPrevious`</b>,
2645 /// \anchor MusicPlayer_HasPrevious
2647 /// @return **True** if the music player has a a Previous Song in the Playlist.
2650 /// \table_row3{ <b>`MusicPlayer.HasNext`</b>,
2651 /// \anchor MusicPlayer_HasNext
2653 /// @return **True** if the music player has a next song queued in the Playlist.
2656 /// \table_row3{ <b>`MusicPlayer.PlayCount`</b>,
2657 /// \anchor MusicPlayer_PlayCount
2659 /// @return The play count of currently playing song\, if it's in the database.
2662 /// \table_row3{ <b>`MusicPlayer.LastPlayed`</b>,
2663 /// \anchor MusicPlayer_LastPlayed
2665 /// @return The last play date of currently playing song\, if it's in the database.
2668 /// \table_row3{ <b>`MusicPlayer.TrackNumber`</b>,
2669 /// \anchor MusicPlayer_TrackNumber
2671 /// @return The track number of current song.
2674 /// \table_row3{ <b>`MusicPlayer.offset(number).TrackNumber`</b>,
2675 /// \anchor MusicPlayer_Offset_TrackNumber
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
2683 /// \table_row3{ <b>`MusicPlayer.Position(number).TrackNumber`</b>,
2684 /// \anchor MusicPlayer_Position_TrackNumber
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
2692 /// \table_row3{ <b>`MusicPlayer.Duration`</b>,
2693 /// \anchor MusicPlayer_Duration
2695 /// @return The duration of the current song.
2698 /// \table_row3{ <b>`MusicPlayer.offset(number).Duration`</b>,
2699 /// \anchor MusicPlayer_Offset_Duration
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
2707 /// \table_row3{ <b>`MusicPlayer.Position(number).Duration`</b>,
2708 /// \anchor MusicPlayer_Position_Duration
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
2716 /// \table_row3{ <b>`MusicPlayer.BitRate`</b>,
2717 /// \anchor MusicPlayer_BitRate
2719 /// @return The bitrate of current song.
2722 /// \table_row3{ <b>`MusicPlayer.Channels`</b>,
2723 /// \anchor MusicPlayer_Channels
2725 /// @return The number of channels of current song.
2728 /// \table_row3{ <b>`MusicPlayer.BitsPerSample`</b>,
2729 /// \anchor MusicPlayer_BitsPerSample
2731 /// @return The number of bits per sample of current song.
2734 /// \table_row3{ <b>`MusicPlayer.SampleRate`</b>,
2735 /// \anchor MusicPlayer_SampleRate
2737 /// @return The samplerate of current playing song.
2740 /// \table_row3{ <b>`MusicPlayer.Codec`</b>,
2741 /// \anchor MusicPlayer_Codec
2743 /// @return The codec of current playing song.
2746 /// \table_row3{ <b>`MusicPlayer.PlaylistPosition`</b>,
2747 /// \anchor MusicPlayer_PlaylistPosition
2749 /// @return The position of the current song in the current music playlist.
2752 /// \table_row3{ <b>`MusicPlayer.PlaylistLength`</b>,
2753 /// \anchor MusicPlayer_PlaylistLength
2755 /// @return The total size of the current music playlist.
2758 /// \table_row3{ <b>`MusicPlayer.ChannelName`</b>,
2759 /// \anchor MusicPlayer_ChannelName
2761 /// @return The channel name of the radio programme that's currently playing (PVR).
2764 /// \table_row3{ <b>`MusicPlayer.ChannelNumberLabel`</b>,
2765 /// \anchor MusicPlayer_ChannelNumberLabel
2767 /// @return The channel and subchannel number of the radio channel that's currently
2770 /// @skinning_v14 **[New Infolabel]** \link MusicPlayer_ChannelNumberLabel `MusicPlayer.ChannelNumberLabel`\endlink
2773 /// \table_row3{ <b>`MusicPlayer.ChannelGroup`</b>,
2774 /// \anchor MusicPlayer_ChannelGroup
2776 /// @return The channel group of the radio programme that's currently playing (PVR).
2779 /// \table_row3{ <b>`MusicPlayer.Property(propname)`</b>,
2780 /// \anchor MusicPlayer_Property_Propname
2782 /// @return The requested property value of the currently playing item.
2783 /// @param propname - The requested property
2786 /// \table_row3{ <b>`MusicPlayer.DBID`</b>,
2787 /// \anchor MusicPlayer_DBID
2789 /// @return The database id of the currently playing song.
2791 /// @skinning_v17 **[New Infolabel]** \link MusicPlayer_DBID `MusicPlayer.DBID`\endlink
2794 /// \table_row3{ <b>`MusicPlayer.DiscTitle`</b>,
2795 /// \anchor MusicPlayer_DiscTitle
2797 /// @return The title of the disc currently playing.
2799 /// @skinning_v19 **[New Infolabel]** \link MusicPlayer_DiscTitle `MusicPlayer.DiscTitle`\endlink
2802 /// \table_row3{ <b>`MusicPlayer.ReleaseDate`</b>,
2803 /// \anchor MusicPlayer_ReleaseDate
2805 /// @return The release date of the song currently playing.
2807 /// @skinning_v19 **[New Infolabel]** \link MusicPlayer_ReleaseDate `MusicPlayer.ReleaseDate`\endlink
2810 /// \table_row3{ <b>`MusicPlayer.OriginalDate`</b>,
2811 /// \anchor MusicPlayer_OriginalDate
2813 /// @return The original release date of the song currently playing.
2815 /// @skinning_v19 **[New Infolabel]** \link MusicPlayer_OriginalDate `MusicPlayer.OriginalDate`\endlink
2818 /// \table_row3{ <b>`MusicPlayer.BPM`</b>,
2819 /// \anchor MusicPlayer_BPM
2821 /// @return The bpm of the track currently playing.
2823 /// @skinning_v19 **[New Infolabel]** \link MusicPlayer_BPM `MusicPlayer.BPM`\endlink
2826 /// \table_row3{ <b>`MusicPlayer.IsMultiDisc`</b>,
2827 /// \anchor MusicPlayer_IsMultiDisc
2829 /// @return Returns **true** if the album currently playing has more than one disc.
2831 /// @skinning_v19 **[New Infolabel]** \link MusicPlayer_IsMultiDisc `MusicPlayer.IsMultiDisc`\endlink
2834 /// \table_row3{ <b>`MusicPlayer.TotalDiscs`</b>,
2835 /// \anchor MusicPlayer_TotalDiscs
2837 /// @return The number of discs associated with the currently playing album.
2839 /// @skinning_v19 **[New Infolabel]** \link MusicPlayer_TotalDiscs `MusicPlayer.TotalDiscs`\endlink
2842 /// \table_row3{ <b>`MusicPlayer.Station`</b>,
2843 /// \anchor MusicPlayer_Station
2845 /// @return The name of the radio station currently playing (if available).
2847 /// @skinning_v19 **[New Infolabel]** \link MusicPlayer_Station `MusicPlayer.Station`\endlink
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
2902 /// \table_h3{ Labels, Type, Description }
2903 /// \table_row3{ <b>`VideoPlayer.UsingOverlays`</b>,
2904 /// \anchor VideoPlayer_UsingOverlays
2906 /// @return **True** if the video player is using the hardware overlays render
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.
2912 /// \table_row3{ <b>`VideoPlayer.IsFullscreen`</b>,
2913 /// \anchor VideoPlayer_IsFullscreen
2915 /// @return **True** if the video player is in fullscreen mode.
2918 /// \table_row3{ <b>`VideoPlayer.HasMenu`</b>,
2919 /// \anchor VideoPlayer_HasMenu
2921 /// @return **True** if the video player has a menu (ie is playing a DVD).
2924 /// \table_row3{ <b>`VideoPlayer.HasInfo`</b>,
2925 /// \anchor VideoPlayer_HasInfo
2927 /// @return **True** if the current playing video has information from the
2928 /// library or from a plugin (eg director/plot etc.)
2931 /// \table_row3{ <b>`VideoPlayer.Content(parameter)`</b>,
2932 /// \anchor VideoPlayer_Content
2934 /// @return **True** if the current Video you are playing is contained in
2935 /// corresponding Video Library sections. The following values are accepted:
2938 /// - <b>episodes</b>
2939 /// - <b>musicvideos</b>
2943 /// \table_row3{ <b>`VideoPlayer.HasSubtitles`</b>,
2944 /// \anchor VideoPlayer_HasSubtitles
2946 /// @return **True** if there are subtitles available for video.
2949 /// \table_row3{ <b>`VideoPlayer.HasTeletext`</b>,
2950 /// \anchor VideoPlayer_HasTeletext
2952 /// @return **True** if teletext is usable on played TV channel.
2955 /// \table_row3{ <b>`VideoPlayer.IsStereoscopic`</b>,
2956 /// \anchor VideoPlayer_IsStereoscopic
2958 /// @return **True** when the currently playing video is a 3D (stereoscopic)
2961 /// @skinning_v13 **[New Boolean Condition]** \link VideoPlayer_IsStereoscopic `VideoPlayer.IsStereoscopic`\endlink
2964 /// \table_row3{ <b>`VideoPlayer.SubtitlesEnabled`</b>,
2965 /// \anchor VideoPlayer_SubtitlesEnabled
2967 /// @return **True** if subtitles are turned on for video.
2970 /// \table_row3{ <b>`VideoPlayer.HasEpg`</b>,
2971 /// \anchor VideoPlayer_HasEpg
2973 /// @return **True** if epg information is available for the currently playing
2974 /// programme (PVR).
2977 /// \table_row3{ <b>`VideoPlayer.CanResumeLiveTV`</b>,
2978 /// \anchor VideoPlayer_CanResumeLiveTV
2980 /// @return **True** if a in-progress PVR recording is playing an the respective
2981 /// live TV channel is available.
2984 /// \table_row3{ <b>`VideoPlayer.Title`</b>,
2985 /// \anchor VideoPlayer_Title
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.
2991 /// \table_row3{ <b>`VideoPlayer.offset(number).Title`</b>,
2992 /// \anchor VideoPlayer_Offset_Title
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.
2997 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_Title `VideoPlayer.offset(number).Title`\endlink
3000 /// \table_row3{ <b>`VideoPlayer.position(number).Title`</b>,
3001 /// \anchor VideoPlayer_Position_Title
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.
3006 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_Title `VideoPlayer.position(number).Title`\endlink
3009 /// \table_row3{ <b>`VideoPlayer.OriginalTitle`</b>,
3010 /// \anchor VideoPlayer_OriginalTitle
3012 /// @return The original title of currently playing video. If it's in the database.
3015 /// \table_row3{ <b>`VideoPlayer.offset(number).OriginalTitle`</b>,
3016 /// \anchor VideoPlayer_Offset_OriginalTitle
3018 /// @return The original title of the video which has an offset `number` with respect to the currently playing video.
3020 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_OriginalTitle `VideoPlayer.offset(number).OriginalTitle`\endlink
3023 /// \table_row3{ <b>`VideoPlayer.position(number).OriginalTitle`</b>,
3024 /// \anchor VideoPlayer_Position_OriginalTitle
3026 /// @return The original title of the video which has an offset `number` with respect to the start of the playlist.
3028 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_OriginalTitle `VideoPlayer.position(number).OriginalTitle`\endlink
3031 /// \table_row3{ <b>`VideoPlayer.TVShowTitle`</b>,
3032 /// \anchor VideoPlayer_TVShowTitle
3034 /// @return The title of currently playing episode's tvshow name.
3037 /// \table_row3{ <b>`VideoPlayer.offset(number).TVShowTitle`</b>,
3038 /// \anchor VideoPlayer_Offset_TVShowTitle
3040 /// @return The title of the episode's tvshow name which has an offset `number` with respect to the currently playing video.
3042 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_TVShowTitle `VideoPlayer.offset(number).TVShowTitle`\endlink
3045 /// \table_row3{ <b>`VideoPlayer.position(number).TVShowTitle`</b>,
3046 /// \anchor VideoPlayer_Position_TVShowTitle
3048 /// @return The title of the episode's tvshow name which has an offset `number` with respect to the start of the playlist.
3050 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_TVShowTitle `VideoPlayer.position(number).TVShowTitle`\endlink
3053 /// \table_row3{ <b>`VideoPlayer.Season`</b>,
3054 /// \anchor VideoPlayer_Season
3056 /// @return The season number of the currently playing episode\, if it's in the database.
3058 /// @skinning_v15 **[Infolabel Updated]** \link VideoPlayer_Season `VideoPlayer.Season`\endlink
3059 /// also supports EPG.
3062 /// \table_row3{ <b>`VideoPlayer.offset(number).Season`</b>,
3063 /// \anchor VideoPlayer_Offset_Season
3065 /// @return The season number of the episode which has an offset `number` with respect to the currently playing video.
3067 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_Season `VideoPlayer.offset(number).Season`\endlink
3070 /// \table_row3{ <b>`VideoPlayer.position(number).Season`</b>,
3071 /// \anchor VideoPlayer_Position_Season
3073 /// @return The season number of the episode which has an offset `number` with respect to the start of the playlist.
3075 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_Season `VideoPlayer.position(number).Season`\endlink
3078 /// \table_row3{ <b>`VideoPlayer.Episode`</b>,
3079 /// \anchor VideoPlayer_Episode
3081 /// @return The episode number of the currently playing episode.
3083 /// @skinning_v15 **[Infolabel Updated]** \link VideoPlayer_Episode `VideoPlayer.Episode`\endlink
3084 /// also supports EPG.
3087 /// \table_row3{ <b>`VideoPlayer.offset(number).Episode`</b>,
3088 /// \anchor VideoPlayer_Offset_Episode
3090 /// @return The episode number of the episode which has an offset `number` with respect to the currently playing video.
3092 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_Episode `VideoPlayer.offset(number).Episode`\endlink
3095 /// \table_row3{ <b>`VideoPlayer.position(number).Episode`</b>,
3096 /// \anchor VideoPlayer_Position_Episode
3098 /// @return The episode number of the episode which has an offset `number` with respect to the start of the playlist.
3100 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_Episode `VideoPlayer.position(number).Episode`\endlink
3103 /// \table_row3{ <b>`VideoPlayer.Genre`</b>,
3104 /// \anchor VideoPlayer_Genre
3106 /// @return The genre(s) of current movie\, if it's in the database.
3109 /// \table_row3{ <b>`VideoPlayer.offset(number).Genre`</b>,
3110 /// \anchor VideoPlayer_Offset_Genre
3112 /// @return The genre(s) of the video which has an offset `number` with respect to the currently playing video.
3114 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_Genre `VideoPlayer.offset(number).Genre`\endlink
3117 /// \table_row3{ <b>`VideoPlayer.position(number).Genre`</b>,
3118 /// \anchor VideoPlayer_Position_Genre
3120 /// @return The genre(s) of the video which has an offset `number` with respect to the start of the playlist.
3122 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_Genre `VideoPlayer.position(number).Genre`\endlink
3125 /// \table_row3{ <b>`VideoPlayer.Director`</b>,
3126 /// \anchor VideoPlayer_Director
3128 /// @return The director of current movie\, if it's in the database.
3130 /// @skinning_v15 **[Infolabel Updated]** \link VideoPlayer_Director `VideoPlayer.Director`\endlink
3131 /// also supports EPG.
3134 /// \table_row3{ <b>`VideoPlayer.offset(number).Director`</b>,
3135 /// \anchor VideoPlayer_Offset_Director
3137 /// @return The director of the video which has an offset `number` with respect to the currently playing video.
3139 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_Director `VideoPlayer.offset(number).VideoPlayer_Offset_Director`\endlink
3142 /// \table_row3{ <b>`VideoPlayer.position(number).Director`</b>,
3143 /// \anchor VideoPlayer_Position_Director
3145 /// @return The director of the video which has an offset `number` with respect to the start of the playlist.
3147 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_Director `VideoPlayer.position(number).Director`\endlink
3150 /// \table_row3{ <b>`VideoPlayer.Country`</b>,
3151 /// \anchor VideoPlayer_Country
3153 /// @return The production country of current movie\, if it's in the database.
3156 /// \table_row3{ <b>`VideoPlayer.offset(number).Country`</b>,
3157 /// \anchor VideoPlayer_Offset_Country
3159 /// @return The production country of the video which has an offset `number` with respect to the currently playing video.
3161 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_Country `VideoPlayer.offset(number).Country`\endlink
3164 /// \table_row3{ <b>`VideoPlayer.position(number).Country`</b>,
3165 /// \anchor VideoPlayer_Position_Country
3167 /// @return The production country of the video which has an offset `number` with respect to the start of the playlist.
3169 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_Country `VideoPlayer.position(number).Country`\endlink
3172 /// \table_row3{ <b>`VideoPlayer.Year`</b>,
3173 /// \anchor VideoPlayer_Year
3175 /// @return The year of release of current movie\, if it's in the database.
3178 /// \table_row3{ <b>`VideoPlayer.offset(number).Year`</b>,
3179 /// \anchor VideoPlayer_Offset_Year
3181 /// @return The year of release of the video which has an offset `number` with respect to the currently playing video.
3183 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_Year `VideoPlayer.offset(number).Year`\endlink
3186 /// \table_row3{ <b>`VideoPlayer.position(number).Year`</b>,
3187 /// \anchor VideoPlayer_Position_Year
3189 /// @return The year of release of the video which has an offset `number` with respect to the start of the playlist.
3191 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_Year `VideoPlayer.position(number).Year`\endlink
3194 /// \table_row3{ <b>`VideoPlayer.Cover`</b>,
3195 /// \anchor VideoPlayer_Cover
3197 /// @return The cover of currently playing movie.
3200 /// \table_row3{ <b>`VideoPlayer.offset(number).Cover`</b>,
3201 /// \anchor VideoPlayer_Offset_Cover
3203 /// @return The cover of the video which has an offset `number` with respect to the currently playing video.
3205 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_Cover `VideoPlayer.offset(number).Cover`\endlink
3208 /// \table_row3{ <b>`VideoPlayer.position(number).Cover`</b>,
3209 /// \anchor VideoPlayer_Position_Cover
3211 /// @return The cover of the video which has an offset `number` with respect to the start of the playlist.
3213 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_Cover `VideoPlayer.position(number).Cover`\endlink
3216 /// \table_row3{ <b>`VideoPlayer.Rating`</b>,
3217 /// \anchor VideoPlayer_Rating
3219 /// @return The scraped rating of current movie\, if it's in the database.
3222 /// \table_row3{ <b>`VideoPlayer.offset(number).Rating`</b>,
3223 /// \anchor VideoPlayer_Offset_Rating
3225 /// @return The scraped rating of the video which has an offset `number` with respect to the currently playing video.
3227 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_Rating `VideoPlayer.offset(number).Rating`\endlink
3230 /// \table_row3{ <b>`VideoPlayer.position(number).Rating`</b>,
3231 /// \anchor VideoPlayer_Position_Rating
3233 /// @return The scraped rating of the video which has an offset `number` with respect to the start of the playlist.
3235 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_Rating `VideoPlayer.position(number).Rating`\endlink
3238 /// \table_row3{ <b>`VideoPlayer.UserRating`</b>,
3239 /// \anchor VideoPlayer_UserRating
3241 /// @return The user rating of the currently playing item.
3243 /// @skinning_v16 **[New Infolabel]** \link VideoPlayer_UserRating `VideoPlayer.UserRating`\endlink
3246 /// \table_row3{ <b>`VideoPlayer.offset(number).UserRating`</b>,
3247 /// \anchor VideoPlayer_Offset_UserRating
3249 /// @return The user rating of the video which has an offset `number` with respect to the currently playing video.
3251 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_UserRating `VideoPlayer.offset(number).UserRating`\endlink
3254 /// \table_row3{ <b>`VideoPlayer.position(number).UserRating`</b>,
3255 /// \anchor VideoPlayer_Position_UserRating
3257 /// @return The user rating of the video which has an offset `number` with respect to the start of the playlist.
3259 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_UserRating `VideoPlayer.position(number).UserRating`\endlink
3262 /// \table_row3{ <b>`VideoPlayer.Votes`</b>,
3263 /// \anchor VideoPlayer_Votes
3265 /// @return The scraped votes of current movie\, if it's in the database.
3267 /// @skinning_v13 **[New Infolabel]** \link VideoPlayer_Votes `VideoPlayer.Votes`\endlink
3270 /// \table_row3{ <b>`VideoPlayer.offset(number).Votes`</b>,
3271 /// \anchor VideoPlayer_Offset_Votes
3273 /// @return The scraped votes of the video which has an offset `number` with respect to the currently playing video.
3275 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_Votes `VideoPlayer.offset(number).Votes`\endlink
3278 /// \table_row3{ <b>`VideoPlayer.position(number).Votes`</b>,
3279 /// \anchor VideoPlayer_Position_Votes
3281 /// @return The scraped votes of the video which has an offset `number` with respect to the start of the playlist.
3283 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_Votes `VideoPlayer.position(number).Votes`\endlink
3286 /// \table_row3{ <b>`VideoPlayer.RatingAndVotes`</b>,
3287 /// \anchor VideoPlayer_RatingAndVotes
3289 /// @return The scraped rating and votes of current movie\, if it's in the database
3292 /// \table_row3{ <b>`VideoPlayer.offset(number).RatingAndVotes`</b>,
3293 /// \anchor VideoPlayer_Offset_RatingAndVotes
3295 /// @return The scraped rating and votes of the video which has an offset `number` with respect to the currently playing video.
3297 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_RatingAndVotes `VideoPlayer.offset(number).RatingAndVotes`\endlink
3300 /// \table_row3{ <b>`VideoPlayer.position(number).RatingAndVotes`</b>,
3301 /// \anchor VideoPlayer_Position_RatingAndVotes
3303 /// @return The scraped rating and votes of the video which has an offset `number` with respect to the start of the playlist.
3305 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_RatingAndVotes `VideoPlayer.position(number).RatingAndVotes`\endlink
3308 /// \table_row3{ <b>`VideoPlayer.mpaa`</b>,
3309 /// \anchor VideoPlayer_mpaa
3311 /// @return The MPAA rating of current movie\, if it's in the database.
3314 /// \table_row3{ <b>`VideoPlayer.offset(number).mpaa`</b>,
3315 /// \anchor VideoPlayer_Offset_mpaa
3317 /// @return The MPAA rating of the video which has an offset `number` with respect to the currently playing video.
3319 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_mpaa `VideoPlayer.offset(number).mpaa`\endlink
3322 /// \table_row3{ <b>`VideoPlayer.position(number).mpaa`</b>,
3323 /// \anchor VideoPlayer_Position_mpaa
3325 /// @return The MPAA rating of the video which has an offset `number` with respect to the start of the playlist.
3327 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_mpaa `VideoPlayer.position(number).mpaa`\endlink
3330 /// \table_row3{ <b>`VideoPlayer.Art(type)`</b>,
3331 /// \anchor VideoPlayer_art
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)
3336 /// @skinning_v20 **[New Infolabel]** \link VideoPlayer_art `VideoPlayer.Art(type)`\endlink
3339 /// \table_row3{ <b>`VideoPlayer.offset(number).Art(type)`</b>,
3340 /// \anchor VideoPlayer_Offset_art
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)
3346 /// @skinning_v20 **[New Infolabel]** \link VideoPlayer_Offset_mpaa `VideoPlayer.offset(number).Art(type)`\endlink
3349 /// \table_row3{ <b>`VideoPlayer.position(number).Art(type)`</b>,
3350 /// \anchor VideoPlayer_position_art
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)
3356 /// @skinning_v20 **[New Infolabel]** \link VideoPlayer_position_art `VideoPlayer.position(number).Art(type)`\endlink
3359 /// \table_row3{ <b>`VideoPlayer.IMDBNumber`</b>,
3360 /// \anchor VideoPlayer_IMDBNumber
3362 /// @return The IMDb ID of the current movie\, if it's in the database.
3364 /// @skinning_v15 **[New Infolabel]** \link VideoPlayer_IMDBNumber `VideoPlayer.IMDBNumber`\endlink
3367 /// \table_row3{ <b>`VideoPlayer.offset(number).IMDBNumber`</b>,
3368 /// \anchor VideoPlayer_Offset_IMDBNumber
3370 /// @return The IMDb ID of the the video which has an offset `number` with respect to the currently playing video.
3372 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_IMDBNumber `VideoPlayer.offset(number).IMDBNumber`\endlink
3375 /// \table_row3{ <b>`VideoPlayer.position(number).IMDBNumber`</b>,
3376 /// \anchor VideoPlayer_Position_IMDBNumber
3378 /// @return The IMDb ID of the video which has an offset `number` with respect to the start of the playlist.
3380 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_IMDBNumber `VideoPlayer.position(number).IMDBNumber`\endlink
3383 /// \table_row3{ <b>`VideoPlayer.Top250`</b>,
3384 /// \anchor VideoPlayer_Top250
3386 /// @return The IMDb Top250 position of the currently playing movie\, if it's in the database.
3389 /// \table_row3{ <b>`VideoPlayer.offset(number).Top250`</b>,
3390 /// \anchor VideoPlayer_Offset_Top250
3392 /// @return The IMDb Top250 position of the video which has an offset `number` with respect to the currently playing video.
3394 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_Top250 `VideoPlayer.offset(number).Top250`\endlink
3397 /// \table_row3{ <b>`VideoPlayer.position(number).Top250`</b>,
3398 /// \anchor VideoPlayer_Position_Top250
3400 /// @return The IMDb Top250 position of the video which has an offset `number` with respect to the start of the playlist.
3402 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_Top250 `VideoPlayer.position(number).Top250`\endlink
3405 /// \table_row3{ <b>`VideoPlayer.EpisodeName`</b>,
3406 /// \anchor VideoPlayer_EpisodeName
3408 /// @return The name of the episode if the playing video is a TV Show\,
3409 /// if it's in the database (PVR).
3411 /// @skinning_v15 **[New Infolabel]** \link VideoPlayer_EpisodeName `VideoPlayer.EpisodeName`\endlink
3414 /// \table_row3{ <b>`VideoPlayer.PlaylistPosition`</b>,
3415 /// \anchor VideoPlayer_PlaylistPosition
3417 /// @return The position of the current song in the current video playlist.
3420 /// \table_row3{ <b>`VideoPlayer.PlaylistLength`</b>,
3421 /// \anchor VideoPlayer_PlaylistLength
3423 /// @return The total size of the current video playlist.
3426 /// \table_row3{ <b>`VideoPlayer.Cast`</b>,
3427 /// \anchor VideoPlayer_Cast
3429 /// @return A concatenated string of cast members of the current movie\, if it's in
3432 /// @skinning_v15 **[Infolabel Updated]** \link VideoPlayer_Cast `VideoPlayer.Cast`\endlink
3433 /// also supports EPG.
3436 /// \table_row3{ <b>`VideoPlayer.CastAndRole`</b>,
3437 /// \anchor VideoPlayer_CastAndRole
3439 /// @return A concatenated string of cast members and roles of the current movie\,
3440 /// if it's in the database.
3443 /// \table_row3{ <b>`VideoPlayer.Album`</b>,
3444 /// \anchor VideoPlayer_Album
3446 /// @return The album from which the current Music Video is from\, if it's in the database.
3449 /// \table_row3{ <b>`VideoPlayer.offset(number).Album`</b>,
3450 /// \anchor VideoPlayer_Offset_Album
3452 /// @return The album from which the video which has an offset `number` with respect to the currently playing video.
3454 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_Album `VideoPlayer.offset(number).Album`\endlink
3457 /// \table_row3{ <b>`VideoPlayer.position(number).Album`</b>,
3458 /// \anchor VideoPlayer_Position_Album
3460 /// @return The album from which the music video which has an offset `number` with respect to the start of the playlist.
3462 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_Album `VideoPlayer.position(number).Album`\endlink
3465 /// \table_row3{ <b>`VideoPlayer.Artist`</b>,
3466 /// \anchor VideoPlayer_Artist
3468 /// @return The artist(s) of current Music Video\, if it's in the database.
3471 /// \table_row3{ <b>`VideoPlayer.offset(number).Artist`</b>,
3472 /// \anchor VideoPlayer_Offset_Artist
3474 /// @return The artist(s) of the video which has an offset `number` with respect to the currently playing video.
3476 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_Artist `VideoPlayer.offset(number).Artist`\endlink
3479 /// \table_row3{ <b>`VideoPlayer.position(number).Artist`</b>,
3480 /// \anchor VideoPlayer_Position_Artist
3482 /// @return The artist(s) of the music video which has an offset `number` with respect to the start of the playlist.
3484 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_Artist `VideoPlayer.position(number).Artist`\endlink
3487 /// \table_row3{ <b>`VideoPlayer.Studio`</b>,
3488 /// \anchor VideoPlayer_Studio
3490 /// @return The studio of current Music Video\, if it's in the database.
3493 /// \table_row3{ <b>`VideoPlayer.offset(number).Studio`</b>,
3494 /// \anchor VideoPlayer_Offset_Studio
3496 /// @return The studio of the video which has an offset `number` with respect to the currently playing video.
3498 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_Studio `VideoPlayer.offset(number).Studio`\endlink
3501 /// \table_row3{ <b>`VideoPlayer.position(number).Studio`</b>,
3502 /// \anchor VideoPlayer_Position_Studio
3504 /// @return The studio of the video which has an offset `number` with respect to the start of the playlist.
3506 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_Studio `VideoPlayer.position(number).Studio`\endlink
3509 /// \table_row3{ <b>`VideoPlayer.Writer`</b>,
3510 /// \anchor VideoPlayer_Writer
3512 /// @return The name of Writer of current playing Video\, if it's in the database.
3514 /// @skinning_v15 **[Infolabel Updated]** \link VideoPlayer_Writer `VideoPlayer.Writer`\endlink
3515 /// also supports EPG.
3518 /// \table_row3{ <b>`VideoPlayer.offset(number).Writer`</b>,
3519 /// \anchor VideoPlayer_Offset_Writer
3521 /// @return The name of Writer of the video which has an offset `number` with respect to the currently playing video.
3523 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_Writer `VideoPlayer.offset(number).Writer`\endlink
3526 /// \table_row3{ <b>`VideoPlayer.position(number).Writer`</b>,
3527 /// \anchor VideoPlayer_Position_Writer
3529 /// @return The name of Writer of the video which has an offset `number` with respect to the start of the playlist.
3531 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_Writer `VideoPlayer.position(number).Writer`\endlink
3534 /// \table_row3{ <b>`VideoPlayer.Tagline`</b>,
3535 /// \anchor VideoPlayer_Tagline
3537 /// @return The small Summary of current playing Video\, if it's in the database.
3540 /// \table_row3{ <b>`VideoPlayer.offset(number).Tagline`</b>,
3541 /// \anchor VideoPlayer_Offset_Tagline
3543 /// @return The small Summary of the video which has an offset `number` with respect to the currently playing video.
3545 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_Tagline `VideoPlayer.offset(number).Tagline`\endlink
3548 /// \table_row3{ <b>`VideoPlayer.position(number).Tagline`</b>,
3549 /// \anchor VideoPlayer_Position_Tagline
3551 /// @return The small Summary of the video which has an offset `number` with respect to the start of the playlist.
3553 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_Tagline `VideoPlayer.position(number).Tagline`\endlink
3556 /// \table_row3{ <b>`VideoPlayer.PlotOutline`</b>,
3557 /// \anchor VideoPlayer_PlotOutline
3559 /// @return The small Summary of current playing Video\, if it's in the database.
3562 /// \table_row3{ <b>`VideoPlayer.offset(number).PlotOutline`</b>,
3563 /// \anchor VideoPlayer_Offset_PlotOutline
3565 /// @return The small Summary of the video which has an offset `number` with respect to the currently playing video.
3567 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_PlotOutline `VideoPlayer.offset(number).PlotOutline`\endlink
3570 /// \table_row3{ <b>`VideoPlayer.position(number).PlotOutline`</b>,
3571 /// \anchor VideoPlayer_Position_PlotOutline
3573 /// @return The small Summary of the video which has an offset `number` with respect to the start of the playlist.
3575 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_PlotOutline `VideoPlayer.position(number).PlotOutline`\endlink
3578 /// \table_row3{ <b>`VideoPlayer.Plot`</b>,
3579 /// \anchor VideoPlayer_Plot
3581 /// @return The complete Text Summary of current playing Video\, if it's in the database.
3584 /// \table_row3{ <b>`VideoPlayer.offset(number).Plot`</b>,
3585 /// \anchor VideoPlayer_Offset_Plot
3587 /// @return The complete Text Summary of the video which has an offset `number` with respect to the currently playing video.
3589 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_Plot `VideoPlayer.offset(number).Plot`\endlink
3592 /// \table_row3{ <b>`VideoPlayer.position(number).Plot`</b>,
3593 /// \anchor VideoPlayer_Position_Plot
3595 /// @return The complete Text Summary of the video which has an offset `number` with respect to the start of the playlist.
3597 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_Plot `VideoPlayer.position(number).Plot`\endlink
3600 /// \table_row3{ <b>`VideoPlayer.Premiered`</b>,
3601 /// \anchor VideoPlayer_Premiered
3603 /// @return The release or aired date of the currently playing episode\, show\, movie or EPG item\,
3604 /// if it's in the database.
3607 /// \table_row3{ <b>`VideoPlayer.offset(number).Premiered`</b>,
3608 /// \anchor VideoPlayer_Offset_Premiered
3610 /// @return The release or aired date of the video which has an offset `number` with respect to the currently playing video.
3612 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_Premiered `VideoPlayer.offset(number).Premiered`\endlink
3615 /// \table_row3{ <b>`VideoPlayer.position(number).Premiered`</b>,
3616 /// \anchor VideoPlayer_Position_Premiered
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.
3621 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_Premiered `VideoPlayer.position(number).Premiered`\endlink
3624 /// \table_row3{ <b>`VideoPlayer.Trailer`</b>,
3625 /// \anchor VideoPlayer_Trailer
3627 /// @return The path to the trailer of the currently playing movie\, if it's in the database.
3630 /// \table_row3{ <b>`VideoPlayer.offset(number).Trailer`</b>,
3631 /// \anchor VideoPlayer_Offset_Trailer
3633 /// @return The path to the trailer of the video which has an offset `number` with respect to the currently playing video.
3635 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_Trailer `VideoPlayer.offset(number).Title`\endlink
3638 /// \table_row3{ <b>`VideoPlayer.position(number).Trailer`</b>,
3639 /// \anchor VideoPlayer_Position_Trailer
3641 /// @return The path to the trailer of the video which has an offset `number` with respect to the start of the playlist.
3643 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_Trailer `VideoPlayer.position(number).Trailer`\endlink
3646 /// \table_row3{ <b>`VideoPlayer.LastPlayed`</b>,
3647 /// \anchor VideoPlayer_LastPlayed
3649 /// @return The last play date of current playing Video\, if it's in the database.
3652 /// \table_row3{ <b>`VideoPlayer.offset(number).LastPlayed`</b>,
3653 /// \anchor VideoPlayer_Offset_LastPlayed
3655 /// @return The last play date of the video which has an offset `number` with respect to the currently playing video.
3657 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_LastPlayed `VideoPlayer.offset(number).LastPlayed`\endlink
3660 /// \table_row3{ <b>`VideoPlayer.position(number).LastPlayed`</b>,
3661 /// \anchor VideoPlayer_Position_LastPlayed
3663 /// @return The last play date of the video which has an offset `number` with respect to the start of the playlist.
3665 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_LastPlayed `VideoPlayer.position(number).LastPlayed`\endlink
3668 /// \table_row3{ <b>`VideoPlayer.PlayCount`</b>,
3669 /// \anchor VideoPlayer_PlayCount
3671 /// @return The playcount of current playing Video\, if it's in the database.
3674 /// \table_row3{ <b>`VideoPlayer.offset(number).PlayCount`</b>,
3675 /// \anchor VideoPlayer_Offset_PlayCount
3677 /// @return The playcount of the video which has an offset `number` with respect to the currently playing video.
3679 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_PlayCount `VideoPlayer.offset(number).PlayCount`\endlink
3682 /// \table_row3{ <b>`VideoPlayer.position(number).PlayCount`</b>,
3683 /// \anchor VideoPlayer_Position_PlayCount
3685 /// @return The playcount of the video which has an offset `number` with respect to the start of the playlist.
3687 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_PlayCount `VideoPlayer.position(number).PlayCount`\endlink
3690 /// \table_row3{ <b>`VideoPlayer.VideoCodec`</b>,
3691 /// \anchor VideoPlayer_VideoCodec
3693 /// @return The video codec of the currently playing video (common values: see
3694 /// \ref ListItem_VideoCodec "ListItem.VideoCodec").
3697 /// \table_row3{ <b>`VideoPlayer.VideoResolution`</b>,
3698 /// \anchor VideoPlayer_VideoResolution
3700 /// @return The video resolution of the currently playing video (possible
3701 /// values: see \ref ListItem_VideoResolution "ListItem.VideoResolution").
3704 /// \table_row3{ <b>`VideoPlayer.VideoAspect`</b>,
3705 /// \anchor VideoPlayer_VideoAspect
3707 /// @return The aspect ratio of the currently playing video (possible values:
3708 /// see \ref ListItem_VideoAspect "ListItem.VideoAspect").
3711 /// \table_row3{ <b>`VideoPlayer.AudioCodec`</b>,
3712 /// \anchor VideoPlayer_AudioCodec
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").
3719 /// \table_row3{ <b>`VideoPlayer.AudioChannels`</b>,
3720 /// \anchor VideoPlayer_AudioChannels
3722 /// @return The number of audio channels of the currently playing video
3723 /// (possible values: see \ref ListItem_AudioChannels "ListItem.AudioChannels").
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)
3730 /// \table_row3{ <b>`VideoPlayer.AudioLanguage`</b>,
3731 /// \anchor VideoPlayer_AudioLanguage
3733 /// @return The language of the audio of the currently playing video(possible
3734 /// values: see \ref ListItem_AudioLanguage "ListItem.AudioLanguage").
3736 /// @skinning_v13 **[New Infolabel]** \link VideoPlayer_AudioLanguage `VideoPlayer.AudioLanguage`\endlink
3739 /// \table_row3{ <b>`VideoPlayer.SubtitlesLanguage`</b>,
3740 /// \anchor VideoPlayer_SubtitlesLanguage
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
3747 /// @skinning_v13 **[New Infolabel]** \link VideoPlayer_SubtitlesLanguage `VideoPlayer.SubtitlesLanguage`\endlink
3750 /// \table_row3{ <b>`VideoPlayer.StereoscopicMode`</b>,
3751 /// \anchor VideoPlayer_StereoscopicMode
3753 /// @return The stereoscopic mode of the currently playing video (possible
3754 /// values: see \ref ListItem_StereoscopicMode "ListItem.StereoscopicMode").
3756 /// @skinning_v13 **[New Infolabel]** \link VideoPlayer_StereoscopicMode `VideoPlayer.StereoscopicMode`\endlink
3759 /// \table_row3{ <b>`VideoPlayer.StartTime`</b>,
3760 /// \anchor VideoPlayer_StartTime
3762 /// @return The start date and time of the currently playing epg event or recording (PVR).
3765 /// \table_row3{ <b>`VideoPlayer.EndTime`</b>,
3766 /// \anchor VideoPlayer_EndTime
3768 /// @return The end date and time of the currently playing epg event or recording (PVR).
3771 /// \table_row3{ <b>`VideoPlayer.NextTitle`</b>,
3772 /// \anchor VideoPlayer_NextTitle
3774 /// @return The title of the programme that will be played next (PVR).
3777 /// \table_row3{ <b>`VideoPlayer.NextGenre`</b>,
3778 /// \anchor VideoPlayer_NextGenre
3780 /// @return The genre of the programme that will be played next (PVR).
3783 /// \table_row3{ <b>`VideoPlayer.NextPlot`</b>,
3784 /// \anchor VideoPlayer_NextPlot
3786 /// @return The plot of the programme that will be played next (PVR).
3789 /// \table_row3{ <b>`VideoPlayer.NextPlotOutline`</b>,
3790 /// \anchor VideoPlayer_NextPlotOutline
3792 /// @return The plot outline of the programme that will be played next (PVR).
3795 /// \table_row3{ <b>`VideoPlayer.NextStartTime`</b>,
3796 /// \anchor VideoPlayer_NextStartTime
3798 /// @return The start time of the programme that will be played next (PVR).
3801 /// \table_row3{ <b>`VideoPlayer.NextEndTime`</b>,
3802 /// \anchor VideoPlayer_NextEndTime
3804 /// @return The end time of the programme that will be played next (PVR).
3807 /// \table_row3{ <b>`VideoPlayer.NextDuration`</b>,
3808 /// \anchor VideoPlayer_NextDuration
3810 /// @return The duration of the programme that will be played next (PVR).
3813 /// \table_row3{ <b>`VideoPlayer.ChannelName`</b>,
3814 /// \anchor VideoPlayer_ChannelName
3816 /// @return The name of the currently tuned channel (PVR).
3819 /// \table_row3{ <b>`VideoPlayer.ChannelNumberLabel`</b>,
3820 /// \anchor VideoPlayer_ChannelNumberLabel
3822 /// @return The channel and subchannel number of the tv channel that's currently playing (PVR).
3824 /// @skinning_v14 **[New Infolabel]** \link VideoPlayer_ChannelNumberLabel `VideoPlayer.ChannelNumberLabel`\endlink
3827 /// \table_row3{ <b>`VideoPlayer.ChannelGroup`</b>,
3828 /// \anchor VideoPlayer_ChannelGroup
3830 /// @return The group of the currently tuned channel (PVR).
3833 /// \table_row3{ <b>`VideoPlayer.ParentalRating`</b>,
3834 /// \anchor VideoPlayer_ParentalRating
3836 /// @return The parental rating of the currently playing programme (PVR).
3839 /// \table_row3{ <b>`VideoPlayer.DBID`</b>,
3840 /// \anchor VideoPlayer_DBID
3842 /// @return The database id of the currently playing video
3844 /// @skinning_v17 **[New Infolabel]** \link VideoPlayer_DBID `VideoPlayer.DBID`\endlink
3847 /// \table_row3{ <b>`VideoPlayer.offset(number).DBID`</b>,
3848 /// \anchor VideoPlayer_Offset_DBID
3850 /// @return The database id of the video which has an offset `number` with respect to the currently playing video.
3852 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Offset_DBID `VideoPlayer.offset(number).DBID`\endlink
3855 /// \table_row3{ <b>`VideoPlayer.position(number).DBID`</b>,
3856 /// \anchor VideoPlayer_Position_DBID
3858 /// @return The database id of the video which has an offset `number` with respect to the start of the playlist.
3860 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_Position_DBID `VideoPlayer.position(number).DBID`\endlink
3863 /// \table_row3{ <b>`VideoPlayer.UniqueID(name)`</b>,
3864 /// \anchor VideoPlayer_UniqueID
3866 /// @return The scraped metadata id of current movie\, if it's in the database.
3867 /// @param name - the name of the metadata provider.
3869 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_UniqueID `VideoPlayer.UniqueID(name)`\endlink
3872 /// \table_row3{ <b>`VideoPlayer.TvShowDBID`</b>,
3873 /// \anchor VideoPlayer_TvShowDBID
3875 /// @return The database id of the TvShow for the currently playing Episode
3877 /// @skinning_v19 **[New Infolabel]** \link VideoPlayer_TvShowDBID `VideoPlayer.TvShowDBID`\endlink
3880 /// \table_row3{ <b>`VideoPlayer.AudioStreamCount`</b>,
3881 /// \anchor VideoPlayer_AudioStreamCount
3883 /// @return The number of audio streams of the currently playing video.
3884 /// @note If the video contains no audio streams it returns 0.
3886 /// @skinning_v20 **[New Infolabel]** \link VideoPlayer_AudioStreamCount `VideoPlayer.AudioStreamCount`\endlink
3889 /// \table_row3{ <b>`VideoPlayer.HdrType`</b>,
3890 /// \anchor VideoPlayer_HdrType
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.
3894 /// @skinning_v20 **[New Infolabel]** \link VideoPlayer_HdrType `VideoPlayer.HdrType`\endlink
3899 /// -----------------------------------------------------------------------------
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
},
3976 /// \page modules__infolabels_boolean_conditions
3977 /// \subsection modules__infolabels_boolean_conditions_RetroPlayer RetroPlayer
3979 /// \table_h3{ Labels, Type, Description }
3980 /// \table_row3{ <b>`RetroPlayer.VideoFilter`</b>,
3981 /// \anchor RetroPlayer_VideoFilter
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)
3988 /// @skinning_v18 **[New Infolabel]** \link RetroPlayer_VideoFilter `RetroPlayer.VideoFilter`\endlink
3991 /// \table_row3{ <b>`RetroPlayer.StretchMode`</b>,
3992 /// \anchor RetroPlayer_StretchMode
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)
4001 /// @skinning_v18 **[New Infolabel]** \link RetroPlayer_StretchMode `RetroPlayer.StretchMode`\endlink
4004 /// \table_row3{ <b>`RetroPlayer.VideoRotation`</b>,
4005 /// \anchor RetroPlayer_VideoRotation
4007 /// @return The video rotation of the currently-playing game
4008 /// in degrees counter-clockwise.
4009 /// The following values are possible:
4011 /// - 90 (Shown in the GUI as 270 degrees)
4013 /// - 270 (Shown in the GUI as 90 degrees)
4015 /// @skinning_v18 **[New Infolabel]** \link RetroPlayer_VideoRotation `RetroPlayer.VideoRotation`\endlink
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
4031 /// \table_h3{ Labels, Type, Description }
4032 /// \table_row3{ <b>`Container.HasFiles`</b>,
4033 /// \anchor Container_HasFiles
4035 /// @return **True** if the container contains files.
4038 /// \table_row3{ <b>`Container.HasFolders`</b>,
4039 /// \anchor Container_HasFolders
4041 /// @return **True** if the container contains folders.
4044 /// \table_row3{ <b>`Container.IsStacked`</b>,
4045 /// \anchor Container_IsStacked
4047 /// @return **True** if the container is currently in stacked mode.
4050 /// \table_row3{ <b>`Container.FolderPath`</b>,
4051 /// \anchor Container_FolderPath
4053 /// @return The complete path of currently displayed folder.
4056 /// \table_row3{ <b>`Container.FolderName`</b>,
4057 /// \anchor Container_FolderName
4059 /// @return The top most folder in currently displayed folder.
4062 /// \table_row3{ <b>`Container.PluginName`</b>,
4063 /// \anchor Container_PluginName
4065 /// @return The current plugins base folder name.
4068 /// \table_row3{ <b>`Container.PluginCategory`</b>,
4069 /// \anchor Container_PluginCategory
4071 /// @return The current plugins category (set by the scripter).
4073 /// @skinning_v17 **[New Infolabel]** \link Container_PluginCategory `Container.PluginCategory`\endlink
4076 /// \table_row3{ <b>`Container.Viewmode`</b>,
4077 /// \anchor Container_Viewmode
4079 /// @return The current viewmode (list\, icons etc).
4082 /// \table_row3{ <b>`Container.ViewCount`</b>,
4083 /// \anchor Container_ViewCount
4085 /// @return The number of available skin view modes for the current container listing.
4087 /// @skinning_v17 **[New Infolabel]** \link Container_ViewCount `Container.ViewCount`\endlink
4090 /// \table_row3{ <b>`Container.Totaltime`</b>,
4091 /// \anchor Container_Totaltime
4093 /// @return The total time of all items in the current container.
4096 /// \table_row3{ <b>`Container.TotalWatched`</b>,
4097 /// \anchor Container_TotalWatched
4099 /// @return The number of watched items in the container.
4100 /// @param id - [opt] if not supplied the current container will be used.
4102 /// @skinning_v16 **[New Infolabel]** \link Container_TotalWatched `Container(id).TotalWatched`\endlink
4105 /// \table_row3{ <b>`Container.TotalUnWatched`</b>,
4106 /// \anchor Container_TotalUnWatched
4108 /// @return The number of unwatched items in the container.
4109 /// @param id - [opt] if not supplied the current container will be used.
4111 /// @skinning_v16 **[New Infolabel]** \link Container_TotalUnWatched `Container(id).TotalUnWatched`\endlink
4114 /// \table_row3{ <b>`Container.HasThumb`</b>,
4115 /// \anchor Container_HasThumb
4117 /// @return **True** if the current container you are in has a thumb assigned
4121 /// \table_row3{ <b>`Container.SortOrder`</b>,
4122 /// \anchor Container_SortOrder
4124 /// @return The current sort order (Ascending/Descending).
4126 /// @skinning_v16 **[New Infolabel]** \link Container_SortOrder `Container.SortOrder`\endlink
4129 /// \table_row3{ <b>`Container.CanFilter`</b>,
4130 /// \anchor Container_CanFilter
4132 /// @return **True** when the current container can be filtered.
4135 /// \table_row3{ <b>`Container.CanFilterAdvanced`</b>,
4136 /// \anchor Container_CanFilterAdvanced
4138 /// @return **True** when advanced filtering can be applied to the current container.
4141 /// \table_row3{ <b>`Container.Filtered`</b>,
4142 /// \anchor Container_Filtered
4144 /// @return **True** when a mediafilter is applied to the current container.
4147 /// \table_row3{ <b>`Container.ShowPlot`</b>,
4148 /// \anchor Container_ShowPlot
4150 /// @return The TV Show plot of the current container and can be used at
4151 /// season and episode level.
4154 /// \table_row3{ <b>`Container.ShowTitle`</b>,
4155 /// \anchor Container_ShowTitle
4157 /// @return The TV Show title of the current container and can be used at
4158 /// season and episode level.
4160 /// @skinning_v17 **[New Infolabel]** \link Container_ShowTitle `Container.ShowTitle`\endlink
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
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.)
4192 /// \table_row3{ <b>`Container(id).OnScrollNext`</b>,
4193 /// \anchor Container_OnScrollNext
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.
4200 /// \table_row3{ <b>`Container(id).OnPrevious`</b>,
4201 /// \anchor Container_OnPrevious
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).
4208 /// \table_row3{ <b>`Container(id).OnScrollPrevious`</b>,
4209 /// \anchor Container_OnScrollPrevious
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.
4216 /// \table_row3{ <b>`Container(id).NumPages`</b>,
4217 /// \anchor Container_NumPages
4219 /// @return The number of pages in the container with given id. If no id is specified it
4220 /// grabs the current container.
4223 /// \table_row3{ <b>`Container(id).NumItems`</b>,
4224 /// \anchor Container_NumItems
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.
4230 /// \table_row3{ <b>`Container(id).NumAllItems`</b>,
4231 /// \anchor Container_NumAllItems
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.
4236 /// @skinning_v18 **[New Infolabel]** \link Container_NumAllItems `Container(id).NumAllItems`\endlink
4239 /// \table_row3{ <b>`Container(id).NumNonFolderItems`</b>,
4240 /// \anchor Container_NumNonFolderItems
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.
4246 /// @skinning_v18 **[New Infolabel]** \link Container_NumNonFolderItems `Container(id).NumNonFolderItems`\endlink
4249 /// \table_row3{ <b>`Container(id).CurrentPage`</b>,
4250 /// \anchor Container_CurrentPage
4252 /// @return THe current page in the container with given id.
4253 /// @note If no id is specified it grabs the current container.
4256 /// \table_row3{ <b>`Container(id).CurrentItem`</b>,
4257 /// \anchor Container_CurrentItem
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.
4262 /// @skinning_v15 **[New Infolabel]** \link Container_CurrentItem `Container(id).CurrentItem`\endlink
4265 /// \table_row3{ <b>`Container(id).Scrolling`</b>,
4266 /// \anchor Container_Scrolling
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.
4276 /// \table_row3{ <b>`Container(id).HasNext`</b>,
4277 /// \anchor Container_HasNext
4279 /// @return **True** if the container or textbox with id (id) has a next page.
4282 /// \table_row3{ <b>`Container(id).HasParent`</b>,
4283 /// \anchor Container_HasParent
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.
4288 /// @skinning_v16 **[New Boolean Condition]** \link Container_HasParent `Container.HasParent`\endlink
4291 /// \table_row3{ <b>`Container(id).HasPrevious`</b>,
4292 /// \anchor Container_HasPrevious
4294 /// @return **True** if the container or textbox with id (id) has a previous page.
4297 /// \table_row3{ <b>`Container(id).IsUpdating`</b>,
4298 /// \anchor Container_IsUpdating
4300 /// @return **True** if the container with dynamic list content is currently updating.
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
4322 /// @return The row number of the focused position in a panel container.
4324 /// @skinning_v16 **[New Infolabel]** \link Container_Row `Container(id).Row`\endlink
4327 /// \table_row3{ <b>`Container(id).Row(parameter)`</b>,
4328 /// \anchor Container_Row_parameter
4330 /// @return **True** if the row number of the focused position matches the specified parameter.
4333 /// \table_row3{ <b>`Container(id).Column`</b>,
4334 /// \anchor Container_Column
4336 /// @return The column number of the focused position in a panel container.
4338 /// @skinning_v16 **[New Infolabel]** \link Container_Column `Container(id).Column`\endlink
4341 /// \table_row3{ <b>`Container(id).Column(parameter)`</b>,
4342 /// \anchor Container_Column_parameter
4344 /// @return **True** if the column number of the focused position matches the specified parameter.
4347 /// \table_row3{ <b>`Container(id).Position`</b>,
4348 /// \anchor Container_Position
4350 /// @return The current focused position of container / grouplist (id) as a
4353 /// @skinning_v16 **[Infolabel Updated]** \link Container_Position `Container(id).Position`\endlink
4354 /// now also returns the position for items inside a grouplist.
4357 /// \table_row3{ <b>`Container(id).Position(parameter)`</b>,
4358 /// \anchor Container_Position_parameter
4360 /// @return **True** if the container with id (or current container if id is omitted) is focused on the specified position.
4363 /// \table_row3{ <b>`Container(id).SubItem(item_number)`</b>,
4364 /// \anchor Container_SubItem
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.
4370 /// \table_row3{ <b>`Container(id).HasFocus(item_number)`</b>,
4371 /// \anchor Container_HasFocus
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
4378 /// \table_row3{ <b>`Container.SortMethod`</b>,
4379 /// \anchor Container_SortMethod
4381 /// @return The current sort method (returns a localized value).
4384 /// \table_row3{ <b>`Container.SortMethod(sortid)`</b>,
4385 /// \anchor Container_SortMethod_sortid
4387 /// @return **True** if the current sort method matches the specified SortID (see \ref List_of_sort_methods "SortUtils").
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
4402 /// @return The current add-on category.
4405 /// \table_row3{ <b>`Container.Property(reponame)`</b>,
4406 /// \anchor Container_Property_reponame
4408 /// @return The current add-on repository name.
4411 /// \table_row3{ <b>`Container.Content`</b>,
4412 /// \anchor Container_Content
4414 /// @return The content of the current container.
4416 /// @skinning_v16 **[New Infolabel]** \link Container_Content `Container.Content`\endlink
4419 /// \table_row3{ <b>`Container(id).ListItem(offset).Property`</b>,
4420 /// \anchor Container_ListItem_property
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 `
4428 /// \table_row3{ <b>`Container(id).ListItemNoWrap(offset).Property`</b>,
4429 /// \anchor Container_ListItemNoWrap
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`
4440 /// \table_row3{ <b>`Container(id).ListItemPosition(x).[infolabel]`</b>,
4441 /// \anchor Container_ListItemPosition
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`
4448 /// \table_row3{ <b>`Container(id).ListItemAbsolute(x).[infolabel]`</b>,
4449 /// \anchor Container_ListItemAbsolute
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`
4455 /// @skinning_v16 **[New Infolabel]** \link Container_ListItemAbsolute `Container(id).ListItemAbsolute(x).[infolabel]`\endlink
4458 /// \table_row3{ <b>`Container.Content(parameter)`</b>,
4459 /// \anchor Container_Content_parameter
4461 /// @return **True** if the current container you are in contains the following:
4464 /// - <b>artists</b>
4467 /// - <b>tvshows</b>
4468 /// - <b>seasons</b>
4469 /// - <b>episodes</b>
4470 /// - <b>musicvideos</b>
4474 /// - <b>playlists</b>
4475 /// - <b>plugins</b>
4476 /// - <b>studios</b>
4477 /// - <b>directors</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
4486 /// \table_row3{ <b>`Container.Art(type)`</b>,
4487 /// \anchor Container_Art
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
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
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
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>
4515 /// -----------------------------------------------------------------------------
4517 /// \page modules__infolabels_boolean_conditions
4518 /// \subsection modules__infolabels_boolean_conditions_ListItem ListItem
4520 /// \table_h3{ Labels, Type, Description }
4521 /// \table_row3{ <b>`ListItem.Thumb`</b>,
4522 /// \anchor ListItem_Thumb
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)"
4530 /// \table_row3{ <b>`ListItem.Icon`</b>,
4531 /// \anchor ListItem_Icon
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.
4537 /// \table_row3{ <b>`ListItem.ActualIcon`</b>,
4538 /// \anchor ListItem_ActualIcon
4540 /// @return The icon of the currently selected item in a list or thumb control.
4543 /// \table_row3{ <b>`ListItem.Overlay`</b>,
4544 /// \anchor ListItem_Overlay
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
4553 /// \table_row3{ <b>`ListItem.IsFolder`</b>,
4554 /// \anchor ListItem_IsFolder
4556 /// @return **True** if the current ListItem is a folder.
4559 /// \table_row3{ <b>`ListItem.IsPlaying`</b>,
4560 /// \anchor ListItem_IsPlaying
4562 /// @return **True** if the current ListItem.* info labels and images are
4563 /// currently Playing media.
4566 /// \table_row3{ <b>`ListItem.IsResumable`</b>,
4567 /// \anchor ListItem_IsResumable
4569 /// @return **True** when the current ListItem has been partially played.
4572 /// \table_row3{ <b>`ListItem.IsCollection`</b>,
4573 /// \anchor ListItem_IsCollection
4575 /// @return **True** when the current ListItem is a movie set.
4577 /// @skinning_v15 **[New Boolean Condition]** \link ListItem_IsCollection `ListItem.IsCollection`\endlink
4580 /// \table_row3{ <b>`ListItem.IsSelected`</b>,
4581 /// \anchor ListItem_IsSelected
4583 /// @return **True** if the current ListItem is selected (f.e. currently playing
4584 /// in playlist window).
4587 /// \table_row3{ <b>`ListItem.HasEpg`</b>,
4588 /// \anchor ListItem_HasEpg
4590 /// @return **True** when the selected programme has epg info (PVR).
4593 /// \table_row3{ <b>`ListItem.HasTimer`</b>,
4594 /// \anchor ListItem_HasTimer
4596 /// @return **True** when a recording timer has been set for the selected
4597 /// programme (PVR).
4600 /// \table_row3{ <b>`ListItem.IsRecording`</b>,
4601 /// \anchor ListItem_IsRecording
4603 /// @return **True** when the selected programme is being recorded (PVR).
4606 /// \table_row3{ <b>`ListItem.IsPlayable`</b>,
4607 /// \anchor ListItem_IsPlayable
4609 /// @return **True** when the selected programme can be played (PVR)
4611 /// @skinning_v19 **[New Boolean Condition]** \link ListItem_IsPlayable `ListItem.IsPlayable`\endlink
4614 /// \table_row3{ <b>`ListItem.HasArchive`</b>,
4615 /// \anchor ListItem_HasArchive
4617 /// @return **True** when the selected channel has a server-side back buffer (PVR)
4619 /// @skinning_v19 **[New Boolean Condition]** \link ListItem_HasArchive `ListItem.HasArchive`\endlink
4622 /// \table_row3{ <b>`ListItem.IsEncrypted`</b>,
4623 /// \anchor ListItem_IsEncrypted
4625 /// @return **True** when the selected programme is encrypted (PVR).
4628 /// \table_row3{ <b>`ListItem.IsStereoscopic`</b>,
4629 /// \anchor ListItem_IsStereoscopic
4631 /// @return **True** when the selected video is a 3D (stereoscopic) video.
4633 /// @skinning_v13 **[New Boolean Condition]** \link ListItem_IsStereoscopic `ListItem.IsStereoscopic`\endlink
4636 /// \table_row3{ <b>`ListItem.Property(IsSpecial)`</b>,
4637 /// \anchor ListItem_Property_IsSpecial
4639 /// @return **True** if the current Season/Episode is a Special.
4642 /// \table_row3{ <b>`ListItem.Property(DateLabel)`</b>,
4643 /// \anchor ListItem_Property_DateLabel
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.
4649 /// \table_row3{ <b>`ListItem.Property(Addon.IsEnabled)`</b>,
4650 /// \anchor ListItem_Property_AddonIsEnabled
4652 /// @return **True** when the selected addon is enabled (for use in the addon
4653 /// info dialog only).
4655 /// @skinning_v17 **[Boolean Condition Updated]** \link ListItem_Property_AddonIsEnabled `ListItem.Property(Addon.IsEnabled)`\endlink
4656 /// replaces `ListItem.Property(Addon.Enabled)`.
4659 /// \table_row3{ <b>`ListItem.Property(Addon.IsInstalled)`</b>,
4660 /// \anchor ListItem_Property_AddonIsInstalled
4662 /// @return **True** when the selected addon is installed (for use in the addon
4663 /// info dialog only).
4665 /// @skinning_v17 **[Boolean Condition Updated]** \link ListItem_Property_AddonIsInstalled `ListItem.Property(Addon.IsInstalled)`\endlink
4666 /// replaces `ListItem.Property(Addon.Installed)`.
4669 /// \table_row3{ <b>`ListItem.Property(Addon.HasUpdate)`</b>,
4670 /// \anchor ListItem_Property_AddonHasUpdate
4672 /// @return **True** when there's an update available for the selected addon.
4674 /// @skinning_v17 **[Boolean Condition Updated]** \link ListItem_Property_AddonHasUpdate `ListItem.Property(Addon.HasUpdate)`\endlink
4675 /// replaces `ListItem.Property(Addon.UpdateAvail)`.
4678 /// \table_row3{ <b>`ListItem.IsAutoUpdateable`</b>,
4679 /// \anchor ListItem_IsAutoUpdateable
4681 /// @return **True** if this add-on can be updated automatically.
4683 /// @skinning_v19 **[New Boolean Condition]** \link ListItem_IsAutoUpdateable `ListItem.IsAutoUpdateable`\endlink
4686 /// \table_row3{ <b>`ListItem.Property(Addon.IsFromOfficialRepo)`</b>,
4687 /// \anchor ListItem_Property_AddonIsFromOfficialRepo
4689 /// @return **True** if this add-on is from an official repository.
4691 /// @skinning_v19 **[New Boolean Condition]** \link ListItem_Property_AddonIsFromOfficialRepo `ListItem.Property(Addon.IsFromOfficialRepo)`\endlink
4694 /// \table_row3{ <b>`ListItem.Property(Addon.IsBinary)`</b>,
4695 /// \anchor ListItem_Property_AddonIsBinary
4697 /// @return **True** if this add-on is a binary addon.
4699 /// @skinning_v19 **[New Boolean Condition]** \link ListItem_Property_AddonIsBinary `ListItem.Property(Addon.IsBinary)`\endlink
4702 /// \table_row3{ <b>`ListItem.Property(Addon.IsUpdate)`</b>,
4703 /// \anchor ListItem_Property_AddonIsUpdate
4705 /// @return **True** if this add-on is a valid update of an installed outdated add-on.
4707 /// @skinning_v19 **[New Boolean Condition]** \link ListItem_Property_AddonIsUpdate `ListItem.Property(Addon.IsUpdate)`\endlink
4710 /// \table_row3{ <b>`ListItem.Property(Addon.ValidUpdateOrigin)`</b>,
4711 /// \anchor ListItem_Property_ValidUpdateOrigin
4713 /// @return The origin string of a valid update for the addon. Empty string if there is no valid update available.
4715 /// @skinning_v19 **[New Infolabel]** \link ListItem_Property_ValidUpdateOrigin `ListItem.Property(Addon.ValidUpdateOrigin)`\endlink
4718 /// \table_row3{ <b>`ListItem.Property(Addon.ValidUpdateVersion)`</b>,
4719 /// \anchor ListItem_Property_ValidUpdateVersion
4721 /// @return The version string of a valid update for the addon. Empty string if there is no valid update available.
4723 /// @skinning_v19 **[New Infolabel]** \link ListItem_Property_ValidUpdateVersion `ListItem.Property(Addon.ValidUpdateVersion)`\endlink
4726 /// \table_row3{ <b>`ListItem.Label`</b>,
4727 /// \anchor ListItem_Label
4729 /// @return The left label of the currently selected item in a container.
4732 /// \table_row3{ <b>`ListItem.Label2`</b>,
4733 /// \anchor ListItem_Label2
4735 /// @return The right label of the currently selected item in a container.
4738 /// \table_row3{ <b>`ListItem.Title`</b>,
4739 /// \anchor ListItem_Title
4741 /// @return The title of the currently selected song\, movie\, game in a container.
4743 /// @skinning_v18 **[Infolabel Updated]** \link ListItem_Title `ListItem.Title`\endlink extended
4744 /// to support games
4747 /// \table_row3{ <b>`ListItem.OriginalTitle`</b>,
4748 /// \anchor ListItem_OriginalTitle
4750 /// @return The original title of the currently selected movie in a container.
4753 /// \table_row3{ <b>`ListItem.SortLetter`</b>,
4754 /// \anchor ListItem_SortLetter
4756 /// @return The first letter of the current file in a container.
4759 /// \table_row3{ <b>`ListItem.TrackNumber`</b>,
4760 /// \anchor ListItem_TrackNumber
4762 /// @return The track number of the currently selected song in a container.
4765 /// \table_row3{ <b>`ListItem.Artist`</b>,
4766 /// \anchor ListItem_Artist
4768 /// @return The artist of the currently selected song in a container.
4771 /// \table_row3{ <b>`ListItem.AlbumArtist`</b>,
4772 /// \anchor ListItem_AlbumArtist
4774 /// @return The artist of the currently selected album in a list.
4777 /// \table_row3{ <b>`ListItem.Property(Artist_Sortname)`</b>,
4778 /// \anchor ListItem_Property_Artist_Sortname
4780 /// @return The sortname of the currently selected Artist.
4782 /// @skinning_v18 **[New Infolabel]** \link ListItem_Property_Artist_Sortname `ListItem.Property(Artist_Sortname)`\endlink
4785 /// \table_row3{ <b>`ListItem.Property(Artist_Type)`</b>,
4786 /// \anchor ListItem_Property_Artist_Type
4788 /// @return The type of the currently selected Artist - person\, group\, orchestra\, choir etc.
4790 /// @skinning_v18 **[New Infolabel]** \link ListItem_Property_Artist_Type `ListItem.Property(Artist_Type)`\endlink
4793 /// \table_row3{ <b>`ListItem.Property(Artist_Gender)`</b>,
4794 /// \anchor ListItem_Property_Artist_Gender
4796 /// @return The Gender of the currently selected Artist - male\, female\, other.
4798 /// @skinning_v18 **[New Infolabel]** \link ListItem_Property_Artist_Gender `ListItem.Property(Artist_Gender)`\endlink
4801 /// \table_row3{ <b>`ListItem.Property(Artist_Disambiguation)`</b>,
4802 /// \anchor ListItem_Property_Artist_Disambiguation
4804 /// @return A Brief description of the currently selected Artist that differentiates them
4805 /// from others with the same name.
4807 /// @skinning_v18 **[New Infolabel]** \link ListItem_Property_Artist_Disambiguation `ListItem.Property(Artist_Disambiguation)`\endlink
4810 /// \table_row3{ <b>`ListItem.Property(Artist_Born)`</b>,
4811 /// \anchor ListItem_Property_Artist_Born
4813 /// @return The date of Birth of the currently selected Artist.
4816 /// \table_row3{ <b>`ListItem.Property(Artist_Died)`</b>,
4817 /// \anchor ListItem_Property_Artist_Died
4819 /// @return The date of Death of the currently selected Artist.
4822 /// \table_row3{ <b>`ListItem.Property(Artist_Formed)`</b>,
4823 /// \anchor ListItem_Property_Artist_Formed
4825 /// @return The formation date of the currently selected Band.
4828 /// \table_row3{ <b>`ListItem.Property(Artist_Disbanded)`</b>,
4829 /// \anchor ListItem_Property_Artist_Disbanded
4831 /// @return The disbanding date of the currently selected Band.
4834 /// \table_row3{ <b>`ListItem.Property(Artist_YearsActive)`</b>,
4835 /// \anchor ListItem_Property_Artist_YearsActive
4837 /// @return The years the currently selected artist has been active.
4840 /// \table_row3{ <b>`ListItem.Property(Artist_Instrument)`</b>,
4841 /// \anchor ListItem_Property_Artist_Instrument
4843 /// @return The instruments played by the currently selected artist.
4846 /// \table_row3{ <b>`ListItem.Property(Artist_Description)`</b>,
4847 /// \anchor ListItem_Property_Artist_Description
4849 /// @return A biography of the currently selected artist.
4852 /// \table_row3{ <b>`ListItem.Property(Artist_Mood)`</b>,
4853 /// \anchor ListItem_Property_Artist_Mood
4855 /// @return The moods of the currently selected artist.
4858 /// \table_row3{ <b>`ListItem.Property(Artist_Style)`</b>,
4859 /// \anchor ListItem_Property_Artist_Style
4861 /// @return The styles of the currently selected artist.
4864 /// \table_row3{ <b>`ListItem.Property(Artist_Genre)`</b>,
4865 /// \anchor ListItem_Property_Artist_Genre
4867 /// @return The genre of the currently selected artist.
4870 /// \table_row3{ <b>`ListItem.Album`</b>,
4871 /// \anchor ListItem_Album
4873 /// @return The album of the currently selected song in a container.
4876 /// \table_row3{ <b>`ListItem.Property(Album_Mood)`</b>,
4877 /// \anchor ListItem_Property_Album_Mood
4879 /// @return The moods of the currently selected Album.
4882 /// \table_row3{ <b>`ListItem.Property(Album_Style)`</b>,
4883 /// \anchor ListItem_Property_Album_Style
4885 /// @return The styles of the currently selected Album.
4888 /// \table_row3{ <b>`ListItem.Property(Album_Theme)`</b>,
4889 /// \anchor ListItem_Property_Album_Theme
4891 /// @return The themes of the currently selected Album.
4894 /// \table_row3{ <b>`ListItem.Property(Album_Type)`</b>,
4895 /// \anchor ListItem_Property_Album_Type
4897 /// @return The Album Type (e.g. compilation\, enhanced\, explicit lyrics) of
4898 /// the currently selected Album.
4901 /// \table_row3{ <b>`ListItem.Property(Album_Label)`</b>,
4902 /// \anchor ListItem_Property_Album_Label
4904 /// @return The record label of the currently selected Album.
4907 /// \table_row3{ <b>`ListItem.Property(Album_Description)`</b>,
4908 /// \anchor ListItem_Property_Album_Description
4910 /// @return A review of the currently selected Album.
4913 /// \table_row3{ <b>`ListItem.Property(Album_Totaldiscs)`</b>,
4914 /// \anchor ListItem_Property_Album_Totaldiscs
4916 /// @return The total number of discs belonging to an album.
4918 /// @skinning_v19 **[New Infolabel]** \link ListItem.Property(Album_Totaldiscs) `ListItem.Property(Album_Totaldiscs)`\endlink
4921 /// \table_row3{ <b>`ListItem.Property(Album_Isboxset)`</b>,
4922 /// \anchor ListItem_Property_Album_Isboxset
4924 /// @return **True** if the album is a boxset.
4926 /// @skinning_v19 **[New Infobool]** \link ListItem.Property(Album_Isboxset) `ListItem.Property(Album_Isboxset)`\endlink
4929 /// \table_row3{ <b>`ListItem.Property(Album_Duration)`</b>,
4930 /// \anchor ListItem_Property_Album_Duration
4932 /// @return The duration of the album in HH:MM:SS.
4934 /// @skinning_v19 **[New Infolabel]** \link ListItem_Property_Album_Duration `ListItem.Property(Album_Duration)`\endlink
4937 /// \table_row3{ <b>`ListItem.DiscNumber`</b>,
4938 /// \anchor ListItem_DiscNumber
4940 /// @return The disc number of the currently selected song in a container.
4943 /// \table_row3{ <b>`ListItem.Year`</b>,
4944 /// \anchor ListItem_Year
4946 /// @return The year of the currently selected song\, album\, movie\, game in a
4949 /// @skinning_v18 **[Infolabel Updated]** \link ListItem_Title `ListItem.Title`\endlink extended
4950 /// to support games
4953 /// \table_row3{ <b>`ListItem.Premiered`</b>,
4954 /// \anchor ListItem_Premiered
4956 /// @return The release/aired date of the currently selected episode\, show\,
4957 /// movie or EPG item in a container.
4959 /// @skinning_v15 **[Infolabel Updated]** \link ListItem_Premiered `ListItem.Premiered`\endlink
4960 /// now also available for EPG items.
4963 /// \table_row3{ <b>`ListItem.Genre`</b>,
4964 /// \anchor ListItem_Genre
4966 /// @return The genre of the currently selected song\, album or movie in a
4970 /// \table_row3{ <b>`ListItem.Contributors`</b>,
4971 /// \anchor ListItem_Contributors
4973 /// @return The list of all people who've contributed to the selected song.
4975 /// @skinning_v17 **[New Infolabel]** \link ListItem_Contributors `ListItem.Contributors`\endlink
4978 /// \table_row3{ <b>`ListItem.ContributorAndRole`</b>,
4979 /// \anchor ListItem_ContributorAndRole
4981 /// @return The list of all people and their role who've contributed to the selected song.
4983 /// @skinning_v17 **[New Infolabel]** \link ListItem_ContributorAndRole `ListItem.ContributorAndRole`\endlink
4986 /// \table_row3{ <b>`ListItem.Director`</b>,
4987 /// \anchor ListItem_Director
4989 /// @return The director of the currently selected movie in a container.
4991 /// @skinning_v15 **[Infolabel Updated]** \link ListItem_Director `ListItem.Director`\endlink
4992 /// also supports EPG.
4995 /// \table_row3{ <b>`ListItem.Country`</b>,
4996 /// \anchor ListItem_Country
4998 /// @return The production country of the currently selected movie in a
5002 /// \table_row3{ <b>`ListItem.Episode`</b>,
5003 /// \anchor ListItem_Episode
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
5010 /// @skinning_v15 **[Infolabel Updated]** \link ListItem_Episode `ListItem.Episode`\endlink
5011 /// also supports EPG.
5014 /// \table_row3{ <b>`ListItem.Season`</b>,
5015 /// \anchor ListItem_Season
5017 /// @return The season value for the currently selected tvshow.
5019 /// @skinning_v15 **[Infolabel Updated]** \link ListItem_Season `ListItem.Season`\endlink
5020 /// also supports EPG.
5023 /// \table_row3{ <b>`ListItem.TVShowTitle`</b>,
5024 /// \anchor ListItem_TVShowTitle
5026 /// @return The name value for the currently selected tvshow in the season and
5027 /// episode depth of the video library.
5030 /// \table_row3{ <b>`ListItem.Property(TotalSeasons)`</b>,
5031 /// \anchor ListItem_Property_TotalSeasons
5033 /// @return The total number of seasons for the currently selected tvshow.
5036 /// \table_row3{ <b>`ListItem.Property(TotalEpisodes)`</b>,
5037 /// \anchor ListItem_Property_TotalEpisodes
5039 /// @return the total number of episodes for the currently selected tvshow or
5043 /// \table_row3{ <b>`ListItem.Property(WatchedEpisodes)`</b>,
5044 /// \anchor ListItem_Property_WatchedEpisodes
5046 /// @return The number of watched episodes for the currently selected tvshow
5050 /// \table_row3{ <b>`ListItem.Property(UnWatchedEpisodes)`</b>,
5051 /// \anchor ListItem_Property_UnWatchedEpisodes
5053 /// @return The number of unwatched episodes for the currently selected tvshow
5057 /// \table_row3{ <b>`ListItem.Property(NumEpisodes)`</b>,
5058 /// \anchor ListItem_Property_NumEpisodes
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.
5064 /// \table_row3{ <b>`ListItem.Property(WatchedEpisodePercent)`</b>,
5065 /// \anchor ListItem_Property_WatchedEpisodePercent
5067 /// @return The percentage of watched episodes in the tvshow (watched/total*100) or season.
5069 /// @skinning_v20 **[New Infolabel]** \link ListItem_Property_WatchedEpisodePercent `ListItem.Property(WatchedEpisodePercent)`\endlink
5072 /// \table_row3{ <b>`ListItem.PictureAperture`</b>,
5073 /// \anchor ListItem_PictureAperture
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).
5079 /// \table_row3{ <b>`ListItem.PictureAuthor`</b>,
5080 /// \anchor ListItem_PictureAuthor
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).
5085 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureAuthor `ListItem.PictureAuthor`\endlink
5088 /// \table_row3{ <b>`ListItem.PictureByline`</b>,
5089 /// \anchor ListItem_PictureByline
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).
5094 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureByline `ListItem.PictureByline`\endlink
5097 /// \table_row3{ <b>`ListItem.PictureBylineTitle`</b>,
5098 /// \anchor ListItem_PictureBylineTitle
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).
5103 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureBylineTitle `ListItem.PictureBylineTitle`\endlink
5106 /// \table_row3{ <b>`ListItem.PictureCamMake`</b>,
5107 /// \anchor ListItem_PictureCamMake
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).
5113 /// \table_row3{ <b>`ListItem.PictureCamModel`</b>,
5114 /// \anchor ListItem_PictureCamModel
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).
5121 /// \table_row3{ <b>`ListItem.PictureCaption`</b>,
5122 /// \anchor ListItem_PictureCaption
5124 /// @return A description of the selected picture.
5125 /// @note This is the value of the IPTC Caption tag (hex code 0x78).
5128 /// \table_row3{ <b>`ListItem.PictureCategory`</b>,
5129 /// \anchor ListItem_PictureCategory
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).
5134 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureCategory `ListItem.PictureCategory`\endlink
5137 /// \table_row3{ <b>`ListItem.PictureCCDWidth`</b>,
5138 /// \anchor ListItem_PictureCCDWidth
5140 /// @return The width of the CCD in the camera used to take the selected
5142 /// @note This is calculated from three EXIF tags (0xA002 * 0xA210 / 0xA20e).
5144 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureCCDWidth `ListItem.PictureCCDWidth`\endlink
5147 /// \table_row3{ <b>`ListItem.PictureCity`</b>,
5148 /// \anchor ListItem_PictureCity
5150 /// @return The city where the selected picture was taken.
5151 /// @note This is the value of the IPTC City tag (hex code 0x5A).
5153 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureCity `ListItem.PictureCity`\endlink
5156 /// \table_row3{ <b>`ListItem.PictureColour`</b>,
5157 /// \anchor ListItem_PictureColour
5159 /// @return Whether the selected picture is "Colour" or "Black and White".
5161 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureColour `ListItem.PictureColour`\endlink
5164 /// \table_row3{ <b>`ListItem.PictureComment`</b>,
5165 /// \anchor ListItem_PictureComment
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".
5173 /// \table_row3{ <b>`ListItem.PictureCopyrightNotice`</b>,
5174 /// \anchor ListItem_PictureCopyrightNotice
5176 /// @return The copyright notice of the selected picture.
5177 /// @note This is the value of the IPTC Copyright tag (hex code 0x74).
5179 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureCopyrightNotice `ListItem.PictureCopyrightNotice`\endlink
5182 /// \table_row3{ <b>`ListItem.PictureCountry`</b>,
5183 /// \anchor ListItem_PictureCountry
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).
5188 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureCountry `ListItem.PictureCountry`\endlink
5191 /// \table_row3{ <b>`ListItem.PictureCountryCode`</b>,
5192 /// \anchor ListItem_PictureCountryCode
5194 /// @return The country code of the country where the selected picture was
5196 /// @note This is the value of the IPTC CountryCode tag (hex code 0x64).
5198 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureCountryCode `ListItem.PictureCountryCode`\endlink
5201 /// \table_row3{ <b>`ListItem.PictureCredit`</b>,
5202 /// \anchor ListItem_PictureCredit
5204 /// @return Who provided the selected picture.
5205 /// @note This is the value of the IPTC Credit tag (hex code 0x6E).
5207 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureCredit `ListItem.PictureCredit`\endlink
5210 /// \table_row3{ <b>`ListItem.PictureDate`</b>,
5211 /// \anchor ListItem_PictureDate
5213 /// @return The localized date of the selected picture. The short form of the
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
5220 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureDate `ListItem.PictureDate`\endlink
5223 /// \table_row3{ <b>`ListItem.PictureDatetime`</b>,
5224 /// \anchor ListItem_PictureDatetime
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.
5232 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureDatetime `ListItem.PictureDatetime`\endlink
5235 /// \table_row3{ <b>`ListItem.PictureDesc`</b>,
5236 /// \anchor ListItem_PictureDesc
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).
5243 /// \table_row3{ <b>`ListItem.PictureDigitalZoom`</b>,
5244 /// \anchor ListItem_PictureDigitalZoom
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).
5249 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureDigitalZoom `ListItem.PictureDigitalZoom`\endlink
5252 /// \table_row3{ <b>`ListItem.PictureExpMode`</b>,
5253 /// \anchor ListItem_PictureExpMode
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).
5263 /// \table_row3{ <b>`ListItem.PictureExposure`</b>,
5264 /// \anchor ListItem_PictureExposure
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>
5273 /// @note This is the value of the EXIF ExposureProgram tag (hex code 0x8822).
5275 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureExposure `ListItem.PictureExposure`\endlink
5278 /// \table_row3{ <b>`ListItem.PictureExposureBias`</b>,
5279 /// \anchor ListItem_PictureExposureBias
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).
5285 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureExposureBias `ListItem.PictureExposureBias`\endlink
5288 /// \table_row3{ <b>`ListItem.PictureExpTime`</b>,
5289 /// \anchor ListItem_PictureExpTime
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)
5297 /// \table_row3{ <b>`ListItem.PictureFlashUsed`</b>,
5298 /// \anchor ListItem_PictureFlashUsed
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).
5304 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureFlashUsed `ListItem.PictureFlashUsed`\endlink
5307 /// \table_row3{ <b>`ListItem.PictureFocalLen`</b>,
5308 /// \anchor ListItem_PictureFocalLen
5310 /// @return The lens focal length of the selected picture.
5313 /// \table_row3{ <b>`ListItem.PictureFocusDist`</b>,
5314 /// \anchor ListItem_PictureFocusDist
5316 /// @return The focal length of the lens\, in mm.
5317 /// @note This is the value of the EXIF FocalLength tag (hex code 0x920A).
5319 /// \table_row3{ <b>`ListItem.PictureGPSLat`</b>,
5320 /// \anchor ListItem_PictureGPSLat
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.
5327 /// \table_row3{ <b>`ListItem.PictureGPSLon`</b>,
5328 /// \anchor ListItem_PictureGPSLon
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.
5335 /// \table_row3{ <b>`ListItem.PictureGPSAlt`</b>,
5336 /// \anchor ListItem_PictureGPSAlt
5338 /// @return The altitude in meters where the selected picture was taken.
5339 /// @note This is the value of the EXIF GPSInfo.GPSAltitude tag.
5342 /// \table_row3{ <b>`ListItem.PictureHeadline`</b>,
5343 /// \anchor ListItem_PictureHeadline
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).
5348 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureHeadline `ListItem.PictureHeadline`\endlink
5351 /// \table_row3{ <b>`ListItem.PictureImageType`</b>,
5352 /// \anchor ListItem_PictureImageType
5354 /// @return The color components of the selected picture.
5355 /// @note This is the value of the IPTC ImageType tag (hex code 0x82).
5357 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureImageType `ListItem.PictureImageType`\endlink
5360 /// \table_row3{ <b>`ListItem.PictureIPTCDate`</b>,
5361 /// \anchor ListItem_PictureIPTCDate
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).
5367 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureIPTCDate `ListItem.PictureIPTCDate`\endlink
5370 /// \table_row3{ <b>`ListItem.PictureIPTCTime`</b>,
5371 /// \anchor ListItem_PictureIPTCTime
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).
5377 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureIPTCTime `ListItem.PictureIPTCTime`\endlink
5380 /// \table_row3{ <b>`ListItem.PictureISO`</b>,
5381 /// \anchor ListItem_PictureISO
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).
5387 /// \table_row3{ <b>`ListItem.PictureKeywords`</b>,
5388 /// \anchor ListItem_PictureKeywords
5390 /// @return The keywords assigned to the selected picture.
5391 /// @note This is the value of the IPTC Keywords tag (hex code 0x19).
5394 /// \table_row3{ <b>`ListItem.PictureLightSource`</b>,
5395 /// \anchor ListItem_PictureLightSource
5397 /// @return The kind of light source when the picture was taken. Possible
5399 /// - <b>"Daylight"</b>
5400 /// - <b>"Fluorescent"</b>
5401 /// - <b>"Incandescent"</b>
5403 /// @note This is the value of the EXIF LightSource tag (hex code 0x9208).
5405 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureLightSource `ListItem.PictureLightSource`\endlink
5408 /// \table_row3{ <b>`ListItem.PictureLongDate`</b>,
5409 /// \anchor ListItem_PictureLongDate
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.
5418 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureLongDate `ListItem.PictureLongDate`\endlink
5421 /// \table_row3{ <b>`ListItem.PictureLongDatetime`</b>,
5422 /// \anchor ListItem_PictureLongDatetime
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.
5432 /// \table_row3{ <b>`ListItem.PictureMeteringMode`</b>,
5433 /// \anchor ListItem_PictureMeteringMode
5435 /// @return The metering mode used when the selected picture was taken. The
5436 /// possible values are:
5437 /// - <b>"Center weight"</b>
5439 /// - <b>"Matrix"</b>
5440 /// @note This is the value of the EXIF MeteringMode tag (hex code 0x9207).
5442 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureMeteringMode `ListItem.PictureMeteringMode`\endlink
5445 /// \table_row3{ <b>`ListItem.PictureObjectName`</b>,
5446 /// \anchor ListItem_PictureObjectName
5448 /// @return A shorthand reference for the selected picture.
5449 /// @note This is the value of the IPTC ObjectName tag (hex code 0x05).
5451 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureObjectName `ListItem.PictureObjectName`\endlink
5454 /// \table_row3{ <b>`ListItem.PictureOrientation`</b>,
5455 /// \anchor ListItem_PictureOrientation
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>
5463 /// @note This is the value of the EXIF Orientation tag (hex code 0x0112).
5465 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureOrientation `ListItem.PictureOrientation`\endlink
5468 /// \table_row3{ <b>`ListItem.PicturePath`</b>,
5469 /// \anchor ListItem_PicturePath
5471 /// @return The filename and path of the selected picture.
5474 /// \table_row3{ <b>`ListItem.PictureProcess`</b>,
5475 /// \anchor ListItem_PictureProcess
5477 /// @return The process used to compress the selected picture.
5479 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureProcess `ListItem.PictureProcess`\endlink
5482 /// \table_row3{ <b>`ListItem.PictureReferenceService`</b>,
5483 /// \anchor ListItem_PictureReferenceService
5485 /// @return The Service Identifier of a prior envelope to which the selected
5487 /// @note This is the value of the IPTC ReferenceService tag (hex code 0x2D).
5489 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureReferenceService `ListItem.PictureReferenceService`\endlink
5492 /// \table_row3{ <b>`ListItem.PictureResolution`</b>,
5493 /// \anchor ListItem_PictureResolution
5495 /// @return The dimensions of the selected picture.
5498 /// \table_row3{ <b>`ListItem.PictureSource`</b>,
5499 /// \anchor ListItem_PictureSource
5501 /// @return The original owner of the selected picture.
5502 /// @note This is the value of the IPTC Source tag (hex code 0x73).
5504 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureSource `ListItem.PictureSource`\endlink
5507 /// \table_row3{ <b>`ListItem.PictureSpecialInstructions`</b>,
5508 /// \anchor ListItem_PictureSpecialInstructions
5510 /// @return Other editorial instructions concerning the use of the selected
5512 /// @note This is the value of the IPTC SpecialInstructions tag (hex code 0x28).
5514 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureSpecialInstructions `ListItem.PictureSpecialInstructions`\endlink
5517 /// \table_row3{ <b>`ListItem.PictureState`</b>,
5518 /// \anchor ListItem_PictureState
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).
5523 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureState `ListItem.PictureState`\endlink
5526 /// \table_row3{ <b>`ListItem.PictureSublocation`</b>,
5527 /// \anchor ListItem_PictureSublocation
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).
5533 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureSublocation `ListItem.PictureSublocation`\endlink
5536 /// \table_row3{ <b>`ListItem.PictureSupplementalCategories`</b>,
5537 /// \anchor ListItem_PictureSupplementalCategories
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).
5543 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureSupplementalCategories `ListItem.PictureSupplementalCategories`\endlink
5546 /// \table_row3{ <b>`ListItem.PictureTransmissionReference`</b>,
5547 /// \anchor ListItem_PictureTransmissionReference
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).
5553 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureTransmissionReference `ListItem.PictureTransmissionReference`\endlink
5556 /// \table_row3{ <b>`ListItem.PictureUrgency`</b>,
5557 /// \anchor ListItem_PictureUrgency
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).
5565 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureUrgency `ListItem.PictureUrgency`\endlink
5568 /// \table_row3{ <b>`ListItem.PictureWhiteBalance`</b>,
5569 /// \anchor ListItem_PictureWhiteBalance
5571 /// @return The white balance mode set when the selected picture was taken.
5572 /// The possible values are:
5573 /// - <b>"Manual"</b>
5575 /// @note This is the value of the EXIF WhiteBalance tag (hex code 0xA403).
5577 /// @skinning_v13 **[New Infolabel]** \link ListItem_PictureWhiteBalance `ListItem.PictureWhiteBalance`\endlink
5580 /// \table_row3{ <b>`ListItem.FileName`</b>,
5581 /// \anchor ListItem_FileName
5583 /// @return The filename of the currently selected song or movie in a container.
5586 /// \table_row3{ <b>`ListItem.Path`</b>,
5587 /// \anchor ListItem_Path
5589 /// @return The complete path of the currently selected song or movie in a
5593 /// \table_row3{ <b>`ListItem.FolderName`</b>,
5594 /// \anchor ListItem_FolderName
5596 /// @return The top most folder of the path of the currently selected song or
5597 /// movie in a container.
5600 /// \table_row3{ <b>`ListItem.FolderPath`</b>,
5601 /// \anchor ListItem_FolderPath
5603 /// @return The complete path of the currently selected song or movie in a
5604 /// container (without user details).
5607 /// \table_row3{ <b>`ListItem.FileNameAndPath`</b>,
5608 /// \anchor ListItem_FileNameAndPath
5610 /// @return The full path with filename of the currently selected song or
5611 /// movie in a container.
5614 /// \table_row3{ <b>`ListItem.FileExtension`</b>,
5615 /// \anchor ListItem_FileExtension
5617 /// @return The file extension (without leading dot) of the currently selected
5618 /// item in a container.
5621 /// \table_row3{ <b>`ListItem.FileNameNoExtension`</b>,
5622 /// \anchor ListItem_FileName_No_Extension
5624 /// @return The filename without extension of the currently selected
5625 /// item in a container.
5627 /// @skinning_v19 **[New Infolabel]** \link ListItem_FileName_No_Extension `ListItem.FileNameNoExtension`\endlink
5630 /// \table_row3{ <b>`ListItem.Date`</b>,
5631 /// \anchor ListItem_Date
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).
5638 /// \table_row3{ <b>`ListItem.DateTime`</b>,
5639 /// \anchor ListItem_DateTime
5641 /// @return The date and time a certain event happened (event log).
5643 /// @skinning_v16 **[New Infolabel]** \link ListItem_DateTime `ListItem.DateTime`\endlink
5646 /// \table_row3{ <b>`ListItem.DateAdded`</b>,
5647 /// \anchor ListItem_DateAdded
5649 /// @return The date the currently selected item was added to the
5650 /// library / Date and time of an event in the EventLog window.
5653 /// \table_row3{ <b>`ListItem.Size`</b>,
5654 /// \anchor ListItem_Size
5656 /// @return The file size of the currently selected song or movie in a
5660 /// \table_row3{ <b>`ListItem.Rating([name])`</b>,
5661 /// \anchor ListItem_Rating
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.
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.
5674 /// \table_row3{ <b>`ListItem.Set`</b>,
5675 /// \anchor ListItem_Set
5677 /// @return The name of the set the movie is part of.
5679 /// @skinning_v17 **[New Infolabel]** \link ListItem_Set `ListItem.Set`\endlink
5682 /// \table_row3{ <b>`ListItem.SetId`</b>,
5683 /// \anchor ListItem_SetId
5685 /// @return The id of the set the movie is part of.
5687 /// @skinning_v17 **[New Infolabel]** \link ListItem_SetId `ListItem.SetId`\endlink
5690 /// \table_row3{ <b>`ListItem.Status`</b>,
5691 /// \anchor ListItem_Status
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>
5700 /// @note For use with tv shows.
5702 /// @skinning_v17 **[New Infolabel]** \link ListItem_Status `ListItem.Status`\endlink
5705 /// \table_row3{ <b>`ListItem.EndTimeResume`</b>,
5706 /// \anchor ListItem_EndTimeResume
5708 /// @return Returns the time a video will end if you resume it\, instead of playing it from the beginning.
5710 /// @skinning_v17 **[New Infolabel]** \link ListItem_EndTimeResume `ListItem.EndTimeResume`\endlink
5713 /// \table_row3{ <b>`ListItem.UserRating`</b>,
5714 /// \anchor ListItem_UserRating
5716 /// @return The user rating of the currently selected item in a container (1-10).
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
5723 /// \table_row3{ <b>`ListItem.Votes([name])`</b>,
5724 /// \anchor ListItem_Votes
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`.
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
5735 /// \table_row3{ <b>`ListItem.RatingAndVotes([name])`</b>,
5736 /// \anchor ListItem_RatingAndVotes
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`.
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.
5748 /// \table_row3{ <b>`ListItem.Mood`</b>,
5749 /// \anchor ListItem_Mood
5751 /// @return The mood of the selected song.
5753 /// @skinning_v17 **[New Infolabel]** \link ListItem_Mood `ListItem.Mood`\endlink
5756 /// \table_row3{ <b>`ListItem.Mpaa`</b>,
5757 /// \anchor ListItem_Mpaa
5759 /// @return The MPAA rating of the currently selected movie in a container.
5762 /// \table_row3{ <b>`ListItem.ProgramCount`</b>,
5763 /// \anchor ListItem_ProgramCount
5765 /// @return The number of times an xbe has been run from "my programs".
5766 /// @todo description might be outdated
5769 /// \table_row3{ <b>`ListItem.Duration`</b>,
5770 /// \anchor ListItem_Duration
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.
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.
5780 /// \table_row3{ <b>`ListItem.Duration(format)`</b>,
5781 /// \anchor ListItem_Duration_format
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.
5789 /// \table_row3{ <b>`ListItem.DBTYPE`</b>,
5790 /// \anchor ListItem_DBTYPE
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.
5799 /// @skinning_v17 **[Infolabel Updated]** \link ListItem_DBTYPE `ListItem.DBTYPE`\endlink
5800 /// now available in the music library.
5803 /// \table_row3{ <b>`ListItem.DBID`</b>,
5804 /// \anchor ListItem_DBID
5806 /// @return The database id of the currently selected listitem in a container.
5809 /// \table_row3{ <b>`ListItem.Appearances`</b>,
5810 /// \anchor ListItem_Appearances
5812 /// @return The number of movies featuring the selected actor / directed by the selected director.
5814 /// @skinning_v17 **[New Infolabel]** \link ListItem_Appearances `ListItem.Appearances`\endlink
5817 /// \table_row3{ <b>`ListItem.Cast`</b>,
5818 /// \anchor ListItem_Cast
5820 /// @return A concatenated string of cast members of the currently selected
5821 /// movie\, for use in dialogvideoinfo.xml.
5823 /// @skinning_v15 **[Infolabel Updated]** \link ListItem_Cast `ListItem.Cast`\endlink
5824 /// also supports EPG.
5827 /// \table_row3{ <b>`ListItem.CastAndRole`</b>,
5828 /// \anchor ListItem_CastAndRole
5830 /// @return A concatenated string of cast members and roles of the currently
5831 /// selected movie\, for use in dialogvideoinfo.xml.
5834 /// \table_row3{ <b>`ListItem.Studio`</b>,
5835 /// \anchor ListItem_Studio
5837 /// @return The studio of current selected Music Video in a container.
5840 /// \table_row3{ <b>`ListItem.Top250`</b>,
5841 /// \anchor ListItem_Top250
5843 /// @return The IMDb top250 position of the currently selected listitem in a
5847 /// \table_row3{ <b>`ListItem.Trailer`</b>,
5848 /// \anchor ListItem_Trailer
5850 /// @return The full trailer path with filename of the currently selected
5851 /// movie in a container.
5854 /// \table_row3{ <b>`ListItem.Writer`</b>,
5855 /// \anchor ListItem_Writer
5857 /// @return The name of Writer of current Video in a container.
5859 /// @skinning_v15 **[Infolabel Updated]** \link ListItem_Writer `ListItem.Writer`\endlink
5860 /// also supports EPG.
5863 /// \table_row3{ <b>`ListItem.Tag`</b>,
5864 /// \anchor ListItem_Tag
5866 /// @return The summary of current Video in a container.
5868 /// @skinning_v17 **[New Infolabel]** \link ListItem_Tag `ListItem.Tag`\endlink
5871 /// \table_row3{ <b>`ListItem.Tagline`</b>,
5872 /// \anchor ListItem_Tagline
5874 /// @return A Small Summary of current Video in a container.
5877 /// \table_row3{ <b>`ListItem.PlotOutline`</b>,
5878 /// \anchor ListItem_PlotOutline
5880 /// @return A small Summary of current Video in a container.
5883 /// \table_row3{ <b>`ListItem.Plot`</b>,
5884 /// \anchor ListItem_Plot
5886 /// @return The complete Text Summary of Video in a container.
5889 /// \table_row3{ <b>`ListItem.IMDBNumber`</b>,
5890 /// \anchor ListItem_IMDBNumber
5892 /// @return The IMDb ID of the selected Video in a container.
5894 /// @skinning_v15 **[New Infolabel]** \link ListItem_IMDBNumber `ListItem.IMDBNumber`\endlink
5897 /// \table_row3{ <b>`ListItem.EpisodeName`</b>,
5898 /// \anchor ListItem_EpisodeName
5900 /// @return The name of the episode if the selected EPG item is a TV Show (PVR).
5902 /// @skinning_v15 **[New Infolabel]** \link ListItem_EpisodeName `ListItem.EpisodeName`\endlink
5905 /// \table_row3{ <b>`ListItem.PercentPlayed`</b>,
5906 /// \anchor ListItem_PercentPlayed
5908 /// @return The percentage value [0-100] of how far the selected video has been
5912 /// \table_row3{ <b>`ListItem.LastPlayed`</b>,
5913 /// \anchor ListItem_LastPlayed
5915 /// @return The last play date of Video in a container.
5918 /// \table_row3{ <b>`ListItem.PlayCount`</b>,
5919 /// \anchor ListItem_PlayCount
5921 /// @return The playcount of Video in a container.
5924 /// \table_row3{ <b>`ListItem.ChannelName`</b>,
5925 /// \anchor ListItem_ChannelName
5927 /// @return The name of current selected TV channel in a container.
5930 /// \table_row3{ <b>`ListItem.VideoCodec`</b>,
5931 /// \anchor ListItem_VideoCodec
5933 /// @return The video codec of the currently selected video. Common values:
5944 /// - <b>microsoft</b>
5948 /// - <b>mpeg1video</b>
5949 /// - <b>mpeg2video</b>
5963 /// \table_row3{ <b>`ListItem.VideoResolution`</b>,
5964 /// \anchor ListItem_VideoResolution
5966 /// @return The resolution of the currently selected video. Possible values:
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.
5978 /// @skinning_v18 **[Updated Infolabel]** \link ListItem_VideoResolution ListItem.VideoResolution\endlink
5979 /// added <b>8K</b> as a possible value.
5982 /// \table_row3{ <b>`ListItem.VideoAspect`</b>,
5983 /// \anchor ListItem_VideoAspect
5985 /// @return The aspect ratio of the currently selected video. Possible values:
6001 /// \table_row3{ <b>`ListItem.AudioCodec`</b>,
6002 /// \anchor ListItem_AudioCodec
6004 /// @return The audio codec of the currently selected video. Common values:
6009 /// - <b>dtshd_hra</b>
6010 /// - <b>dtshd_ma</b>
6015 /// - <b>pcm_s16be</b>
6016 /// - <b>pcm_s16le</b>
6024 /// \table_row3{ <b>`ListItem.AudioChannels`</b>,
6025 /// \anchor ListItem_AudioChannels
6027 /// @return The number of audio channels of the currently selected video. Possible values:
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)
6041 /// \table_row3{ <b>`ListItem.AudioLanguage`</b>,
6042 /// \anchor ListItem_AudioLanguage
6044 /// @return The audio language of the currently selected video (an
6045 /// ISO 639-2 three character code: e.g. eng\, epo\, deu)
6048 /// \table_row3{ <b>`ListItem.SubtitleLanguage`</b>,
6049 /// \anchor ListItem_SubtitleLanguage
6051 /// @return The subtitle language of the currently selected video (an
6052 /// ISO 639-2 three character code: e.g. eng\, epo\, deu)
6055 /// \table_row3{ <b>`ListItem.Property(AudioCodec.[n])`</b>,
6056 /// \anchor ListItem_Property_AudioCodec
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")
6061 /// @skinning_v16 **[New Infolabel]** \link ListItem_Property_AudioCodec `ListItem.Property(AudioCodec.[n])`\endlink
6064 /// \table_row3{ <b>`ListItem.Property(AudioChannels.[n])`</b>,
6065 /// \anchor ListItem_Property_AudioChannels
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")
6071 /// @skinning_v16 **[New Infolabel]** \link ListItem_Property_AudioChannels `ListItem.Property(AudioChannels.[n])`\endlink
6074 /// \table_row3{ <b>`ListItem.Property(AudioLanguage.[n])`</b>,
6075 /// \anchor ListItem_Property_AudioLanguage
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")
6080 /// @skinning_v16 **[New Infolabel]** \link ListItem_Property_AudioLanguage `ListItem.Property(AudioLanguage.[n])`\endlink
6083 /// \table_row3{ <b>`ListItem.Property(SubtitleLanguage.[n])`</b>,
6084 /// \anchor ListItem_Property_SubtitleLanguage
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")
6089 /// @skinning_v16 **[New Infolabel]** \link ListItem_Property_SubtitleLanguage `ListItem.Property(SubtitleLanguage.[n])`\endlink
6092 /// \table_row3{ <b>`ListItem.Property(Addon.Disclaimer)`</b>,
6093 /// \anchor ListItem_Property_AddonDisclaimer
6095 /// @return The disclaimer of the currently selected addon.
6098 /// \table_row3{ <b>`ListItem.Property(Addon.Changelog)`</b>,
6099 /// \anchor ListItem_Property_AddonChangelog
6101 /// @return The changelog of the currently selected addon.
6104 /// \table_row3{ <b>`ListItem.Property(Addon.ID)`</b>,
6105 /// \anchor ListItem_Property_AddonID
6107 /// @return The identifier of the currently selected addon.
6110 /// \table_row3{ <b>`ListItem.Property(Addon.Status)`</b>,
6111 /// \anchor ListItem_Property_AddonStatus
6113 /// @return The status of the currently selected addon.
6114 /// @todo missing reference in GuiInfoManager.cpp making it hard to track.
6117 /// \table_row3{ <b>`ListItem.Property(Addon.Orphaned)`</b>,
6118 /// \anchor ListItem_Property_AddonOrphaned
6120 /// @return **True** if the Addon is orphanad.
6121 /// @todo missing reference in GuiInfoManager.cpp making it hard to track.
6123 /// @skinning_v17 **[New Boolean Condition]** \link ListItem_Property_AddonOrphaned `ListItem.Property(Addon.Orphaned)`\endlink
6126 /// \table_row3{ <b>`ListItem.Property(Addon.Path)`</b>,
6127 /// \anchor ListItem_Property_AddonPath
6129 /// @return The path of the currently selected addon.
6132 /// \table_row3{ <b>`ListItem.StartTime`</b>,
6133 /// \anchor ListItem_StartTime
6135 /// @return The start time of current selected TV programme in a container.
6138 /// \table_row3{ <b>`ListItem.EndTime`</b>,
6139 /// \anchor ListItem_EndTime
6141 /// @return The end time of current selected TV programme in a container.
6144 /// \table_row3{ <b>`ListItem.StartDate`</b>,
6145 /// \anchor ListItem_StartDate
6147 /// @return The start date of current selected TV programme in a container.
6150 /// \table_row3{ <b>`ListItem.EndDate`</b>,
6151 /// \anchor ListItem_EndDate
6153 /// @return The end date of current selected TV programme in a container.
6156 /// \table_row3{ <b>`ListItem.NextTitle`</b>,
6157 /// \anchor ListItem_NextTitle
6159 /// @return The title of the next item (PVR).
6162 /// \table_row3{ <b>`ListItem.NextGenre`</b>,
6163 /// \anchor ListItem_NextGenre
6165 /// @return The genre of the next item (PVR).
6168 /// \table_row3{ <b>`ListItem.NextPlot`</b>,
6169 /// \anchor ListItem_NextPlot
6171 /// @return The plot of the next item (PVR).
6174 /// \table_row3{ <b>`ListItem.NextPlotOutline`</b>,
6175 /// \anchor ListItem_NextPlotOutline
6177 /// @return The plot outline of the next item (PVR).
6180 /// \table_row3{ <b>`ListItem.NextStartTime`</b>,
6181 /// \anchor ListItem_NextStartTime
6183 /// @return The start time of the next item (PVR).
6186 /// \table_row3{ <b>`ListItem.NextEndTime`</b>,
6187 /// \anchor ListItem_NextEndTime
6189 /// @return The end of the next item (PVR).
6192 /// \table_row3{ <b>`ListItem.NextStartDate`</b>,
6193 /// \anchor ListItem_NextStartDate
6195 /// @return The start date of the next item (PVR).
6198 /// \table_row3{ <b>`ListItem.NextEndDate`</b>,
6199 /// \anchor ListItem_NextEndDate
6201 /// @return The end date of the next item (PVR).
6204 /// \table_row3{ <b>`ListItem.NextDuration`</b>,
6205 /// \anchor ListItem_NextDuration
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.
6210 /// @skinning_v18 **[New Infolabel]** \link ListItem_NextDuration `ListItem.NextDuration`\endlink
6213 /// \table_row3{ <b>`ListItem.NextDuration(format)`</b>,
6214 /// \anchor ListItem_NextDuration_format
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.
6220 /// @skinning_v18 **[New Infolabel]** \link ListItem_NextDuration_format `ListItem.NextDuration(format)`\endlink
6223 /// \table_row3{ <b>`ListItem.ChannelGroup`</b>,
6224 /// \anchor ListItem_ChannelGroup
6226 /// @return The channel group of the selected item (PVR).
6229 /// \table_row3{ <b>`ListItem.ChannelNumberLabel`</b>,
6230 /// \anchor ListItem_ChannelNumberLabel
6232 /// @return The channel and subchannel number of the currently selected channel that's
6233 /// currently playing (PVR).
6235 /// @skinning_v14 **[New Infolabel]** \link ListItem_ChannelNumberLabel `ListItem.ChannelNumberLabel`\endlink
6238 /// \table_row3{ <b>`ListItem.Progress`</b>,
6239 /// \anchor ListItem_Progress
6241 /// @return The part of the programme that's been played (PVR).
6244 /// \table_row3{ <b>`ListItem.StereoscopicMode`</b>,
6245 /// \anchor ListItem_StereoscopicMode
6247 /// @return The stereomode of the selected video:
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>
6255 /// @skinning_v13 **[New Infolabel]** \link ListItem_StereoscopicMode `ListItem.StereoscopicMode`\endlink
6258 /// \table_row3{ <b>`ListItem.HasTimerSchedule`</b>,
6259 /// \anchor ListItem_HasTimerSchedule
6261 /// @return **True** if the item was scheduled by a timer rule (PVR).
6263 /// @skinning_v16 **[New Boolean Condition]** \ref ListItem_HasTimerSchedule "ListItem.HasTimerSchedule"
6266 /// \table_row3{ <b>`ListItem.HasReminder`</b>,
6267 /// \anchor ListItem_HasReminder
6269 /// @return **True** if the item has a reminder set (PVR).
6271 /// @skinning_v19 **[New Boolean Condition]** \ref ListItem_HasReminder "ListItem.HasReminder"
6274 /// \table_row3{ <b>`ListItem.HasReminderRule`</b>,
6275 /// \anchor ListItem_ListItem.HasReminderRule
6277 /// @return **True** if the item was scheduled by a reminder timer rule (PVR).
6279 /// @skinning_v19 **[New Boolean Condition]** \ref ListItem_HasReminderRule "ListItem.HasReminderRule"
6282 /// \table_row3{ <b>`ListItem.HasRecording`</b>,
6283 /// \anchor ListItem_HasRecording
6285 /// @return **True** if a given epg tag item currently gets recorded or has been recorded.
6288 /// \table_row3{ <b>`ListItem.TimerHasError`</b>,
6289 /// \anchor ListItem_TimerHasError
6291 /// @return **True** if the item has a timer and it won't be recorded because of an error (PVR).
6293 /// @skinning_v17 **[New Boolean Condition]** \ref ListItem_TimerHasError "ListItem.TimerHasError"
6296 /// \table_row3{ <b>`ListItem.TimerHasConflict`</b>,
6297 /// \anchor ListItem_TimerHasConflict
6299 /// @return **True** if the item has a timer and it won't be recorded because of a conflict (PVR).
6301 /// @skinning_v17 **[New Boolean Condition]** \ref ListItem_TimerHasConflict "ListItem.TimerHasConflict"
6304 /// \table_row3{ <b>`ListItem.TimerIsActive`</b>,
6305 /// \anchor ListItem_TimerIsActive
6307 /// @return **True** if the item has a timer that will be recorded\, i.e. the timer is enabled (PVR).
6309 /// @skinning_v17 **[New Boolean Condition]** \ref ListItem_TimerIsActive "ListItem.TimerIsActive"
6312 /// \table_row3{ <b>`ListItem.Comment`</b>,
6313 /// \anchor ListItem_Comment
6315 /// @return The comment assigned to the item (PVR/MUSIC).
6318 /// \table_row3{ <b>`ListItem.TimerType`</b>,
6319 /// \anchor ListItem_TimerType
6321 /// @return The type of the PVR timer / timer rule item as a human readable string.
6324 /// \table_row3{ <b>`ListItem.EpgEventTitle`</b>,
6325 /// \anchor ListItem_EpgEventTitle
6327 /// @return The title of the epg event associated with the item\, if any.
6330 /// \table_row3{ <b>`ListItem.EpgEventIcon`</b>,
6331 /// \anchor ListItem_EpgEventIcon
6333 /// @return The thumbnail for the EPG event associated with the item (if it exists).
6335 /// @skinning_v18 **[New Infolabel]** \link ListItem_EpgEventIcon `ListItem.EpgEventIcon`\endlink
6338 /// \table_row3{ <b>`ListItem.InProgress`</b>,
6339 /// \anchor ListItem_InProgress
6341 /// @return **True** if the EPG event item is currently active (time-wise).
6344 /// \table_row3{ <b>`ListItem.IsParentFolder`</b>,
6345 /// \anchor ListItem_IsParentFolder
6347 /// @return **True** if the current list item is the goto parent folder '..'.
6349 /// @skinning_v17 **[New Boolean Condition]** \link ListItem_IsParentFolder `ListItem.IsParentFolder`\endlink
6352 /// \table_row3{ <b>`ListItem.AddonName`</b>,
6353 /// \anchor ListItem_AddonName
6355 /// @return The name of the currently selected addon.
6357 /// @skinning_v17 **[Infolabel Updated]** \link ListItem_AddonName `ListItem.AddonName`\endlink
6358 /// replaces `ListItem.Property(Addon.Name)`.
6361 /// \table_row3{ <b>`ListItem.AddonVersion`</b>,
6362 /// \anchor ListItem_AddonVersion
6364 /// @return The version of the currently selected addon.
6366 /// @skinning_v17 **[Infolabel Updated]** \link ListItem_AddonVersion `ListItem.AddonVersion`\endlink
6367 /// replaces `ListItem.Property(Addon.Version)`.
6370 /// \table_row3{ <b>`ListItem.AddonCreator`</b>,
6371 /// \anchor ListItem_AddonCreator
6373 /// @return The name of the author the currently selected addon.
6375 /// @skinning_v17 **[Infolabel Updated]** \link ListItem_AddonCreator `ListItem.AddonCreator`\endlink
6376 /// replaces `ListItem.Property(Addon.Creator)`.
6379 /// \table_row3{ <b>`ListItem.AddonSummary`</b>,
6380 /// \anchor ListItem_AddonSummary
6382 /// @return A short description of the currently selected addon.
6384 /// @skinning_v17 **[Infolabel Updated]** \link ListItem_AddonSummary `ListItem.AddonSummary`\endlink
6385 /// replaces `ListItem.Property(Addon.Summary)`.
6388 /// \table_row3{ <b>`ListItem.AddonDescription`</b>,
6389 /// \anchor ListItem_AddonDescription
6391 /// @return The full description of the currently selected addon.
6393 /// @skinning_v17 **[Infolabel Updated]** \link ListItem_AddonDescription `ListItem.AddonDescription`\endlink
6394 /// replaces `ListItem.Property(Addon.Description)`.
6397 /// \table_row3{ <b>`ListItem.AddonDisclaimer`</b>,
6398 /// \anchor ListItem_AddonDisclaimer
6400 /// @return The disclaimer of the currently selected addon.
6402 /// @skinning_v17 **[Infolabel Updated]** \link ListItem_AddonDisclaimer `ListItem.AddonDisclaimer`\endlink
6403 /// replaces `ListItem.Property(Addon.Disclaimer)`.
6406 /// \table_row3{ <b>`ListItem.AddonBroken`</b>,
6407 /// \anchor ListItem_AddonBroken
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"
6413 /// @skinning_v17 **[Infolabel Updated]** \link ListItem_AddonBroken `ListItem.AddonBroken`\endlink
6414 /// replaces `ListItem.Property(Addon.Broken)`.
6417 /// \table_row3{ <b>`ListItem.AddonLifecycleType`</b>,
6418 /// \anchor ListItem_AddonLifecycleType
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
6425 /// @skinning_v19 **[New Infolabel]** \link ListItem_AddonLifecycleType `ListItem.AddonLifecycleType`\endlink
6426 /// replaces `ListItem.AddonBroken`.
6429 /// \table_row3{ <b>`ListItem.AddonLifecycleDesc`</b>,
6430 /// \anchor ListItem_AddonLifecycleDesc
6432 /// @return From addon defined message text when it is marked as special condition inside repository.
6434 /// @skinning_v19 **[New Infolabel]** \link ListItem_AddonLifecycleDesc `ListItem.AddonLifecycleDesc``\endlink
6435 /// replaces `ListItem.AddonBroken`.
6439 /// \table_row3{ <b>`ListItem.AddonType`</b>,
6440 /// \anchor ListItem_AddonType
6442 /// @return The type (screensaver\, script\, skin\, etc...) of the currently selected addon.
6444 /// @skinning_v17 **[Infolabel Updated]** \link ListItem_AddonType `ListItem.AddonType`\endlink
6445 /// replaces `ListItem.Property(Addon.Type)`.
6448 /// \table_row3{ <b>`ListItem.AddonInstallDate`</b>,
6449 /// \anchor ListItem_AddonInstallDate
6451 /// @return The date the addon was installed.
6453 /// @skinning_v17 **[New Infolabel]** \link ListItem_AddonInstallDate `ListItem.AddonInstallDate`\endlink
6456 /// \table_row3{ <b>`ListItem.AddonLastUpdated`</b>,
6457 /// \anchor ListItem_AddonLastUpdated
6459 /// @return The date the addon was last updated.
6461 /// @skinning_v17 **[New Infolabel]** \link ListItem_AddonLastUpdated `ListItem.AddonLastUpdated`\endlink
6464 /// \table_row3{ <b>`ListItem.AddonLastUsed`</b>,
6465 /// \anchor ListItem_AddonLastUsed
6467 /// @return The date the addon was used last.
6469 /// @skinning_v17 **[New Infolabel]** \link ListItem_AddonLastUsed `ListItem.AddonLastUsed`\endlink
6472 /// \table_row3{ <b>`ListItem.AddonNews`</b>,
6473 /// \anchor ListItem_AddonNews
6475 /// @return A brief changelog\, taken from the addons' `addon.xml` file.
6477 /// @skinning_v17 **[New Infolabel]** \link ListItem_AddonNews `ListItem.AddonNews`\endlink
6480 /// \table_row3{ <b>`ListItem.AddonSize`</b>,
6481 /// \anchor ListItem_AddonSize
6483 /// @return The filesize of the addon.
6485 /// @skinning_v17 **[New Infolabel]** \link ListItem_AddonSize `ListItem.AddonSize`\endlink
6488 /// \table_row3{ <b>`ListItem.AddonOrigin`</b>,
6489 /// \anchor ListItem_AddonOrigin
6491 /// @return The name of the repository the add-on originates from.
6494 /// \table_row3{ <b>`ListItem.ExpirationDate`</b>,
6495 /// \anchor ListItem_ExpirationDate
6497 /// @return The expiration date of the selected item in a container\, empty string if not supported.
6500 /// \table_row3{ <b>`ListItem.ExpirationTime`</b>,
6501 /// \anchor ListItem_ExpirationTime
6503 /// @return The expiration time of the selected item in a container\, empty string if not supported
6506 /// \table_row3{ <b>`ListItem.Art(type)`</b>,
6507 /// \anchor ListItem_Art_Type
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.
6535 /// @todo Find a better way of finding the art types instead of manually defining them here.
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>
6541 /// \table_row3{ <b>`ListItem.Platform`</b>,
6542 /// \anchor ListItem_Platform
6544 /// @return The game platform (e.g. "Atari 2600") (RETROPLAYER).
6546 /// @skinning_v18 **[New Infolabel]** \link ListItem_Platform `ListItem.Platform`\endlink
6549 /// \table_row3{ <b>`ListItem.Genres`</b>,
6550 /// \anchor ListItem_Genres
6552 /// @return The game genres (e.g. "["Action"\,"Strategy"]") (RETROPLAYER).
6554 /// @skinning_v18 **[New Infolabel]** \link ListItem_Genres `ListItem.Genres`\endlink
6557 /// \table_row3{ <b>`ListItem.Publisher`</b>,
6558 /// \anchor ListItem_Publisher
6560 /// @return The game publisher (e.g. "Nintendo") (RETROPLAYER).
6562 /// @skinning_v18 **[New Infolabel]** \link ListItem_Publisher `ListItem.Publisher`\endlink
6565 /// \table_row3{ <b>`ListItem.Developer`</b>,
6566 /// \anchor ListItem_Developer
6568 /// @return The game developer (e.g. "Square") (RETROPLAYER).
6570 /// @skinning_v18 **[New Infolabel]** \link ListItem_Developer `ListItem.Developer`\endlink
6573 /// \table_row3{ <b>`ListItem.Overview`</b>,
6574 /// \anchor ListItem_Overview
6576 /// @return The game overview/summary (RETROPLAYER).
6578 /// @skinning_v18 **[New Infolabel]** \link ListItem_Overview `ListItem.Overview`\endlink
6581 /// \table_row3{ <b>`ListItem.GameClient`</b>,
6582 /// \anchor ListItem_GameClient
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).
6587 /// @skinning_v18 **[New Infolabel]** \link ListItem_GameClient `ListItem.GameClient`\endlink
6590 /// \table_row3{ <b>`ListItem.Property(propname)`</b>,
6591 /// \anchor ListItem_Property_Propname
6593 /// @return The requested property of a ListItem.
6594 /// @param propname - the property requested
6597 /// \table_row3{ <b>`ListItem.Property(Role.Composer)`</b>,
6598 /// \anchor ListItem_Property_Role_Composer
6600 /// @return The name of the person who composed the selected song.
6602 /// @skinning_v17 **[New Infolabel]** \link ListItem_Property_Role_Composer `ListItem.Property(Role.Composer)`\endlink
6605 /// \table_row3{ <b>`ListItem.Property(Role.Conductor)`</b>,
6606 /// \anchor ListItem_Property_Role_Conductor
6608 /// @return The name of the person who conducted the selected song.
6610 /// @skinning_v17 **[New Infolabel]** \link ListItem_Property_Role_Conductor `ListItem.Property(Role.Conductor)`\endlink
6613 /// \table_row3{ <b>`ListItem.Property(Role.Orchestra)`</b>,
6614 /// \anchor ListItem_Property_Role_Orchestra
6616 /// @return The name of the orchestra performing the selected song.
6618 /// @skinning_v17 **[New Infolabel]** \link ListItem_Property_Role_Orchestra `ListItem.Property(Role.Orchestra)`\endlink
6621 /// \table_row3{ <b>`ListItem.Property(Role.Lyricist)`</b>,
6622 /// \anchor ListItem_Property_Role_Lyricist
6624 /// @return The name of the person who wrote the lyrics of the selected song.
6626 /// @skinning_v17 **[New Infolabel]** \link ListItem_Property_Role_Lyricist `ListItem.Property(Role.Lyricist)`\endlink
6629 /// \table_row3{ <b>`ListItem.Property(Role.Remixer)`</b>,
6630 /// \anchor ListItem_Property_Role_Remixer
6632 /// @return The name of the person who remixed the selected song.
6634 /// @skinning_v17 **[New Infolabel]** \link ListItem_Property_Role_Remixer `ListItem.Property(Role.Remixer)`\endlink
6637 /// \table_row3{ <b>`ListItem.Property(Role.Arranger)`</b>,
6638 /// \anchor ListItem_Property_Role_Arranger
6640 /// @return The name of the person who arranged the selected song.
6642 /// @skinning_v17 **[New Infolabel]** \link ListItem_Property_Role_Arranger `ListItem.Property(Role.Arranger)`\endlink
6645 /// \table_row3{ <b>`ListItem.Property(Role.Engineer)`</b>,
6646 /// \anchor ListItem_Property_Role_Engineer
6648 /// @return The name of the person who was the engineer of the selected song.
6650 /// @skinning_v17 **[New Infolabel]** \link ListItem_Property_Role_Engineer `ListItem.Property(Role.Engineer)`\endlink
6653 /// \table_row3{ <b>`ListItem.Property(Role.Producer)`</b>,
6654 /// \anchor ListItem_Property_Role_Producer
6656 /// @return The name of the person who produced the selected song.
6658 /// @skinning_v17 **[New Infolabel]** \link ListItem_Property_Role_Producer `ListItem.Property(Role.Producer)`\endlink
6661 /// \table_row3{ <b>`ListItem.Property(Role.DJMixer)`</b>,
6662 /// \anchor ListItem_Property_Role_DJMixer
6664 /// @return The name of the dj who remixed the selected song.
6666 /// @skinning_v17 **[New Infolabel]** \link ListItem_Property_Role_DJMixer `ListItem.Property(Role.DJMixer)`\endlink
6669 /// \table_row3{ <b>`ListItem.Property(Role.Mixer)`</b>,
6670 /// \anchor ListItem_Property_Role_Mixer
6672 /// @return The name of the person who mixed the selected song.
6674 /// @skinning_v17 **[New Infolabel]** \link ListItem_Property_Role_DJMixer `ListItem.Property(Role.DJMixer)`\endlink
6677 /// \table_row3{ <b>`ListItem.Property(Game.VideoFilter)`</b>,
6678 /// \anchor ListItem_Property_Game_VideoFilter
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.
6685 /// @skinning_v18 **[New Infolabel]** \link ListItem_Property_Game_VideoFilter `ListItem.Property(Game.VideoFilter)`\endlink
6688 /// \table_row3{ <b>`ListItem.Property(Game.StretchMode)`</b>,
6689 /// \anchor ListItem_Property_Game_StretchMode
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.
6696 /// @skinning_v18 **[New Infolabel]** \link ListItem_Property_Game_StretchMode `ListItem.Property(Game.StretchMode)`\endlink
6699 /// \table_row3{ <b>`ListItem.Property(Game.VideoRotation)`</b>,
6700 /// \anchor ListItem_Property_Game_VideoRotation
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.
6707 /// @skinning_v18 **[New Infolabel]** \link ListItem_Property_Game_VideoRotation `ListItem.Property(Game.VideoRotation)`\endlink
6710 /// \table_row3{ <b>`ListItem.ParentalRating`</b>,
6711 /// \anchor ListItem_ParentalRating
6713 /// @return The parental rating of the list item (PVR).
6716 /// \table_row3{ <b>`ListItem.CurrentItem`</b>,
6717 /// \anchor ListItem_CurrentItem
6719 /// @return The current index of the item in a container starting at 1.
6721 /// @skinning_v19 **[New Infolabel]** \link ListItem_CurrentItem `ListItem.CurrentItem`\endlink
6724 /// \table_row3{ <b>`ListItem.IsNew`</b>,
6725 /// \anchor ListItem_IsNew
6727 /// @return **True** if the item is new (for example\, a Live TV show that will be first aired).
6729 /// @skinning_v19 **[New Infolabel]** \link ListItem_IsNew `ListItem.IsNew`\endlink
6732 /// \table_row3{ <b>`ListItem.IsPremiere`</b>,
6733 /// \anchor ListItem_IsPremiere
6735 /// @return **True** if the item is a premiere (for example\, a Movie first showing or season first on Live TV).
6737 /// @skinning_v19 **[New Infolabel]** \link ListItem_IsPremiere `ListItem.IsPremiere`\endlink
6740 /// \table_row3{ <b>`ListItem.IsFinale`</b>,
6741 /// \anchor ListItem_IsFinale
6743 /// @return **True** if the item is a finale (for example\, a season finale showing on Live TV).
6745 /// @skinning_v19 **[New Infolabel]** \link ListItem_IsFinale `ListItem.IsFinale`\endlink
6748 /// \table_row3{ <b>`ListItem.IsLive`</b>,
6749 /// \anchor ListItem_IsLive
6751 /// @return **True** if the item is live (for example\, a Live TV sports event).
6753 /// @skinning_v19 **[New Infolabel]** \link ListItem_IsLive `ListItem.IsLive`\endlink
6756 /// \table_row3{ <b>`ListItem.DiscTitle`</b>,
6757 /// \anchor ListItem_DiscTitle
6759 /// @return The disc title of the currently selected album or song.
6761 /// @skinning_v19 **[New Infolabel]** \link ListItem_DiscTitle `ListItem.DiscTitle`\endlink
6764 /// \table_row3{ <b>`ListItem.IsBoxset`</b>,
6765 /// \anchor ListItem_IsBoxset
6767 /// @return **True** if the item is part of a boxset album.
6769 /// @skinning_v19 **[New Infolabel]** \link ListItem_IsBoxset `ListItem.IsBoxset`\endlink
6772 /// \table_row3{ <b>`ListItem.TotalDiscs`</b>,
6773 /// \anchor ListItem_TotalDiscs
6775 /// @return The total number of discs belonging to an album.
6777 /// @skinning_v19 **[New Infolabel]** \link ListItem_TotalDiscs `ListItem.TotalDiscs`\endlink
6780 /// \table_row3{ <b>`ListItem.ReleaseDate`</b>,
6781 /// \anchor ListItem_ReleaseDate
6783 /// @return The release date of the item.
6785 /// @skinning_v19 **[New Infolabel]** \link ListItem_ReleaseDate `ListItem.ReleaseDate`\endlink
6788 /// \table_row3{ <b>`ListItem.OriginalDate`</b>,
6789 /// \anchor ListItem_OriginalDate
6791 /// @return The original release date of the item. Can be full or partial date.
6793 /// @skinning_v19 **[New Infolabel]** \link ListItem_OriginalDate `ListItem.OriginalDate`\endlink
6796 /// \table_row3{ <b>`ListItem.BPM`</b>,
6797 /// \anchor ListItem_BPM
6799 /// @return The BPM of a song.
6801 /// @skinning_v19 **[New Infolabel]** \link ListItem_BPM `ListItem.BPM`\endlink
6804 /// \table_row3{ <b>`ListItem.UniqueID(name)`</b>,
6805 /// \anchor ListItem_UniqueID
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.
6811 /// @skinning_v19 **[New Infolabel]** \link ListItem_UniqueID `ListItem.UniqueID(name)`\endlink
6814 /// \table_row3{ <b>`ListItem.BitRate`</b>,
6815 /// \anchor ListItem_BitRate
6817 /// @return The bitrate of a song. Actual rate for CBR\, average rate for VBR.
6819 /// @skinning_v19 **[New Infolabel]** \link ListItem_BitRate `ListItem.BitRate`\endlink
6822 /// \table_row3{ <b>`ListItem.SampleRate`</b>,
6823 /// \anchor ListItem_SampleRate
6825 /// @return The sample rate of a song / 1000.0 eg 44.1\, 48\, 96 etc.
6827 /// @skinning_v19 **[New Infolabel]** \link ListItem_SampleRate `ListItem.SampleRate`\endlink
6830 /// \table_row3{ <b>`ListItem.MusicChannels`</b>,
6831 /// \anchor ListItem_MusicChannels
6833 /// @return The number of audio channels of a song.
6835 /// @skinning_v19 **[New Infolabel]** \link ListItem_No_Of_Channels `ListItem.NoOfChannels`\endlink
6838 /// \table_row3{ <b>`ListItem.TvShowDBID`</b>,
6839 /// \anchor ListItem_TvShowDBID
6841 /// @return The database id of the TvShow for the currently selected Season or Episode.
6843 /// @skinning_v19 **[New Infolabel]** \link ListItem_TvShowDBID `ListItem.TvShowDBID`\endlink
6846 /// \table_row3{ <b>`ListItem.AlbumStatus`</b>,
6847 /// \anchor ListItem_AlbumStatus
6849 /// @return The Musicbrainz release status of the album (official, bootleg, promotion etc)
6851 /// @skinning_v19 **[New Infolabel]** \link ListItem_AlbumStatus `ListItem.AlbumStatus`\endlink
6853 /// \table_row3{ <b>`ListItem.HdrType`</b>,
6854 /// \anchor ListItem_HdrType
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.
6858 /// @skinning_v20 **[New Infolabel]** \link ListItem_HdrType `ListItem.HdrType`\endlink
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
7077 /// \table_h3{ Labels, Type, Description }
7078 /// \table_row3{ <b>`Visualisation.Enabled`</b>,
7079 /// \anchor Visualisation_Enabled
7081 /// @return **True** if any visualisation has been set in settings (so not None).
7084 /// \table_row3{ <b>`Visualisation.HasPresets`</b>,
7085 /// \anchor Visualisation_HasPresets
7087 /// @return **True** if the visualisation has built in presets.
7089 /// @skinning_v16 **[New Boolean Condition]** \link Visualisation_HasPresets `Visualisation.HasPresets`\endlink
7092 /// \table_row3{ <b>`Visualisation.Locked`</b>,
7093 /// \anchor Visualisation_Locked
7095 /// @return **True** if the current visualisation preset is locked (e.g. in Milkdrop).
7098 /// \table_row3{ <b>`Visualisation.Preset`</b>,
7099 /// \anchor Visualisation_Preset
7101 /// @return The current preset of the visualisation.
7104 /// \table_row3{ <b>`Visualisation.Name`</b>,
7105 /// \anchor Visualisation_Name
7107 /// @return the name of the visualisation.
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
7122 /// \table_h3{ Labels, Type, Description }
7123 /// \table_row3{ <b>`Fanart.Color1`</b>,
7124 /// \anchor Fanart_Color1
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.
7131 /// \table_row3{ <b>`Fanart.Color2`</b>,
7132 /// \anchor Fanart_Color2
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.
7139 /// \table_row3{ <b>`Fanart.Color3`</b>,
7140 /// \anchor Fanart_Color3
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.
7147 /// \table_row3{ <b>`Fanart.Image`</b>,
7148 /// \anchor Fanart_Image
7150 /// @return The fanart image\, if any
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
7164 /// \table_h3{ Labels, Type, Description }
7165 /// \table_row3{ <b>`Skin.HasSetting(setting)`</b>,
7166 /// \anchor Skin_HasSetting
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])`
7173 /// \table_row3{ <b>`Skin.String(setting)`</b>,
7174 /// \anchor Skin_StringValue
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
7181 /// \table_row3{ <b>`Skin.String(setting[\,value])`</b>,
7182 /// \anchor Skin_StringCompare
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
7190 /// \table_row3{ <b>`Skin.HasTheme(theme)`</b>,
7191 /// \anchor Skin_HasTheme
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.
7198 /// \table_row3{ <b>`Skin.CurrentTheme`</b>,
7199 /// \anchor Skin_CurrentTheme
7201 /// @return The current selected skin theme.
7204 /// \table_row3{ <b>`Skin.CurrentColourTheme`</b>,
7205 /// \anchor Skin_CurrentColourTheme
7207 /// @return the current selected colour theme of the skin.
7210 /// \table_row3{ <b>`Skin.AspectRatio`</b>,
7211 /// \anchor Skin_AspectRatio
7213 /// @return The closest aspect ratio match using the resolution info from the skin's `addon.xml` file.
7216 /// \table_row3{ <b>`Skin.Font`</b>,
7217 /// \anchor Skin_Font
7219 /// @return the current fontset from `Font.xml`.
7221 /// @skinning_v18 **[New Infolabel]** \link Skin_Font `Skin.Font`\endlink
7224 /// \table_row3{ <b>`Skin.Numeric(settingid)`</b>,
7225 /// \anchor Skin_Numeric
7227 /// @return return the setting value as an integer/numeric value.
7228 /// @sa \link Skin_SetNumeric `Skin.SetNumeric(settingid)`\endlink
7230 /// @skinning_v20 **[New Infolabel]** \link Skin_Numeric `Skin.Numeric(settingid)`\endlink
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
7239 /// @skinning_v20 **[New Infolabel]** \link Skin_TimerElapsedSecs `Skin.TimerElapsedSecs(timer)`\endlink
7242 /// \table_row3{ <b>`Skin.TimerIsRunning(timer)`</b>,
7243 /// \anchor Skin_TimerIsRunning
7245 /// @return **True** if the given `timer` is active\, false otherwise.
7246 /// @param timer - the timer name
7248 /// @skinning_v20 **[New Infolabel]** \link Skin_TimerIsRunning `Skin.TimerIsRunning(timer)`\endlink
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
7262 /// \table_h3{ Labels, Type, Description }
7263 /// \table_row3{ <b>`Window.IsMedia`</b>,
7264 /// \anchor Window_IsMedia
7266 /// @return **True** if this window is a media window (programs\, music\, video\,
7267 /// scripts\, pictures)
7270 /// \table_row3{ <b>`Window.Is(window)`</b>,
7271 /// \anchor Window_Is
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.
7277 /// @skinning_v17 **[New Boolean Condition]** \ref Window_Is "Window.Is(window)"
7280 /// \table_row3{ <b>`Window.IsActive(window)`</b>,
7281 /// \anchor Window_IsActive
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
7288 /// \table_row3{ <b>`Window.IsVisible(window)`</b>,
7289 /// \anchor Window_IsVisible
7291 /// @return **True** if the window is visible
7292 /// @note Includes fade out time on dialogs
7295 /// \table_row3{ <b>`Window.IsTopmost(window)`</b>,
7296 /// \anchor Window_IsTopmost
7298 /// @return **True** if the window with id or title _window_ is on top of the
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
7305 /// \table_row3{ <b>`Window.IsDialogTopmost(dialog)`</b>,
7306 /// \anchor Window_IsDialogTopmost
7308 /// @return **True** if the dialog with id or title _dialog_ is on top of the
7310 /// @param window - the id or name of the window
7311 /// @note Excludes fade out time on dialogs
7314 /// \table_row3{ <b>`Window.IsModalDialogTopmost(dialog)`</b>,
7315 /// \anchor Window_IsModalDialogTopmost
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
7322 /// \table_row3{ <b>`Window.Previous(window)`</b>,
7323 /// \anchor Window_Previous
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.
7330 /// \table_row3{ <b>`Window.Next(window)`</b>,
7331 /// \anchor Window_Next
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.
7338 /// \table_row3{ <b>`Window.Property(Addon.ID)`</b>,
7339 /// \anchor Window_Property_AddonId
7341 /// @return The id of the selected addon\, in `DialogAddonSettings.xml`.
7343 /// @skinning_v17 **[New Infolabel]** \link Window_Property_AddonId `Window.Property(Addon.ID)`\endlink
7346 /// \table_row3{ <b>`Window.Property(IsRadio)`</b>,
7347 /// \anchor Window_Property_IsRadio
7349 /// @return "true" if the window is a radio window\, empty string otherwise (for use in the PVR windows).
7352 /// \table_row3{ <b>`Window([window]).Property(key)`</b>,
7353 /// \anchor Window_Window_Property_key
7355 /// @return A window property.
7356 /// @param window - [opt] window id or name.
7357 /// @param key - any value.
7360 /// \table_row3{ <b>`Window(AddonBrowser).Property(Updated)`</b>,
7361 /// \anchor Window_Addonbrowser_Property_Updated
7363 /// @return The date and time the addon repo was last checked for updates.
7364 /// @todo move to a future window document.
7366 /// @skinning_v15 **[New Infolabel]** \link Window_Addonbrowser_Property_Updated `Window(AddonBrowser).Property(Updated)`\endlink
7369 /// \table_row3{ <b>`Window(Weather).Property(property)`</b>,
7370 /// \anchor Window_Weather_Property
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.
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
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).
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
7416 /// \table_h3{ Labels, Type, Description }
7417 /// \table_row3{ <b>`Control.HasFocus(id)`</b>,
7418 /// \anchor Control_HasFocus
7420 /// @return **True** if the currently focused control has id "id".
7421 /// @param id - The id of the control
7424 /// \table_row3{ <b>`Control.IsVisible(id)`</b>,
7425 /// \anchor Control_IsVisible
7427 /// @return **True** if the control with id "id" is visible.
7428 /// @param id - The id of the control
7431 /// \table_row3{ <b>`Control.IsEnabled(id)`</b>,
7432 /// \anchor Control_IsEnabled
7434 /// @return **True** if the control with id "id" is enabled.
7435 /// @param id - The id of the control
7438 /// \table_row3{ <b>`Control.GetLabel(id)[.index()]`</b>,
7439 /// \anchor Control_GetLabel
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
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
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
7464 /// \table_h3{ Labels, Type, Description }
7465 /// \table_row3{ <b>`Playlist.Length(media)`</b>,
7466 /// \anchor Playlist_Length
7468 /// @return The total size of the current playlist.
7469 /// @param media - [opt] mediatype with is either
7473 /// \table_row3{ <b>`Playlist.Position(media)`</b>,
7474 /// \anchor Playlist_Position
7476 /// @return The position of the current item in the current playlist.
7477 /// @param media - [opt] mediatype with is either
7481 /// \table_row3{ <b>`Playlist.Random`</b>,
7482 /// \anchor Playlist_Random
7484 /// @return String ID for the random mode:
7485 /// - **16041** (On)
7488 /// @skinning_v18 **[Infolabel Updated]** \link Playlist_Random `Playlist.Random`\endlink will
7489 /// now return **On/Off**
7492 /// \table_row3{ <b>`Playlist.Repeat`</b>,
7493 /// \anchor Playlist_Repeat
7495 /// @return The String Id for the repeat mode. It can be one of the following
7497 /// - **592** (Repeat One)
7498 /// - **593** (Repeat All)
7499 /// - **594** (Repeat Off)
7502 /// \table_row3{ <b>`Playlist.IsRandom`</b>,
7503 /// \anchor Playlist_IsRandom
7505 /// @return **True** if the player is in random mode.
7508 /// \table_row3{ <b>`Playlist.IsRepeat`</b>,
7509 /// \anchor Playlist_IsRepeat
7511 /// @return **True** if the player is in repeat all mode.
7514 /// \table_row3{ <b>`Playlist.IsRepeatOne`</b>,
7515 /// \anchor Playlist_IsRepeatOne
7517 /// @return **True** if the player is in repeat one mode.
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
7534 /// \table_h3{ Labels, Type, Description }
7535 /// \table_row3{ <b>`PVR.IsRecording`</b>,
7536 /// \anchor PVR_IsRecording
7538 /// @return **True** when the system is recording a tv or radio programme.
7541 /// \table_row3{ <b>`PVR.HasTimer`</b>,
7542 /// \anchor PVR_HasTimer
7544 /// @return **True** when a recording timer is active.
7547 /// \table_row3{ <b>`PVR.HasTVChannels`</b>,
7548 /// \anchor PVR_HasTVChannels
7550 /// @return **True** if there are TV channels available.
7553 /// \table_row3{ <b>`PVR.HasRadioChannels`</b>,
7554 /// \anchor PVR_HasRadioChannels
7556 /// @return **True** if there are radio channels available.
7559 /// \table_row3{ <b>`PVR.HasNonRecordingTimer`</b>,
7560 /// \anchor PVR_HasNonRecordingTimer
7562 /// @return **True** if there are timers present who currently not do recording.
7565 /// \table_row3{ <b>`PVR.BackendName`</b>,
7566 /// \anchor PVR_BackendName
7568 /// @return The name of the backend being used.
7571 /// \table_row3{ <b>`PVR.BackendVersion`</b>,
7572 /// \anchor PVR_BackendVersion
7574 /// @return The version of the backend that's being used.
7577 /// \table_row3{ <b>`PVR.BackendHost`</b>,
7578 /// \anchor PVR_BackendHost
7580 /// @return The backend hostname.
7583 /// \table_row3{ <b>`PVR.BackendDiskSpace`</b>,
7584 /// \anchor PVR_BackendDiskSpace
7586 /// @return The available diskspace on the backend as string with size.
7589 /// \table_row3{ <b>`PVR.BackendDiskSpaceProgr`</b>,
7590 /// \anchor PVR_BackendDiskSpaceProgr
7592 /// @return The available diskspace on the backend as percent value.
7594 /// @skinning_v14 **[New Infolabel]** \link PVR_BackendDiskSpaceProgr `PVR.BackendDiskSpaceProgr`\endlink
7597 /// \table_row3{ <b>`PVR.BackendChannels`</b>,
7598 /// \anchor PVR_BackendChannels
7599 /// _string (integer)_,
7600 /// @return The number of available channels the backend provides.
7603 /// \table_row3{ <b>`PVR.BackendTimers`</b>,
7604 /// \anchor PVR_BackendTimers
7605 /// _string (integer)_,
7606 /// @return The number of timers set for the backend.
7609 /// \table_row3{ <b>`PVR.BackendRecordings`</b>,
7610 /// \anchor PVR_BackendRecordings
7611 /// _string (integer)_,
7612 /// @return The number of recordings available on the backend.
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.
7621 /// \table_row3{ <b>`PVR.BackendNumber`</b>,
7622 /// \anchor PVR_BackendNumber
7624 /// @return The backend number.
7627 /// \table_row3{ <b>`PVR.TotalDiscSpace`</b>,
7628 /// \anchor PVR_TotalDiscSpace
7630 /// @return The total diskspace available for recordings.
7633 /// \table_row3{ <b>`PVR.NextTimer`</b>,
7634 /// \anchor PVR_NextTimer
7636 /// @return The next timer date.
7639 /// \table_row3{ <b>`PVR.IsPlayingTV`</b>,
7640 /// \anchor PVR_IsPlayingTV
7642 /// @return **True** when live tv is being watched.
7645 /// \table_row3{ <b>`PVR.IsPlayingRadio`</b>,
7646 /// \anchor PVR_IsPlayingRadio
7648 /// @return **True** when live radio is being listened to.
7651 /// \table_row3{ <b>`PVR.IsPlayingRecording`</b>,
7652 /// \anchor PVR_IsPlayingRecording
7654 /// @return **True** when a recording is being watched.
7657 /// \table_row3{ <b>`PVR.IsPlayingEpgTag`</b>,
7658 /// \anchor PVR_IsPlayingEpgTag
7660 /// @return **True** when an epg tag is being watched.
7663 /// \table_row3{ <b>`PVR.EpgEventProgress`</b>,
7664 /// \anchor PVR_EpgEventProgress
7666 /// @return The percentage complete of the currently playing epg event.
7668 /// @skinning_v18 **[Infolabel Updated]** \link PVR_EpgEventProgress `PVR.EpgEventProgress`\endlink replaces
7669 /// the old `PVR.Progress` infolabel.
7672 /// \table_row3{ <b>`PVR.ActStreamClient`</b>,
7673 /// \anchor PVR_ActStreamClient
7675 /// @return The stream client name.
7678 /// \table_row3{ <b>`PVR.ActStreamDevice`</b>,
7679 /// \anchor PVR_ActStreamDevice
7681 /// @return The stream device name.
7684 /// \table_row3{ <b>`PVR.ActStreamStatus`</b>,
7685 /// \anchor PVR_ActStreamStatus
7687 /// @return The status of the stream.
7690 /// \table_row3{ <b>`PVR.ActStreamSignal`</b>,
7691 /// \anchor PVR_ActStreamSignal
7693 /// @return The signal quality of the stream.
7696 /// \table_row3{ <b>`PVR.ActStreamSnr`</b>,
7697 /// \anchor PVR_ActStreamSnr
7699 /// @return The signal to noise ratio of the stream.
7702 /// \table_row3{ <b>`PVR.ActStreamBer`</b>,
7703 /// \anchor PVR_ActStreamBer
7705 /// @return The bit error rate of the stream.
7708 /// \table_row3{ <b>`PVR.ActStreamUnc`</b>,
7709 /// \anchor PVR_ActStreamUnc
7711 /// @return The UNC value of the stream.
7714 /// \table_row3{ <b>`PVR.ActStreamProgrSignal`</b>,
7715 /// \anchor PVR_ActStreamProgrSignal
7717 /// @return The signal quality of the programme.
7720 /// \table_row3{ <b>`PVR.ActStreamProgrSnr`</b>,
7721 /// \anchor PVR_ActStreamProgrSnr
7723 /// @return The signal to noise ratio of the programme.
7726 /// \table_row3{ <b>`PVR.ActStreamIsEncrypted`</b>,
7727 /// \anchor PVR_ActStreamIsEncrypted
7729 /// @return **True** when channel is encrypted on source.
7732 /// \table_row3{ <b>`PVR.ActStreamEncryptionName`</b>,
7733 /// \anchor PVR_ActStreamEncryptionName
7735 /// @return The encryption used on the stream.
7738 /// \table_row3{ <b>`PVR.ActStreamServiceName`</b>,
7739 /// \anchor PVR_ActStreamServiceName
7741 /// @return The service name of played channel if available.
7744 /// \table_row3{ <b>`PVR.ActStreamMux`</b>,
7745 /// \anchor PVR_ActStreamMux
7747 /// @return The multiplex type of played channel if available.
7750 /// \table_row3{ <b>`PVR.ActStreamProviderName`</b>,
7751 /// \anchor PVR_ActStreamProviderName
7753 /// @return The provider name of the played channel if available.
7756 /// \table_row3{ <b>`PVR.IsTimeShift`</b>,
7757 /// \anchor PVR_IsTimeShift
7759 /// @return **True** when for channel is timeshift available.
7762 /// \table_row3{ <b>`PVR.TimeShiftProgress`</b>,
7763 /// \anchor PVR_TimeShiftProgress
7765 /// @return The position of currently timeshifted title on TV as integer.
7768 /// \table_row3{ <b>`PVR.TimeShiftSeekbar`</b>,
7769 /// \anchor PVR_TimeShiftSeekbar
7771 /// @return The percentage we are seeking to in a timeshifted title.
7773 /// @skinning_v19 **[New Infolabel]** \link PVR_TimeShiftSeekbar `PVR.TimeShiftSeekbar`\endlink
7776 /// \table_row3{ <b>`PVR.NowRecordingTitle`</b>,
7777 /// \anchor PVR_NowRecordingTitle
7779 /// @return The title of the programme being recorded.
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.
7788 /// \table_row3{ <b>`PVR.NowRecordingChannel`</b>,
7789 /// \anchor PVR_NowRecordingChannel
7791 /// @return The channel name of the current recording.
7794 /// \table_row3{ <b>`PVR.NowRecordingChannelIcon`</b>,
7795 /// \anchor PVR_NowRecordingChannelIcon
7797 /// @return The icon of the current recording channel.
7800 /// \table_row3{ <b>`PVR.NextRecordingTitle`</b>,
7801 /// \anchor PVR_NextRecordingTitle
7803 /// @return The title of the next programme that will be recorded.
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.
7812 /// \table_row3{ <b>`PVR.NextRecordingChannel`</b>,
7813 /// \anchor PVR_NextRecordingChannel
7815 /// @return The channel name of the next recording.
7818 /// \table_row3{ <b>`PVR.NextRecordingChannelIcon`</b>,
7819 /// \anchor PVR_NextRecordingChannelIcon
7821 /// @return The icon of the next recording channel.
7824 /// \table_row3{ <b>`PVR.TVNowRecordingTitle`</b>,
7825 /// \anchor PVR_TVNowRecordingTitle
7827 /// @return The title of the tv programme being recorded.
7829 /// @skinning_v17 **[New Infolabel]** \link PVR_TVNowRecordingTitle `PVR.TVNowRecordingTitle`\endlink
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.
7837 /// @skinning_v17 **[New Infolabel]** \link PVR_TVNowRecordingDateTime `PVR.TVNowRecordingDateTime`\endlink
7840 /// \table_row3{ <b>`PVR.TVNowRecordingChannel`</b>,
7841 /// \anchor PVR_TVNowRecordingChannel
7843 /// @return The channel name of the current tv recording.
7845 /// @skinning_v17 **[New Infolabel]** \link PVR_TVNowRecordingChannel `PVR.TVNowRecordingChannel`\endlink
7848 /// \table_row3{ <b>`PVR.TVNowRecordingChannelIcon`</b>,
7849 /// \anchor PVR_TVNowRecordingChannelIcon
7851 /// @return The icon of the current recording TV channel.
7853 /// @skinning_v17 **[New Infolabel]** \link PVR_TVNowRecordingChannelIcon `PVR.TVNowRecordingChannelIcon`\endlink
7856 /// \table_row3{ <b>`PVR.TVNextRecordingTitle`</b>,
7857 /// \anchor PVR_TVNextRecordingTitle
7859 /// @return The title of the next tv programme that will be recorded.
7861 /// @skinning_v17 **[New Infolabel]** \link PVR_TVNextRecordingTitle `PVR.TVNextRecordingTitle`\endlink
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.
7869 /// @skinning_v17 **[New Infolabel]** \link PVR_TVNextRecordingDateTime `PVR.TVNextRecordingDateTime`\endlink
7872 /// \table_row3{ <b>`PVR.TVNextRecordingChannel`</b>,
7873 /// \anchor PVR_TVNextRecordingChannel
7875 /// @return The channel name of the next tv recording.
7877 /// @skinning_v17 **[New Infolabel]** \link PVR_TVNextRecordingChannel `PVR.TVNextRecordingChannel`\endlink
7880 /// \table_row3{ <b>`PVR.TVNextRecordingChannelIcon`</b>,
7881 /// \anchor PVR_TVNextRecordingChannelIcon
7883 /// @return The icon of the next recording tv channel.
7885 /// @skinning_v17 **[New Infolabel]** \link PVR_TVNextRecordingChannelIcon `PVR.TVNextRecordingChannelIcon`\endlink
7888 /// \table_row3{ <b>`PVR.RadioNowRecordingTitle`</b>,
7889 /// \anchor PVR_RadioNowRecordingTitle
7891 /// @return The title of the radio programme being recorded.
7893 /// @skinning_v17 **[New Infolabel]** \link PVR_RadioNowRecordingTitle `PVR.RadioNowRecordingTitle`\endlink
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.
7901 /// @skinning_v17 **[New Infolabel]** \link PVR_RadioNowRecordingDateTime `PVR.RadioNowRecordingDateTime`\endlink
7904 /// \table_row3{ <b>`PVR.RadioNowRecordingChannel`</b>,
7905 /// \anchor PVR_RadioNowRecordingChannel
7907 /// @return The channel name of the current radio recording.
7909 /// @skinning_v17 **[New Infolabel]** \link PVR_RadioNowRecordingChannel `PVR.RadioNowRecordingChannel`\endlink
7912 /// \table_row3{ <b>`PVR.RadioNowRecordingChannelIcon`</b>,
7913 /// \anchor PVR_RadioNowRecordingChannelIcon
7915 /// @return The icon of the current recording radio channel.
7917 /// @skinning_v17 **[New Infolabel]** \link PVR_RadioNowRecordingChannelIcon `PVR.RadioNowRecordingChannelIcon`\endlink
7920 /// \table_row3{ <b>`PVR.RadioNextRecordingTitle`</b>,
7921 /// \anchor PVR_RadioNextRecordingTitle
7923 /// @return The title of the next radio programme that will be recorded.
7925 /// @skinning_v17 **[New Infolabel]** \link PVR_RadioNextRecordingTitle `PVR.RadioNextRecordingTitle`\endlink
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.
7933 /// @skinning_v17 **[New Infolabel]** \link PVR_RadioNextRecordingDateTime `PVR.RadioNextRecordingDateTime`\endlink
7936 /// \table_row3{ <b>`PVR.RadioNextRecordingChannel`</b>,
7937 /// \anchor PVR_RadioNextRecordingChannel
7939 /// @return The channel name of the next radio recording.
7941 /// @skinning_v17 **[New Infolabel]** \link PVR_RadioNextRecordingChannel `PVR.RadioNextRecordingChannel`\endlink
7944 /// \table_row3{ <b>`PVR.RadioNextRecordingChannelIcon`</b>,
7945 /// \anchor PVR_RadioNextRecordingChannelIcon
7947 /// @return The icon of the next recording radio channel.
7949 /// @skinning_v17 **[New Infolabel]** \link PVR_RadioNextRecordingChannelIcon `PVR.RadioNextRecordingChannelIcon`\endlink
7952 /// \table_row3{ <b>`PVR.IsRecordingTV`</b>,
7953 /// \anchor PVR_IsRecordingTV
7955 /// @return **True** when the system is recording a tv programme.
7957 /// @skinning_v17 **[New Boolean Condition]** \link PVR_IsRecordingTV `PVR.IsRecordingTV`\endlink
7960 /// \table_row3{ <b>`PVR.HasTVTimer`</b>,
7961 /// \anchor PVR_HasTVTimer
7963 /// @return **True** if at least one tv timer is active.
7965 /// @skinning_v17 **[New Boolean Condition]** \link PVR_HasTVTimer `PVR.HasTVTimer`\endlink
7968 /// \table_row3{ <b>`PVR.HasNonRecordingTVTimer`</b>,
7969 /// \anchor PVR_HasNonRecordingTVTimer
7971 /// @return **True** if there are tv timers present who currently not do recording.
7973 /// @skinning_v17 **[New Boolean Condition]** \link PVR_HasNonRecordingTVTimer `PVR.HasNonRecordingTVTimer`\endlink
7976 /// \table_row3{ <b>`PVR.IsRecordingRadio`</b>,
7977 /// \anchor PVR_IsRecordingRadio
7979 /// @return **True** when the system is recording a radio programme.
7981 /// @skinning_v17 **[New Boolean Condition]** \link PVR_IsRecordingRadio `PVR.IsRecordingRadio`\endlink
7984 /// \table_row3{ <b>`PVR.HasRadioTimer`</b>,
7985 /// \anchor PVR_HasRadioTimer
7987 /// @return **True** if at least one radio timer is active.
7989 /// @skinning_v17 **[New Boolean Condition]** \link PVR_HasRadioTimer `PVR.HasRadioTimer`\endlink
7992 /// \table_row3{ <b>`PVR.HasNonRecordingRadioTimer`</b>,
7993 /// \anchor PVR_HasNonRecordingRadioTimer
7995 /// @return **True** if there are radio timers present who currently not do recording.
7997 /// @skinning_v17 **[New Boolean Condition]** \link PVR_HasNonRecordingRadioTimer `PVR.HasRadioTimer`\endlink
8000 /// \table_row3{ <b>`PVR.ChannelNumberInput`</b>,
8001 /// \anchor PVR_ChannelNumberInput
8003 /// @return The currently entered channel number while in numeric channel input mode\, an empty string otherwise.
8005 /// @skinning_v18 **[New Infolabel]** \link PVR_ChannelNumberInput `PVR.ChannelNumberInput`\endlink
8008 /// \table_row3{ <b>`PVR.CanRecordPlayingChannel`</b>,
8009 /// \anchor PVR_CanRecordPlayingChannel
8011 /// @return **True** if PVR is currently playing a channel and if this channel can be recorded.
8013 /// @skinning_v18 **[Infolabel Updated]** \link PVR_CanRecordPlayingChannel `PVR.CanRecordPlayingChannel`\endlink replaces
8014 /// the old `Player.CanRecord` infolabel.
8017 /// \table_row3{ <b>`PVR.IsRecordingPlayingChannel`</b>,
8018 /// \anchor PVR_IsRecordingPlayingChannel
8020 /// @return **True** if PVR is currently playing a channel and if this channel is currently recorded.
8022 /// @skinning_v18 **[Infolabel Updated]** \link PVR_IsRecordingPlayingChannel `PVR.IsRecordingPlayingChannel`\endlink replaces
8023 /// the old `Player.Recording` infolabel.
8026 /// \table_row3{ <b>`PVR.IsPlayingActiveRecording`</b>,
8027 /// \anchor PVR_IsPlayingActiveRecording
8029 /// @return **True** if PVR is currently playing an in progress recording.
8031 /// @skinning_v19 **[New Infolabel]** \link PVR_IsPlayingActiveRecording `PVR.IsPlayingActiveRecording`\endlink
8034 /// \table_row3{ <b>`PVR.TimeshiftProgressPlayPos`</b>,
8035 /// \anchor PVR_TimeshiftProgressPlayPos
8037 /// @return The percentage of the current play position within the PVR timeshift progress.
8039 /// @skinning_v18 **[New Infolabel]** \link PVR_TimeshiftProgressPlayPos `PVR.TimeshiftProgressPlayPos`\endlink
8042 /// \table_row3{ <b>`PVR.TimeshiftProgressEpgStart`</b>,
8043 /// \anchor PVR_TimeshiftProgressEpgStart
8045 /// @return The percentage of the start of the currently playing epg event within the PVR timeshift progress.
8047 /// @skinning_v18 **[New Infolabel]** \link PVR_TimeshiftProgressEpgStart `PVR.TimeshiftProgressEpgStart`\endlink
8050 /// \table_row3{ <b>`PVR.TimeshiftProgressEpgEnd`</b>,
8051 /// \anchor PVR_TimeshiftProgressEpgEnd
8053 /// @return The percentage of the end of the currently playing epg event within the PVR timeshift progress.
8055 /// @skinning_v18 **[New Infolabel]** \link PVR_TimeshiftProgressEpgEnd `PVR.TimeshiftProgressEpgEnd`\endlink
8058 /// \table_row3{ <b>`PVR.TimeshiftProgressBufferStart`</b>,
8059 /// \anchor PVR_TimeshiftProgressBufferStart
8061 /// @return The percentage of the start of the timeshift buffer within the PVR timeshift progress.
8063 /// @skinning_v18 **[New Infolabel]** \link PVR_TimeshiftProgressBufferStart `PVR.TimeshiftProgressBufferStart`\endlink
8066 /// \table_row3{ <b>`PVR.TimeshiftProgressBufferEnd`</b>,
8067 /// \anchor PVR_TimeshiftProgressBufferEnd
8069 /// @return The percentage of the end of the timeshift buffer within the PVR timeshift progress.
8071 /// @skinning_v18 **[New Infolabel]** \link PVR_TimeshiftProgressBufferEnd `PVR.TimeshiftProgressBufferEnd`\endlink
8074 /// \table_row3{ <b>`PVR.EpgEventIcon`</b>,
8075 /// \anchor PVR_EpgEventIcon
8077 /// @return The icon of the currently playing epg event\, if any.
8079 /// @skinning_v18 **[New Infolabel]** \link PVR_EpgEventIcon `PVR_EpgEventIcon`\endlink
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
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.
8171 /// @skinning_v18 **[Infolabel Updated]** \link PVR_EpgEventDuration `PVR.EpgEventDuration`\endlink replaces
8172 /// the old `PVR.Duration` infolabel.
8175 /// \table_row3{ <b>`PVR.EpgEventDuration(format)`</b>,
8176 /// \anchor PVR_EpgEventDuration_format
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.
8183 /// \table_row3{ <b>`PVR.EpgEventElapsedTime`</b>,
8184 /// \anchor PVR_EpgEventElapsedTime
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.
8190 /// @skinning_v18 **[Infolabel Updated]** \link PVR_EpgEventElapsedTime `PVR.EpgEventElapsedTime`\endlink replaces
8191 /// the old `PVR.Time` infolabel.
8194 /// \table_row3{ <b>`PVR.EpgEventElapsedTime(format)`</b>,
8195 /// \anchor PVR_EpgEventElapsedTime_format
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.
8202 /// \table_row3{ <b>`PVR.EpgEventRemainingTime`</b>,
8203 /// \anchor PVR_EpgEventRemainingTime
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.
8209 /// @skinning_v18 **[New Infolabel]** \link PVR_EpgEventRemainingTime `PVR.EpgEventRemainingTime`\endlink
8212 /// \table_row3{ <b>`PVR.EpgEventRemainingTime(format)`</b>,
8213 /// \anchor PVR_EpgEventRemainingTime_format
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.
8220 /// \table_row3{ <b>`PVR.EpgEventSeekTime`</b>,
8221 /// \anchor PVR_EpgEventSeekTime
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.
8227 /// @skinning_v18 **[New Infolabel]** \link PVR_EpgEventSeekTime `PVR.EpgEventSeekTime`\endlink
8230 /// \table_row3{ <b>`PVR.EpgEventSeekTime(format)`</b>,
8231 /// \anchor PVR_EpgEventSeekTime_format
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.
8238 /// \table_row3{ <b>`PVR.EpgEventFinishTime`</b>,
8239 /// \anchor PVR_EpgEventFinishTime
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.
8245 /// @skinning_v18 **[New Infolabel]** \link PVR_EpgEventFinishTime `PVR.EpgEventFinishTime`\endlink
8248 /// \table_row3{ <b>`PVR.EpgEventFinishTime(format)`</b>,
8249 /// \anchor PVR_EpgEventFinishTime_format
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.
8256 /// \table_row3{ <b>`PVR.TimeShiftStart`</b>,
8257 /// \anchor PVR_TimeShiftStart
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.
8264 /// \table_row3{ <b>`PVR.TimeShiftStart(format)`</b>,
8265 /// \anchor PVR_TimeShiftStart_format
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.
8272 /// \table_row3{ <b>`PVR.TimeShiftEnd`</b>,
8273 /// \anchor PVR_TimeShiftEnd
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.
8280 /// \table_row3{ <b>`PVR.TimeShiftEnd(format)`</b>,
8281 /// \anchor PVR_TimeShiftEnd_format
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.
8288 /// \table_row3{ <b>`PVR.TimeShiftCur`</b>,
8289 /// \anchor PVR_TimeShiftCur
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.
8296 /// \table_row3{ <b>`PVR.TimeShiftCur(format)`</b>,
8297 /// \anchor PVR_TimeShiftCur_format
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.
8304 /// \table_row3{ <b>`PVR.TimeShiftOffset`</b>,
8305 /// \anchor PVR_TimeShiftOffset
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.
8312 /// \table_row3{ <b>`PVR.TimeShiftOffset(format)`</b>,
8313 /// \anchor PVR_TimeShiftOffset_format
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.
8320 /// \table_row3{ <b>`PVR.TimeshiftProgressDuration`</b>,
8321 /// \anchor PVR_TimeshiftProgressDuration
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.
8327 /// @skinning_v18 **[New Infolabel]** \link PVR_TimeshiftProgressDuration `PVR.TimeshiftProgressDuration`\endlink
8330 /// \table_row3{ <b>`PVR.TimeshiftProgressDuration(format)`</b>,
8331 /// \anchor PVR_TimeshiftProgressDuration_format
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.
8338 /// \table_row3{ <b>`PVR.TimeshiftProgressStartTime`</b>,
8339 /// \anchor PVR_TimeshiftProgressStartTime
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.
8345 /// @skinning_v18 **[New Infolabel]** \link PVR_TimeshiftProgressStartTime `PVR.TimeshiftProgressStartTime`\endlink
8348 /// \table_row3{ <b>`PVR.TimeshiftProgressStartTime(format)`</b>,
8349 /// \anchor PVR_TimeshiftProgressStartTime_format
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.
8356 /// \table_row3{ <b>`PVR.TimeshiftProgressEndTime`</b>,
8357 /// \anchor PVR_TimeshiftProgressEndTime
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.
8363 /// @skinning_v18 **[New Infolabel]** \link PVR_TimeshiftProgressEndTime `PVR.TimeshiftProgressEndTime`\endlink
8366 /// \table_row3{ <b>`PVR.TimeshiftProgressEndTime(format)`</b>,
8367 /// \anchor PVR_TimeshiftProgressEndTime_format
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.
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.
8395 /// \table_h3{ Labels, Type, Description }
8396 /// \table_row3{ <b>`RDS.HasRds`</b>,
8397 /// \anchor RDS_HasRds
8399 /// @return **True** if RDS is present.
8401 /// @skinning_v16 **[New Boolean Condition]** \link RDS_HasRds `RDS.HasRds`\endlink
8404 /// \table_row3{ <b>`RDS.HasRadioText`</b>,
8405 /// \anchor RDS_HasRadioText
8407 /// @return **True** if RDS contains also RadioText.
8409 /// @skinning_v16 **[New Boolean Condition]** \link RDS_HasRadioText `RDS.HasRadioText`\endlink
8412 /// \table_row3{ <b>`RDS.HasRadioTextPlus`</b>,
8413 /// \anchor RDS_HasRadioTextPlus
8415 /// @return **True** if RDS with RadioText contains also the plus information.
8417 /// @skinning_v16 **[New Boolean Condition]** \link RDS_HasRadioTextPlus `RDS.HasRadioTextPlus`\endlink
8420 /// \table_row3{ <b>`RDS.HasHotline`</b>,
8421 /// \anchor RDS_HasHotline
8423 /// @return **True** if a hotline phone number is present.
8424 /// @note Only available on RadioText Plus
8426 /// @skinning_v16 **[New Boolean Condition]** \link RDS_HasHotline `RDS.HasHotline`\endlink
8429 /// \table_row3{ <b>`RDS.HasStudio`</b>,
8430 /// \anchor RDS_HasStudio
8432 /// @return **True** if a studio name is present.
8433 /// @note Only available on RadioText Plus
8435 /// @skinning_v16 **[New Boolean Condition]** \link RDS_HasStudio `RDS.HasStudio`\endlink
8438 /// \table_row3{ <b>`RDS.AudioLanguage`</b>,
8439 /// \anchor RDS_AudioLanguage
8441 /// @return The RDS reported audio language of the channel.
8443 /// @skinning_v16 **[New Infolabel]** \link RDS_AudioLanguage `RDS.AudioLanguage`\endlink
8446 /// \table_row3{ <b>`RDS.ChannelCountry`</b>,
8447 /// \anchor RDS_ChannelCountry
8449 /// @return The country where the radio channel is broadcasted.
8451 /// @skinning_v16 **[New Infolabel]** \link RDS_ChannelCountry `RDS.ChannelCountry`\endlink
8454 /// \table_row3{ <b>`RDS.GetLine(number)`</b>,
8455 /// \anchor RDS_GetLine
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)
8461 /// @skinning_v16 **[New Infolabel]** \link RDS_GetLine `RDS.GetLine(number)`\endlink
8464 /// \table_row3{ <b>`RDS.Title`</b>,
8465 /// \anchor RDS_Title
8467 /// @return The title of item; e.g. track title of an album.
8468 /// @note Only available on RadioText Plus
8470 /// @skinning_v16 **[New Infolabel]** \link RDS_Title `RDS.Title`\endlink
8473 /// \table_row3{ <b>`RDS.Artist`</b>,
8474 /// \anchor RDS_Artist
8476 /// @return A person or band/collective generally considered responsible for the work.
8477 /// @note Only available on RadioText Plus
8479 /// @skinning_v16 **[New Infolabel]** \link RDS_Artist `RDS.Artist`\endlink
8482 /// \table_row3{ <b>`RDS.Band`</b>,
8483 /// \anchor RDS_Band
8485 /// @return The band/orchestra/musician.
8486 /// @note Only available on RadioText Plus
8488 /// @skinning_v16 **[New Infolabel]** \link RDS_Band `RDS.Band`\endlink
8491 /// \table_row3{ <b>`RDS.Composer`</b>,
8492 /// \anchor RDS_Composer
8494 /// @return The name of the original composer/author.
8495 /// @note Only available on RadioText Plus
8497 /// @skinning_v16 **[New Infolabel]** \link RDS_Composer `RDS.Composer`\endlink
8500 /// \table_row3{ <b>`RDS.Conductor`</b>,
8501 /// \anchor RDS_Conductor
8503 /// @return The artist(s) who performed the work. In classical music this would be
8505 /// @note Only available on RadioText Plus
8507 /// @skinning_v16 **[New Infolabel]** \link RDS_Conductor `RDS.Conductor`\endlink
8510 /// \table_row3{ <b>`RDS.Album`</b>,
8511 /// \anchor RDS_Album
8513 /// @return The album of the song.
8514 /// @note Only available on RadioText Plus
8516 /// @skinning_v16 **[New Infolabel]** \link RDS_Album `RDS.Album`\endlink
8519 /// \table_row3{ <b>`RDS.TrackNumber`</b>,
8520 /// \anchor RDS_TrackNumber
8522 /// @return The track number of the item on the album on which it was originally
8524 /// @note Only be available on RadioText Plus
8526 /// @skinning_v16 **[New Infolabel]** \link RDS_TrackNumber `RDS.TrackNumber`\endlink
8529 /// \table_row3{ <b>`RDS.RadioStyle`</b>,
8530 /// \anchor RDS_RadioStyle
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"...
8535 /// |:------------------------|:------------------------|
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 | |
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.
8571 /// @skinning_v16 **[New Infolabel]** \link RDS_RadioStyle `RDS.RadioStyle`\endlink
8574 /// \table_row3{ <b>`RDS.Comment`</b>,
8575 /// \anchor RDS_Comment
8577 /// @return The radio station comment string if available.
8578 /// @note Only available on RadioText Plus
8580 /// @skinning_v16 **[New Infolabel]** \link RDS_Comment `RDS.Comment`\endlink
8583 /// \table_row3{ <b>`RDS.InfoNews`</b>,
8584 /// \anchor RDS_InfoNews
8586 /// @return The message / headline (if available).
8587 /// @note Only available on RadioText Plus
8589 /// @skinning_v16 **[New Infolabel]** \link RDS_InfoNews `RDS.InfoNews`\endlink
8592 /// \table_row3{ <b>`RDS.InfoNewsLocal`</b>,
8593 /// \anchor RDS_InfoNewsLocal
8595 /// @return The local information news sended from radio channel (if available).
8596 /// @note Only available on RadioText Plus
8598 /// @skinning_v16 **[New Infolabel]** \link RDS_InfoNewsLocal `RDS.InfoNewsLocal`\endlink
8601 /// \table_row3{ <b>`RDS.InfoStock`</b>,
8602 /// \anchor RDS_InfoStock
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
8608 /// @skinning_v16 **[New Infolabel]** \link RDS_InfoStock `RDS.InfoStock`\endlink
8611 /// \table_row3{ <b>`RDS.InfoStockSize`</b>,
8612 /// \anchor RDS_InfoStockSize
8614 /// @return The number of rows present in stock information.
8615 /// @note Only available on RadioText Plus
8617 /// @skinning_v16 **[New Infolabel]** \link RDS_InfoStockSize `RDS.InfoStockSize`\endlink
8620 /// \table_row3{ <b>`RDS.InfoSport`</b>,
8621 /// \anchor RDS_InfoSport
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
8627 /// @skinning_v16 **[New Infolabel]** \link RDS_InfoSport `RDS.InfoSport`\endlink
8630 /// \table_row3{ <b>`RDS.InfoSportSize`</b>,
8631 /// \anchor RDS_InfoSportSize
8633 /// @return The number of rows present in sport information.
8634 /// @note Only available on RadioText Plus
8636 /// @skinning_v16 **[New Infolabel]** \link RDS_InfoSportSize `RDS.InfoSportSize`\endlink
8639 /// \table_row3{ <b>`RDS.InfoLottery`</b>,
8640 /// \anchor RDS_InfoLottery
8642 /// @return The raffle / lottery: "key word 99values" (if available).
8643 /// @note Only available on RadioText Plus
8645 /// @skinning_v16 **[New Infolabel]** \link RDS_InfoLottery `RDS.InfoLottery`\endlink
8648 /// \table_row3{ <b>`RDS.InfoLotterySize`</b>,
8649 /// \anchor RDS_InfoLotterySize
8651 /// @return The number of rows present in lottery information.
8652 /// @note Only available on RadioText Plus
8654 /// @skinning_v16 **[New Infolabel]** \link RDS_InfoLotterySize `RDS.InfoLotterySize`\endlink
8657 /// \table_row3{ <b>`RDS.InfoWeather`</b>,
8658 /// \anchor RDS_InfoWeather
8660 /// @return The weather information (if available).
8661 /// @note Only available on RadioText Plus
8663 /// @skinning_v16 **[New Infolabel]** \link RDS_InfoWeather `RDS.InfoWeather`\endlink
8666 /// \table_row3{ <b>`RDS.InfoWeatherSize`</b>,
8667 /// \anchor RDS_InfoWeatherSize
8669 /// @return The number of rows present in weather information.
8670 /// @note Only available on RadioText Plus
8672 /// @skinning_v16 **[New Infolabel]** \link RDS_InfoWeatherSize `RDS.InfoWeatherSize`\endlink
8675 /// \table_row3{ <b>`RDS.InfoCinema`</b>,
8676 /// \anchor RDS_InfoCinema
8678 /// @return The information about movies in cinema (if available).
8679 /// @note Only available on RadioText Plus
8681 /// @skinning_v16 **[New Infolabel]** \link RDS_InfoCinema `RDS.InfoCinema`\endlink
8684 /// \table_row3{ <b>`RDS.InfoCinemaSize`</b>,
8685 /// \anchor RDS_InfoCinemaSize
8687 /// @return The number of rows present in cinema information.
8688 /// @note Only available on RadioText Plus
8690 /// @skinning_v16 **[New Infolabel]** \link RDS_InfoCinemaSize `RDS.InfoCinemaSize`\endlink
8693 /// \table_row3{ <b>`RDS.InfoHoroscope`</b>,
8694 /// \anchor RDS_InfoHoroscope
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
8700 /// @skinning_v16 **[New Infolabel]** \link RDS_InfoHoroscope `RDS.InfoHoroscope`\endlink
8703 /// \table_row3{ <b>`RDS.InfoHoroscopeSize`</b>,
8704 /// \anchor RDS_InfoHoroscopeSize
8706 /// @return The Number of rows present in horoscope information.
8707 /// @note Only available on RadioText Plus
8709 /// @skinning_v16 **[New Infolabel]** \link RDS_InfoHoroscopeSize `RDS.InfoHoroscopeSize`\endlink
8712 /// \table_row3{ <b>`RDS.InfoOther`</b>,
8713 /// \anchor RDS_InfoOther
8715 /// @return Other information\, not especially specified: "key word 99info" (if available).
8716 /// @note Only available on RadioText Plus
8718 /// @skinning_v16 **[New Infolabel]** \link RDS_InfoOther `RDS.InfoOther`\endlink
8721 /// \table_row3{ <b>`RDS.InfoOtherSize`</b>,
8722 /// \anchor RDS_InfoOtherSize
8724 /// @return The number of rows present with other information.
8725 /// @note Only available on RadioText Plus
8727 /// @skinning_v16 **[New Infolabel]** \link RDS_InfoOtherSize `RDS.InfoOtherSize`\endlink
8730 /// \table_row3{ <b>`RDS.ProgStation`</b>,
8731 /// \anchor RDS_ProgStation
8733 /// @return The name of the radio channel.
8734 /// @note becomes also set from epg if it is not available from RDS
8736 /// @skinning_v16 **[New Infolabel]** \link RDS_ProgStation `RDS.ProgStation`\endlink
8739 /// \table_row3{ <b>`RDS.ProgNow`</b>,
8740 /// \anchor RDS_ProgNow
8742 /// @return The now playing program name.
8743 /// @note becomes also be set from epg if from RDS not available
8745 /// @skinning_v16 **[New Infolabel]** \link RDS_ProgNow `RDS.ProgNow`\endlink
8748 /// \table_row3{ <b>`RDS.ProgNext`</b>,
8749 /// \anchor RDS_ProgNext
8751 /// @return The next played program name (if available).
8752 /// @note becomes also be set from epg if from RDS not available
8754 /// @skinning_v16 **[New Infolabel]** \link RDS_ProgNext `RDS.ProgNext`\endlink
8757 /// \table_row3{ <b>`RDS.ProgHost`</b>,
8758 /// \anchor RDS_ProgHost
8760 /// @return The name of the host of the radio show.
8762 /// @skinning_v16 **[New Infolabel]** \link RDS_ProgHost `RDS.ProgHost`\endlink
8765 /// \table_row3{ <b>`RDS.ProgEditStaff`</b>,
8766 /// \anchor RDS_ProgEditStaff
8768 /// @return The name of the editorial staff; e.g. name of editorial journalist.
8769 /// @note Only available on RadioText Plus
8771 /// @skinning_v16 **[New Infolabel]** \link RDS_ProgEditStaff `RDS.ProgEditStaff`\endlink
8774 /// \table_row3{ <b>`RDS.ProgHomepage`</b>,
8775 /// \anchor RDS_ProgHomepage
8777 /// @return The Link to radio station homepage
8778 /// @note Only available on RadioText Plus
8780 /// @skinning_v16 **[New Infolabel]** \link RDS_ProgHomepage `RDS.ProgHomepage`\endlink
8783 /// \table_row3{ <b>`RDS.ProgStyle`</b>,
8784 /// \anchor RDS_ProgStyle
8786 /// @return A human readable string about radiostyle defined from RDS or RBDS.
8788 /// @skinning_v16 **[New Infolabel]** \link RDS_ProgStyle `RDS.ProgStyle`\endlink
8791 /// \table_row3{ <b>`RDS.PhoneHotline`</b>,
8792 /// \anchor RDS_PhoneHotline
8794 /// @return The telephone number of the radio station's hotline.
8795 /// @note Only available on RadioText Plus
8797 /// @skinning_v16 **[New Infolabel]** \link RDS_PhoneHotline `RDS.PhoneHotline`\endlink
8800 /// \table_row3{ <b>`RDS.PhoneStudio`</b>,
8801 /// \anchor RDS_PhoneStudio
8803 /// @return The telephone number of the radio station's studio.
8804 /// @note Only available on RadioText Plus
8806 /// @skinning_v16 **[New Infolabel]** \link RDS_PhoneStudio `RDS.PhoneStudio`\endlink
8809 /// \table_row3{ <b>`RDS.SmsStudio`</b>,
8810 /// \anchor RDS_SmsStudio
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
8816 /// @skinning_v16 **[New Infolabel]** \link RDS_SmsStudio `RDS.SmsStudio`\endlink
8819 /// \table_row3{ <b>`RDS.EmailHotline`</b>,
8820 /// \anchor RDS_EmailHotline
8822 /// @return The email address of the radio stations hotline (if available).
8823 /// @note Only available on RadioText Plus
8825 /// @skinning_v16 **[New Infolabel]** \link RDS_EmailHotline `RDS.EmailHotline`\endlink
8828 /// \table_row3{ <b>`RDS.EmailStudio`</b>,
8829 /// \anchor RDS_EmailStudio
8831 /// @return The email address of the radio station's studio (if available).
8832 /// @note Only available on RadioText Plus
8834 /// @skinning_v16 **[New Infolabel]** \link RDS_EmailStudio `RDS.EmailStudio`\endlink
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
8889 /// \table_h3{ Labels, Type, Description }
8890 /// \table_row3{ <b>`Slideshow.IsActive`</b>,
8891 /// \anchor Slideshow_IsActive
8893 /// @return **True** if the picture slideshow is running.
8896 /// \table_row3{ <b>`Slideshow.IsPaused`</b>,
8897 /// \anchor Slideshow_IsPaused
8899 /// @return **True** if the picture slideshow is paused.
8902 /// \table_row3{ <b>`Slideshow.IsRandom`</b>,
8903 /// \anchor Slideshow_IsRandom
8905 /// @return **True** if the picture slideshow is in random mode.
8908 /// \table_row3{ <b>`Slideshow.IsVideo`</b>,
8909 /// \anchor Slideshow_IsVideo
8911 /// @return **True** if the picture slideshow is playing a video.
8913 /// @skinning_v13 **[New Boolean Condition]** \link Slideshow_IsVideo `Slideshow.IsVideo`\endlink
8916 /// \table_row3{ <b>`Slideshow.Altitude`</b>,
8917 /// \anchor Slideshow_Altitude
8919 /// @return The altitude in meters where the current picture was taken.
8920 /// @note This is the value of the EXIF GPSInfo.GPSAltitude tag.
8923 /// \table_row3{ <b>`Slideshow.Aperture`</b>,
8924 /// \anchor Slideshow_Aperture
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).
8930 /// \table_row3{ <b>`Slideshow.Author`</b>,
8931 /// \anchor Slideshow_Author
8933 /// @return The name of the person involved in writing about the current
8935 /// @note This is the value of the IPTC Writer tag (hex code 0x7A).
8937 /// @skinning_v13 **[New Infolabel]** \link Slideshow_Author `Slideshow.Author`\endlink
8940 /// \table_row3{ <b>`Slideshow.Byline`</b>,
8941 /// \anchor Slideshow_Byline
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).
8946 /// @skinning_v13 **[New Infolabel]** \link Slideshow_Byline `Slideshow.Byline`\endlink
8949 /// \table_row3{ <b>`Slideshow.BylineTitle`</b>,
8950 /// \anchor Slideshow_BylineTitle
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).
8955 /// @skinning_v13 **[New Infolabel]** \link Slideshow_BylineTitle `Slideshow.BylineTitle`\endlink
8958 /// \table_row3{ <b>`Slideshow.CameraMake`</b>,
8959 /// \anchor Slideshow_CameraMake
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).
8965 /// \table_row3{ <b>`Slideshow.CameraModel`</b>,
8966 /// \anchor Slideshow_CameraModel
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).
8973 /// \table_row3{ <b>`Slideshow.Caption`</b>,
8974 /// \anchor Slideshow_Caption
8976 /// @return A description of the current picture.
8977 /// @note This is the value of the IPTC Caption tag (hex code 0x78).
8980 /// \table_row3{ <b>`Slideshow.Category`</b>,
8981 /// \anchor Slideshow_Category
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).
8986 /// @skinning_v13 **[New Infolabel]** \link Slideshow_Category `Slideshow.Category`\endlink
8989 /// \table_row3{ <b>`Slideshow.CCDWidth`</b>,
8990 /// \anchor Slideshow_CCDWidth
8992 /// @return The width of the CCD in the camera used to take the current
8994 /// @note This is calculated from three EXIF tags (0xA002 * 0xA210 / 0xA20e).
8996 /// @skinning_v13 **[New Infolabel]** \link Slideshow_CCDWidth `Slideshow.CCDWidth`\endlink
8999 /// \table_row3{ <b>`Slideshow.City`</b>,
9000 /// \anchor Slideshow_City
9002 /// @return The city where the current picture was taken.
9003 /// @note This is the value of the IPTC City tag (hex code 0x5A).
9005 /// @skinning_v13 **[New Infolabel]** \link Slideshow_City `Slideshow.City`\endlink
9008 /// \table_row3{ <b>`Slideshow.Colour`</b>,
9009 /// \anchor Slideshow_Colour
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>
9015 /// @skinning_v13 **[New Infolabel]** \link Slideshow_Colour `Slideshow.Colour`\endlink
9018 /// \table_row3{ <b>`Slideshow.CopyrightNotice`</b>,
9019 /// \anchor Slideshow_CopyrightNotice
9021 /// @return The copyright notice of the current picture.
9022 /// @note This is the value of the IPTC Copyright tag (hex code 0x74).
9024 /// @skinning_v13 **[New Infolabel]** \link Slideshow_CopyrightNotice `Slideshow.CopyrightNotice`\endlink
9027 /// \table_row3{ <b>`Slideshow.Country`</b>,
9028 /// \anchor Slideshow_Country
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).
9033 /// @skinning_v13 **[New Infolabel]** \link Slideshow_Country `Slideshow.Country`\endlink
9036 /// \table_row3{ <b>`Slideshow.CountryCode`</b>,
9037 /// \anchor Slideshow_CountryCode
9039 /// @return The country code of the country where the current picture was
9041 /// @note This is the value of the IPTC CountryCode tag (hex code 0x64).
9043 /// @skinning_v13 **[New Infolabel]** \link Slideshow_CountryCode `Slideshow.CountryCode`\endlink
9046 /// \table_row3{ <b>`Slideshow.Credit`</b>,
9047 /// \anchor Slideshow_Credit
9049 /// @return Who provided the current picture.
9050 /// @note This is the value of the IPTC Credit tag (hex code 0x6E).
9052 /// @skinning_v13 **[New Infolabel]** \link Slideshow_Credit `Slideshow.Credit`\endlink
9055 /// \table_row3{ <b>`Slideshow.DigitalZoom`</b>,
9056 /// \anchor Slideshow_DigitalZoom
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).
9061 /// @skinning_v13 **[New Infolabel]** \link Slideshow_DigitalZoom `Slideshow.DigitalZoom`\endlink
9064 /// \table_row3{ <b>`Slideshow.EXIFComment`</b>,
9065 /// \anchor Slideshow_EXIFComment
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".
9072 /// \table_row3{ <b>`Slideshow.EXIFDate`</b>,
9073 /// \anchor Slideshow_EXIFDate
9075 /// @return The localized date of the current picture. The short form of the
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.
9082 /// @skinning_v13 **[New Infolabel]** \link Slideshow_EXIFDate `Slideshow.EXIFDate`\endlink
9085 /// \table_row3{ <b>`Slideshow.EXIFDescription`</b>,
9086 /// \anchor Slideshow_EXIFDescription
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).
9093 /// \table_row3{ <b>`Slideshow.EXIFSoftware`</b>,
9094 /// \anchor Slideshow_EXIFSoftware
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).
9101 /// \table_row3{ <b>`Slideshow.EXIFTime`</b>,
9102 /// \anchor Slideshow_EXIFTime
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)
9112 /// \table_row3{ <b>`Slideshow.Exposure`</b>,
9113 /// \anchor Slideshow_Exposure
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>
9122 /// @note This is the value of the EXIF ExposureProgram tag
9123 /// (hex code 0x8822).
9125 /// @skinning_v13 **[New Infolabel]** \link Slideshow_Exposure `Slideshow.Exposure`\endlink
9128 /// \table_row3{ <b>`Slideshow.ExposureBias`</b>,
9129 /// \anchor Slideshow_ExposureBias
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).
9135 /// @skinning_v13 **[New Infolabel]** \link Slideshow_ExposureBias `Slideshow.ExposureBias`\endlink
9138 /// \table_row3{ <b>`Slideshow.ExposureMode`</b>,
9139 /// \anchor Slideshow_ExposureMode
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).
9148 /// \table_row3{ <b>`Slideshow.ExposureTime`</b>,
9149 /// \anchor Slideshow_ExposureTime
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.
9157 /// \table_row3{ <b>`Slideshow.Filedate`</b>,
9158 /// \anchor Slideshow_Filedate
9160 /// @return The file date of the current picture.
9163 /// \table_row3{ <b>`Slideshow.Filename`</b>,
9164 /// \anchor Slideshow_Filename
9166 /// @return The file name of the current picture.
9169 /// \table_row3{ <b>`Slideshow.Filesize`</b>,
9170 /// \anchor Slideshow_Filesize
9172 /// @return The file size of the current picture.
9175 /// \table_row3{ <b>`Slideshow.FlashUsed`</b>,
9176 /// \anchor Slideshow_FlashUsed
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).
9182 /// @skinning_v13 **[New Infolabel]** \link Slideshow_FlashUsed `Slideshow.FlashUsed`\endlink
9185 /// \table_row3{ <b>`Slideshow.FocalLength`</b>,
9186 /// \anchor Slideshow_FocalLength
9188 /// @return The focal length of the lens\, in mm.
9189 /// @note This is the value of the EXIF FocalLength tag (hex code 0x920A).
9192 /// \table_row3{ <b>`Slideshow.FocusDistance`</b>,
9193 /// \anchor Slideshow_FocusDistance
9195 /// @return The distance to the subject\, in meters.
9196 /// @note This is the value of the EXIF SubjectDistance tag (hex code 0x9206).
9199 /// \table_row3{ <b>`Slideshow.Headline`</b>,
9200 /// \anchor Slideshow_Headline
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).
9205 /// @skinning_v13 **[New Infolabel]** \link Slideshow_Headline `Slideshow.Headline`\endlink
9208 /// \table_row3{ <b>`Slideshow.ImageType`</b>,
9209 /// \anchor Slideshow_ImageType
9211 /// @return The color components of the current picture.
9212 /// @note This is the value of the IPTC ImageType tag (hex code 0x82).
9214 /// @skinning_v13 **[New Infolabel]** \link Slideshow_ImageType `Slideshow.ImageType`\endlink
9217 /// \table_row3{ <b>`Slideshow.IPTCDate`</b>,
9218 /// \anchor Slideshow_IPTCDate
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).
9225 /// \table_row3{ <b>`Slideshow.ISOEquivalence`</b>,
9226 /// \anchor Slideshow_ISOEquivalence
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).
9232 /// \table_row3{ <b>`Slideshow.Keywords`</b>,
9233 /// \anchor Slideshow_Keywords
9235 /// @return The keywords assigned to the current picture.
9236 /// @note This is the value of the IPTC Keywords tag (hex code 0x19).
9239 /// \table_row3{ <b>`Slideshow.Latitude`</b>,
9240 /// \anchor Slideshow_Latitude
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.
9248 /// \table_row3{ <b>`Slideshow.LightSource`</b>,
9249 /// \anchor Slideshow_LightSource
9251 /// @return The kind of light source when the picture was taken. Possible
9253 /// - <b>"Daylight"</b>
9254 /// - <b>"Fluorescent"</b>
9255 /// - <b>"Incandescent"</b>
9257 /// @note This is the value of the EXIF LightSource tag (hex code 0x9208).
9259 /// @skinning_v13 **[New Infolabel]** \link Slideshow_LightSource `Slideshow.LightSource`\endlink
9262 /// \table_row3{ <b>`Slideshow.LongEXIFDate`</b>,
9263 /// \anchor Slideshow_LongEXIFDate
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.
9272 /// @skinning_v13 **[New Infolabel]** \link Slideshow_LongEXIFDate `Slideshow.LongEXIFDate`\endlink
9275 /// \table_row3{ <b>`Slideshow.LongEXIFTime`</b>,
9276 /// \anchor Slideshow_LongEXIFTime
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.
9285 /// @skinning_v13 **[New Infolabel]** \link Slideshow_LongEXIFTime `Slideshow.LongEXIFTime`\endlink
9288 /// \table_row3{ <b>`Slideshow.Longitude`</b>,
9289 /// \anchor Slideshow_Longitude
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.
9297 /// \table_row3{ <b>`Slideshow.MeteringMode`</b>,
9298 /// \anchor Slideshow_MeteringMode
9300 /// @return The metering mode used when the current picture was taken. The
9301 /// possible values are:
9302 /// - <b>"Center weight"</b>
9304 /// - <b>"Matrix"</b>
9305 /// @note This is the value of the EXIF MeteringMode tag (hex code 0x9207).
9307 /// @skinning_v13 **[New Infolabel]** \link Slideshow_MeteringMode `Slideshow.MeteringMode`\endlink
9310 /// \table_row3{ <b>`Slideshow.ObjectName`</b>,
9311 /// \anchor Slideshow_ObjectName
9313 /// @return a shorthand reference for the current picture.
9314 /// @note This is the value of the IPTC ObjectName tag (hex code 0x05).
9316 /// @skinning_v13 **[New Infolabel]** \link Slideshow_ObjectName `Slideshow.ObjectName`\endlink
9319 /// \table_row3{ <b>`Slideshow.Orientation`</b>,
9320 /// \anchor Slideshow_Orientation
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>
9328 /// @note This is the value of the EXIF Orientation tag (hex code 0x0112).
9330 /// @skinning_v13 **[New Infolabel]** \link Slideshow_Orientation `Slideshow.Orientation`\endlink
9333 /// \table_row3{ <b>`Slideshow.Path`</b>,
9334 /// \anchor Slideshow_Path
9336 /// @return The file path of the current picture.
9339 /// \table_row3{ <b>`Slideshow.Process`</b>,
9340 /// \anchor Slideshow_Process
9342 /// @return The process used to compress the current picture.
9344 /// @skinning_v13 **[New Infolabel]** \link Slideshow_Process `Slideshow.Process`\endlink
9347 /// \table_row3{ <b>`Slideshow.ReferenceService`</b>,
9348 /// \anchor Slideshow_ReferenceService
9350 /// @return The Service Identifier of a prior envelope to which the current
9352 /// @note This is the value of the IPTC ReferenceService tag (hex code 0x2D).
9354 /// @skinning_v13 **[New Infolabel]** \link Slideshow_ReferenceService `Slideshow.ReferenceService`\endlink
9357 /// \table_row3{ <b>`Slideshow.Resolution`</b>,
9358 /// \anchor Slideshow_Resolution
9360 /// @return The dimensions of the current picture (Width x Height)
9363 /// \table_row3{ <b>`Slideshow.SlideComment`</b>,
9364 /// \anchor Slideshow_SlideComment
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".
9371 /// \table_row3{ <b>`Slideshow.SlideIndex`</b>,
9372 /// \anchor Slideshow_SlideIndex
9374 /// @return The slide index of the current picture.
9377 /// \table_row3{ <b>`Slideshow.Source`</b>,
9378 /// \anchor Slideshow_Source
9380 /// @return The original owner of the current picture.
9381 /// @note This is the value of the IPTC Source tag (hex code 0x73).
9383 /// @skinning_v13 **[New Infolabel]** \link Slideshow_Source `Slideshow.Source`\endlink
9386 /// \table_row3{ <b>`Slideshow.SpecialInstructions`</b>,
9387 /// \anchor Slideshow_SpecialInstructions
9389 /// @return Other editorial instructions concerning the use of the current
9391 /// @note This is the value of the IPTC SpecialInstructions tag (hex code 0x28).
9393 /// @skinning_v13 **[New Infolabel]** \link Slideshow_SpecialInstructions `Slideshow.SpecialInstructions`\endlink
9396 /// \table_row3{ <b>`Slideshow.State`</b>,
9397 /// \anchor Slideshow_State
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).
9402 /// @skinning_v13 **[New Infolabel]** \link Slideshow_State `Slideshow.State`\endlink
9405 /// \table_row3{ <b>`Slideshow.Sublocation`</b>,
9406 /// \anchor Slideshow_Sublocation
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).
9412 /// @skinning_v13 **[New Infolabel]** \link Slideshow_Sublocation `Slideshow.Sublocation`\endlink
9415 /// \table_row3{ <b>`Slideshow.SupplementalCategories`</b>,
9416 /// \anchor Slideshow_SupplementalCategories
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
9423 /// @skinning_v13 **[New Infolabel]** \link Slideshow_SupplementalCategories `Slideshow.SupplementalCategories`\endlink
9426 /// \table_row3{ <b>`Slideshow.TimeCreated`</b>,
9427 /// \anchor Slideshow_TimeCreated
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).
9433 /// @skinning_v13 **[New Infolabel]** \link Slideshow_TimeCreated `Slideshow.TimeCreated`\endlink
9436 /// \table_row3{ <b>`Slideshow.TransmissionReference`</b>,
9437 /// \anchor Slideshow_TransmissionReference
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).
9444 /// @skinning_v13 **[New Infolabel]** \link Slideshow_TransmissionReference `Slideshow.TransmissionReference`\endlink
9447 /// \table_row3{ <b>`Slideshow.Urgency`</b>,
9448 /// \anchor Slideshow_Urgency
9450 /// @return The urgency of the current picture. Values are 1-9. The 1 is most
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).
9457 /// @skinning_v13 **[New Infolabel]** \link Slideshow_Urgency `Slideshow.Urgency`\endlink
9460 /// \table_row3{ <b>`Slideshow.WhiteBalance`</b>,
9461 /// \anchor Slideshow_WhiteBalance
9463 /// @return The white balance mode set when the current picture was taken.
9464 /// The possible values are:
9465 /// - <b>"Manual"</b>
9468 /// @note This is the value of the EXIF WhiteBalance tag (hex code 0xA403).
9470 /// @skinning_v13 **[New Infolabel]** \link Slideshow_WhiteBalance `Slideshow.WhiteBalance`\endlink
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
9546 /// \table_h3{ Labels, Type, Description }
9547 /// \table_row3{ <b>`Library.IsScanning`</b>,
9548 /// \anchor Library_IsScanning
9550 /// @return **True** if the library is being scanned.
9553 /// \table_row3{ <b>`Library.IsScanningVideo`</b>,
9554 /// \anchor Library_IsScanningVideo
9556 /// @return **True** if the video library is being scanned.
9559 /// \table_row3{ <b>`Library.IsScanningMusic`</b>,
9560 /// \anchor Library_IsScanningMusic
9562 /// @return **True** if the music library is being scanned.
9565 /// \table_row3{ <b>`Library.HasContent(music)`</b>,
9566 /// \anchor Library_HasContent_Music
9568 /// @return **True** if the library has music content.
9571 /// \table_row3{ <b>`Library.HasContent(video)`</b>,
9572 /// \anchor Library_HasContent_Video
9574 /// @return **True** if the library has video content.
9577 /// \table_row3{ <b>`Library.HasContent(movies)`</b>,
9578 /// \anchor Library_HasContent_Movies
9580 /// @return **True** if the library has movies.
9583 /// \table_row3{ <b>`Library.HasContent(tvshows)`</b>,
9584 /// \anchor Library_HasContent_TVShows
9586 /// @return **True** if the library has tvshows.
9589 /// \table_row3{ <b>`Library.HasContent(musicvideos)`</b>,
9590 /// \anchor Library_HasContent_MusicVideos
9592 /// @return **True** if the library has music videos.
9595 /// \table_row3{ <b>`Library.HasContent(moviesets)`</b>,
9596 /// \anchor Library_HasContent_MovieSets
9598 /// @return **True** if the library has movie sets.
9601 /// \table_row3{ <b>`Library.HasContent(singles)`</b>,
9602 /// \anchor Library_HasContent_Singles
9604 /// @return **True** if the library has singles.
9607 /// \table_row3{ <b>`Library.HasContent(compilations)`</b>,
9608 /// \anchor Library_HasContent_Compilations
9610 /// @return **True** if the library has compilations.
9613 /// \table_row3{ <b>`Library.HasContent(Role.Composer)`</b>,
9614 /// \anchor Library_HasContent_Role_Composer
9616 /// @return **True** if there are songs in the library which have composers.
9618 /// @skinning_v17 **[New Boolean Condition]** \link Library_HasContent_Role_Composer `Library.HasContent(Role.Composer)`\endlink
9621 /// \table_row3{ <b>`Library.HasContent(Role.Conductor)`</b>,
9622 /// \anchor Library_HasContent_Role_Conductor
9624 /// @return **True** if there are songs in the library which have a conductor.
9626 /// @skinning_v17 **[New Boolean Condition]** \link Library_HasContent_Role_Conductor `Library.HasContent(Role.Conductor)`\endlink
9629 /// \table_row3{ <b>`Library.HasContent(Role.Orchestra)`</b>,
9630 /// \anchor Library_HasContent_Role_Orchestra
9632 /// @return **True** if there are songs in the library which have an orchestra.
9634 /// @skinning_v17 **[New Boolean Condition]** \link Library_HasContent_Role_Orchestra `Library.HasContent(Role.Orchestra)`\endlink
9637 /// \table_row3{ <b>`Library.HasContent(Role.Lyricist)`</b>,
9638 /// \anchor Library_HasContent_Role_Lyricist
9640 /// @return **True** if there are songs in the library which have a lyricist.
9642 /// @skinning_v17 **[New Boolean Condition]** \link Library_HasContent_Role_Lyricist `Library.HasContent(Role.Lyricist)`\endlink
9645 /// \table_row3{ <b>`Library.HasContent(Role.Remixer)`</b>,
9646 /// \anchor Library_HasContent_Role_Remixer
9648 /// @return **True** if there are songs in the library which have a remixer.
9650 /// @skinning_v17 **[New Boolean Condition]** \link Library_HasContent_Role_Remixer `Library.HasContent(Role.Remixer)`\endlink
9653 /// \table_row3{ <b>`Library.HasContent(Role.Arranger)`</b>,
9654 /// \anchor Library_HasContent_Role_Remixer
9656 /// @return **True** if there are songs in the library which have an arranger.
9658 /// @skinning_v17 **[New Boolean Condition]** \link Library_HasContent_Role_Remixer `Library.HasContent(Role.Arranger)`\endlink
9661 /// \table_row3{ <b>`Library.HasContent(Role.Engineer)`</b>,
9662 /// \anchor Library_HasContent_Role_Engineer
9664 /// @return **True** if there are songs in the library which have an engineer.
9666 /// @skinning_v17 **[New Boolean Condition]** \link Library_HasContent_Role_Engineer `Library.HasContent(Role.Engineer)`\endlink
9669 /// \table_row3{ <b>`Library.HasContent(Role.Producer)`</b>,
9670 /// \anchor Library_HasContent_Role_Producer
9672 /// @return **True** if there are songs in the library which have an producer.
9674 /// @skinning_v17 **[New Boolean Condition]** \link Library_HasContent_Role_Producer `Library.HasContent(Role.Producer)`\endlink
9677 /// \table_row3{ <b>`Library.HasContent(Role.DJMixer)`</b>,
9678 /// \anchor Library_HasContent_Role_DJMixer
9680 /// @return **True** if there are songs in the library which have a DJMixer.
9682 /// @skinning_v17 **[New Boolean Condition]** \link Library_HasContent_Role_DJMixer `Library.HasContent(Role.DJMixer)`\endlink
9685 /// \table_row3{ <b>`Library.HasContent(Role.Mixer)`</b>,
9686 /// \anchor Library_HasContent_Role_Mixer
9688 /// @return **True** if there are songs in the library which have a mixer.
9690 /// @skinning_v17 **[New Boolean Condition]** \link Library_HasContent_Role_Mixer `Library.HasContent(Role.Mixer)`\endlink
9693 /// \table_row3{ <b>`Library.HasContent(boxsets)`</b>,
9694 /// \anchor Library_HasContent_Boxsets
9696 /// @return **True** if there are albums in the library which are boxsets.
9698 /// @skinning_v19 **[New Boolean Condition]** \link Library_HasContent_Boxsets `Library.HasContent(boxsets)`\endlink
9701 /// \table_row3{ <b>`Library.HasNode(path)`</b>,
9702 /// \anchor Library_HasNode
9704 /// @return **True** if there the node is present in the library.
9706 /// @skinning_v19 **[New Boolean Condition]** \link Library_HasNode `Library.HasNode(path)`\endlink
9711 /// -----------------------------------------------------------------------------
9713 /// \page modules__infolabels_boolean_conditions
9714 /// \section modules_rm_infolabels_booleans Additional revision history for Infolabels and Boolean Conditions
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
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
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`
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)`
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`
9794 /// \subsection modules_rm_infolabels_booleans_v15 Kodi v15 (Isengard)
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`
9803 /// \subsection modules_rm_infolabels_booleans_v13 XBMC v13 (Gotham)
9804 /// @skinning_v13 **[Removed Infolabels]** The following infolabels were removed:
9805 /// - `Network.SubnetAddress`
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
¶meters
)
9815 CUtil::SplitParams(parameters
, params
);
9818 const std::string
&CGUIInfoManager::Property::param(unsigned int n
/* = 0 */) const
9820 if (n
< params
.size())
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
;
9838 for (size_t i
= 0; i
< infoString
.size(); ++i
)
9840 if (infoString
[i
] == '(')
9845 else if (infoString
[i
] == ')')
9848 CLog::Log(LOGERROR
, "unmatched parentheses in {}", infoString
);
9849 else if (!--parentheses
)
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
));
9864 param
+= infoString
[i
];
9866 property
+= infoString
[i
];
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
9895 std::string strTest
= strCondition
;
9896 StringUtils::Trim(strTest
);
9898 std::vector
< Property
> info
;
9899 SplitInfoString(strTest
, info
);
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
);
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")
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
);
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
)
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
)
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
¶m
= 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
);
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
);
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
);
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));
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
));
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
)
10223 else if (cat
.name
== "slideshow")
10225 for (const infomap
& i
: slideshow
)
10227 if (prop
.name
== i
.str
)
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
)
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);
10271 listItemDependent
= true;
10274 else if (cat
.name
== "visualisation")
10276 for (const infomap
& i
: visualisation
)
10278 if (prop
.name
== i
.str
)
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)));
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());
10348 return AddMultiInfo(CGUIInfo(control_label
.val
, controlID
, 0));
10353 else if (cat
.name
== "controlgroup" && prop
.name
== "hasfocus")
10355 int groupID
= atoi(cat
.param().c_str());
10357 return AddMultiInfo(CGUIInfo(CONTROL_GROUP_HAS_FOCUS
, groupID
, atoi(prop
.param(0).c_str())));
10359 else if (cat
.name
== "playlist")
10362 for (const infomap
& i
: playlist
)
10364 if (prop
.name
== i
.str
)
10372 if (prop
.num_params() <= 0)
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
)
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
)
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);
10494 listItemDependent
= true;
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());
10507 return AddMultiInfo(CGUIInfo(control_label
.val
, controlID
, atoi(info
[2].param(0).c_str())));
10517 int CGUIInfoManager::TranslateListItem(const Property
& cat
, const Property
& prop
, int id
, bool container
)
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
;
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());
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
;
10559 int offset
= std::atoi(cat
.param().c_str());
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
;
10572 flags
|= INFOFLAG_LISTITEM_CONTAINER
;
10574 return AddMultiInfo(CGUIInfo(ret
, id
, offset
, flags
, data3
, data4
));
10580 int CGUIInfoManager::TranslateMusicPlayerString(const std::string
&info
) const
10582 for (const infomap
& i
: musicplayer
)
10590 int CGUIInfoManager::TranslateVideoPlayerString(const std::string
& info
) const
10592 for (const infomap
& i
: videoplayer
)
10600 int CGUIInfoManager::TranslatePlayerString(const std::string
& info
) const
10602 for (const infomap
& i
: player_labels
)
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
);
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
;
10680 itemPtr
= GUIINFO::GetCurrentListItem(contextWindow
);
10681 item
= itemPtr
.get();
10683 return GetItemInt(value
, item
, contextWindow
, info
);
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
));
10704 res
= m_bools
.insert(std::make_shared
<InfoSingle
>(condition
, context
, m_refreshCounter
));
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
);
10722 return info
->Get(contextWindow
, item
.get());
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
;
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
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
;
10765 itemPtr
= GUIINFO::GetCurrentListItem(contextWindow
, info
.GetData1(), info
.GetData2(), info
.GetInfoFlag());
10766 item
= itemPtr
.get();
10770 if (condition
== LISTITEM_PROPERTY
)
10772 if (item
->HasProperty(info
.GetData3()))
10773 bReturn
= item
->GetProperty(info
.GetData3()).asBoolean();
10776 bReturn
= GetItemBool(item
, contextWindow
, condition
);
10783 else if (!m_infoProviders
.GetBool(bReturn
, m_currentFile
, contextWindow
, info
))
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();
10792 bReturn
= GetImage(info
.GetData1(), contextWindow
).empty();
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
);
10821 compare
= GetImage(info2
, contextWindow
);
10823 else if (!info
.GetData3().empty())
10824 { // conditional string
10825 compare
= info
.GetData3();
10827 StringUtils::ToLower(compare
);
10830 if (item
&& item
->IsFileItem() && IsListItemInfo(info
.GetData1()))
10831 label
= GetItemImage(item
, contextWindow
, info
.GetData1());
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
;
10843 bReturn
= StringUtils::EqualsNoCase(label
, compare
);
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
:
10854 auto getIntValue
= [this, &item
, &contextWindow
](int infoNum
) {
10856 if (!GetInt(intValue
, infoNum
, contextWindow
, item
))
10859 if (item
&& item
->IsFileItem() && IsListItemInfo(infoNum
))
10860 value
= GetItemImage(item
, contextWindow
, infoNum
);
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
);
10869 std::from_chars(value
.data(), value
.data() + value
.size(), intValue
);
10874 int leftIntValue
= getIntValue(info
.GetData1());
10875 int rightIntValue
= getIntValue(info
.GetData2());
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;
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();
10906 else if (info
.m_info
>= LISTITEM_START
&& info
.m_info
<= LISTITEM_END
)
10908 CGUIListItemPtr itemPtr
;
10911 itemPtr
= GUIINFO::GetCurrentListItem(contextWindow
, info
.GetData1(), info
.GetData2(), info
.GetInfoFlag());
10912 item
= itemPtr
.get();
10916 if (info
.m_info
== LISTITEM_PROPERTY
)
10918 if (item
->HasProperty(info
.GetData3()))
10920 value
= item
->GetProperty(info
.GetData3()).asInteger();
10926 return GetItemInt(value
, item
, contextWindow
, info
.m_info
);
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());
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
);
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
);
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
);
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
11038 INFOBOOLTYPE
swapList(&InfoBoolComparator
);
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__
);
11086 int CGUIInfoManager::ResolveMultiInfo(int info
) const
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
;
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
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
11127 return std::string();
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
);
11165 case LISTITEM_DATE
:
11166 if (item
->m_dateTime
.IsValid())
11167 return item
->m_dateTime
.GetAsLocalizedDate();
11169 case LISTITEM_DATETIME
:
11170 if (item
->m_dateTime
.IsValid())
11171 return item
->m_dateTime
.GetAsLocalizedDateTime();
11173 case LISTITEM_SIZE
:
11174 if (!item
->m_bIsFolder
|| item
->m_dwSize
)
11175 return StringUtils::SizeToString(item
->m_dwSize
);
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");
11187 *fallback
= item
->GetArt("icon");
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
:
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
);
11211 case LISTITEM_FILENAME_AND_PATH
:
11213 std::string path
= item
->GetPath();
11214 path
= CURL(path
).GetWithoutUserDetails();
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
);
11225 case LISTITEM_STARTTIME
:
11227 if (item
->m_dateTime
.IsValid())
11228 return item
->m_dateTime
.GetAsLocalizedTime("", false);
11231 case LISTITEM_STARTDATE
:
11233 if (item
->m_dateTime
.IsValid())
11234 return item
->m_dateTime
.GetAsLocalizedDate(true);
11237 case LISTITEM_CURRENTITEM
:
11238 return std::to_string(item
->GetCurrentItem());
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
11272 bool value
= false;
11273 if (!m_infoProviders
.GetBool(value
, item
, contextWindow
, CGUIInfo(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();
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();
11323 const CVideoInfoTag
* CGUIInfoManager::GetCurrentMovieTag() const
11325 if (m_currentFile
->HasVideoInfoTag())
11326 return m_currentFile
->GetVideoInfoTag();
11331 int CGUIInfoManager::RegisterSkinVariableString(const CSkinVariableString
* info
)
11336 std::unique_lock
<CCriticalSection
> lock(m_critInfo
);
11337 m_skinVariableStrings
.emplace_back(*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
;
11353 std::string
CGUIInfoManager::GetSkinVariableString(int info
,
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
);
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
)
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
:
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
));
11395 case TMSG_GUI_INFOBOOL
:
11399 auto infoLabels
= static_cast<std::vector
<bool>*>(pMsg
->lpVoid
);
11400 for (auto& param
: pMsg
->params
)
11401 infoLabels
->push_back(EvaluateBool(param
, DEFAULT_CONTEXT
));
11406 case TMSG_UPDATE_CURRENT_ITEM
:
11408 CFileItem
* item
= static_cast<CFileItem
*>(pMsg
->lpVoid
);
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());
11417 SetCurrentItem(*item
);
11428 void CGUIInfoManager::RegisterInfoProvider(IGUIInfoProvider
*provider
)
11430 if (!CServiceBroker::GetWinSystem())
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())
11443 std::unique_lock
<CCriticalSection
> lock(CServiceBroker::GetWinSystem()->GetGfxContext());
11445 m_infoProviders
.UnregisterProvider(provider
);