diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 18:07:22 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 18:07:22 +0000 |
commit | c04dcc2e7d834218ef2d4194331e383402495ae1 (patch) | |
tree | 7333e38d10d75386e60f336b80c2443c1166031d /xbmc/interfaces/legacy/ListItem.h | |
parent | Initial commit. (diff) | |
download | kodi-c04dcc2e7d834218ef2d4194331e383402495ae1.tar.xz kodi-c04dcc2e7d834218ef2d4194331e383402495ae1.zip |
Adding upstream version 2:20.4+dfsg.upstream/2%20.4+dfsg
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'xbmc/interfaces/legacy/ListItem.h')
-rw-r--r-- | xbmc/interfaces/legacy/ListItem.h | 1291 |
1 files changed, 1291 insertions, 0 deletions
diff --git a/xbmc/interfaces/legacy/ListItem.h b/xbmc/interfaces/legacy/ListItem.h new file mode 100644 index 0000000..82513e0 --- /dev/null +++ b/xbmc/interfaces/legacy/ListItem.h @@ -0,0 +1,1291 @@ +/* + * Copyright (C) 2005-2018 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#pragma once + +#include "AddonClass.h" +#include "AddonString.h" +#include "Alternative.h" +#include "Dictionary.h" +#include "FileItem.h" +#include "InfoTagGame.h" +#include "InfoTagMusic.h" +#include "InfoTagPicture.h" +#include "InfoTagVideo.h" +#include "ListItem.h" +#include "Tuple.h" +#include "commons/Exception.h" + +#include <map> +#include <utility> +#include <vector> + + +namespace XBMCAddon +{ + namespace xbmcgui + { + XBMCCOMMONS_STANDARD_EXCEPTION(ListItemException); + + // This is a type that represents either a String or a String Tuple + typedef Alternative<StringOrInt,Tuple<String, StringOrInt> > InfoLabelStringOrTuple; + + // This type is either a String or a list of InfoLabelStringOrTuple types + typedef Alternative<StringOrInt, std::vector<InfoLabelStringOrTuple> > InfoLabelValue; + + // The type contains the dictionary values for the ListItem::setInfo call. + // The values in the dictionary can be either a String, or a list of items. + // If it's a list of items then the items can be either a String or a Tuple. + typedef Dictionary<InfoLabelValue> InfoLabelDict; + + // + /// \defgroup python_xbmcgui_listitem ListItem + /// \ingroup python_xbmcgui + /// @{ + /// @brief **Selectable window list item.** + /// + class ListItem : public AddonClass + { + public: +#if !defined SWIG && !defined DOXYGEN_SHOULD_SKIP_THIS + CFileItemPtr item; + bool m_offscreen; +#endif + +#ifdef DOXYGEN_SHOULD_USE_THIS + /// + /// \ingroup python_xbmcgui_listitem + /// @brief Selectable window list item. + /// + /// The list item control is used for creating item lists in Kodi + /// + /// \python_class{ ListItem([label, label2, path, offscreen]) } + /// + /// @param label [opt] string (default `""`) - the label to display on the item + /// @param label2 [opt] string (default `""`) - the label2 of the item + /// @param path [opt] string (default `""`) - the path for the item + /// @param offscreen [opt] bool (default `False`) - if GUI based locks should be + /// avoided. Most of the times listitems are created + /// offscreen and added later to a container + /// for display (e.g. plugins) or they are not + /// even displayed (e.g. python scrapers). + /// In such cases, there is no need to lock the + /// GUI when creating the items (increasing your addon + /// performance). + /// Note however, that if you are creating listitems + /// and managing the container itself (e.g using + /// WindowXML or WindowXMLDialog classes) subsquent + /// modifications to the item will require locking. + /// Thus, in such cases, use the default value (`False`). + /// + /// + ///----------------------------------------------------------------------- + /// @python_v16 **iconImage** and **thumbnailImage** are deprecated. Use **setArt()**. + /// @python_v18 Added **offscreen** argument. + /// @python_v19 Removed **iconImage** and **thumbnailImage**. Use **setArt()**. + /// + /// **Example:** + /// ~~~~~~~~~~~~~{.py} + /// ... + /// listitem = xbmcgui.ListItem('Casino Royale') + /// ... + /// ~~~~~~~~~~~~~ + /// + ListItem([label, label2, path, offscreen]); +#else + ListItem(const String& label = emptyString, + const String& label2 = emptyString, + const String& path = emptyString, + bool offscreen = false); +#endif + +#if !defined SWIG && !defined DOXYGEN_SHOULD_SKIP_THIS + inline explicit ListItem(CFileItemPtr pitem) : item(std::move(pitem)), m_offscreen(false) {} + + static inline AddonClass::Ref<ListItem> fromString(const String& str) + { + AddonClass::Ref<ListItem> ret = AddonClass::Ref<ListItem>(new ListItem()); + ret->item.reset(new CFileItem(str)); + return ret; + } +#endif + +#ifndef DOXYGEN_SHOULD_SKIP_THIS + ~ListItem() override; +#endif + +#ifdef DOXYGEN_SHOULD_USE_THIS + /// + /// \ingroup python_xbmcgui_listitem + /// @brief \python_func{ getLabel() } + /// Returns the listitem label. + /// + /// @return Label of item + /// + /// + ///----------------------------------------------------------------------- + /// + /// **Example:** + /// ~~~~~~~~~~~~~{.py} + /// ... + /// # getLabel() + /// label = listitem.getLabel() + /// ... + /// ~~~~~~~~~~~~~ + /// + getLabel(); +#else + String getLabel(); +#endif + +#ifdef DOXYGEN_SHOULD_USE_THIS + /// + /// \ingroup python_xbmcgui_listitem + /// @brief \python_func{ getLabel2() } + /// Returns the second listitem label. + /// + /// @return Second label of item + /// + /// + ///----------------------------------------------------------------------- + /// + /// **Example:** + /// ~~~~~~~~~~~~~{.py} + /// ... + /// # getLabel2() + /// label = listitem.getLabel2() + /// ... + /// ~~~~~~~~~~~~~ + /// + getLabel2(); +#else + String getLabel2(); +#endif + +#ifdef DOXYGEN_SHOULD_USE_THIS + /// + /// \ingroup python_xbmcgui_listitem + /// @brief \python_func{ setLabel(label) } + /// Sets the listitem's label. + /// + /// @param label string or unicode - text string. + /// + /// + ///----------------------------------------------------------------------- + /// + /// **Example:** + /// ~~~~~~~~~~~~~{.py} + /// ... + /// # setLabel(label) + /// listitem.setLabel('Casino Royale') + /// ... + /// ~~~~~~~~~~~~~ + /// + setLabel(...); +#else + void setLabel(const String& label); +#endif + +#ifdef DOXYGEN_SHOULD_USE_THIS + /// + /// \ingroup python_xbmcgui_listitem + /// @brief \python_func{ setLabel2(label) } + /// Sets the listitem's label2. + /// + /// @param label string or unicode - text string. + /// + /// + ///----------------------------------------------------------------------- + /// + /// **Example:** + /// ~~~~~~~~~~~~~{.py} + /// ... + /// # setLabel2(label) + /// listitem.setLabel2('Casino Royale') + /// ... + /// ~~~~~~~~~~~~~ + /// + setLabel2(...); +#else + void setLabel2(const String& label); +#endif + +#ifdef DOXYGEN_SHOULD_USE_THIS + /// + /// \ingroup python_xbmcgui_listitem + /// @brief \python_func{ getDateTime() } + /// Returns the list item's datetime in W3C format (YYYY-MM-DDThh:mm:ssTZD). + /// + /// @return string or unicode - datetime string (W3C). + /// + /// + ///----------------------------------------------------------------------- + /// @python_v20 New function added. + /// + /// **Example:** + /// ~~~~~~~~~~~~~{.py} + /// ... + /// # getDateTime() + /// strDateTime = listitem.getDateTime() + /// ... + /// ~~~~~~~~~~~~~ + /// + getDateTime(); +#else + String getDateTime(); +#endif + +#ifdef DOXYGEN_SHOULD_USE_THIS + /// + /// \ingroup python_xbmcgui_listitem + /// @brief \python_func{ setDateTime(dateTime) } + /// Sets the list item's datetime in W3C format. + /// The following formats are supported: + /// - YYYY + /// - YYYY-MM-DD + /// - YYYY-MM-DDThh:mm[TZD] + /// - YYYY-MM-DDThh:mm:ss[TZD] + /// where the timezone (TZD) is always optional and can be in one of the + /// following formats: + /// - Z (for UTC) + /// - +hh:mm + /// - -hh:mm + /// + /// @param label string or unicode - datetime string (W3C). + /// + /// + ///----------------------------------------------------------------------- + /// @python_v20 New function added. + /// + /// **Example:** + /// ~~~~~~~~~~~~~{.py} + /// ... + /// # setDate(dateTime) + /// listitem.setDateTime('2021-03-09T12:30:00Z') + /// ... + /// ~~~~~~~~~~~~~ + /// + setDateTime(...); +#else + void setDateTime(const String& dateTime); +#endif + +#ifdef DOXYGEN_SHOULD_USE_THIS + /// + /// \ingroup python_xbmcgui_listitem + /// @brief \python_func{ setArt(values) } + /// Sets the listitem's art + /// + /// @param values dictionary - pairs of `{ label: value }`. + /// - Some default art values (any string possible): + /// | Label | Type | + /// |:-------------:|:--------------------------------------------------| + /// | thumb | string - image filename + /// | poster | string - image filename + /// | banner | string - image filename + /// | fanart | string - image filename + /// | clearart | string - image filename + /// | clearlogo | string - image filename + /// | landscape | string - image filename + /// | icon | string - image filename + /// + /// + /// + ///----------------------------------------------------------------------- + /// @python_v13 New function added. + /// @python_v16 Added new label **icon**. + /// + /// **Example:** + /// ~~~~~~~~~~~~~{.py} + /// ... + /// # setArt(values) + /// listitem.setArt({ 'poster': 'poster.png', 'banner' : 'banner.png' }) + /// ... + /// ~~~~~~~~~~~~~ + /// + setArt(...); +#else + void setArt(const Properties& dictionary); +#endif + +#ifdef DOXYGEN_SHOULD_USE_THIS + /// + /// \ingroup python_xbmcgui_listitem + /// @brief \python_func{ setIsFolder(isFolder) } + /// Sets if this listitem is a folder. + /// + /// @param isFolder bool - True=folder / False=not a folder (default). + /// + /// + ///----------------------------------------------------------------------- + /// + /// @python_v18 New function added. + /// + /// **Example:** + /// ~~~~~~~~~~~~~{.py} + /// ... + /// # setIsFolder(isFolder) + /// listitem.setIsFolder(True) + /// ... + /// ~~~~~~~~~~~~~ + /// + setIsFolder(...); +#else + void setIsFolder(bool isFolder); +#endif + +#ifdef DOXYGEN_SHOULD_USE_THIS + /// + /// \ingroup python_xbmcgui_listitem + /// @brief \python_func{ setUniqueIDs(values, defaultrating) } + /// Sets the listitem's uniqueID + /// + /// @param values dictionary - pairs of `{ label: value }`. + /// @param defaultrating [opt] string - the name of default rating. + /// + /// - Some example values (any string possible): + /// | Label | Type | + /// |:-------------:|:--------------------------------------------------| + /// | imdb | string - uniqueid name + /// | tvdb | string - uniqueid name + /// | tmdb | string - uniqueid name + /// | anidb | string - uniqueid name + /// + /// + /// + ///----------------------------------------------------------------------- + /// @python_v20 Deprecated. Use **InfoTagVideo.setUniqueIDs()** instead. + /// + /// **Example:** + /// ~~~~~~~~~~~~~{.py} + /// ... + /// # setUniqueIDs(values, defaultrating) + /// listitem.setUniqueIDs({ 'imdb': 'tt8938399', 'tmdb' : '9837493' }, "imdb") + /// ... + /// ~~~~~~~~~~~~~ + /// + setUniqueIDs(...); +#else + void setUniqueIDs(const Properties& dictionary, const String& defaultrating = ""); +#endif + +#ifdef DOXYGEN_SHOULD_USE_THIS + /// + /// \ingroup python_xbmcgui_listitem + /// @brief \python_func{ setRating(type, rating, votes = 0, defaultt = False) } + /// Sets a listitem's rating. It needs at least type and rating param + /// + /// @param type string - the type of the rating. Any string. + /// @param rating float - the value of the rating. + /// @param votes int - the number of votes. Default 0. + /// @param defaultt bool - is the default rating?. Default False. + /// - Some example type (any string possible): + /// | Label | Type | + /// |:-------------:|:--------------------------------------------------| + /// | imdb | string - rating type + /// | tvdb | string - rating type + /// | tmdb | string - rating type + /// | anidb | string - rating type + /// + /// + /// + ///----------------------------------------------------------------------- + /// @python_v20 Deprecated. Use **InfoTagVideo.setRating()** instead. + /// + /// **Example:** + /// ~~~~~~~~~~~~~{.py} + /// ... + /// # setRating(type, rating, votes, defaultt)) + /// listitem.setRating("imdb", 4.6, 8940, True) + /// ... + /// ~~~~~~~~~~~~~ + /// + setRating(...); +#else + void setRating(const std::string& type, float rating, int votes = 0, bool defaultt = false); +#endif + +#ifdef DOXYGEN_SHOULD_USE_THIS + /// + /// \ingroup python_xbmcgui_listitem + /// @brief \python_func{ addSeason(number, name = "") } + /// Add a season with name to a listitem. It needs at least the season number + /// + /// @param number int - the number of the season. + /// @param name string - the name of the season. Default "". + /// + /// + ///----------------------------------------------------------------------- + /// + /// @python_v18 New function added. + /// @python_v20 Deprecated. Use **InfoTagVideo.addSeason()** or **InfoTagVideo.addSeasons()** instead. + /// + /// **Example:** + /// ~~~~~~~~~~~~~{.py} + /// ... + /// # addSeason(number, name)) + /// listitem.addSeason(1, "Murder House") + /// ... + /// ~~~~~~~~~~~~~ + /// + addSeason(...); +#else + void addSeason(int number, std::string name = ""); +#endif + +#ifdef DOXYGEN_SHOULD_USE_THIS + /// + /// \ingroup python_xbmcgui_listitem + /// @brief \python_func{ getArt(key) } + /// Returns a listitem art path as a string, similar to an infolabel.\n + /// + /// @param key string - art name. + /// - Some default art values (any string possible): + /// | Label | Type | + /// |---------------|--------------------------------------------------| + /// | thumb | string - image path + /// | poster | string - image path + /// | banner | string - image path + /// | fanart | string - image path + /// | clearart | string - image path + /// | clearlogo | string - image path + /// | landscape | string - image path + /// | icon | string - image path + /// + /// + ///----------------------------------------------------------------------- + /// @python_v17 New function added. + /// + /// **Example:** + /// ~~~~~~~~~~~~~{.py} + /// ... + /// poster = listitem.getArt('poster') + /// ... + /// ~~~~~~~~~~~~~ + /// + getArt(key); +#else + String getArt(const char* key); +#endif + +#ifdef DOXYGEN_SHOULD_USE_THIS + /// + /// \ingroup python_xbmcgui_listitem + /// @brief \python_func{ isFolder() } + /// Returns whether the item is a folder or not. + /// + ///----------------------------------------------------------------------- + /// @python_v20 New function added. + /// + /// **Example:** + /// ~~~~~~~~~~~~~{.py} + /// ... + /// isFolder = listitem.isFolder() + /// ... + /// ~~~~~~~~~~~~~ + /// + isFolder(); +#else + bool isFolder() const; +#endif + +#ifdef DOXYGEN_SHOULD_USE_THIS + /// + /// \ingroup python_xbmcgui_listitem + /// @brief \python_func{ getUniqueID(key) } + /// Returns a listitem uniqueID as a string, similar to an infolabel.\n + /// + /// @param key string - uniqueID name. + /// - Some default uniqueID values (any string possible): + /// | Label | Type | + /// |---------------|--------------------------------------------------| + /// | imdb | string - uniqueid name + /// | tvdb | string - uniqueid name + /// | tmdb | string - uniqueid name + /// | anidb | string - uniqueid name + /// + /// + /// + ///----------------------------------------------------------------------- + /// @python_v20 Deprecated. Use **InfoTagVideo.getUniqueID()** instead. + /// + /// **Example:** + /// ~~~~~~~~~~~~~{.py} + /// ... + /// uniqueID = listitem.getUniqueID('imdb') + /// ... + /// ~~~~~~~~~~~~~ + /// + getUniqueID(key); +#else + String getUniqueID(const char* key); +#endif + +#ifdef DOXYGEN_SHOULD_USE_THIS + /// + /// \ingroup python_xbmcgui_listitem + /// @brief \python_func{ getRating(key) } + /// Returns a listitem rating as a float.\n + /// + /// @param key string - rating type. + /// - Some default key values (any string possible): + /// | Label | Type | + /// |---------------|--------------------------------------------------| + /// | imdb | string - type name + /// | tvdb | string - type name + /// | tmdb | string - type name + /// | anidb | string - type name + /// + /// + /// + ///----------------------------------------------------------------------- + /// @python_v20 Deprecated. Use **InfoTagVideo.getRating()** instead. + /// + /// **Example:** + /// ~~~~~~~~~~~~~{.py} + /// ... + /// rating = listitem.getRating('imdb') + /// ... + /// ~~~~~~~~~~~~~ + /// + getRating(key); +#else + float getRating(const char* key); +#endif + +#ifdef DOXYGEN_SHOULD_USE_THIS + /// + /// \ingroup python_xbmcgui_listitem + /// @brief \python_func{ getVotes(key) } + /// Returns a listitem votes as a integer.\n + /// + /// @param key string - rating type. + /// - Some default key values (any string possible): + /// | Label | Type | + /// |---------------|--------------------------------------------------| + /// | imdb | string - type name + /// | tvdb | string - type name + /// | tmdb | string - type name + /// | anidb | string - type name + /// + /// + /// + ///----------------------------------------------------------------------- + /// @python_v20 Deprecated. Use **InfoTagVideo.getVotesAsInt()** instead. + /// + /// **Example:** + /// ~~~~~~~~~~~~~{.py} + /// ... + /// votes = listitem.getVotes('imdb') + /// ... + /// ~~~~~~~~~~~~~ + /// + getVotes(key); +#else + int getVotes(const char* key); +#endif + +#ifdef DOXYGEN_SHOULD_USE_THIS + /// + /// \ingroup python_xbmcgui_listitem + /// @brief \python_func{ select(selected) } + /// Sets the listitem's selected status. + /// + /// @param selected bool - True=selected/False=not selected + /// + /// + /// + ///----------------------------------------------------------------------- + /// + /// **Example:** + /// ~~~~~~~~~~~~~{.py} + /// ... + /// # select(selected) + /// listitem.select(True) + /// ... + /// ~~~~~~~~~~~~~ + /// + select(...); +#else + void select(bool selected); +#endif + +#ifdef DOXYGEN_SHOULD_USE_THIS + /// + /// \ingroup python_xbmcgui_listitem + /// @brief \python_func{ isSelected() } + /// Returns the listitem's selected status. + /// + /// + /// @return bool - true if selected, otherwise false + /// + /// + ///----------------------------------------------------------------------- + /// + /// **Example:** + /// ~~~~~~~~~~~~~{.py} + /// ... + /// # isSelected() + /// selected = listitem.isSelected() + /// ... + /// ~~~~~~~~~~~~~ + /// + isSelected(); +#else + bool isSelected(); +#endif + +#ifdef DOXYGEN_SHOULD_USE_THIS + /// + /// \ingroup python_xbmcgui_listitem + /// @brief \python_func{ setInfo(type, infoLabels) } + /// Sets the listitem's infoLabels. + /// + /// @param type string - type of info labels + /// @param infoLabels dictionary - pairs of `{ label: value }` + /// + /// __Available types__ + /// | Command name | Description | + /// |:------------:|:----------------------| + /// | video | Video information + /// | music | Music information + /// | pictures | Pictures informanion + /// | game | Game information + /// + /// @note To set pictures exif info, prepend `exif:` to the label. Exif values must be passed + /// as strings, separate value pairs with a comma. <b>(eg. <c>{'exif:resolution': '720,480'}</c></b> + /// See \ref kodi_pictures_infotag for valid strings.\n + /// \n + /// You can use the above as keywords for arguments and skip certain optional arguments. + /// Once you use a keyword, all following arguments require the keyword. + /// + /// __General Values__ (that apply to all types): + /// | Info label | Description | + /// |--------------:|:---------------------------------------------------| + /// | count | integer (12) - can be used to store an id for later, or for sorting purposes + /// | size | long (1024) - size in bytes + /// | date | string (%d.%m.%Y / 01.01.2009) - file date + /// + /// __Video Values__: + /// | Info label | Description | + /// |--------------:|:---------------------------------------------------| + /// | genre | string (Comedy) or list of strings (["Comedy", "Animation", "Drama"]) + /// | country | string (Germany) or list of strings (["Germany", "Italy", "France"]) + /// | year | integer (2009) + /// | episode | integer (4) + /// | season | integer (1) + /// | sortepisode | integer (4) + /// | sortseason | integer (1) + /// | episodeguide | string (Episode guide) + /// | showlink | string (Battlestar Galactica) or list of strings (["Battlestar Galactica", "Caprica"]) + /// | top250 | integer (192) + /// | setid | integer (14) + /// | tracknumber | integer (3) + /// | rating | float (6.4) - range is 0..10 + /// | userrating | integer (9) - range is 1..10 (0 to reset) + /// | watched | deprecated - use playcount instead + /// | playcount | integer (2) - number of times this item has been played + /// | overlay | integer (2) - range is `0..7`. See \ref kodi_guilib_listitem_iconoverlay "Overlay icon types" for values + /// | cast | list (["Michal C. Hall","Jennifer Carpenter"]) - if provided a list of tuples cast will be interpreted as castandrole + /// | castandrole | list of tuples ([("Michael C. Hall","Dexter"),("Jennifer Carpenter","Debra")]) + /// | director | string (Dagur Kari) or list of strings (["Dagur Kari", "Quentin Tarantino", "Chrstopher Nolan"]) + /// | mpaa | string (PG-13) + /// | plot | string (Long Description) + /// | plotoutline | string (Short Description) + /// | title | string (Big Fan) + /// | originaltitle | string (Big Fan) + /// | sorttitle | string (Big Fan) + /// | duration | integer (245) - duration in seconds + /// | studio | string (Warner Bros.) or list of strings (["Warner Bros.", "Disney", "Paramount"]) + /// | tagline | string (An awesome movie) - short description of movie + /// | writer | string (Robert D. Siegel) or list of strings (["Robert D. Siegel", "Jonathan Nolan", "J.K. Rowling"]) + /// | tvshowtitle | string (Heroes) + /// | premiered | string (2005-03-04) + /// | status | string (Continuing) - status of a TVshow + /// | set | string (Batman Collection) - name of the collection + /// | setoverview | string (All Batman movies) - overview of the collection + /// | tag | string (cult) or list of strings (["cult", "documentary", "best movies"]) - movie tag + /// | imdbnumber | string (tt0110293) - IMDb code + /// | code | string (101) - Production code + /// | aired | string (2008-12-07) + /// | credits | string (Andy Kaufman) or list of strings (["Dagur Kari", "Quentin Tarantino", "Chrstopher Nolan"]) - writing credits + /// | lastplayed | string (%Y-%m-%d %h:%m:%s = 2009-04-05 23:16:04) + /// | album | string (The Joshua Tree) + /// | artist | list (['U2']) + /// | votes | string (12345 votes) + /// | path | string (/home/user/movie.avi) + /// | trailer | string (/home/user/trailer.avi) + /// | dateadded | string (%Y-%m-%d %h:%m:%s = 2009-04-05 23:16:04) + /// | mediatype | string - "video", "movie", "tvshow", "season", "episode" or "musicvideo" + /// | dbid | integer (23) - Only add this for items which are part of the local db. You also need to set the correct 'mediatype'! + /// + /// __Music Values__: + /// | Info label | Description | + /// |-------------------------:|:---------------------------------------------------| + /// | tracknumber | integer (8) + /// | discnumber | integer (2) + /// | duration | integer (245) - duration in seconds + /// | year | integer (1998) + /// | genre | string (Rock) + /// | album | string (Pulse) + /// | artist | string (Muse) + /// | title | string (American Pie) + /// | rating | float - range is between 0 and 10 + /// | userrating | integer - range is 1..10 + /// | lyrics | string (On a dark desert highway...) + /// | playcount | integer (2) - number of times this item has been played + /// | lastplayed | string (%Y-%m-%d %h:%m:%s = 2009-04-05 23:16:04) + /// | mediatype | string - "music", "song", "album", "artist" + /// | dbid | integer (23) - Only add this for items which are part of the local db. You also need to set the correct 'mediatype'! + /// | listeners | integer (25614) + /// | musicbrainztrackid | string (cd1de9af-0b71-4503-9f96-9f5efe27923c) + /// | musicbrainzartistid | string (d87e52c5-bb8d-4da8-b941-9f4928627dc8) + /// | musicbrainzalbumid | string (24944755-2f68-3778-974e-f572a9e30108) + /// | musicbrainzalbumartistid | string (d87e52c5-bb8d-4da8-b941-9f4928627dc8) + /// | comment | string (This is a great song) + /// + /// __Picture Values__: + /// | Info label | Description | + /// |--------------:|:---------------------------------------------------| + /// | title | string (In the last summer-1) + /// | picturepath | string (`/home/username/pictures/img001.jpg`) + /// | exif* | string (See \ref kodi_pictures_infotag for valid strings) + /// + /// __Game Values__: + /// | Info label | Description | + /// |--------------:|:---------------------------------------------------| + /// | title | string (Super Mario Bros.) + /// | platform | string (Atari 2600) + /// | genres | list (["Action","Strategy"]) + /// | publisher | string (Nintendo) + /// | developer | string (Square) + /// | overview | string (Long Description) + /// | year | integer (1980) + /// | gameclient | string (game.libretro.fceumm) + /// + /// + ///----------------------------------------------------------------------- + /// @python_v14 Added new label **discnumber**. + /// @python_v15 **duration** has to be set in seconds. + /// @python_v16 Added new label **mediatype**. + /// @python_v17 + /// Added labels **setid**, **set**, **imdbnumber**, **code**, **dbid** (video), **path** and **userrating**. + /// Expanded the possible infoLabels for the option **mediatype**. + /// @python_v18 Added new **game** type and associated infolabels. + /// Added labels **dbid** (music), **setoverview**, **tag**, **sortepisode**, **sortseason**, **episodeguide**, **showlink**. + /// Extended labels **genre**, **country**, **director**, **studio**, **writer**, **tag**, **credits** to also use a list of strings. + /// @python_v20 Partially deprecated. Use explicit setters in **InfoTagVideo**, **InfoTagMusic**, **InfoTagPicture** or **InfoTagGame** instead. + /// + /// **Example:** + /// ~~~~~~~~~~~~~{.py} + /// ... + /// listitem.setInfo('video', { 'genre': 'Comedy' }) + /// ... + /// ~~~~~~~~~~~~~ + /// + setInfo(...); +#else + void setInfo(const char* type, const InfoLabelDict& infoLabels); +#endif + +#ifdef DOXYGEN_SHOULD_USE_THIS + /// + /// \ingroup python_xbmcgui_listitem + /// @brief \python_func{ setCast(actors) } + /// Set cast including thumbnails + /// + /// @param actors list of dictionaries (see below for relevant keys) + /// + /// - Keys: + /// | Label | Description | + /// |--------------:|:------------------------------------------------| + /// | name | string (Michael C. Hall) + /// | role | string (Dexter) + /// | thumbnail | string (http://www.someurl.com/someimage.png) + /// | order | integer (1) + /// + /// + ///----------------------------------------------------------------------- + /// @python_v17 New function added. + /// @python_v20 Deprecated. Use **InfoTagVideo.setCast()** instead. + /// + /// **Example:** + /// ~~~~~~~~~~~~~{.py} + /// ... + /// actors = [{"name": "Actor 1", "role": "role 1"}, {"name": "Actor 2", "role": "role 2"}] + /// listitem.setCast(actors) + /// ... + /// ~~~~~~~~~~~~~ + /// + setCast(...); +#else + void setCast(const std::vector<Properties>& actors); +#endif + +#ifdef DOXYGEN_SHOULD_USE_THIS + /// + /// \ingroup python_xbmcgui_listitem + /// @brief \python_func{ setAvailableFanart(images) } + /// Set available images (needed for video scrapers) + /// + /// @param images list of dictionaries (see below for relevant keys) + /// + /// - Keys: + /// | Label | Description | + /// |--------------:|:------------------------------------------------| + /// | image | string (http://www.someurl.com/someimage.png) + /// | preview | [opt] string (http://www.someurl.com/somepreviewimage.png) + /// | colors | [opt] string (either comma separated Kodi hex values ("FFFFFFFF,DDDDDDDD") or TVDB RGB Int Triplets ("|68,69,59|69,70,58|78,78,68|")) + /// + /// + ///----------------------------------------------------------------------- + /// @python_v18 New function added. + /// + /// **Example:** + /// ~~~~~~~~~~~~~{.py} + /// ... + /// fanart = [{"image": path_to_image_1, "preview": path_to_preview_1}, {"image": path_to_image_2, "preview": path_to_preview_2}] + /// listitem.setAvailableFanart(fanart) + /// ... + /// ~~~~~~~~~~~~~ + /// + setAvailableFanart(...); +#else + void setAvailableFanart(const std::vector<Properties>& images); +#endif + +#ifdef DOXYGEN_SHOULD_USE_THIS + /// + /// \ingroup python_xbmcgui_listitem + /// @brief \python_func{ addAvailableArtwork(images) } + /// Add an image to available artworks (needed for video scrapers) + /// + /// @param url string (image path url) + /// @param art_type string (image type) + /// @param preview [opt] string (image preview path url) + /// @param referrer [opt] string (referrer url) + /// @param cache [opt] string (filename in cache) + /// @param post [opt] bool (use post to retrieve the image, default false) + /// @param isgz [opt] bool (use gzip to retrieve the image, default false) + /// @param season [opt] integer (number of season in case of season thumb) + /// + /// + ///----------------------------------------------------------------------- + /// @python_v18 New function added. + /// @python_v19 New param added (preview). + /// @python_v20 Deprecated. Use **InfoTagVideo.addAvailableArtwork()** instead. + /// + /// **Example:** + /// ~~~~~~~~~~~~~{.py} + /// ... + /// listitem.addAvailableArtwork(path_to_image_1, "thumb") + /// ... + /// ~~~~~~~~~~~~~ + /// + addAvailableArtwork(...); +#else + void addAvailableArtwork(const std::string& url, + const std::string& art_type = "", + const std::string& preview = "", + const std::string& referrer = "", + const std::string& cache = "", + bool post = false, + bool isgz = false, + int season = -1); +#endif + +#ifdef DOXYGEN_SHOULD_USE_THIS + /// + /// \ingroup python_xbmcgui_listitem + /// @brief \python_func{ addStreamInfo(type, values) } + /// Add a stream with details. + /// + /// @param type string - type of stream(video/audio/subtitle). + /// @param values dictionary - pairs of { label: value }. + /// + /// - Video Values: + /// | Label | Description | + /// |--------------:|:------------------------------------------------| + /// | codec | string (h264) + /// | aspect | float (1.78) + /// | width | integer (1280) + /// | height | integer (720) + /// | duration | integer (seconds) + /// + /// - Audio Values: + /// | Label | Description | + /// |--------------:|:------------------------------------------------| + /// | codec | string (dts) + /// | language | string (en) + /// | channels | integer (2) + /// + /// - Subtitle Values: + /// | Label | Description | + /// |--------------:|:------------------------------------------------| + /// | language | string (en) + /// + /// + /// + ///----------------------------------------------------------------------- + /// @python_v20 Deprecated. Use **InfoTagVideo.addVideoStream()**, **InfoTagVideo.addAudioStream()** or **InfoTagVideo.addSubtitleStream()** instead. + /// + /// **Example:** + /// ~~~~~~~~~~~~~{.py} + /// ... + /// listitem.addStreamInfo('video', { 'codec': 'h264', 'width' : 1280 }) + /// ... + /// ~~~~~~~~~~~~~ + /// + addStreamInfo(...); +#else + void addStreamInfo(const char* cType, const Properties& dictionary); +#endif + +#ifdef DOXYGEN_SHOULD_USE_THIS + /// + /// \ingroup python_xbmcgui_listitem + /// @brief \python_func{ addContextMenuItems([(label, action),*]) } + /// Adds item(s) to the context menu for media lists. + /// + /// @param items list - [(label, action),*] A list of tuples consisting of label and action pairs. + /// - label string or unicode - item's label. + /// - action string or unicode - any available \link page_List_of_built_in_functions built-in function \endlink . + /// + /// @note You can use the above as keywords for arguments and skip certain optional arguments.\n + /// Once you use a keyword, all following arguments require the keyword. + /// + /// + ///----------------------------------------------------------------------- + /// @python_v17 Completely removed previously available argument **replaceItems**. + /// + /// **Example:** + /// ~~~~~~~~~~~~~{.py} + /// ... + /// listitem.addContextMenuItems([('Theater Showtimes', 'RunScript(script.myaddon,title=Iron Man)')]) + /// ... + /// ~~~~~~~~~~~~~ + /// + addContextMenuItems(...); +#else + void addContextMenuItems(const std::vector<Tuple<String,String> >& items, bool replaceItems = false); +#endif + +#ifdef DOXYGEN_SHOULD_USE_THIS + /// + /// \ingroup python_xbmcgui_listitem + /// @brief \python_func{ setProperty(key, value) } + /// Sets a listitem property, similar to an infolabel. + /// + /// @param key string - property name. + /// @param value string or unicode - value of property. + /// + /// @note Key is NOT case sensitive.\n + /// You can use the above as keywords for arguments and skip certain optional arguments.\n + /// Once you use a keyword, all following arguments require the keyword.\n + /// \n + /// Some of these are treated internally by Kodi, such as the 'StartOffset' property, which is + /// the offset in seconds at which to start playback of an item. Others may be used in the skin + /// to add extra information, such as 'WatchedCount' for tvshow items + /// + /// - **Internal Properties** + /// | Key | Description | + /// |--------------:|:------------------------------------------------| + /// | inputstream | string (inputstream.adaptive) - Set the inputstream add-on that will be used to play the item + /// | IsPlayable | string - "true", "false" - Mark the item as playable, **mandatory for playable items** + /// | MimeType | string (application/x-mpegURL) - Set the MimeType of the item before playback + /// | ResumeTime | float (1962.0) - Set the resume point of the item in seconds + /// | SpecialSort | string - "top", "bottom" - The item will remain at the top or bottom of the current list + /// | StartOffset | float (60.0) - Set the offset in seconds at which to start playback of the item + /// | StartPercent | float (15.0) - Set the percentage at which to start playback of the item + /// | StationName | string ("My Station Name") - Used to enforce/override MusicPlayer.StationName infolabel from addons (e.g. in radio addons) + /// | TotalTime | float (7848.0) - Set the total time of the item in seconds + /// | OverrideInfotag | string - "true", "false" - When true will override all info from previous listitem + /// | ForceResolvePlugin | string - "true", "false" - When true ensures that a plugin will always receive callbacks to resolve paths (useful for playlist cases) + /// | rtsp_transport | string - "udp", "udp_multicast" or "tcp" - Allow to force the rtsp transport mode for rtsp streams + /// + ///----------------------------------------------------------------------- + /// @python_v20 OverrideInfotag property added + /// @python_v20 **ResumeTime** and **TotalTime** deprecated. Use **InfoTagVideo.setResumePoint()** instead. + /// @python_v20 ForceResolvePlugin property added + /// @python_v20 rtsp_transport property added + /// + /// **Example:** + /// ~~~~~~~~~~~~~{.py} + /// ... + /// listitem.setProperty('AspectRatio', '1.85 : 1') + /// listitem.setProperty('StartOffset', '256.4') + /// ... + /// ~~~~~~~~~~~~~ + /// + setProperty(...); +#else + void setProperty(const char * key, const String& value); +#endif + +#ifdef DOXYGEN_SHOULD_USE_THIS + /// + /// \ingroup python_xbmcgui_listitem + /// @brief \python_func{ setProperties(values) } + /// Sets multiple properties for listitem's + /// + /// @param values dictionary - pairs of `{ label: value }`. + /// + /// @python_v18 New function added. + /// + ///----------------------------------------------------------------------- + /// **Example:** + /// ~~~~~~~~~~~~~{.py} + /// ... + /// # setProperties(values) + /// listitem.setProperties({ 'AspectRatio': '1.85', 'StartOffset' : '256.4' }) + /// ... + /// ~~~~~~~~~~~~~ + /// + setProperties(...); +#else + void setProperties(const Properties& dictionary); +#endif + +#ifdef DOXYGEN_SHOULD_USE_THIS + /// + /// \ingroup python_xbmcgui_listitem + /// @brief \python_func{ getProperty(key) } + /// Returns a listitem property as a string, similar to an infolabel. + /// + /// @param key string - property name. + /// + /// @note Key is NOT case sensitive.\n + /// You can use the above as keywords for arguments and skip certain optional arguments.\n + /// Once you use a keyword, all following arguments require the keyword. + /// + /// + ///----------------------------------------------------------------------- + /// @python_v20 **ResumeTime** and **TotalTime** deprecated. Use **InfoTagVideo.getResumeTime()** and **InfoTagVideo.getResumeTimeTotal()** instead. + /// + /// **Example:** + /// ~~~~~~~~~~~~~{.py} + /// ... + /// AspectRatio = listitem.getProperty('AspectRatio') + /// ... + /// ~~~~~~~~~~~~~ + /// + getProperty(...); +#else + String getProperty(const char* key); +#endif + +#ifdef DOXYGEN_SHOULD_USE_THIS + /// + /// \ingroup python_xbmcgui_listitem + /// @brief \python_func{ setPath(path) } + /// Sets the listitem's path. + /// + /// @param path string or unicode - path, activated when item is clicked. + /// + /// @note You can use the above as keywords for arguments. + /// + /// + ///----------------------------------------------------------------------- + /// + /// **Example:** + /// ~~~~~~~~~~~~~{.py} + /// ... + /// listitem.setPath(path='/path/to/some/file.ext') + /// ... + /// ~~~~~~~~~~~~~ + /// + setPath(...); +#else + void setPath(const String& path); +#endif + +#ifdef DOXYGEN_SHOULD_USE_THIS + /// + /// \ingroup python_xbmcgui_listitem + /// @brief \python_func{ setMimeType(mimetype) } + /// Sets the listitem's mimetype if known. + /// + /// @param mimetype string or unicode - mimetype + /// + /// If known prehand, this can (but does not have to) avoid HEAD requests + /// being sent to HTTP servers to figure out file type. + /// + setMimeType(...); +#else + void setMimeType(const String& mimetype); +#endif + +#ifdef DOXYGEN_SHOULD_USE_THIS + /// + /// \ingroup python_xbmcgui_listitem + /// @brief \python_func{ setContentLookup(enable) } + /// Enable or disable content lookup for item. + /// + /// If disabled, HEAD requests to e.g determine mime type will not be sent. + /// + /// @param enable bool to enable content lookup + /// + /// + ///----------------------------------------------------------------------- + /// @python_v16 New function added. + /// + setContentLookup(...); +#else + void setContentLookup(bool enable); +#endif + +#ifdef DOXYGEN_SHOULD_USE_THIS + /// + /// \ingroup python_xbmcgui_listitem + /// @brief \python_func{ setSubtitles(subtitleFiles) } + /// Sets subtitles for this listitem. + /// + /// @param subtitleFiles list with path to subtitle files + /// + /// + ///----------------------------------------------------------------------- + /// + /// **Example:** + /// ~~~~~~~~~~~~~{.py} + /// ... + /// listitem.setSubtitles(['special://temp/example.srt', 'http://example.com/example.srt']) + /// ... + /// ~~~~~~~~~~~~~ + /// + ///----------------------------------------------------------------------- + /// @python_v14 New function added. + /// + setSubtitles(...); +#else + void setSubtitles(const std::vector<String>& subtitleFiles); +#endif + +#ifdef DOXYGEN_SHOULD_USE_THIS + /// + /// \ingroup python_xbmcgui_listitem + /// @brief \python_func{ getPath() } + /// Returns the path of this listitem. + /// + /// @return [string] filename + /// + /// + ///----------------------------------------------------------------------- + /// @python_v17 New function added. + /// + /// + getPath(); +#else + String getPath(); +#endif + +#ifdef DOXYGEN_SHOULD_USE_THIS + /// + /// \ingroup python_xbmcgui_listitem + /// @brief \python_func{ getVideoInfoTag() } + /// Returns the VideoInfoTag for this item. + /// + /// @return video info tag + /// + /// + ///----------------------------------------------------------------------- + /// @python_v15 New function added. + /// + getVideoInfoTag(); +#else + xbmc::InfoTagVideo* getVideoInfoTag(); +#endif + +#ifdef DOXYGEN_SHOULD_USE_THIS + /// + /// \ingroup python_xbmcgui_listitem + /// @brief \python_func{ getMusicInfoTag() } + /// Returns the MusicInfoTag for this item. + /// + /// @return music info tag + /// + /// + ///----------------------------------------------------------------------- + /// @python_v15 New function added. + /// + getMusicInfoTag(); +#else + xbmc::InfoTagMusic* getMusicInfoTag(); +#endif + +#ifdef DOXYGEN_SHOULD_USE_THIS + /// + /// \ingroup python_xbmcgui_listitem + /// @brief \python_func{ getPictureInfoTag() } + /// Returns the InfoTagPicture for this item. + /// + /// @return picture info tag + /// + /// + ///----------------------------------------------------------------------- + /// @python_v20 New function added. + /// + getPictureInfoTag(); +#else + xbmc::InfoTagPicture* getPictureInfoTag(); +#endif + +#ifdef DOXYGEN_SHOULD_USE_THIS + /// + /// \ingroup python_xbmcgui_listitem + /// @brief \python_func{ getGameInfoTag() } + /// Returns the InfoTagGame for this item. + /// + /// @return game info tag + /// + /// + ///----------------------------------------------------------------------- + /// @python_v20 New function added. + /// + getGameInfoTag(); +#else + xbmc::InfoTagGame* getGameInfoTag(); +#endif + +private: + std::vector<std::string> getStringArray(const InfoLabelValue& alt, + const std::string& tag, + std::string value, + const std::string& separator); + std::vector<std::string> getVideoStringArray(const InfoLabelValue& alt, + const std::string& tag, + std::string value = ""); + std::vector<std::string> getMusicStringArray(const InfoLabelValue& alt, + const std::string& tag, + std::string value = ""); + + CVideoInfoTag* GetVideoInfoTag(); + const CVideoInfoTag* GetVideoInfoTag() const; + + MUSIC_INFO::CMusicInfoTag* GetMusicInfoTag(); + const MUSIC_INFO::CMusicInfoTag* GetMusicInfoTag() const; + + void setTitleRaw(std::string title); + void setPathRaw(const std::string& path); + void setCountRaw(int count); + void setSizeRaw(int64_t size); + void setDateTimeRaw(const std::string& dateTime); + void setIsFolderRaw(bool isFolder); + void setStartOffsetRaw(double startOffset); + void setMimeTypeRaw(const std::string& mimetype); + void setSpecialSortRaw(std::string specialSort); + void setContentLookupRaw(bool enable); + void addArtRaw(std::string type, const std::string& url); + void addPropertyRaw(std::string type, const CVariant& value); + void addSubtitlesRaw(const std::vector<std::string>& subtitles); + }; + +#ifndef DOXYGEN_SHOULD_SKIP_THIS + typedef std::vector<ListItem*> ListItemList; +#endif + } +} |