From 7b63c0863d8c2bbe921433364efce07799f9a236 Mon Sep 17 00:00:00 2001 From: Synced Synapse Date: Fri, 9 Apr 2021 16:25:25 +0100 Subject: [PATCH] Fixes media thumbnails in Kodi Matrix --- .../org/xbmc/kore/provider/MediaContract.java | 12 +- .../org/xbmc/kore/provider/MediaDatabase.java | 6 +- .../kore/service/NotificationObserver.java | 2 +- .../xbmc/kore/service/library/SyncMovies.java | 49 +- .../kore/service/library/SyncTVShows.java | 7 +- .../xbmc/kore/service/library/SyncUtils.java | 12 +- .../org/xbmc/kore/ui/BaseMediaActivity.java | 4 +- .../sections/remote/NowPlayingFragment.java | 4 +- .../ui/sections/remote/PlaylistFragment.java | 2 +- .../ui/sections/remote/RemoteFragment.java | 2 +- .../ui/sections/video/MovieInfoFragment.java | 2 +- .../ui/sections/video/MovieListFragment.java | 2 +- .../ui/sections/video/TVShowInfoFragment.java | 2 +- .../ui/sections/video/TVShowListFragment.java | 2 +- .../video/TVShowProgressFragment.java | 2 +- doc/json_responses/Introspect-Matrix.json | 13802 ++++++++++++++++ 16 files changed, 13859 insertions(+), 53 deletions(-) create mode 100644 doc/json_responses/Introspect-Matrix.json diff --git a/app/src/main/java/org/xbmc/kore/provider/MediaContract.java b/app/src/main/java/org/xbmc/kore/provider/MediaContract.java index 54e3939af..28d09eaec 100644 --- a/app/src/main/java/org/xbmc/kore/provider/MediaContract.java +++ b/app/src/main/java/org/xbmc/kore/provider/MediaContract.java @@ -116,7 +116,7 @@ public interface MoviesColumns { String MOVIEID = "movieid"; String FANART = "fanart"; - String THUMBNAIL = "thumbnail"; + String POSTER = "thumbnail"; String PLAYCOUNT = "playcount"; String TITLE = "title"; String FILE = "file"; @@ -179,7 +179,7 @@ public static String getMovieId(Uri uri) { } public final static String[] ALL_COLUMNS = { - _ID, UPDATED, HOST_ID, MOVIEID, FANART, THUMBNAIL, PLAYCOUNT, TITLE, FILE, PLOT, + _ID, UPDATED, HOST_ID, MOVIEID, FANART, POSTER, PLAYCOUNT, TITLE, FILE, PLOT, DIRECTOR, RUNTIME, AUDIO_CHANNELS, AUDIO_CODEC, AUDIO_LANGUAGE, SUBTITLES_LANGUAGES, VIDEO_ASPECT, VIDEO_CODEC, VIDEO_HEIGHT, VIDEO_WIDTH, COUNTRIES, GENRES, IMDBNUMBER, MPAA, RATING, SET, SETID, STUDIOS, TAGLINE, @@ -227,7 +227,7 @@ public interface TVShowsColumns { String TVSHOWID = "tvshowid"; String FANART = "fanart"; - String THUMBNAIL = "thumbnail"; + String POSTER = "thumbnail"; String PLAYCOUNT = "playcount"; String TITLE = "title"; String DATEADDED = "dateadded"; @@ -274,7 +274,7 @@ public static String getTVShowId(Uri uri) { } public final static String[] ALL_COLUMNS = { - _ID, UPDATED, HOST_ID, TVSHOWID, FANART, THUMBNAIL, PLAYCOUNT, TITLE, DATEADDED, + _ID, UPDATED, HOST_ID, TVSHOWID, FANART, POSTER, PLAYCOUNT, TITLE, DATEADDED, FILE, PLOT, EPISODE, IMDBNUMBER, MPAA, PREMIERED, RATING, STUDIO, WATCHEDEPISODES, GENRES }; @@ -322,7 +322,7 @@ public interface SeasonsColumns { String LABEL = "label"; String FANART = "fanart"; - String THUMBNAIL = "thumbnail"; + String POSTER = "thumbnail"; String EPISODE = "episode"; String SHOWTITLE = "showtitle"; String WATCHEDEPISODES = "watchedepisodes"; @@ -359,7 +359,7 @@ public static String getTVShowSeasonId(Uri uri) { } public final static String[] ALL_COLUMNS = { - _ID, UPDATED, HOST_ID, TVSHOWID, SEASON, LABEL, FANART, THUMBNAIL, EPISODE, + _ID, UPDATED, HOST_ID, TVSHOWID, SEASON, LABEL, FANART, POSTER, EPISODE, SHOWTITLE, WATCHEDEPISODES, }; } diff --git a/app/src/main/java/org/xbmc/kore/provider/MediaDatabase.java b/app/src/main/java/org/xbmc/kore/provider/MediaDatabase.java index 260aefd73..920270ccf 100644 --- a/app/src/main/java/org/xbmc/kore/provider/MediaDatabase.java +++ b/app/src/main/java/org/xbmc/kore/provider/MediaDatabase.java @@ -171,7 +171,7 @@ public void onCreate(SQLiteDatabase db) { MediaContract.MoviesColumns.HOST_ID + " INTEGER NOT NULL " + References.HOST_ID + ", " + MediaContract.MoviesColumns.MOVIEID + " INTEGER NOT NULL, " + MediaContract.MoviesColumns.FANART + " TEXT, " + - MediaContract.MoviesColumns.THUMBNAIL + " TEXT, " + + MediaContract.MoviesColumns.POSTER + " TEXT, " + MediaContract.MoviesColumns.PLAYCOUNT + " INTEGER, " + MediaContract.MoviesColumns.TITLE + " TEXT, " + MediaContract.MoviesColumns.FILE + " TEXT, " + @@ -229,7 +229,7 @@ public void onCreate(SQLiteDatabase db) { MediaContract.TVShowsColumns.HOST_ID + " INTEGER NOT NULL " + References.HOST_ID + ", " + MediaContract.TVShowsColumns.TVSHOWID + " INTEGER NOT NULL, " + MediaContract.TVShowsColumns.FANART + " TEXT, " + - MediaContract.TVShowsColumns.THUMBNAIL + " TEXT, " + + MediaContract.TVShowsColumns.POSTER + " TEXT, " + MediaContract.TVShowsColumns.PLAYCOUNT + " INTEGER, " + MediaContract.TVShowsColumns.TITLE + " TEXT, " + MediaContract.TVShowsColumns.DATEADDED + " TEXT, " + @@ -276,7 +276,7 @@ public void onCreate(SQLiteDatabase db) { MediaContract.SeasonsColumns.SEASON + " INTEGER NOT NULL, " + MediaContract.SeasonsColumns.LABEL + " TEXT, " + MediaContract.SeasonsColumns.FANART + " TEXT, " + - MediaContract.SeasonsColumns.THUMBNAIL + " TEXT, " + + MediaContract.SeasonsColumns.POSTER + " TEXT, " + MediaContract.SeasonsColumns.EPISODE + " INTEGER, " + MediaContract.SeasonsColumns.SHOWTITLE + " TEXT, " + MediaContract.SeasonsColumns.WATCHEDEPISODES + " INTEGER, " + diff --git a/app/src/main/java/org/xbmc/kore/service/NotificationObserver.java b/app/src/main/java/org/xbmc/kore/service/NotificationObserver.java index a8bdf7f17..9a0219e3d 100644 --- a/app/src/main/java/org/xbmc/kore/service/NotificationObserver.java +++ b/app/src/main/java/org/xbmc/kore/service/NotificationObserver.java @@ -185,7 +185,7 @@ private void notifyPlaying(PlayerType.GetActivePlayersReturnType getActivePlayer case ListType.ItemsAll.TYPE_MOVIE: title = getItemResult.title; underTitle = getItemResult.tagline; - poster = getItemResult.thumbnail; + poster = getItemResult.art.poster; smallIcon = R.drawable.ic_movie_white_24dp; break; case ListType.ItemsAll.TYPE_EPISODE: diff --git a/app/src/main/java/org/xbmc/kore/service/library/SyncMovies.java b/app/src/main/java/org/xbmc/kore/service/library/SyncMovies.java index 3f8f83f96..9c171f34e 100644 --- a/app/src/main/java/org/xbmc/kore/service/library/SyncMovies.java +++ b/app/src/main/java/org/xbmc/kore/service/library/SyncMovies.java @@ -85,26 +85,27 @@ public void sync(final SyncOrchestrator orchestrator, final HostConnection hostConnection, final Handler callbackHandler, final ContentResolver contentResolver) { - String properties[] = { - VideoType.FieldsMovie.TITLE, VideoType.FieldsMovie.GENRE, - VideoType.FieldsMovie.YEAR, VideoType.FieldsMovie.RATING, - VideoType.FieldsMovie.DIRECTOR, VideoType.FieldsMovie.TRAILER, - VideoType.FieldsMovie.TAGLINE, VideoType.FieldsMovie.PLOT, - // VideoType.FieldsMovie.PLOTOUTLINE, VideoType.FieldsMovie.ORIGINALTITLE, - // VideoType.FieldsMovie.LASTPLAYED, - VideoType.FieldsMovie.PLAYCOUNT, VideoType.FieldsMovie.DATEADDED, - VideoType.FieldsMovie.WRITER, VideoType.FieldsMovie.STUDIO, - VideoType.FieldsMovie.MPAA, VideoType.FieldsMovie.CAST, - VideoType.FieldsMovie.COUNTRY, VideoType.FieldsMovie.IMDBNUMBER, - VideoType.FieldsMovie.RUNTIME, VideoType.FieldsMovie.SET, - // VideoType.FieldsMovie.SHOWLINK, - VideoType.FieldsMovie.STREAMDETAILS, VideoType.FieldsMovie.TOP250, - VideoType.FieldsMovie.VOTES, VideoType.FieldsMovie.FANART, - VideoType.FieldsMovie.THUMBNAIL, VideoType.FieldsMovie.FILE, - // VideoType.FieldsMovie.SORTTITLE, VideoType.FieldsMovie.RESUME, - VideoType.FieldsMovie.SETID, - // VideoType.FieldsMovie.DATEADDED, VideoType.FieldsMovie.TAG, - // VideoType.FieldsMovie.ART + String[] properties = { + VideoType.FieldsMovie.TITLE, VideoType.FieldsMovie.GENRE, + VideoType.FieldsMovie.YEAR, VideoType.FieldsMovie.RATING, + VideoType.FieldsMovie.DIRECTOR, VideoType.FieldsMovie.TRAILER, + VideoType.FieldsMovie.TAGLINE, VideoType.FieldsMovie.PLOT, + // VideoType.FieldsMovie.PLOTOUTLINE, VideoType.FieldsMovie.ORIGINALTITLE, + // VideoType.FieldsMovie.LASTPLAYED, + VideoType.FieldsMovie.PLAYCOUNT, VideoType.FieldsMovie.DATEADDED, + VideoType.FieldsMovie.WRITER, VideoType.FieldsMovie.STUDIO, + VideoType.FieldsMovie.MPAA, VideoType.FieldsMovie.CAST, + VideoType.FieldsMovie.COUNTRY, VideoType.FieldsMovie.IMDBNUMBER, + VideoType.FieldsMovie.RUNTIME, VideoType.FieldsMovie.SET, + // VideoType.FieldsMovie.SHOWLINK, + VideoType.FieldsMovie.STREAMDETAILS, VideoType.FieldsMovie.TOP250, + VideoType.FieldsMovie.VOTES, + // VideoType.FieldsMovie.FANART, VideoType.FieldsMovie.THUMBNAIL, + VideoType.FieldsMovie.FILE, + // VideoType.FieldsMovie.SORTTITLE, VideoType.FieldsMovie.RESUME, + VideoType.FieldsMovie.SETID, + // VideoType.FieldsMovie.DATEADDED, VideoType.FieldsMovie.TAG, + VideoType.FieldsMovie.ART }; if (movieId == -1) { @@ -117,7 +118,7 @@ public void sync(final SyncOrchestrator orchestrator, @Override public void onSuccess(VideoType.DetailsMovie result) { deleteMovies(contentResolver, hostId, movieId); - List movies = new ArrayList(1); + List movies = new ArrayList<>(1); movies.add(result); insertMovies(orchestrator, contentResolver, movies); orchestrator.syncItemFinished(); @@ -142,7 +143,7 @@ private void syncAllMovies(final SyncOrchestrator orchestrator, final HostConnection hostConnection, final Handler callbackHandler, final ContentResolver contentResolver, - final String properties[], + final String[] properties, final int startIdx) { // Call GetMovies with the current limits set ListType.Limits limits = new ListType.Limits(startIdx, startIdx + LIMIT_SYNC_MOVIES); @@ -215,7 +216,7 @@ private void deleteMovies(final ContentResolver contentResolver, private void insertMovies(final SyncOrchestrator orchestrator, final ContentResolver contentResolver, final List movies) { - ContentValues movieValuesBatch[] = new ContentValues[movies.size()]; + ContentValues[] movieValuesBatch = new ContentValues[movies.size()]; int castCount = 0; // Iterate on each movie @@ -228,7 +229,7 @@ private void insertMovies(final SyncOrchestrator orchestrator, // Insert the movies contentResolver.bulkInsert(MediaContract.Movies.CONTENT_URI, movieValuesBatch); - ContentValues movieCastValuesBatch[] = new ContentValues[castCount]; + ContentValues[] movieCastValuesBatch = new ContentValues[castCount]; int count = 0; // Iterate on each movie/cast for (VideoType.DetailsMovie movie : movies) { diff --git a/app/src/main/java/org/xbmc/kore/service/library/SyncTVShows.java b/app/src/main/java/org/xbmc/kore/service/library/SyncTVShows.java index 193e60a6b..605d53951 100644 --- a/app/src/main/java/org/xbmc/kore/service/library/SyncTVShows.java +++ b/app/src/main/java/org/xbmc/kore/service/library/SyncTVShows.java @@ -91,7 +91,8 @@ public Bundle getSyncExtras() { VideoType.FieldsTVShow.EPISODE, VideoType.FieldsTVShow.IMDBNUMBER, VideoType.FieldsTVShow.PREMIERED, //VideoType.FieldsTVShow.VOTES, VideoType.FieldsTVShow.LASTPLAYED, - VideoType.FieldsTVShow.FANART, VideoType.FieldsTVShow.THUMBNAIL, + VideoType.FieldsTVShow.ART, + //VideoType.FieldsTVShow.FANART, VideoType.FieldsTVShow.THUMBNAIL, VideoType.FieldsTVShow.FILE, //VideoType.FieldsTVShow.ORIGINALTITLE, VideoType.FieldsTVShow.SORTTITLE, // VideoType.FieldsTVShow.EPISODEGUIDE, VideoType.FieldsTVShow.SEASON, @@ -209,7 +210,8 @@ private void deleteTVShows(final ContentResolver contentResolver, VideoType.FieldsSeason.SEASON, VideoType.FieldsSeason.SHOWTITLE, //VideoType.FieldsSeason.PLAYCOUNT, VideoType.FieldsSeason.EPISODE, - VideoType.FieldsSeason.FANART, VideoType.FieldsSeason.THUMBNAIL, + //VideoType.FieldsSeason.FANART, VideoType.FieldsSeason.THUMBNAIL, + VideoType.FieldsSeason.ART, VideoType.FieldsSeason.TVSHOWID, VideoType.FieldsSeason.WATCHEDEPISODES, //VideoType.FieldsSeason.ART }; @@ -278,6 +280,7 @@ public void onError(int errorCode, String description) { //VideoType.FieldsEpisode.CAST, VideoType.FieldsEpisode.STREAMDETAILS, //VideoType.FieldsEpisode.LASTPLAYED, + //VideoType.FieldsEpisode.ART, VideoType.FieldsEpisode.FANART, VideoType.FieldsEpisode.THUMBNAIL, VideoType.FieldsEpisode.FILE, //VideoType.FieldsEpisode.RESUME, diff --git a/app/src/main/java/org/xbmc/kore/service/library/SyncUtils.java b/app/src/main/java/org/xbmc/kore/service/library/SyncUtils.java index 906d67df3..953dfc1a7 100644 --- a/app/src/main/java/org/xbmc/kore/service/library/SyncUtils.java +++ b/app/src/main/java/org/xbmc/kore/service/library/SyncUtils.java @@ -54,8 +54,8 @@ public static ContentValues contentValuesFromMovie(int hostId, VideoType.Details ContentValues movieValues = new ContentValues(); movieValues.put(MediaContract.MoviesColumns.HOST_ID, hostId); movieValues.put(MediaContract.MoviesColumns.MOVIEID, movie.movieid); - movieValues.put(MediaContract.MoviesColumns.FANART, movie.fanart); - movieValues.put(MediaContract.MoviesColumns.THUMBNAIL, movie.thumbnail); + movieValues.put(MediaContract.MoviesColumns.FANART, movie.art.fanart); + movieValues.put(MediaContract.MoviesColumns.POSTER, movie.art.poster); movieValues.put(MediaContract.MoviesColumns.PLAYCOUNT, movie.playcount); movieValues.put(MediaContract.MoviesColumns.DATEADDED, movie.dateadded); movieValues.put(MediaContract.MoviesColumns.LASTPLAYED, movie.lastplayed); @@ -152,8 +152,8 @@ public static ContentValues contentValuesFromTVShow(int hostId, VideoType.Detail tvshowValues.put(MediaContract.TVShowsColumns.HOST_ID, hostId); tvshowValues.put(MediaContract.TVShowsColumns.TVSHOWID, tvshow.tvshowid); - tvshowValues.put(MediaContract.TVShowsColumns.FANART, tvshow.fanart); - tvshowValues.put(MediaContract.TVShowsColumns.THUMBNAIL, tvshow.thumbnail); + tvshowValues.put(MediaContract.TVShowsColumns.FANART, tvshow.art.fanart); + tvshowValues.put(MediaContract.TVShowsColumns.POSTER, tvshow.art.poster); tvshowValues.put(MediaContract.TVShowsColumns.PLAYCOUNT, tvshow.playcount); tvshowValues.put(MediaContract.TVShowsColumns.TITLE, tvshow.title); tvshowValues.put(MediaContract.TVShowsColumns.DATEADDED, tvshow.dateadded); @@ -188,8 +188,8 @@ public static ContentValues contentValuesFromSeason(int hostId, VideoType.Detail seasonValues.put(MediaContract.SeasonsColumns.TVSHOWID, season.tvshowid); seasonValues.put(MediaContract.SeasonsColumns.SEASON, season.season); seasonValues.put(MediaContract.SeasonsColumns.LABEL, season.label); - seasonValues.put(MediaContract.SeasonsColumns.FANART, season.fanart); - seasonValues.put(MediaContract.SeasonsColumns.THUMBNAIL, season.thumbnail); + seasonValues.put(MediaContract.SeasonsColumns.FANART, season.art.fanart); + seasonValues.put(MediaContract.SeasonsColumns.POSTER, season.art.poster); seasonValues.put(MediaContract.SeasonsColumns.EPISODE, season.episode); seasonValues.put(MediaContract.SeasonsColumns.SHOWTITLE, season.showtitle); seasonValues.put(MediaContract.SeasonsColumns.WATCHEDEPISODES, season.watchedepisodes); diff --git a/app/src/main/java/org/xbmc/kore/ui/BaseMediaActivity.java b/app/src/main/java/org/xbmc/kore/ui/BaseMediaActivity.java index 61cca9bc1..3ed653d6c 100644 --- a/app/src/main/java/org/xbmc/kore/ui/BaseMediaActivity.java +++ b/app/src/main/java/org/xbmc/kore/ui/BaseMediaActivity.java @@ -480,8 +480,8 @@ private void updateNowPlayingPanel(PlayerType.PropertyValue getPropertiesResult, case ListType.ItemsAll.TYPE_MOVIE: title = getItemResult.title; details = getItemResult.tagline; - poster = TextUtils.isEmpty(getItemResult.thumbnail) ? getItemResult.fanart - : getItemResult.thumbnail; + poster = TextUtils.isEmpty(getItemResult.art.poster) ? getItemResult.art.fanart + : getItemResult.art.poster; break; case ListType.ItemsAll.TYPE_EPISODE: title = getItemResult.title; diff --git a/app/src/main/java/org/xbmc/kore/ui/sections/remote/NowPlayingFragment.java b/app/src/main/java/org/xbmc/kore/ui/sections/remote/NowPlayingFragment.java index dec47a7ec..96d8f7903 100644 --- a/app/src/main/java/org/xbmc/kore/ui/sections/remote/NowPlayingFragment.java +++ b/app/src/main/java/org/xbmc/kore/ui/sections/remote/NowPlayingFragment.java @@ -663,8 +663,8 @@ private void setNowPlayingInfo(PlayerType.GetActivePlayersReturnType getActivePl title = getItemResult.title; underTitle = getItemResult.tagline; - art = getItemResult.fanart; - poster = getItemResult.thumbnail; + art = getItemResult.art.fanart; + poster = getItemResult.art.poster; genreSeason = Utils.listStringConcat(getItemResult.genre, ", "); year = (getItemResult.year > 0)? String.format("%d", getItemResult.year) : null; diff --git a/app/src/main/java/org/xbmc/kore/ui/sections/remote/PlaylistFragment.java b/app/src/main/java/org/xbmc/kore/ui/sections/remote/PlaylistFragment.java index 813833a36..39e3ec04d 100644 --- a/app/src/main/java/org/xbmc/kore/ui/sections/remote/PlaylistFragment.java +++ b/app/src/main/java/org/xbmc/kore/ui/sections/remote/PlaylistFragment.java @@ -682,7 +682,7 @@ public View getView(int position, View convertView, ViewGroup parent) { case ListType.ItemsAll.TYPE_MOVIE: title = TextUtils.isEmpty(item.title)? item.label : item.title; details = item.tagline; - artUrl = item.thumbnail; + artUrl = item.art.poster; duration = item.runtime; break; case ListType.ItemsAll.TYPE_EPISODE: diff --git a/app/src/main/java/org/xbmc/kore/ui/sections/remote/RemoteFragment.java b/app/src/main/java/org/xbmc/kore/ui/sections/remote/RemoteFragment.java index 1c0de34ad..63859bc61 100644 --- a/app/src/main/java/org/xbmc/kore/ui/sections/remote/RemoteFragment.java +++ b/app/src/main/java/org/xbmc/kore/ui/sections/remote/RemoteFragment.java @@ -490,7 +490,7 @@ private void setNowPlayingInfo(ListType.ItemsAll nowPlaying, title = nowPlaying.title; underTitle = nowPlaying.tagline; - thumbnailUrl = nowPlaying.thumbnail; + thumbnailUrl = nowPlaying.art.poster; currentFastForwardIcon = fastForwardIcon; currentRewindIcon = rewindIcon; break; diff --git a/app/src/main/java/org/xbmc/kore/ui/sections/video/MovieInfoFragment.java b/app/src/main/java/org/xbmc/kore/ui/sections/video/MovieInfoFragment.java index a7c8a6e30..dbc59b09d 100644 --- a/app/src/main/java/org/xbmc/kore/ui/sections/video/MovieInfoFragment.java +++ b/app/src/main/java/org/xbmc/kore/ui/sections/video/MovieInfoFragment.java @@ -379,7 +379,7 @@ private interface MovieDetailsQuery { BaseColumns._ID, MediaContract.Movies.TITLE, MediaContract.Movies.TAGLINE, - MediaContract.Movies.THUMBNAIL, + MediaContract.Movies.POSTER, MediaContract.Movies.FANART, MediaContract.Movies.YEAR, MediaContract.Movies.GENRES, diff --git a/app/src/main/java/org/xbmc/kore/ui/sections/video/MovieListFragment.java b/app/src/main/java/org/xbmc/kore/ui/sections/video/MovieListFragment.java index 9720b5eb9..8ca823d98 100644 --- a/app/src/main/java/org/xbmc/kore/ui/sections/video/MovieListFragment.java +++ b/app/src/main/java/org/xbmc/kore/ui/sections/video/MovieListFragment.java @@ -295,7 +295,7 @@ private interface MovieListQuery { BaseColumns._ID, MediaContract.Movies.MOVIEID, MediaContract.Movies.TITLE, - MediaContract.Movies.THUMBNAIL, + MediaContract.Movies.POSTER, MediaContract.Movies.YEAR, MediaContract.Movies.GENRES, MediaContract.Movies.RUNTIME, diff --git a/app/src/main/java/org/xbmc/kore/ui/sections/video/TVShowInfoFragment.java b/app/src/main/java/org/xbmc/kore/ui/sections/video/TVShowInfoFragment.java index cecec17c7..a0b74a09f 100644 --- a/app/src/main/java/org/xbmc/kore/ui/sections/video/TVShowInfoFragment.java +++ b/app/src/main/java/org/xbmc/kore/ui/sections/video/TVShowInfoFragment.java @@ -179,7 +179,7 @@ private interface TVShowDetailsQuery { String[] PROJECTION = { BaseColumns._ID, MediaContract.TVShows.TITLE, - MediaContract.TVShows.THUMBNAIL, + MediaContract.TVShows.POSTER, MediaContract.TVShows.FANART, MediaContract.TVShows.PREMIERED, MediaContract.TVShows.STUDIO, diff --git a/app/src/main/java/org/xbmc/kore/ui/sections/video/TVShowListFragment.java b/app/src/main/java/org/xbmc/kore/ui/sections/video/TVShowListFragment.java index 10fe5670f..0c8bb6ccc 100644 --- a/app/src/main/java/org/xbmc/kore/ui/sections/video/TVShowListFragment.java +++ b/app/src/main/java/org/xbmc/kore/ui/sections/video/TVShowListFragment.java @@ -272,7 +272,7 @@ private interface TVShowListQuery { BaseColumns._ID, MediaContract.TVShows.TVSHOWID, MediaContract.TVShows.TITLE, - MediaContract.TVShows.THUMBNAIL, + MediaContract.TVShows.POSTER, MediaContract.TVShows.FANART, MediaContract.TVShows.PREMIERED, MediaContract.TVShows.STUDIO, diff --git a/app/src/main/java/org/xbmc/kore/ui/sections/video/TVShowProgressFragment.java b/app/src/main/java/org/xbmc/kore/ui/sections/video/TVShowProgressFragment.java index c01eff572..37de59c36 100644 --- a/app/src/main/java/org/xbmc/kore/ui/sections/video/TVShowProgressFragment.java +++ b/app/src/main/java/org/xbmc/kore/ui/sections/video/TVShowProgressFragment.java @@ -399,7 +399,7 @@ private interface SeasonsListQuery { String[] PROJECTION = { BaseColumns._ID, MediaContract.Seasons.SEASON, - MediaContract.Seasons.THUMBNAIL, + MediaContract.Seasons.POSTER, MediaContract.Seasons.EPISODE, MediaContract.Seasons.WATCHEDEPISODES }; diff --git a/doc/json_responses/Introspect-Matrix.json b/doc/json_responses/Introspect-Matrix.json new file mode 100644 index 000000000..396b4ae26 --- /dev/null +++ b/doc/json_responses/Introspect-Matrix.json @@ -0,0 +1,13802 @@ +{ + "id": 231, + "jsonrpc": "2.0", + "result": { + "description": "JSON-RPC API of XBMC", + "id": "http://xbmc.org/jsonrpc/ServiceDescription.json", + "methods": { + "Addons.ExecuteAddon": { + "description": "Executes the given addon with the given parameters (if possible)", + "params": [ + { + "name": "addonid", + "required": true, + "type": "string" + }, + { + "default": "", + "name": "params", + "type": [ + { + "additionalProperties": { + "default": "", + "type": "string" + }, + "type": "object" + }, + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "description": "URL path (must start with / or ?", + "type": "string" + } + ] + }, + { + "default": false, + "name": "wait", + "type": "boolean" + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Addons.GetAddonDetails": { + "description": "Gets the details of a specific addon", + "params": [ + { + "name": "addonid", + "required": true, + "type": "string" + }, + { + "$ref": "Addon.Fields", + "name": "properties" + } + ], + "returns": { + "properties": { + "addon": { + "$ref": "Addon.Details", + "required": true + }, + "limits": { + "$ref": "List.LimitsReturned", + "required": true + } + }, + "type": "object" + }, + "type": "method" + }, + "Addons.GetAddons": { + "description": "Gets all available addons", + "params": [ + { + "$ref": "Addon.Types", + "default": "unknown", + "name": "type" + }, + { + "$ref": "Addon.Content", + "default": "unknown", + "description": "Content provided by the addon. Only considered for plugins and scripts.", + "name": "content" + }, + { + "default": "all", + "name": "enabled", + "type": [ + { + "type": "boolean" + }, + { + "enums": [ + "all" + ], + "type": "string" + } + ] + }, + { + "$ref": "Addon.Fields", + "name": "properties" + }, + { + "$ref": "List.Limits", + "name": "limits" + }, + { + "default": true, + "name": "installed", + "type": [ + { + "type": "boolean" + }, + { + "enums": [ + "all" + ], + "type": "string" + } + ] + } + ], + "returns": { + "properties": { + "addons": { + "items": { + "$ref": "Addon.Details" + }, + "type": "array" + }, + "limits": { + "$ref": "List.LimitsReturned", + "required": true + } + }, + "type": "object" + }, + "type": "method" + }, + "Addons.SetAddonEnabled": { + "description": "Enables/Disables a specific addon", + "params": [ + { + "name": "addonid", + "required": true, + "type": "string" + }, + { + "$ref": "Global.Toggle", + "name": "enabled", + "required": true + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Application.GetProperties": { + "description": "Retrieves the values of the given properties", + "params": [ + { + "items": { + "$ref": "Application.Property.Name" + }, + "name": "properties", + "required": true, + "type": "array", + "uniqueItems": true + } + ], + "returns": { + "$ref": "Application.Property.Value" + }, + "type": "method" + }, + "Application.Quit": { + "description": "Quit application", + "params": [], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Application.SetMute": { + "description": "Toggle mute/unmute", + "params": [ + { + "$ref": "Global.Toggle", + "name": "mute", + "required": true + } + ], + "returns": { + "description": "Mute state", + "type": "boolean" + }, + "type": "method" + }, + "Application.SetVolume": { + "description": "Set the current volume", + "params": [ + { + "name": "volume", + "required": true, + "type": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "$ref": "Global.IncrementDecrement" + } + ] + } + ], + "returns": { + "type": "integer" + }, + "type": "method" + }, + "AudioLibrary.Clean": { + "description": "Cleans the audio library from non-existent items", + "params": [ + { + "default": true, + "description": "Whether or not to show the progress bar or any other GUI dialog", + "name": "showdialogs", + "type": "boolean" + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "AudioLibrary.Export": { + "description": "Exports all items from the audio library", + "params": [ + { + "name": "options", + "type": [ + { + "additionalProperties": false, + "properties": { + "path": { + "description": "Path to the directory to where the data should be exported", + "minLength": 1, + "required": true, + "type": "string" + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "images": { + "default": false, + "description": "Whether to export thumbnails and fanart images", + "type": "boolean" + }, + "overwrite": { + "default": false, + "description": "Whether to overwrite existing exported files", + "type": "boolean" + } + }, + "type": "object" + } + ] + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "AudioLibrary.GetAlbumDetails": { + "description": "Retrieve details about a specific album", + "params": [ + { + "$ref": "Library.Id", + "name": "albumid", + "required": true + }, + { + "$ref": "Audio.Fields.Album", + "name": "properties" + } + ], + "returns": { + "properties": { + "albumdetails": { + "$ref": "Audio.Details.Album" + } + }, + "type": "object" + }, + "type": "method" + }, + "AudioLibrary.GetAlbums": { + "description": "Retrieve all albums from specified artist (and role) or that has songs of the specified genre", + "params": [ + { + "$ref": "Audio.Fields.Album", + "name": "properties" + }, + { + "$ref": "List.Limits", + "name": "limits" + }, + { + "$ref": "List.Sort", + "name": "sort" + }, + { + "name": "filter", + "type": [ + { + "additionalProperties": false, + "properties": { + "genreid": { + "$ref": "Library.Id", + "description": "Song genre. Filter for existence of songs with this genre", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "genre": { + "description": "Song genre. Filter for existence of songs with this genre", + "minLength": 1, + "required": true, + "type": "string" + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "artistid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "artistid": { + "$ref": "Library.Id", + "required": true + }, + "roleid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "artistid": { + "$ref": "Library.Id", + "required": true + }, + "role": { + "minLength": 1, + "required": true, + "type": "string" + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "artist": { + "minLength": 1, + "required": true, + "type": "string" + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "artist": { + "minLength": 1, + "required": true, + "type": "string" + }, + "roleid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "artist": { + "minLength": 1, + "required": true, + "type": "string" + }, + "role": { + "minLength": 1, + "required": true, + "type": "string" + } + }, + "type": "object" + }, + { + "$ref": "List.Filter.Albums" + } + ] + }, + { + "default": false, + "name": "includesingles", + "type": "boolean" + }, + { + "default": false, + "description": "Whether or not to include all roles when filtering by artist, rather than the default of excluding other contributions. When true it overrides any role filter value.", + "name": "allroles", + "type": "boolean" + } + ], + "returns": { + "properties": { + "albums": { + "items": { + "$ref": "Audio.Details.Album" + }, + "type": "array" + }, + "limits": { + "$ref": "List.LimitsReturned", + "required": true + } + }, + "type": "object" + }, + "type": "method" + }, + "AudioLibrary.GetArtistDetails": { + "description": "Retrieve details about a specific artist", + "params": [ + { + "$ref": "Library.Id", + "name": "artistid", + "required": true + }, + { + "$ref": "Audio.Fields.Artist", + "name": "properties" + } + ], + "returns": { + "properties": { + "artistdetails": { + "$ref": "Audio.Details.Artist" + } + }, + "type": "object" + }, + "type": "method" + }, + "AudioLibrary.GetArtists": { + "description": "Retrieve all artists. For backward compatibility by default this implicitly does not include those that only contribute other roles, however absolutely all artists can be returned using allroles=true", + "params": [ + { + "$ref": "Optional.Boolean", + "default": null, + "description": "Whether or not to only include album artists rather than the artists of only individual songs as well. If the parameter is not passed or is passed as null the GUI setting will be used", + "name": "albumartistsonly" + }, + { + "$ref": "Audio.Fields.Artist", + "name": "properties" + }, + { + "$ref": "List.Limits", + "name": "limits" + }, + { + "$ref": "List.Sort", + "name": "sort" + }, + { + "name": "filter", + "type": [ + { + "additionalProperties": false, + "properties": { + "genreid": { + "$ref": "Library.Id", + "description": "Deprecated, use songgenreid. Filter for existence of songs with this genre", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "songgenreid": { + "$ref": "Library.Id", + "description": "Song genreid. Filter for existence of songs with this genre", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "roleid": { + "$ref": "Library.Id", + "required": true + }, + "songgenreid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "role": { + "minLength": 1, + "required": true, + "type": "string" + }, + "songgenreid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "genre": { + "description": "Deprecated, use songgenre. Filter for existence of songs with this genre", + "minLength": 1, + "required": true, + "type": "string" + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "songgenre": { + "description": "Song genre. Filter for existence of songs with this genre", + "minLength": 1, + "required": true, + "type": "string" + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "roleid": { + "$ref": "Library.Id", + "required": true + }, + "songgenre": { + "minLength": 1, + "required": true, + "type": "string" + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "role": { + "minLength": 1, + "required": true, + "type": "string" + }, + "songgenre": { + "minLength": 1, + "required": true, + "type": "string" + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "albumid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "album": { + "minLength": 1, + "required": true, + "type": "string" + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "songid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "roleid": { + "$ref": "Library.Id", + "required": true + }, + "songid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "role": { + "minLength": 1, + "required": true, + "type": "string" + }, + "songid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "roleid": { + "$ref": "Library.Id", + "description": "Role contributed by artist. Overridden by allroles parameter", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "role": { + "description": "Role contributed by artist. Overridden by allroles parameter", + "minLength": 1, + "required": true, + "type": "string" + } + }, + "type": "object" + }, + { + "$ref": "List.Filter.Artists" + } + ] + }, + { + "default": false, + "description": "Whether or not to include all artists irrespective of the role they contributed. When true it overrides any role filter value.", + "name": "allroles", + "type": "boolean" + } + ], + "returns": { + "properties": { + "artists": { + "items": { + "$ref": "Audio.Details.Artist" + }, + "type": "array" + }, + "limits": { + "$ref": "List.LimitsReturned", + "required": true + } + }, + "type": "object" + }, + "type": "method" + }, + "AudioLibrary.GetAvailableArt": { + "description": "Retrieve all potential art URLs for a media item by art type", + "params": [ + { + "name": "item", + "required": true, + "type": [ + { + "additionalProperties": false, + "properties": { + "albumid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "artistid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + } + ] + }, + { + "default": "", + "name": "arttype", + "type": "string" + } + ], + "returns": { + "properties": { + "availableart": { + "items": { + "properties": { + "arttype": { + "required": true, + "type": "string" + }, + "previewurl": { + "default": "", + "description": "URL to a preview thumbnail of the image", + "type": "string" + }, + "url": { + "description": "URL to the original image", + "required": true, + "type": "string" + } + }, + "type": "object" + }, + "required": true, + "type": "array" + } + }, + "type": "object" + }, + "type": "method" + }, + "AudioLibrary.GetAvailableArtTypes": { + "description": "Retrieve a list of potential art types for a media item", + "params": [ + { + "name": "item", + "required": true, + "type": [ + { + "additionalProperties": false, + "properties": { + "albumid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "artistid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + } + ] + } + ], + "returns": { + "properties": { + "availablearttypes": { + "items": { + "type": "string" + }, + "required": true, + "type": "array" + } + }, + "type": "object" + }, + "type": "method" + }, + "AudioLibrary.GetGenres": { + "description": "Retrieve all genres", + "params": [ + { + "$ref": "Library.Fields.Genre", + "name": "properties" + }, + { + "$ref": "List.Limits", + "name": "limits" + }, + { + "$ref": "List.Sort", + "name": "sort" + } + ], + "returns": { + "properties": { + "genres": { + "items": { + "$ref": "Library.Details.Genre" + }, + "required": true, + "type": "array" + }, + "limits": { + "$ref": "List.LimitsReturned", + "required": true + } + }, + "type": "object" + }, + "type": "method" + }, + "AudioLibrary.GetProperties": { + "description": "Retrieves the values of the music library properties", + "params": [ + { + "items": { + "$ref": "Audio.Property.Name" + }, + "name": "properties", + "required": true, + "type": "array", + "uniqueItems": true + } + ], + "returns": { + "$ref": "Audio.Property.Value" + }, + "type": "method" + }, + "AudioLibrary.GetRecentlyAddedAlbums": { + "description": "Retrieve recently added albums", + "params": [ + { + "$ref": "Audio.Fields.Album", + "name": "properties" + }, + { + "$ref": "List.Limits", + "name": "limits" + }, + { + "$ref": "List.Sort", + "name": "sort" + } + ], + "returns": { + "properties": { + "albums": { + "items": { + "$ref": "Audio.Details.Album" + }, + "type": "array" + }, + "limits": { + "$ref": "List.LimitsReturned", + "required": true + } + }, + "type": "object" + }, + "type": "method" + }, + "AudioLibrary.GetRecentlyAddedSongs": { + "description": "Retrieve recently added songs", + "params": [ + { + "$ref": "List.Amount", + "default": -1, + "description": "The amount of recently added albums from which to return the songs", + "name": "albumlimit" + }, + { + "$ref": "Audio.Fields.Song", + "name": "properties" + }, + { + "$ref": "List.Limits", + "name": "limits" + }, + { + "$ref": "List.Sort", + "name": "sort" + } + ], + "returns": { + "properties": { + "limits": { + "$ref": "List.LimitsReturned", + "required": true + }, + "songs": { + "items": { + "$ref": "Audio.Details.Song" + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "method" + }, + "AudioLibrary.GetRecentlyPlayedAlbums": { + "description": "Retrieve recently played albums", + "params": [ + { + "$ref": "Audio.Fields.Album", + "name": "properties" + }, + { + "$ref": "List.Limits", + "name": "limits" + }, + { + "$ref": "List.Sort", + "name": "sort" + } + ], + "returns": { + "properties": { + "albums": { + "items": { + "$ref": "Audio.Details.Album" + }, + "type": "array" + }, + "limits": { + "$ref": "List.LimitsReturned", + "required": true + } + }, + "type": "object" + }, + "type": "method" + }, + "AudioLibrary.GetRecentlyPlayedSongs": { + "description": "Retrieve recently played songs", + "params": [ + { + "$ref": "Audio.Fields.Song", + "name": "properties" + }, + { + "$ref": "List.Limits", + "name": "limits" + }, + { + "$ref": "List.Sort", + "name": "sort" + } + ], + "returns": { + "properties": { + "limits": { + "$ref": "List.LimitsReturned", + "required": true + }, + "songs": { + "items": { + "$ref": "Audio.Details.Song" + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "method" + }, + "AudioLibrary.GetRoles": { + "description": "Retrieve all contributor roles", + "params": [ + { + "$ref": "Audio.Fields.Role", + "name": "properties" + }, + { + "$ref": "List.Limits", + "name": "limits" + }, + { + "$ref": "List.Sort", + "name": "sort" + } + ], + "returns": { + "properties": { + "limits": { + "$ref": "List.LimitsReturned", + "required": true + }, + "roles": { + "items": { + "$ref": "Audio.Details.Role" + }, + "required": true, + "type": "array" + } + }, + "type": "object" + }, + "type": "method" + }, + "AudioLibrary.GetSongDetails": { + "description": "Retrieve details about a specific song", + "params": [ + { + "$ref": "Library.Id", + "name": "songid", + "required": true + }, + { + "$ref": "Audio.Fields.Song", + "name": "properties" + } + ], + "returns": { + "properties": { + "songdetails": { + "$ref": "Audio.Details.Song" + } + }, + "type": "object" + }, + "type": "method" + }, + "AudioLibrary.GetSongs": { + "description": "Retrieve all songs from specified album, artist or genre", + "params": [ + { + "$ref": "Audio.Fields.Song", + "name": "properties" + }, + { + "$ref": "List.Limits", + "name": "limits" + }, + { + "$ref": "List.Sort", + "name": "sort" + }, + { + "name": "filter", + "type": [ + { + "additionalProperties": false, + "properties": { + "genreid": { + "$ref": "Library.Id", + "description": "Song genre. Filter for existence of songs with this genre", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "genre": { + "description": "Song genre. Filter for existence of songs with this genre", + "minLength": 1, + "required": true, + "type": "string" + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "artistid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "artistid": { + "$ref": "Library.Id", + "required": true + }, + "roleid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "artistid": { + "$ref": "Library.Id", + "required": true + }, + "role": { + "minLength": 1, + "required": true, + "type": "string" + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "artist": { + "minLength": 1, + "required": true, + "type": "string" + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "artist": { + "minLength": 1, + "required": true, + "type": "string" + }, + "roleid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "artist": { + "minLength": 1, + "required": true, + "type": "string" + }, + "role": { + "minLength": 1, + "required": true, + "type": "string" + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "albumid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "album": { + "minLength": 1, + "required": true, + "type": "string" + } + }, + "type": "object" + }, + { + "$ref": "List.Filter.Songs" + } + ] + }, + { + "default": true, + "description": "Only songs from albums are returned when false, but overridden when singlesonly parameter is true", + "name": "includesingles", + "type": "boolean" + }, + { + "default": false, + "description": "Whether or not to include all roles when filtering by artist, rather than default of excluding other contributors. When true it overrides any role filter value.", + "name": "allroles", + "type": "boolean" + }, + { + "default": false, + "description": "Only singles are returned when true, and overrides includesingles parameter", + "name": "singlesonly", + "type": "boolean" + } + ], + "returns": { + "properties": { + "limits": { + "$ref": "List.LimitsReturned", + "required": true + }, + "songs": { + "items": { + "$ref": "Audio.Details.Song" + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "method" + }, + "AudioLibrary.GetSources": { + "description": "Get all music sources, including unique ID", + "params": [ + { + "$ref": "Library.Fields.Source", + "name": "properties" + }, + { + "$ref": "List.Limits", + "name": "limits" + }, + { + "$ref": "List.Sort", + "name": "sort" + } + ], + "returns": { + "properties": { + "limits": { + "$ref": "List.LimitsReturned", + "required": true + }, + "sources": { + "items": { + "$ref": "Library.Details.Source" + }, + "required": true, + "type": "array" + } + }, + "type": "object" + }, + "type": "method" + }, + "AudioLibrary.Scan": { + "description": "Scans the audio sources for new library items", + "params": [ + { + "default": "", + "name": "directory", + "type": "string" + }, + { + "default": true, + "description": "Whether or not to show the progress bar or any other GUI dialog", + "name": "showdialogs", + "type": "boolean" + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "AudioLibrary.SetAlbumDetails": { + "description": "Update the given album with the given details", + "params": [ + { + "$ref": "Library.Id", + "name": "albumid", + "required": true + }, + { + "$ref": "Optional.String", + "default": null, + "name": "title" + }, + { + "default": null, + "name": "artist", + "type": [ + { + "type": "null" + }, + { + "$ref": "Array.String" + } + ] + }, + { + "$ref": "Optional.String", + "default": null, + "name": "description" + }, + { + "default": null, + "name": "genre", + "type": [ + { + "type": "null" + }, + { + "$ref": "Array.String" + } + ] + }, + { + "default": null, + "name": "theme", + "type": [ + { + "type": "null" + }, + { + "$ref": "Array.String" + } + ] + }, + { + "default": null, + "name": "mood", + "type": [ + { + "type": "null" + }, + { + "$ref": "Array.String" + } + ] + }, + { + "default": null, + "name": "style", + "type": [ + { + "type": "null" + }, + { + "$ref": "Array.String" + } + ] + }, + { + "$ref": "Optional.String", + "default": null, + "name": "type" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "albumlabel" + }, + { + "$ref": "Optional.Number", + "default": null, + "name": "rating" + }, + { + "$ref": "Optional.Integer", + "default": null, + "name": "year" + }, + { + "$ref": "Optional.Integer", + "default": null, + "name": "userrating" + }, + { + "$ref": "Optional.Integer", + "default": null, + "name": "votes" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "musicbrainzalbumid" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "musicbrainzreleasegroupid" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "sortartist" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "displayartist" + }, + { + "default": null, + "name": "musicbrainzalbumartistid", + "type": [ + { + "type": "null" + }, + { + "$ref": "Array.String" + } + ] + }, + { + "default": null, + "name": "art", + "type": [ + { + "type": "null" + }, + { + "$ref": "Media.Artwork.Set" + } + ] + }, + { + "$ref": "Optional.Boolean", + "default": null, + "name": "isboxset" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "releasedate" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "originaldate" + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "AudioLibrary.SetArtistDetails": { + "description": "Update the given artist with the given details", + "params": [ + { + "$ref": "Library.Id", + "name": "artistid", + "required": true + }, + { + "$ref": "Optional.String", + "default": null, + "name": "artist" + }, + { + "default": null, + "name": "instrument", + "type": [ + { + "type": "null" + }, + { + "$ref": "Array.String" + } + ] + }, + { + "default": null, + "name": "style", + "type": [ + { + "type": "null" + }, + { + "$ref": "Array.String" + } + ] + }, + { + "default": null, + "name": "mood", + "type": [ + { + "type": "null" + }, + { + "$ref": "Array.String" + } + ] + }, + { + "$ref": "Optional.String", + "default": null, + "name": "born" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "formed" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "description" + }, + { + "default": null, + "name": "genre", + "type": [ + { + "type": "null" + }, + { + "$ref": "Array.String" + } + ] + }, + { + "$ref": "Optional.String", + "default": null, + "name": "died" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "disbanded" + }, + { + "default": null, + "name": "yearsactive", + "type": [ + { + "type": "null" + }, + { + "$ref": "Array.String" + } + ] + }, + { + "$ref": "Optional.String", + "default": null, + "name": "musicbrainzartistid" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "sortname" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "type" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "gender" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "disambiguation" + }, + { + "default": null, + "name": "art", + "type": [ + { + "type": "null" + }, + { + "$ref": "Media.Artwork.Set" + } + ] + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "AudioLibrary.SetSongDetails": { + "description": "Update the given song with the given details", + "params": [ + { + "$ref": "Library.Id", + "name": "songid", + "required": true + }, + { + "$ref": "Optional.String", + "default": null, + "name": "title" + }, + { + "default": null, + "name": "artist", + "type": [ + { + "type": "null" + }, + { + "$ref": "Array.String" + } + ] + }, + { + "default": null, + "name": "genre", + "type": [ + { + "type": "null" + }, + { + "$ref": "Array.String" + } + ] + }, + { + "$ref": "Optional.Integer", + "default": null, + "name": "year" + }, + { + "$ref": "Optional.Number", + "default": null, + "name": "rating" + }, + { + "$ref": "Optional.Integer", + "default": null, + "name": "track" + }, + { + "$ref": "Optional.Integer", + "default": null, + "name": "disc" + }, + { + "$ref": "Optional.Integer", + "default": null, + "name": "duration" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "comment" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "musicbrainztrackid" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "musicbrainzartistid" + }, + { + "$ref": "Optional.Integer", + "default": null, + "name": "playcount" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "lastplayed" + }, + { + "$ref": "Optional.Integer", + "default": null, + "name": "userrating" + }, + { + "$ref": "Optional.Integer", + "default": null, + "name": "votes" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "displayartist" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "sortartist" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "mood" + }, + { + "default": null, + "name": "art", + "type": [ + { + "type": "null" + }, + { + "$ref": "Media.Artwork.Set" + } + ] + }, + { + "$ref": "Optional.String", + "default": null, + "name": "disctitle" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "releasedate" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "originaldate" + }, + { + "$ref": "Optional.Integer", + "default": null, + "name": "bpm" + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Favourites.AddFavourite": { + "description": "Add a favourite with the given details", + "params": [ + { + "name": "title", + "required": true, + "type": "string" + }, + { + "$ref": "Favourite.Type", + "name": "type", + "required": true + }, + { + "$ref": "Optional.String", + "default": null, + "description": "Required for media, script and androidapp favourites types", + "name": "path" + }, + { + "$ref": "Optional.String", + "default": null, + "description": "Required for window favourite type", + "name": "window" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "windowparameter" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "thumbnail" + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Favourites.GetFavourites": { + "description": "Retrieve all favourites", + "params": [ + { + "default": null, + "name": "type", + "type": [ + { + "type": "null" + }, + { + "$ref": "Favourite.Type" + } + ] + }, + { + "$ref": "Favourite.Fields.Favourite", + "name": "properties" + } + ], + "returns": { + "properties": { + "favourites": { + "items": { + "$ref": "Favourite.Details.Favourite" + }, + "type": "array" + }, + "limits": { + "$ref": "List.LimitsReturned", + "required": true + } + }, + "type": "object" + }, + "type": "method" + }, + "Files.GetDirectory": { + "description": "Get the directories and files in the given directory", + "params": [ + { + "name": "directory", + "required": true, + "type": "string" + }, + { + "$ref": "Files.Media", + "default": "files", + "name": "media" + }, + { + "$ref": "List.Fields.Files", + "name": "properties" + }, + { + "$ref": "List.Sort", + "name": "sort" + }, + { + "$ref": "List.Limits", + "description": "Limits are applied after getting the directory content thus retrieval is not faster when they are applied.", + "name": "limits" + } + ], + "returns": { + "properties": { + "files": { + "items": { + "$ref": "List.Item.File" + }, + "required": true, + "type": "array" + }, + "limits": { + "$ref": "List.LimitsReturned", + "required": true + } + }, + "type": "object" + }, + "type": "method" + }, + "Files.GetFileDetails": { + "description": "Get details for a specific file", + "params": [ + { + "description": "Full path to the file", + "name": "file", + "required": true, + "type": "string" + }, + { + "$ref": "Files.Media", + "default": "files", + "name": "media" + }, + { + "$ref": "List.Fields.Files", + "name": "properties" + } + ], + "returns": { + "properties": { + "filedetails": { + "$ref": "List.Item.File", + "required": true + } + }, + "type": "object" + }, + "type": "method" + }, + "Files.GetSources": { + "description": "Get the sources of the media windows", + "params": [ + { + "$ref": "Files.Media", + "name": "media", + "required": true + }, + { + "$ref": "List.Limits", + "name": "limits" + }, + { + "$ref": "List.Sort", + "name": "sort" + } + ], + "returns": { + "properties": { + "limits": { + "$ref": "List.LimitsReturned", + "required": true + }, + "sources": { + "$ref": "List.Items.Sources", + "required": true + } + }, + "type": "object" + }, + "type": "method" + }, + "Files.PrepareDownload": { + "description": "Provides a way to download a given file (e.g. providing an URL to the real file location)", + "params": [ + { + "name": "path", + "required": true, + "type": "string" + } + ], + "returns": { + "properties": { + "details": { + "description": "Transport specific details on how/from where to download the given file", + "required": true, + "type": "any" + }, + "mode": { + "description": "Direct mode allows using Files.Download whereas redirect mode requires the usage of a different protocol", + "enums": [ + "redirect", + "direct" + ], + "required": true, + "type": "string" + }, + "protocol": { + "enums": [ + "http" + ], + "required": true, + "type": "string" + } + }, + "type": "object" + }, + "type": "method" + }, + "Files.SetFileDetails": { + "description": "Update the given specific file with the given details", + "params": [ + { + "description": "Full path to the file", + "name": "file", + "required": true, + "type": "string" + }, + { + "$ref": "Files.Media", + "description": "File type to update correct database. Currently only \"video\" is supported.", + "name": "media", + "required": true + }, + { + "$ref": "Optional.Integer", + "default": null, + "name": "playcount" + }, + { + "$ref": "Optional.String", + "default": null, + "description": "Setting a valid lastplayed without a playcount will force playcount to 1.", + "name": "lastplayed" + }, + { + "default": null, + "name": "resume", + "type": [ + { + "type": "null" + }, + { + "$ref": "Video.Resume" + } + ] + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "GUI.ActivateWindow": { + "description": "Activates the given window", + "params": [ + { + "$ref": "GUI.Window", + "name": "window", + "required": true + }, + { + "items": { + "minLength": 1, + "type": "string" + }, + "minItems": 1, + "name": "parameters", + "type": "array" + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "GUI.GetProperties": { + "description": "Retrieves the values of the given properties", + "params": [ + { + "items": { + "$ref": "GUI.Property.Name" + }, + "name": "properties", + "required": true, + "type": "array", + "uniqueItems": true + } + ], + "returns": { + "$ref": "GUI.Property.Value" + }, + "type": "method" + }, + "GUI.GetStereoscopicModes": { + "description": "Returns the supported stereoscopic modes of the GUI", + "params": [], + "returns": { + "properties": { + "stereoscopicmodes": { + "items": { + "$ref": "GUI.Stereoscopy.Mode" + }, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + }, + "type": "method" + }, + "GUI.SetFullscreen": { + "description": "Toggle fullscreen/GUI", + "params": [ + { + "$ref": "Global.Toggle", + "name": "fullscreen", + "required": true + } + ], + "returns": { + "description": "Fullscreen state", + "type": "boolean" + }, + "type": "method" + }, + "GUI.SetStereoscopicMode": { + "description": "Sets the stereoscopic mode of the GUI to the given mode", + "params": [ + { + "enums": [ + "toggle", + "tomono", + "next", + "previous", + "select", + "off", + "split_vertical", + "split_horizontal", + "row_interleaved", + "hardware_based", + "anaglyph_cyan_red", + "anaglyph_green_magenta", + "monoscopic" + ], + "name": "mode", + "required": true, + "type": "string" + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "GUI.ShowNotification": { + "description": "Shows a GUI notification", + "params": [ + { + "name": "title", + "required": true, + "type": "string" + }, + { + "name": "message", + "required": true, + "type": "string" + }, + { + "default": "", + "name": "image", + "type": [ + { + "enums": [ + "info", + "warning", + "error" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + { + "default": 5000, + "description": "The time in milliseconds the notification will be visible", + "minimum": 1500, + "name": "displaytime", + "type": "integer" + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Input.Back": { + "description": "Goes back in GUI", + "params": [], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Input.ButtonEvent": { + "description": "Send a button press event", + "params": [ + { + "description": "Button name", + "name": "button", + "required": true, + "type": "string" + }, + { + "description": "Keymap name (KB, XG, R1, or R2)", + "enums": [ + "KB", + "XG", + "R1", + "R2" + ], + "name": "keymap", + "required": true, + "type": "string" + }, + { + "default": 0, + "description": "Number of milliseconds to simulate button hold.", + "minimum": 0, + "name": "holdtime", + "type": "integer" + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Input.ContextMenu": { + "description": "Shows the context menu", + "params": [], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Input.Down": { + "description": "Navigate down in GUI", + "params": [], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Input.ExecuteAction": { + "description": "Execute a specific action", + "params": [ + { + "$ref": "Input.Action", + "name": "action", + "required": true + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Input.Home": { + "description": "Goes to home window in GUI", + "params": [], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Input.Info": { + "description": "Shows the information dialog", + "params": [], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Input.Left": { + "description": "Navigate left in GUI", + "params": [], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Input.Right": { + "description": "Navigate right in GUI", + "params": [], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Input.Select": { + "description": "Select current item in GUI", + "params": [], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Input.SendText": { + "description": "Send a generic (unicode) text", + "params": [ + { + "description": "Unicode text", + "name": "text", + "required": true, + "type": "string" + }, + { + "default": true, + "description": "Whether this is the whole input or not (closes an open input dialog if true).", + "name": "done", + "type": "boolean" + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Input.ShowCodec": { + "description": "Show codec information of the playing item", + "params": [], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Input.ShowOSD": { + "description": "Show the on-screen display for the current player", + "params": [], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Input.ShowPlayerProcessInfo": { + "description": "Show player process information of the playing item, like video decoder, pixel format, pvr signal strength, ...", + "params": [], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Input.Up": { + "description": "Navigate up in GUI", + "params": [], + "returns": { + "type": "string" + }, + "type": "method" + }, + "JSONRPC.Introspect": { + "description": "Enumerates all actions and descriptions", + "params": [ + { + "default": true, + "name": "getdescriptions", + "type": "boolean" + }, + { + "default": false, + "name": "getmetadata", + "type": "boolean" + }, + { + "default": true, + "name": "filterbytransport", + "type": "boolean" + }, + { + "name": "filter", + "properties": { + "getreferences": { + "default": true, + "description": "Whether or not to print the schema for referenced types", + "type": "boolean" + }, + "id": { + "description": "Name of a namespace, method or type", + "required": true, + "type": "string" + }, + "type": { + "description": "Type of the given name", + "enums": [ + "method", + "namespace", + "type", + "notification" + ], + "required": true, + "type": "string" + } + }, + "type": "object" + } + ], + "returns": { + "additionalProperties": false, + "type": "object" + }, + "type": "method" + }, + "JSONRPC.NotifyAll": { + "description": "Notify all other connected clients", + "params": [ + { + "name": "sender", + "required": true, + "type": "string" + }, + { + "name": "message", + "required": true, + "type": "string" + }, + { + "default": null, + "name": "data", + "type": "any" + } + ], + "returns": { + "type": "any" + }, + "type": "method" + }, + "JSONRPC.Permission": { + "description": "Retrieve the clients permissions", + "params": [], + "returns": { + "properties": { + "controlgui": { + "required": true, + "type": "boolean" + }, + "controlnotify": { + "required": true, + "type": "boolean" + }, + "controlplayback": { + "required": true, + "type": "boolean" + }, + "controlpower": { + "required": true, + "type": "boolean" + }, + "controlpvr": { + "required": true, + "type": "boolean" + }, + "controlsystem": { + "required": true, + "type": "boolean" + }, + "executeaddon": { + "required": true, + "type": "boolean" + }, + "manageaddon": { + "required": true, + "type": "boolean" + }, + "navigate": { + "required": true, + "type": "boolean" + }, + "readdata": { + "required": true, + "type": "boolean" + }, + "removedata": { + "required": true, + "type": "boolean" + }, + "updatedata": { + "required": true, + "type": "boolean" + }, + "writefile": { + "required": true, + "type": "boolean" + } + }, + "type": "object" + }, + "type": "method" + }, + "JSONRPC.Ping": { + "description": "Ping responder", + "params": [], + "returns": { + "type": "string" + }, + "type": "method" + }, + "JSONRPC.Version": { + "description": "Retrieve the JSON-RPC protocol version.", + "params": [], + "returns": { + "properties": { + "version": { + "properties": { + "major": { + "description": "Bumped on backwards incompatible changes to the API definition", + "minimum": 0, + "required": true, + "type": "integer" + }, + "minor": { + "description": "Bumped on backwards compatible additions/changes to the API definition", + "minimum": 0, + "required": true, + "type": "integer" + }, + "patch": { + "description": "Bumped on any changes to the internal implementation but not to the API definition", + "minimum": 0, + "required": true, + "type": "integer" + } + }, + "required": true, + "type": "object" + } + }, + "type": "object" + }, + "type": "method" + }, + "PVR.AddTimer": { + "description": "Adds a timer to record the given show one times or a timer rule to record all showings of the given show or adds a reminder timer or reminder timer rule", + "params": [ + { + "$ref": "Library.Id", + "description": "the broadcast id of the item to record", + "name": "broadcastid", + "required": true + }, + { + "default": false, + "description": "controls whether to create a timer rule or a onetime timer", + "name": "timerrule", + "type": "boolean" + }, + { + "default": false, + "description": "controls whether to create a reminder timer or a recording timer", + "name": "reminder", + "type": "boolean" + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "PVR.DeleteTimer": { + "description": "Deletes a onetime timer or a timer rule", + "params": [ + { + "$ref": "Library.Id", + "description": "the id of the onetime timer or timer rule to delete", + "name": "timerid", + "required": true + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "PVR.GetBroadcastDetails": { + "description": "Retrieves the details of a specific broadcast", + "params": [ + { + "$ref": "Library.Id", + "name": "broadcastid", + "required": true + }, + { + "$ref": "PVR.Fields.Broadcast", + "name": "properties" + } + ], + "returns": { + "properties": { + "broadcastdetails": { + "$ref": "PVR.Details.Broadcast" + } + }, + "type": "object" + }, + "type": "method" + }, + "PVR.GetBroadcastIsPlayable": { + "description": "Retrieves whether or not a broadcast is playable", + "params": [ + { + "$ref": "Library.Id", + "description": "the id of the broadcast to to check for playability", + "name": "broadcastid", + "required": true + } + ], + "returns": { + "type": "boolean" + }, + "type": "method" + }, + "PVR.GetBroadcasts": { + "description": "Retrieves the program of a specific channel", + "params": [ + { + "$ref": "Library.Id", + "name": "channelid", + "required": true + }, + { + "$ref": "PVR.Fields.Broadcast", + "name": "properties" + }, + { + "$ref": "List.Limits", + "name": "limits" + } + ], + "returns": { + "properties": { + "broadcasts": { + "items": { + "$ref": "PVR.Details.Broadcast" + }, + "required": true, + "type": "array" + }, + "limits": { + "$ref": "List.LimitsReturned", + "required": true + } + }, + "type": "object" + }, + "type": "method" + }, + "PVR.GetChannelDetails": { + "description": "Retrieves the details of a specific channel", + "params": [ + { + "$ref": "Library.Id", + "name": "channelid", + "required": true + }, + { + "$ref": "PVR.Fields.Channel", + "name": "properties" + } + ], + "returns": { + "properties": { + "channeldetails": { + "$ref": "PVR.Details.Channel" + } + }, + "type": "object" + }, + "type": "method" + }, + "PVR.GetChannelGroupDetails": { + "description": "Retrieves the details of a specific channel group", + "params": [ + { + "$ref": "PVR.ChannelGroup.Id", + "name": "channelgroupid", + "required": true + }, + { + "name": "channels", + "properties": { + "limits": { + "$ref": "List.Limits" + }, + "properties": { + "$ref": "PVR.Fields.Channel" + } + }, + "type": "object" + } + ], + "returns": { + "properties": { + "channelgroupdetails": { + "$ref": "PVR.Details.ChannelGroup.Extended" + } + }, + "type": "object" + }, + "type": "method" + }, + "PVR.GetChannelGroups": { + "description": "Retrieves the channel groups for the specified type", + "params": [ + { + "$ref": "PVR.Channel.Type", + "name": "channeltype", + "required": true + }, + { + "$ref": "List.Limits", + "name": "limits" + } + ], + "returns": { + "properties": { + "channelgroups": { + "items": { + "$ref": "PVR.Details.ChannelGroup" + }, + "required": true, + "type": "array" + }, + "limits": { + "$ref": "List.LimitsReturned", + "required": true + } + }, + "type": "object" + }, + "type": "method" + }, + "PVR.GetChannels": { + "description": "Retrieves the channel list", + "params": [ + { + "$ref": "PVR.ChannelGroup.Id", + "name": "channelgroupid", + "required": true + }, + { + "$ref": "PVR.Fields.Channel", + "name": "properties" + }, + { + "$ref": "List.Limits", + "name": "limits" + }, + { + "$ref": "List.Sort", + "name": "sort" + } + ], + "returns": { + "properties": { + "channels": { + "items": { + "$ref": "PVR.Details.Channel" + }, + "required": true, + "type": "array" + }, + "limits": { + "$ref": "List.LimitsReturned", + "required": true + } + }, + "type": "object" + }, + "type": "method" + }, + "PVR.GetClients": { + "description": "Retrieves the enabled PVR clients and their capabilities", + "params": [ + { + "$ref": "List.Limits", + "name": "limits" + } + ], + "returns": { + "properties": { + "clients": { + "items": { + "$ref": "PVR.Details.Client" + }, + "required": true, + "type": "array" + }, + "limits": { + "$ref": "List.LimitsReturned", + "required": true + } + }, + "type": "object" + }, + "type": "method" + }, + "PVR.GetProperties": { + "description": "Retrieves the values of the given properties", + "params": [ + { + "items": { + "$ref": "PVR.Property.Name" + }, + "name": "properties", + "required": true, + "type": "array", + "uniqueItems": true + } + ], + "returns": { + "$ref": "PVR.Property.Value" + }, + "type": "method" + }, + "PVR.GetRecordingDetails": { + "description": "Retrieves the details of a specific recording", + "params": [ + { + "$ref": "Library.Id", + "name": "recordingid", + "required": true + }, + { + "$ref": "PVR.Fields.Recording", + "name": "properties" + } + ], + "returns": { + "properties": { + "recordingdetails": { + "$ref": "PVR.Details.Recording" + } + }, + "type": "object" + }, + "type": "method" + }, + "PVR.GetRecordings": { + "description": "Retrieves the recordings", + "params": [ + { + "$ref": "PVR.Fields.Recording", + "name": "properties" + }, + { + "$ref": "List.Limits", + "name": "limits" + }, + { + "$ref": "List.Sort", + "name": "sort" + } + ], + "returns": { + "properties": { + "limits": { + "$ref": "List.LimitsReturned", + "required": true + }, + "recordings": { + "items": { + "$ref": "PVR.Details.Recording" + }, + "required": true, + "type": "array" + } + }, + "type": "object" + }, + "type": "method" + }, + "PVR.GetTimerDetails": { + "description": "Retrieves the details of a specific timer", + "params": [ + { + "$ref": "Library.Id", + "name": "timerid", + "required": true + }, + { + "$ref": "PVR.Fields.Timer", + "name": "properties" + } + ], + "returns": { + "properties": { + "timerdetails": { + "$ref": "PVR.Details.Timer" + } + }, + "type": "object" + }, + "type": "method" + }, + "PVR.GetTimers": { + "description": "Retrieves the timers", + "params": [ + { + "$ref": "PVR.Fields.Timer", + "name": "properties" + }, + { + "$ref": "List.Limits", + "name": "limits" + }, + { + "$ref": "List.Sort", + "name": "sort" + } + ], + "returns": { + "properties": { + "limits": { + "$ref": "List.LimitsReturned", + "required": true + }, + "timers": { + "items": { + "$ref": "PVR.Details.Timer" + }, + "required": true, + "type": "array" + } + }, + "type": "object" + }, + "type": "method" + }, + "PVR.Record": { + "description": "Toggle recording of a channel", + "params": [ + { + "$ref": "Global.Toggle", + "default": "toggle", + "name": "record" + }, + { + "default": "current", + "name": "channel", + "type": [ + { + "enums": [ + "current" + ], + "type": "string" + }, + { + "$ref": "Library.Id" + } + ] + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "PVR.Scan": { + "description": "Starts a channel scan", + "params": [ + { + "$ref": "Library.Id", + "default": -1, + "description": "Specify a PVR client id to avoid UI dialog, optional in kodi 19, required in kodi 20", + "name": "clientid" + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "PVR.ToggleTimer": { + "description": "Creates or deletes a onetime timer or timer rule for a given show. If it exists, it will be deleted. If it does not exist, it will be created", + "params": [ + { + "$ref": "Library.Id", + "description": "the broadcast id of the item to toggle a onetime timer or time rule for", + "name": "broadcastid", + "required": true + }, + { + "default": false, + "description": "controls whether to create / delete a timer rule or a onetime timer", + "name": "timerrule", + "type": "boolean" + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Player.AddSubtitle": { + "description": "Add subtitle to the player", + "params": [ + { + "$ref": "Player.Id", + "name": "playerid", + "required": true + }, + { + "description": "Local path or remote URL to the subtitle file to load", + "name": "subtitle", + "required": true, + "type": "string" + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Player.GetActivePlayers": { + "description": "Returns all active players", + "params": [], + "returns": { + "items": { + "properties": { + "playerid": { + "$ref": "Player.Id", + "required": true + }, + "playertype": { + "enums": [ + "internal", + "external", + "remote" + ], + "required": true, + "type": "string" + }, + "type": { + "$ref": "Player.Type", + "required": true + } + }, + "type": "object" + }, + "type": "array", + "uniqueItems": true + }, + "type": "method" + }, + "Player.GetItem": { + "description": "Retrieves the currently played item", + "params": [ + { + "$ref": "Player.Id", + "name": "playerid", + "required": true + }, + { + "$ref": "List.Fields.All", + "name": "properties" + } + ], + "returns": { + "properties": { + "item": { + "$ref": "List.Item.All", + "required": true + } + }, + "type": "object" + }, + "type": "method" + }, + "Player.GetPlayers": { + "description": "Get a list of available players", + "params": [ + { + "default": "all", + "enums": [ + "all", + "video", + "audio" + ], + "name": "media", + "type": "string" + } + ], + "returns": { + "items": { + "properties": { + "name": { + "$ref": "Global.String.NotEmpty", + "required": true + }, + "playsaudio": { + "required": true, + "type": "boolean" + }, + "playsvideo": { + "required": true, + "type": "boolean" + }, + "type": { + "enums": [ + "internal", + "external", + "remote" + ], + "required": true, + "type": "string" + } + }, + "type": "object" + }, + "type": "array", + "uniqueItems": true + }, + "type": "method" + }, + "Player.GetProperties": { + "description": "Retrieves the values of the given properties", + "params": [ + { + "$ref": "Player.Id", + "name": "playerid", + "required": true + }, + { + "items": { + "$ref": "Player.Property.Name" + }, + "name": "properties", + "required": true, + "type": "array", + "uniqueItems": true + } + ], + "returns": { + "$ref": "Player.Property.Value" + }, + "type": "method" + }, + "Player.GetViewMode": { + "description": "Get view mode of video player", + "params": [], + "returns": { + "properties": { + "nonlinearstretch": { + "required": true, + "type": "boolean" + }, + "pixelratio": { + "required": true, + "type": "number" + }, + "verticalshift": { + "required": true, + "type": "number" + }, + "viewmode": { + "$ref": "Player.ViewMode", + "required": true + }, + "zoom": { + "required": true, + "type": "number" + } + }, + "type": "object" + }, + "type": "method" + }, + "Player.GoTo": { + "description": "Go to previous/next/specific item in the playlist", + "params": [ + { + "$ref": "Player.Id", + "name": "playerid", + "required": true + }, + { + "name": "to", + "required": true, + "type": [ + { + "enums": [ + "previous", + "next" + ], + "type": "string" + }, + { + "$ref": "Playlist.Position", + "description": "position in playlist" + } + ] + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Player.Move": { + "description": "If picture is zoomed move viewport left/right/up/down otherwise skip previous/next", + "params": [ + { + "$ref": "Player.Id", + "name": "playerid", + "required": true + }, + { + "enums": [ + "left", + "right", + "up", + "down" + ], + "name": "direction", + "required": true, + "type": "string" + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Player.Open": { + "description": "Start playback of either the playlist with the given ID, a slideshow with the pictures from the given directory or a single file or an item from the database.", + "params": [ + { + "name": "item", + "type": [ + { + "additionalProperties": false, + "properties": { + "playlistid": { + "$ref": "Playlist.Id", + "required": true + }, + "position": { + "$ref": "Playlist.Position", + "default": 0 + } + }, + "type": "object" + }, + { + "$ref": "Playlist.Item" + }, + { + "additionalProperties": false, + "properties": { + "path": { + "required": true, + "type": "string" + }, + "random": { + "default": true, + "description": "Deprecated, use the shuffled property of the options parameter instead", + "type": "boolean" + }, + "recursive": { + "default": true, + "type": "boolean" + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "partymode": { + "default": "", + "type": [ + { + "enums": [ + "music", + "video" + ], + "type": "string" + }, + { + "description": "Path to a smartplaylist (*.xsp) file", + "minLength": 5, + "type": "string" + } + ] + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "broadcastid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "channelid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "recordingid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + } + ] + }, + { + "additionalProperties": false, + "name": "options", + "properties": { + "playername": { + "default": null, + "type": [ + { + "type": "null" + }, + { + "enums": [ + "default" + ], + "type": "string" + }, + { + "description": "name of player", + "minLength": 1, + "type": "string" + } + ] + }, + "repeat": { + "default": null, + "type": [ + { + "type": "null" + }, + { + "$ref": "Player.Repeat" + } + ] + }, + "resume": { + "default": false, + "type": [ + { + "description": "Whether to resume from the resume point or not", + "type": "boolean" + }, + { + "$ref": "Player.Position.Percentage", + "description": "Percentage value to start from" + }, + { + "$ref": "Player.Position.Time", + "description": "Time to start from" + } + ] + }, + "shuffled": { + "$ref": "Optional.Boolean", + "default": null + } + }, + "type": "object" + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Player.PlayPause": { + "description": "Pauses or unpause playback and returns the new state", + "params": [ + { + "$ref": "Player.Id", + "name": "playerid", + "required": true + }, + { + "$ref": "Global.Toggle", + "default": "toggle", + "name": "play" + } + ], + "returns": { + "$ref": "Player.Speed" + }, + "type": "method" + }, + "Player.Rotate": { + "description": "Rotates current picture", + "params": [ + { + "$ref": "Player.Id", + "name": "playerid", + "required": true + }, + { + "default": "clockwise", + "enums": [ + "clockwise", + "counterclockwise" + ], + "name": "value", + "type": "string" + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Player.Seek": { + "description": "Seek through the playing item", + "params": [ + { + "$ref": "Player.Id", + "name": "playerid", + "required": true + }, + { + "name": "value", + "required": true, + "type": [ + { + "additionalProperties": false, + "properties": { + "percentage": { + "$ref": "Player.Position.Percentage", + "description": "Percentage value to seek to", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "time": { + "$ref": "Player.Position.Time", + "description": "Time to seek to", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "step": { + "description": "Seek by predefined jumps", + "enums": [ + "smallforward", + "smallbackward", + "bigforward", + "bigbackward" + ], + "required": true, + "type": "string" + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "seconds": { + "description": "Seek by the given number of seconds", + "required": true, + "type": "integer" + } + }, + "type": "object" + } + ] + } + ], + "returns": { + "properties": { + "percentage": { + "$ref": "Player.Position.Percentage", + "default": 0 + }, + "time": { + "$ref": "Global.Time", + "description": "A duration." + }, + "totaltime": { + "$ref": "Global.Time", + "description": "A duration." + } + }, + "type": "object" + }, + "type": "method" + }, + "Player.SetAudioStream": { + "description": "Set the audio stream played by the player", + "params": [ + { + "$ref": "Player.Id", + "name": "playerid", + "required": true + }, + { + "name": "stream", + "required": true, + "type": [ + { + "enums": [ + "previous", + "next" + ], + "type": "string" + }, + { + "description": "Index of the audio stream to play", + "minimum": 0, + "type": "integer" + } + ] + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Player.SetPartymode": { + "description": "Turn partymode on or off", + "params": [ + { + "$ref": "Player.Id", + "name": "playerid", + "required": true + }, + { + "$ref": "Global.Toggle", + "name": "partymode", + "required": true + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Player.SetRepeat": { + "description": "Set the repeat mode of the player", + "params": [ + { + "$ref": "Player.Id", + "name": "playerid", + "required": true + }, + { + "name": "repeat", + "required": true, + "type": [ + { + "$ref": "Player.Repeat" + }, + { + "enums": [ + "cycle" + ], + "type": "string" + } + ] + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Player.SetShuffle": { + "description": "Shuffle/Unshuffle items in the player", + "params": [ + { + "$ref": "Player.Id", + "name": "playerid", + "required": true + }, + { + "$ref": "Global.Toggle", + "name": "shuffle", + "required": true + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Player.SetSpeed": { + "description": "Set the speed of the current playback", + "params": [ + { + "$ref": "Player.Id", + "name": "playerid", + "required": true + }, + { + "name": "speed", + "required": true, + "type": [ + { + "enums": [ + -32, + -16, + -8, + -4, + -2, + -1, + 0, + 1, + 2, + 4, + 8, + 16, + 32 + ], + "type": "integer" + }, + { + "$ref": "Global.IncrementDecrement" + } + ] + } + ], + "returns": { + "$ref": "Player.Speed" + }, + "type": "method" + }, + "Player.SetSubtitle": { + "description": "Set the subtitle displayed by the player", + "params": [ + { + "$ref": "Player.Id", + "name": "playerid", + "required": true + }, + { + "name": "subtitle", + "required": true, + "type": [ + { + "enums": [ + "previous", + "next", + "off", + "on" + ], + "type": "string" + }, + { + "description": "Index of the subtitle to display", + "minimum": 0, + "type": "integer" + } + ] + }, + { + "default": false, + "description": "Whether to enable subtitles to be displayed after setting the new subtitle", + "name": "enable", + "type": "boolean" + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Player.SetVideoStream": { + "description": "Set the video stream played by the player", + "params": [ + { + "$ref": "Player.Id", + "name": "playerid", + "required": true + }, + { + "name": "stream", + "required": true, + "type": [ + { + "enums": [ + "previous", + "next" + ], + "type": "string" + }, + { + "description": "Index of the video stream to play", + "minimum": 0, + "type": "integer" + } + ] + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Player.SetViewMode": { + "description": "Set view mode of video player", + "params": [ + { + "name": "viewmode", + "required": true, + "type": [ + { + "$ref": "Player.CustomViewMode", + "description": "Custom view mode" + }, + { + "$ref": "Player.ViewMode" + } + ] + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Player.Stop": { + "description": "Stops playback", + "params": [ + { + "$ref": "Player.Id", + "name": "playerid", + "required": true + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Player.Zoom": { + "description": "Zoom current picture", + "params": [ + { + "$ref": "Player.Id", + "name": "playerid", + "required": true + }, + { + "name": "zoom", + "required": true, + "type": [ + { + "enums": [ + "in", + "out" + ], + "type": "string" + }, + { + "description": "zoom level", + "maximum": 10, + "minimum": 1, + "type": "integer" + } + ] + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Playlist.Add": { + "description": "Add item(s) to playlist", + "params": [ + { + "$ref": "Playlist.Id", + "name": "playlistid", + "required": true + }, + { + "name": "item", + "required": true, + "type": [ + { + "$ref": "Playlist.Item" + }, + { + "items": { + "$ref": "Playlist.Item" + }, + "type": "array" + } + ] + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Playlist.Clear": { + "description": "Clear playlist", + "params": [ + { + "$ref": "Playlist.Id", + "name": "playlistid", + "required": true + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Playlist.GetItems": { + "description": "Get all items from playlist", + "params": [ + { + "$ref": "Playlist.Id", + "name": "playlistid", + "required": true + }, + { + "$ref": "List.Fields.All", + "name": "properties" + }, + { + "$ref": "List.Limits", + "name": "limits" + }, + { + "$ref": "List.Sort", + "name": "sort" + } + ], + "returns": { + "properties": { + "items": { + "items": { + "$ref": "List.Item.All" + }, + "required": true, + "type": "array" + }, + "limits": { + "$ref": "List.LimitsReturned", + "required": true + } + }, + "type": "object" + }, + "type": "method" + }, + "Playlist.GetPlaylists": { + "description": "Returns all existing playlists", + "params": [], + "returns": { + "items": { + "properties": { + "playlistid": { + "$ref": "Playlist.Id", + "required": true + }, + "type": { + "$ref": "Playlist.Type", + "required": true + } + }, + "type": "object" + }, + "type": "array", + "uniqueItems": true + }, + "type": "method" + }, + "Playlist.GetProperties": { + "description": "Retrieves the values of the given properties", + "params": [ + { + "$ref": "Playlist.Id", + "name": "playlistid", + "required": true + }, + { + "items": { + "$ref": "Playlist.Property.Name" + }, + "name": "properties", + "required": true, + "type": "array", + "uniqueItems": true + } + ], + "returns": { + "$ref": "Playlist.Property.Value" + }, + "type": "method" + }, + "Playlist.Insert": { + "description": "Insert item(s) into playlist. Does not work for picture playlists (aka slideshows).", + "params": [ + { + "$ref": "Playlist.Id", + "name": "playlistid", + "required": true + }, + { + "$ref": "Playlist.Position", + "name": "position", + "required": true + }, + { + "name": "item", + "required": true, + "type": [ + { + "$ref": "Playlist.Item" + }, + { + "items": { + "$ref": "Playlist.Item" + }, + "type": "array" + } + ] + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Playlist.Remove": { + "description": "Remove item from playlist. Does not work for picture playlists (aka slideshows).", + "params": [ + { + "$ref": "Playlist.Id", + "name": "playlistid", + "required": true + }, + { + "$ref": "Playlist.Position", + "name": "position", + "required": true + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Playlist.Swap": { + "description": "Swap items in the playlist. Does not work for picture playlists (aka slideshows).", + "params": [ + { + "$ref": "Playlist.Id", + "name": "playlistid", + "required": true + }, + { + "$ref": "Playlist.Position", + "name": "position1", + "required": true + }, + { + "$ref": "Playlist.Position", + "name": "position2", + "required": true + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Profiles.GetCurrentProfile": { + "description": "Retrieve the current profile", + "params": [ + { + "$ref": "Profiles.Fields.Profile", + "name": "properties" + } + ], + "returns": { + "$ref": "Profiles.Details.Profile" + }, + "type": "method" + }, + "Profiles.GetProfiles": { + "description": "Retrieve all profiles", + "params": [ + { + "$ref": "Profiles.Fields.Profile", + "name": "properties" + }, + { + "$ref": "List.Limits", + "name": "limits" + }, + { + "$ref": "List.Sort", + "name": "sort" + } + ], + "returns": { + "properties": { + "limits": { + "$ref": "List.LimitsReturned", + "required": true + }, + "profiles": { + "items": { + "$ref": "Profiles.Details.Profile" + }, + "required": true, + "type": "array" + } + }, + "type": "object" + }, + "type": "method" + }, + "Profiles.LoadProfile": { + "description": "Load the specified profile", + "params": [ + { + "description": "Profile name", + "name": "profile", + "required": true, + "type": "string" + }, + { + "default": false, + "description": "Prompt for password", + "name": "prompt", + "type": "boolean" + }, + { + "$ref": "Profiles.Password", + "name": "password" + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Settings.GetCategories": { + "description": "Retrieves all setting categories", + "params": [ + { + "$ref": "Setting.Level", + "default": "standard", + "name": "level" + }, + { + "default": "", + "name": "section", + "type": "string" + }, + { + "extends": "Item.Fields.Base", + "items": { + "enums": [ + "settings" + ], + "type": "string" + }, + "name": "properties" + } + ], + "returns": { + "properties": { + "categories": { + "items": { + "$ref": "Setting.Details.Category" + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "method" + }, + "Settings.GetSections": { + "description": "Retrieves all setting sections", + "params": [ + { + "$ref": "Setting.Level", + "default": "standard", + "name": "level" + }, + { + "extends": "Item.Fields.Base", + "items": { + "enums": [ + "categories" + ], + "type": "string" + }, + "name": "properties" + } + ], + "returns": { + "properties": { + "sections": { + "items": { + "$ref": "Setting.Details.Section" + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "method" + }, + "Settings.GetSettingValue": { + "description": "Retrieves the value of a setting", + "params": [ + { + "minLength": 1, + "name": "setting", + "required": true, + "type": "string" + } + ], + "returns": { + "properties": { + "value": { + "$ref": "Setting.Value.Extended", + "required": true + } + }, + "type": "object" + }, + "type": "method" + }, + "Settings.GetSettings": { + "description": "Retrieves all settings", + "params": [ + { + "$ref": "Setting.Level", + "default": "standard", + "name": "level" + }, + { + "name": "filter", + "type": [ + { + "additionalProperties": false, + "properties": { + "category": { + "minLength": 1, + "required": true, + "type": "string" + }, + "section": { + "minLength": 1, + "required": true, + "type": "string" + } + }, + "type": "object" + } + ] + } + ], + "returns": { + "properties": { + "settings": { + "items": { + "$ref": "Setting.Details.Setting" + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "method" + }, + "Settings.ResetSettingValue": { + "description": "Resets the value of a setting", + "params": [ + { + "minLength": 1, + "name": "setting", + "required": true, + "type": "string" + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Settings.SetSettingValue": { + "description": "Changes the value of a setting", + "params": [ + { + "minLength": 1, + "name": "setting", + "required": true, + "type": "string" + }, + { + "$ref": "Setting.Value.Extended", + "name": "value", + "required": true + } + ], + "returns": { + "type": "boolean" + }, + "type": "method" + }, + "System.EjectOpticalDrive": { + "description": "Ejects or closes the optical disc drive (if available)", + "params": [], + "returns": { + "type": "string" + }, + "type": "method" + }, + "System.GetProperties": { + "description": "Retrieves the values of the given properties", + "params": [ + { + "items": { + "$ref": "System.Property.Name" + }, + "name": "properties", + "required": true, + "type": "array", + "uniqueItems": true + } + ], + "returns": { + "$ref": "System.Property.Value" + }, + "type": "method" + }, + "System.Hibernate": { + "description": "Puts the system running Kodi into hibernate mode", + "params": [], + "returns": { + "type": "string" + }, + "type": "method" + }, + "System.Reboot": { + "description": "Reboots the system running Kodi", + "params": [], + "returns": { + "type": "string" + }, + "type": "method" + }, + "System.Shutdown": { + "description": "Shuts the system running Kodi down", + "params": [], + "returns": { + "type": "string" + }, + "type": "method" + }, + "System.Suspend": { + "description": "Suspends the system running Kodi", + "params": [], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Textures.GetTextures": { + "description": "Retrieve all textures", + "params": [ + { + "$ref": "Textures.Fields.Texture", + "name": "properties" + }, + { + "$ref": "List.Filter.Textures", + "name": "filter" + } + ], + "returns": { + "properties": { + "textures": { + "items": { + "$ref": "Textures.Details.Texture" + }, + "required": true, + "type": "array" + } + }, + "type": "object" + }, + "type": "method" + }, + "Textures.RemoveTexture": { + "description": "Remove the specified texture", + "params": [ + { + "$ref": "Library.Id", + "description": "Texture database identifier", + "name": "textureid", + "required": true + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "VideoLibrary.Clean": { + "description": "Cleans the video library for non-existent items", + "params": [ + { + "default": true, + "description": "Whether or not to show the progress bar or any other GUI dialog", + "name": "showdialogs", + "type": "boolean" + }, + { + "default": "video", + "description": "Content type to clean for", + "enums": [ + "video", + "movies", + "tvshows", + "musicvideos" + ], + "name": "content", + "type": "string" + }, + { + "default": "", + "description": "Path to the directory to clean up; performs a global cleanup if not specified", + "name": "directory", + "type": "string" + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "VideoLibrary.Export": { + "description": "Exports all items from the video library", + "params": [ + { + "name": "options", + "type": [ + { + "additionalProperties": false, + "properties": { + "path": { + "description": "Path to the directory to where the data should be exported", + "minLength": 1, + "required": true, + "type": "string" + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "actorthumbs": { + "default": false, + "description": "Whether to export actor thumbnails", + "type": "boolean" + }, + "images": { + "default": false, + "description": "Whether to export thumbnails and fanart images", + "type": "boolean" + }, + "overwrite": { + "default": false, + "description": "Whether to overwrite existing exported files", + "type": "boolean" + } + }, + "type": "object" + } + ] + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "VideoLibrary.GetAvailableArt": { + "description": "Retrieve all potential art URLs for a media item by art type", + "params": [ + { + "name": "item", + "required": true, + "type": [ + { + "additionalProperties": false, + "properties": { + "episodeid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "tvshowid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "seasonid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "movieid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "setid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "musicvideoid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + } + ] + }, + { + "default": "", + "name": "arttype", + "type": "string" + } + ], + "returns": { + "properties": { + "availableart": { + "items": { + "properties": { + "arttype": { + "required": true, + "type": "string" + }, + "previewurl": { + "default": "", + "description": "URL to a preview thumbnail of the image", + "type": "string" + }, + "url": { + "description": "URL to the original image", + "required": true, + "type": "string" + } + }, + "type": "object" + }, + "required": true, + "type": "array" + } + }, + "type": "object" + }, + "type": "method" + }, + "VideoLibrary.GetAvailableArtTypes": { + "description": "Retrieve a list of potential art types for a media item", + "params": [ + { + "name": "item", + "required": true, + "type": [ + { + "additionalProperties": false, + "properties": { + "episodeid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "tvshowid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "seasonid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "movieid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "setid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "musicvideoid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + } + ] + } + ], + "returns": { + "properties": { + "availablearttypes": { + "items": { + "type": "string" + }, + "required": true, + "type": "array" + } + }, + "type": "object" + }, + "type": "method" + }, + "VideoLibrary.GetEpisodeDetails": { + "description": "Retrieve details about a specific tv show episode", + "params": [ + { + "$ref": "Library.Id", + "name": "episodeid", + "required": true + }, + { + "$ref": "Video.Fields.Episode", + "name": "properties" + } + ], + "returns": { + "properties": { + "episodedetails": { + "$ref": "Video.Details.Episode" + } + }, + "type": "object" + }, + "type": "method" + }, + "VideoLibrary.GetEpisodes": { + "description": "Retrieve all tv show episodes", + "params": [ + { + "$ref": "Library.Id", + "default": -1, + "name": "tvshowid" + }, + { + "default": -1, + "minimum": 0, + "name": "season", + "type": "integer" + }, + { + "$ref": "Video.Fields.Episode", + "name": "properties" + }, + { + "$ref": "List.Limits", + "name": "limits" + }, + { + "$ref": "List.Sort", + "name": "sort" + }, + { + "name": "filter", + "type": [ + { + "additionalProperties": false, + "properties": { + "genreid": { + "$ref": "Library.Id", + "description": "Requires tvshowid to be set", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "genre": { + "description": "Requires tvshowid to be set", + "minLength": 1, + "required": true, + "type": "string" + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "year": { + "minimum": 0, + "required": true, + "type": "integer" + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "actor": { + "description": "Requires tvshowid to be set", + "minLength": 1, + "required": true, + "type": "string" + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "director": { + "minLength": 1, + "required": true, + "type": "string" + } + }, + "type": "object" + }, + { + "$ref": "List.Filter.Episodes" + } + ] + } + ], + "returns": { + "properties": { + "episodes": { + "items": { + "$ref": "Video.Details.Episode" + }, + "type": "array" + }, + "limits": { + "$ref": "List.LimitsReturned", + "required": true + } + }, + "type": "object" + }, + "type": "method" + }, + "VideoLibrary.GetGenres": { + "description": "Retrieve all genres", + "params": [ + { + "enums": [ + "movie", + "tvshow", + "musicvideo" + ], + "name": "type", + "required": true, + "type": "string" + }, + { + "$ref": "Library.Fields.Genre", + "name": "properties" + }, + { + "$ref": "List.Limits", + "name": "limits" + }, + { + "$ref": "List.Sort", + "name": "sort" + } + ], + "returns": { + "properties": { + "genres": { + "items": { + "$ref": "Library.Details.Genre" + }, + "required": true, + "type": "array" + }, + "limits": { + "$ref": "List.LimitsReturned", + "required": true + } + }, + "type": "object" + }, + "type": "method" + }, + "VideoLibrary.GetInProgressTVShows": { + "description": "Retrieve all in progress tvshows", + "params": [ + { + "$ref": "Video.Fields.TVShow", + "name": "properties" + }, + { + "$ref": "List.Limits", + "name": "limits" + }, + { + "$ref": "List.Sort", + "name": "sort" + } + ], + "returns": { + "properties": { + "limits": { + "$ref": "List.LimitsReturned", + "required": true + }, + "tvshows": { + "items": { + "$ref": "Video.Details.TVShow" + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "method" + }, + "VideoLibrary.GetMovieDetails": { + "description": "Retrieve details about a specific movie", + "params": [ + { + "$ref": "Library.Id", + "name": "movieid", + "required": true + }, + { + "$ref": "Video.Fields.Movie", + "name": "properties" + } + ], + "returns": { + "properties": { + "moviedetails": { + "$ref": "Video.Details.Movie" + } + }, + "type": "object" + }, + "type": "method" + }, + "VideoLibrary.GetMovieSetDetails": { + "description": "Retrieve details about a specific movie set", + "params": [ + { + "$ref": "Library.Id", + "name": "setid", + "required": true + }, + { + "$ref": "Video.Fields.MovieSet", + "name": "properties" + }, + { + "name": "movies", + "properties": { + "limits": { + "$ref": "List.Limits" + }, + "properties": { + "$ref": "Video.Fields.Movie" + }, + "sort": { + "$ref": "List.Sort" + } + }, + "type": "object" + } + ], + "returns": { + "properties": { + "setdetails": { + "$ref": "Video.Details.MovieSet.Extended" + } + }, + "type": "object" + }, + "type": "method" + }, + "VideoLibrary.GetMovieSets": { + "description": "Retrieve all movie sets", + "params": [ + { + "$ref": "Video.Fields.MovieSet", + "name": "properties" + }, + { + "$ref": "List.Limits", + "name": "limits" + }, + { + "$ref": "List.Sort", + "name": "sort" + } + ], + "returns": { + "properties": { + "limits": { + "$ref": "List.LimitsReturned", + "required": true + }, + "sets": { + "items": { + "$ref": "Video.Details.MovieSet" + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "method" + }, + "VideoLibrary.GetMovies": { + "description": "Retrieve all movies", + "params": [ + { + "$ref": "Video.Fields.Movie", + "name": "properties" + }, + { + "$ref": "List.Limits", + "name": "limits" + }, + { + "$ref": "List.Sort", + "name": "sort" + }, + { + "name": "filter", + "type": [ + { + "additionalProperties": false, + "properties": { + "genreid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "genre": { + "minLength": 1, + "required": true, + "type": "string" + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "year": { + "minimum": 0, + "required": true, + "type": "integer" + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "actor": { + "minLength": 1, + "required": true, + "type": "string" + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "director": { + "minLength": 1, + "required": true, + "type": "string" + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "studio": { + "minLength": 1, + "required": true, + "type": "string" + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "country": { + "minLength": 1, + "required": true, + "type": "string" + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "setid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "set": { + "minLength": 1, + "required": true, + "type": "string" + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "tag": { + "minLength": 1, + "required": true, + "type": "string" + } + }, + "type": "object" + }, + { + "$ref": "List.Filter.Movies" + } + ] + } + ], + "returns": { + "properties": { + "limits": { + "$ref": "List.LimitsReturned", + "required": true + }, + "movies": { + "items": { + "$ref": "Video.Details.Movie" + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "method" + }, + "VideoLibrary.GetMusicVideoDetails": { + "description": "Retrieve details about a specific music video", + "params": [ + { + "$ref": "Library.Id", + "name": "musicvideoid", + "required": true + }, + { + "$ref": "Video.Fields.MusicVideo", + "name": "properties" + } + ], + "returns": { + "properties": { + "musicvideodetails": { + "$ref": "Video.Details.MusicVideo" + } + }, + "type": "object" + }, + "type": "method" + }, + "VideoLibrary.GetMusicVideos": { + "description": "Retrieve all music videos", + "params": [ + { + "$ref": "Video.Fields.MusicVideo", + "name": "properties" + }, + { + "$ref": "List.Limits", + "name": "limits" + }, + { + "$ref": "List.Sort", + "name": "sort" + }, + { + "name": "filter", + "type": [ + { + "additionalProperties": false, + "properties": { + "artist": { + "minLength": 1, + "required": true, + "type": "string" + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "genreid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "genre": { + "minLength": 1, + "required": true, + "type": "string" + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "year": { + "minimum": 0, + "required": true, + "type": "integer" + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "director": { + "minLength": 1, + "required": true, + "type": "string" + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "studio": { + "minLength": 1, + "required": true, + "type": "string" + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "tag": { + "minLength": 1, + "required": true, + "type": "string" + } + }, + "type": "object" + }, + { + "$ref": "List.Filter.MusicVideos" + } + ] + } + ], + "returns": { + "properties": { + "limits": { + "$ref": "List.LimitsReturned", + "required": true + }, + "musicvideos": { + "items": { + "$ref": "Video.Details.MusicVideo" + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "method" + }, + "VideoLibrary.GetRecentlyAddedEpisodes": { + "description": "Retrieve all recently added tv episodes", + "params": [ + { + "$ref": "Video.Fields.Episode", + "name": "properties" + }, + { + "$ref": "List.Limits", + "name": "limits" + }, + { + "$ref": "List.Sort", + "name": "sort" + } + ], + "returns": { + "properties": { + "episodes": { + "items": { + "$ref": "Video.Details.Episode" + }, + "type": "array" + }, + "limits": { + "$ref": "List.LimitsReturned", + "required": true + } + }, + "type": "object" + }, + "type": "method" + }, + "VideoLibrary.GetRecentlyAddedMovies": { + "description": "Retrieve all recently added movies", + "params": [ + { + "$ref": "Video.Fields.Movie", + "name": "properties" + }, + { + "$ref": "List.Limits", + "name": "limits" + }, + { + "$ref": "List.Sort", + "name": "sort" + } + ], + "returns": { + "properties": { + "limits": { + "$ref": "List.LimitsReturned", + "required": true + }, + "movies": { + "items": { + "$ref": "Video.Details.Movie" + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "method" + }, + "VideoLibrary.GetRecentlyAddedMusicVideos": { + "description": "Retrieve all recently added music videos", + "params": [ + { + "$ref": "Video.Fields.MusicVideo", + "name": "properties" + }, + { + "$ref": "List.Limits", + "name": "limits" + }, + { + "$ref": "List.Sort", + "name": "sort" + } + ], + "returns": { + "properties": { + "limits": { + "$ref": "List.LimitsReturned", + "required": true + }, + "musicvideos": { + "items": { + "$ref": "Video.Details.MusicVideo" + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "method" + }, + "VideoLibrary.GetSeasonDetails": { + "description": "Retrieve details about a specific tv show season", + "params": [ + { + "$ref": "Library.Id", + "name": "seasonid", + "required": true + }, + { + "$ref": "Video.Fields.Season", + "name": "properties" + } + ], + "returns": { + "properties": { + "seasondetails": { + "$ref": "Video.Details.Season" + } + }, + "type": "object" + }, + "type": "method" + }, + "VideoLibrary.GetSeasons": { + "description": "Retrieve all tv seasons", + "params": [ + { + "$ref": "Library.Id", + "default": -1, + "name": "tvshowid" + }, + { + "$ref": "Video.Fields.Season", + "name": "properties" + }, + { + "$ref": "List.Limits", + "name": "limits" + }, + { + "$ref": "List.Sort", + "name": "sort" + } + ], + "returns": { + "properties": { + "limits": { + "$ref": "List.LimitsReturned", + "required": true + }, + "seasons": { + "items": { + "$ref": "Video.Details.Season" + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "method" + }, + "VideoLibrary.GetTVShowDetails": { + "description": "Retrieve details about a specific tv show", + "params": [ + { + "$ref": "Library.Id", + "name": "tvshowid", + "required": true + }, + { + "$ref": "Video.Fields.TVShow", + "name": "properties" + } + ], + "returns": { + "properties": { + "tvshowdetails": { + "$ref": "Video.Details.TVShow" + } + }, + "type": "object" + }, + "type": "method" + }, + "VideoLibrary.GetTVShows": { + "description": "Retrieve all tv shows", + "params": [ + { + "$ref": "Video.Fields.TVShow", + "name": "properties" + }, + { + "$ref": "List.Limits", + "name": "limits" + }, + { + "$ref": "List.Sort", + "name": "sort" + }, + { + "name": "filter", + "type": [ + { + "additionalProperties": false, + "properties": { + "genreid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "genre": { + "minLength": 1, + "required": true, + "type": "string" + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "year": { + "minimum": 0, + "required": true, + "type": "integer" + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "actor": { + "minLength": 1, + "required": true, + "type": "string" + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "studio": { + "minLength": 1, + "required": true, + "type": "string" + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "tag": { + "minLength": 1, + "required": true, + "type": "string" + } + }, + "type": "object" + }, + { + "$ref": "List.Filter.TVShows" + } + ] + } + ], + "returns": { + "properties": { + "limits": { + "$ref": "List.LimitsReturned", + "required": true + }, + "tvshows": { + "items": { + "$ref": "Video.Details.TVShow" + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "method" + }, + "VideoLibrary.GetTags": { + "description": "Retrieve all tags", + "params": [ + { + "enums": [ + "movie", + "tvshow", + "musicvideo" + ], + "name": "type", + "required": true, + "type": "string" + }, + { + "$ref": "Library.Fields.Tag", + "name": "properties" + }, + { + "$ref": "List.Limits", + "name": "limits" + }, + { + "$ref": "List.Sort", + "name": "sort" + } + ], + "returns": { + "properties": { + "limits": { + "$ref": "List.LimitsReturned", + "required": true + }, + "tags": { + "items": { + "$ref": "Library.Details.Tag" + }, + "required": true, + "type": "array" + } + }, + "type": "object" + }, + "type": "method" + }, + "VideoLibrary.RefreshEpisode": { + "description": "Refresh the given episode in the library", + "params": [ + { + "$ref": "Library.Id", + "name": "episodeid", + "required": true + }, + { + "default": false, + "description": "Whether or not to ignore a local NFO if present.", + "name": "ignorenfo", + "type": "boolean" + }, + { + "default": "", + "description": "Title to use for searching (instead of determining it from the item's filename/path).", + "name": "title", + "type": "string" + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "VideoLibrary.RefreshMovie": { + "description": "Refresh the given movie in the library", + "params": [ + { + "$ref": "Library.Id", + "name": "movieid", + "required": true + }, + { + "default": false, + "description": "Whether or not to ignore a local NFO if present.", + "name": "ignorenfo", + "type": "boolean" + }, + { + "default": "", + "description": "Title to use for searching (instead of determining it from the item's filename/path).", + "name": "title", + "type": "string" + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "VideoLibrary.RefreshMusicVideo": { + "description": "Refresh the given music video in the library", + "params": [ + { + "$ref": "Library.Id", + "name": "musicvideoid", + "required": true + }, + { + "default": false, + "description": "Whether or not to ignore a local NFO if present.", + "name": "ignorenfo", + "type": "boolean" + }, + { + "default": "", + "description": "Title to use for searching (instead of determining it from the item's filename/path).", + "name": "title", + "type": "string" + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "VideoLibrary.RefreshTVShow": { + "description": "Refresh the given tv show in the library", + "params": [ + { + "$ref": "Library.Id", + "name": "tvshowid", + "required": true + }, + { + "default": false, + "description": "Whether or not to ignore a local NFO if present.", + "name": "ignorenfo", + "type": "boolean" + }, + { + "default": false, + "description": "Whether or not to refresh all episodes belonging to the TV show.", + "name": "refreshepisodes", + "type": "boolean" + }, + { + "default": "", + "description": "Title to use for searching (instead of determining it from the item's filename/path).", + "name": "title", + "type": "string" + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "VideoLibrary.RemoveEpisode": { + "description": "Removes the given episode from the library", + "params": [ + { + "$ref": "Library.Id", + "name": "episodeid", + "required": true + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "VideoLibrary.RemoveMovie": { + "description": "Removes the given movie from the library", + "params": [ + { + "$ref": "Library.Id", + "name": "movieid", + "required": true + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "VideoLibrary.RemoveMusicVideo": { + "description": "Removes the given music video from the library", + "params": [ + { + "$ref": "Library.Id", + "name": "musicvideoid", + "required": true + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "VideoLibrary.RemoveTVShow": { + "description": "Removes the given tv show from the library", + "params": [ + { + "$ref": "Library.Id", + "name": "tvshowid", + "required": true + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "VideoLibrary.Scan": { + "description": "Scans the video sources for new library items", + "params": [ + { + "default": "", + "name": "directory", + "type": "string" + }, + { + "default": true, + "description": "Whether or not to show the progress bar or any other GUI dialog", + "name": "showdialogs", + "type": "boolean" + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "VideoLibrary.SetEpisodeDetails": { + "description": "Update the given episode with the given details", + "params": [ + { + "$ref": "Library.Id", + "name": "episodeid", + "required": true + }, + { + "$ref": "Optional.String", + "default": null, + "name": "title" + }, + { + "$ref": "Optional.Integer", + "default": null, + "name": "playcount" + }, + { + "$ref": "Optional.Integer", + "default": null, + "description": "Runtime in seconds", + "name": "runtime" + }, + { + "default": null, + "name": "director", + "type": [ + { + "type": "null" + }, + { + "$ref": "Array.String" + } + ] + }, + { + "$ref": "Optional.String", + "default": null, + "name": "plot" + }, + { + "$ref": "Optional.Number", + "default": null, + "name": "rating" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "votes" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "lastplayed" + }, + { + "default": null, + "name": "writer", + "type": [ + { + "type": "null" + }, + { + "$ref": "Array.String" + } + ] + }, + { + "$ref": "Optional.String", + "default": null, + "name": "firstaired" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "productioncode" + }, + { + "$ref": "Optional.Integer", + "default": null, + "name": "season" + }, + { + "$ref": "Optional.Integer", + "default": null, + "name": "episode" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "originaltitle" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "thumbnail" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "fanart" + }, + { + "default": null, + "name": "art", + "type": [ + { + "type": "null" + }, + { + "$ref": "Media.Artwork.Set" + } + ] + }, + { + "default": null, + "name": "resume", + "type": [ + { + "type": "null" + }, + { + "$ref": "Video.Resume" + } + ] + }, + { + "$ref": "Optional.Integer", + "default": null, + "name": "userrating" + }, + { + "$ref": "Video.Ratings.Set", + "name": "ratings" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "dateadded" + }, + { + "default": null, + "name": "uniqueid", + "type": [ + { + "type": "null" + }, + { + "$ref": "Media.UniqueID.Set" + } + ] + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "VideoLibrary.SetMovieDetails": { + "description": "Update the given movie with the given details", + "params": [ + { + "$ref": "Library.Id", + "name": "movieid", + "required": true + }, + { + "$ref": "Optional.String", + "default": null, + "name": "title" + }, + { + "$ref": "Optional.Integer", + "default": null, + "name": "playcount" + }, + { + "$ref": "Optional.Integer", + "default": null, + "description": "Runtime in seconds", + "name": "runtime" + }, + { + "default": null, + "name": "director", + "type": [ + { + "type": "null" + }, + { + "$ref": "Array.String" + } + ] + }, + { + "default": null, + "name": "studio", + "type": [ + { + "type": "null" + }, + { + "$ref": "Array.String" + } + ] + }, + { + "$ref": "Optional.Integer", + "default": null, + "description": "linked with premiered. Overridden by premiered parameter", + "name": "year" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "plot" + }, + { + "default": null, + "name": "genre", + "type": [ + { + "type": "null" + }, + { + "$ref": "Array.String" + } + ] + }, + { + "$ref": "Optional.Number", + "default": null, + "name": "rating" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "mpaa" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "imdbnumber" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "votes" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "lastplayed" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "originaltitle" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "trailer" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "tagline" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "plotoutline" + }, + { + "default": null, + "name": "writer", + "type": [ + { + "type": "null" + }, + { + "$ref": "Array.String" + } + ] + }, + { + "default": null, + "name": "country", + "type": [ + { + "type": "null" + }, + { + "$ref": "Array.String" + } + ] + }, + { + "$ref": "Optional.Integer", + "default": null, + "name": "top250" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "sorttitle" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "set" + }, + { + "default": null, + "name": "showlink", + "type": [ + { + "type": "null" + }, + { + "$ref": "Array.String" + } + ] + }, + { + "$ref": "Optional.String", + "default": null, + "name": "thumbnail" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "fanart" + }, + { + "default": null, + "name": "tag", + "type": [ + { + "type": "null" + }, + { + "$ref": "Array.String" + } + ] + }, + { + "default": null, + "name": "art", + "type": [ + { + "type": "null" + }, + { + "$ref": "Media.Artwork.Set" + } + ] + }, + { + "default": null, + "name": "resume", + "type": [ + { + "type": "null" + }, + { + "$ref": "Video.Resume" + } + ] + }, + { + "$ref": "Optional.Integer", + "default": null, + "name": "userrating" + }, + { + "$ref": "Video.Ratings.Set", + "name": "ratings" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "dateadded" + }, + { + "$ref": "Optional.String", + "default": null, + "description": "linked with year. Overrides year", + "name": "premiered" + }, + { + "default": null, + "name": "uniqueid", + "type": [ + { + "type": "null" + }, + { + "$ref": "Media.UniqueID.Set" + } + ] + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "VideoLibrary.SetMovieSetDetails": { + "description": "Update the given movie set with the given details", + "params": [ + { + "$ref": "Library.Id", + "name": "setid", + "required": true + }, + { + "$ref": "Optional.String", + "default": null, + "name": "title" + }, + { + "default": null, + "name": "art", + "type": [ + { + "type": "null" + }, + { + "$ref": "Media.Artwork.Set" + } + ] + }, + { + "$ref": "Optional.String", + "default": null, + "name": "plot" + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "VideoLibrary.SetMusicVideoDetails": { + "description": "Update the given music video with the given details", + "params": [ + { + "$ref": "Library.Id", + "name": "musicvideoid", + "required": true + }, + { + "$ref": "Optional.String", + "default": null, + "name": "title" + }, + { + "$ref": "Optional.Integer", + "default": null, + "name": "playcount" + }, + { + "$ref": "Optional.Integer", + "default": null, + "description": "Runtime in seconds", + "name": "runtime" + }, + { + "default": null, + "name": "director", + "type": [ + { + "type": "null" + }, + { + "$ref": "Array.String" + } + ] + }, + { + "default": null, + "name": "studio", + "type": [ + { + "type": "null" + }, + { + "$ref": "Array.String" + } + ] + }, + { + "$ref": "Optional.Integer", + "default": null, + "description": "linked with premiered. Overridden by premiered parameter", + "name": "year" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "plot" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "album" + }, + { + "default": null, + "name": "artist", + "type": [ + { + "type": "null" + }, + { + "$ref": "Array.String" + } + ] + }, + { + "default": null, + "name": "genre", + "type": [ + { + "type": "null" + }, + { + "$ref": "Array.String" + } + ] + }, + { + "$ref": "Optional.Integer", + "default": null, + "name": "track" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "lastplayed" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "thumbnail" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "fanart" + }, + { + "default": null, + "name": "tag", + "type": [ + { + "type": "null" + }, + { + "$ref": "Array.String" + } + ] + }, + { + "default": null, + "name": "art", + "type": [ + { + "type": "null" + }, + { + "$ref": "Media.Artwork.Set" + } + ] + }, + { + "default": null, + "name": "resume", + "type": [ + { + "type": "null" + }, + { + "$ref": "Video.Resume" + } + ] + }, + { + "$ref": "Optional.Number", + "default": null, + "name": "rating" + }, + { + "$ref": "Optional.Integer", + "default": null, + "name": "userrating" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "dateadded" + }, + { + "$ref": "Optional.String", + "default": null, + "description": "linked with year. Overrides year", + "name": "premiered" + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "VideoLibrary.SetSeasonDetails": { + "description": "Update the given season with the given details", + "params": [ + { + "$ref": "Library.Id", + "name": "seasonid", + "required": true + }, + { + "default": null, + "name": "art", + "type": [ + { + "type": "null" + }, + { + "$ref": "Media.Artwork.Set" + } + ] + }, + { + "$ref": "Optional.Integer", + "default": null, + "name": "userrating" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "title" + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "VideoLibrary.SetTVShowDetails": { + "description": "Update the given tvshow with the given details", + "params": [ + { + "$ref": "Library.Id", + "name": "tvshowid", + "required": true + }, + { + "$ref": "Optional.String", + "default": null, + "name": "title" + }, + { + "$ref": "Optional.Integer", + "default": null, + "name": "playcount" + }, + { + "default": null, + "name": "studio", + "type": [ + { + "type": "null" + }, + { + "$ref": "Array.String" + } + ] + }, + { + "$ref": "Optional.String", + "default": null, + "name": "plot" + }, + { + "default": null, + "name": "genre", + "type": [ + { + "type": "null" + }, + { + "$ref": "Array.String" + } + ] + }, + { + "$ref": "Optional.Number", + "default": null, + "name": "rating" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "mpaa" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "imdbnumber" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "premiered" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "votes" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "lastplayed" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "originaltitle" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "sorttitle" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "episodeguide" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "thumbnail" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "fanart" + }, + { + "default": null, + "name": "tag", + "type": [ + { + "type": "null" + }, + { + "$ref": "Array.String" + } + ] + }, + { + "default": null, + "name": "art", + "type": [ + { + "type": "null" + }, + { + "$ref": "Media.Artwork.Set" + } + ] + }, + { + "$ref": "Optional.Integer", + "default": null, + "name": "userrating" + }, + { + "$ref": "Video.Ratings.Set", + "name": "ratings" + }, + { + "$ref": "Optional.String", + "default": null, + "name": "dateadded" + }, + { + "$ref": "Optional.Integer", + "default": null, + "description": "Runtime in seconds", + "name": "runtime" + }, + { + "$ref": "Optional.String", + "default": null, + "description": "Valid values: 'returning series', 'in production', 'planned', 'cancelled', 'ended'", + "name": "status" + }, + { + "default": null, + "name": "uniqueid", + "type": [ + { + "type": "null" + }, + { + "$ref": "Media.UniqueID.Set" + } + ] + } + ], + "returns": { + "type": "string" + }, + "type": "method" + }, + "XBMC.GetInfoBooleans": { + "description": "Retrieve info booleans about Kodi and the system", + "params": [ + { + "items": { + "type": "string" + }, + "minItems": 1, + "name": "booleans", + "required": true, + "type": "array" + } + ], + "returns": { + "additionalProperties": { + "default": "", + "type": "string" + }, + "description": "Object containing key-value pairs of the retrieved info booleans", + "type": "object" + }, + "type": "method" + }, + "XBMC.GetInfoLabels": { + "description": "Retrieve info labels about Kodi and the system", + "params": [ + { + "description": "See http://kodi.wiki/view/InfoLabels for a list of possible info labels", + "items": { + "type": "string" + }, + "minItems": 1, + "name": "labels", + "required": true, + "type": "array" + } + ], + "returns": { + "additionalProperties": { + "default": "", + "type": "string" + }, + "description": "Object containing key-value pairs of the retrieved info labels", + "type": "object" + }, + "type": "method" + } + }, + "notifications": { + "Application.OnVolumeChanged": { + "description": "The volume of the application has changed.", + "params": [ + { + "name": "sender", + "required": true, + "type": "string" + }, + { + "name": "data", + "properties": { + "muted": { + "required": true, + "type": "boolean" + }, + "volume": { + "maximum": 100, + "minimum": 0, + "required": true, + "type": "integer" + } + }, + "required": true, + "type": "object" + } + ], + "returns": null, + "type": "notification" + }, + "AudioLibrary.OnCleanFinished": { + "description": "The audio library has been cleaned.", + "params": [ + { + "name": "sender", + "required": true, + "type": "string" + }, + { + "name": "data", + "required": true, + "type": "null" + } + ], + "returns": null, + "type": "notification" + }, + "AudioLibrary.OnCleanStarted": { + "description": "An audio library clean operation has started.", + "params": [ + { + "name": "sender", + "required": true, + "type": "string" + }, + { + "name": "data", + "required": true, + "type": "null" + } + ], + "returns": null, + "type": "notification" + }, + "AudioLibrary.OnExport": { + "description": "An audio library export has finished.", + "params": [ + { + "name": "sender", + "required": true, + "type": "string" + }, + { + "name": "data", + "properties": { + "failcount": { + "default": 0, + "minimum": 0, + "required": false, + "type": "integer" + }, + "file": { + "default": "", + "required": false, + "type": "string" + } + }, + "required": false, + "type": "object" + } + ], + "returns": null, + "type": "notification" + }, + "AudioLibrary.OnRemove": { + "description": "An audio item has been removed.", + "params": [ + { + "name": "sender", + "required": true, + "type": "string" + }, + { + "name": "data", + "properties": { + "id": { + "$ref": "Library.Id", + "required": true + }, + "transaction": { + "$ref": "Optional.Boolean", + "description": "True if the removal is being performed within a transaction." + }, + "type": { + "$ref": "Notifications.Library.Audio.Type", + "required": true + } + }, + "required": true, + "type": "object" + } + ], + "returns": null, + "type": "notification" + }, + "AudioLibrary.OnScanFinished": { + "description": "Scanning the audio library has been finished.", + "params": [ + { + "name": "sender", + "required": true, + "type": "string" + }, + { + "name": "data", + "required": true, + "type": "null" + } + ], + "returns": null, + "type": "notification" + }, + "AudioLibrary.OnScanStarted": { + "description": "An audio library scan has started.", + "params": [ + { + "name": "sender", + "required": true, + "type": "string" + }, + { + "name": "data", + "required": true, + "type": "null" + } + ], + "returns": null, + "type": "notification" + }, + "AudioLibrary.OnUpdate": { + "description": "An audio item has been updated.", + "params": [ + { + "name": "sender", + "required": true, + "type": "string" + }, + { + "name": "data", + "properties": { + "added": { + "$ref": "Optional.Boolean", + "description": "True if the update is for a newly added item." + }, + "id": { + "$ref": "Library.Id", + "required": true + }, + "transaction": { + "$ref": "Optional.Boolean", + "description": "True if the update is being performed within a transaction." + }, + "type": { + "enum": [ + "song" + ], + "id": "Notifications.Library.Audio.Type", + "required": true, + "type": "string" + } + }, + "required": true, + "type": "object" + } + ], + "returns": null, + "type": "notification" + }, + "GUI.OnDPMSActivated": { + "description": "Energy saving/DPMS has been activated.", + "params": [ + { + "name": "sender", + "required": true, + "type": "string" + }, + { + "name": "data", + "required": true, + "type": "null" + } + ], + "returns": null, + "type": "notification" + }, + "GUI.OnDPMSDeactivated": { + "description": "Energy saving/DPMS has been deactivated.", + "params": [ + { + "name": "sender", + "required": true, + "type": "string" + }, + { + "name": "data", + "required": true, + "type": "null" + } + ], + "returns": null, + "type": "notification" + }, + "GUI.OnScreensaverActivated": { + "description": "The screensaver has been activated.", + "params": [ + { + "name": "sender", + "required": true, + "type": "string" + }, + { + "name": "data", + "required": true, + "type": "null" + } + ], + "returns": null, + "type": "notification" + }, + "GUI.OnScreensaverDeactivated": { + "description": "The screensaver has been deactivated.", + "params": [ + { + "name": "sender", + "required": true, + "type": "string" + }, + { + "name": "data", + "properties": { + "shuttingdown": { + "required": true, + "type": "boolean" + } + }, + "required": true, + "type": "object" + } + ], + "returns": null, + "type": "notification" + }, + "Input.OnInputFinished": { + "description": "The user has provided the requested input.", + "params": [ + { + "name": "sender", + "required": true, + "type": "string" + }, + { + "name": "data", + "required": true, + "type": "null" + } + ], + "returns": null, + "type": "notification" + }, + "Input.OnInputRequested": { + "description": "The user is requested to provide some information.", + "params": [ + { + "name": "sender", + "required": true, + "type": "string" + }, + { + "name": "data", + "properties": { + "title": { + "type": "string" + }, + "type": { + "enum": [ + "keyboard", + "time", + "date", + "ip", + "password", + "numericpassword", + "number", + "seconds" + ], + "required": true, + "type": "string" + }, + "value": { + "required": true, + "type": "string" + } + }, + "required": true, + "type": "object" + } + ], + "returns": null, + "type": "notification" + }, + "Player.OnAVChange": { + "description": "Audio- or videostream has changed. If there is no ID available extra information will be provided.", + "params": [ + { + "name": "sender", + "required": true, + "type": "string" + }, + { + "$ref": "Player.Notifications.Data", + "name": "data", + "required": true + } + ], + "returns": null, + "type": "notification" + }, + "Player.OnAVStart": { + "description": "Playback of a media item has been started and first frame is available. If there is no ID available extra information will be provided.", + "params": [ + { + "name": "sender", + "required": true, + "type": "string" + }, + { + "$ref": "Player.Notifications.Data", + "name": "data", + "required": true + } + ], + "returns": null, + "type": "notification" + }, + "Player.OnPause": { + "description": "Playback of a media item has been paused. If there is no ID available extra information will be provided.", + "params": [ + { + "name": "sender", + "required": true, + "type": "string" + }, + { + "$ref": "Player.Notifications.Data", + "name": "data", + "required": true + } + ], + "returns": null, + "type": "notification" + }, + "Player.OnPlay": { + "description": "Playback of a media item has been started or the playback speed has changed. If there is no ID available extra information will be provided.", + "params": [ + { + "name": "sender", + "required": true, + "type": "string" + }, + { + "$ref": "Player.Notifications.Data", + "name": "data", + "required": true + } + ], + "returns": null, + "type": "notification" + }, + "Player.OnPropertyChanged": { + "description": "A property of the playing items has changed.", + "params": [ + { + "name": "sender", + "required": true, + "type": "string" + }, + { + "name": "data", + "properties": { + "player": { + "$ref": "Player.Notifications.Player", + "required": true + }, + "property": { + "$ref": "Player.Property.Value" + } + }, + "required": true, + "type": "object" + } + ], + "returns": null, + "type": "notification" + }, + "Player.OnResume": { + "description": "Playback of a media item has been resumed. If there is no ID available extra information will be provided.", + "params": [ + { + "name": "sender", + "required": true, + "type": "string" + }, + { + "$ref": "Player.Notifications.Data", + "name": "data", + "required": true + } + ], + "returns": null, + "type": "notification" + }, + "Player.OnSeek": { + "description": "The playback position has been changed. If there is no ID available extra information will be provided.", + "params": [ + { + "name": "sender", + "required": true, + "type": "string" + }, + { + "name": "data", + "properties": { + "item": { + "$ref": "Notifications.Item" + }, + "player": { + "$ref": "Player.Notifications.Player.Seek", + "required": true + } + }, + "required": true, + "type": "object" + } + ], + "returns": null, + "type": "notification" + }, + "Player.OnSpeedChanged": { + "description": "Speed of the playback of a media item has been changed. If there is no ID available extra information will be provided.", + "params": [ + { + "name": "sender", + "required": true, + "type": "string" + }, + { + "$ref": "Player.Notifications.Data", + "name": "data", + "required": true + } + ], + "returns": null, + "type": "notification" + }, + "Player.OnStop": { + "description": "Playback of a media item has been stopped. If there is no ID available extra information will be provided.", + "params": [ + { + "name": "sender", + "required": true, + "type": "string" + }, + { + "name": "data", + "properties": { + "end": { + "description": "Whether the player has reached the end of the playable item(s) or not", + "required": true, + "type": "boolean" + }, + "item": { + "$ref": "Notifications.Item" + } + }, + "required": true, + "type": "object" + } + ], + "returns": null, + "type": "notification" + }, + "Playlist.OnAdd": { + "description": "A playlist item has been added.", + "params": [ + { + "name": "sender", + "required": true, + "type": "string" + }, + { + "name": "data", + "properties": { + "item": { + "$ref": "Notifications.Item" + }, + "playlistid": { + "$ref": "Playlist.Id", + "required": true + }, + "position": { + "$ref": "Playlist.Position" + } + }, + "required": true, + "type": "object" + } + ], + "returns": null, + "type": "notification" + }, + "Playlist.OnClear": { + "description": "A playlist item has been cleared.", + "params": [ + { + "name": "sender", + "required": true, + "type": "string" + }, + { + "name": "data", + "properties": { + "playlistid": { + "$ref": "Playlist.Id", + "required": true + } + }, + "required": true, + "type": "object" + } + ], + "returns": null, + "type": "notification" + }, + "Playlist.OnRemove": { + "description": "A playlist item has been removed.", + "params": [ + { + "name": "sender", + "required": true, + "type": "string" + }, + { + "name": "data", + "properties": { + "playlistid": { + "$ref": "Playlist.Id", + "required": true + }, + "position": { + "$ref": "Playlist.Position" + } + }, + "required": true, + "type": "object" + } + ], + "returns": null, + "type": "notification" + }, + "System.OnLowBattery": { + "description": "The system is on low battery.", + "params": [ + { + "name": "sender", + "required": true, + "type": "string" + }, + { + "name": "data", + "required": true, + "type": "null" + } + ], + "returns": null, + "type": "notification" + }, + "System.OnQuit": { + "description": "Kodi will be closed.", + "params": [ + { + "name": "sender", + "required": true, + "type": "string" + }, + { + "name": "data", + "properties": { + "exitcode": { + "minimum": 0, + "required": true, + "type": "integer" + } + }, + "required": true, + "type": "object" + } + ], + "returns": null, + "type": "notification" + }, + "System.OnRestart": { + "description": "The system will be restarted.", + "params": [ + { + "name": "sender", + "required": true, + "type": "string" + }, + { + "name": "data", + "required": true, + "type": "null" + } + ], + "returns": null, + "type": "notification" + }, + "System.OnSleep": { + "description": "The system will be suspended.", + "params": [ + { + "name": "sender", + "required": true, + "type": "string" + }, + { + "name": "data", + "required": true, + "type": "null" + } + ], + "returns": null, + "type": "notification" + }, + "System.OnWake": { + "description": "The system woke up from suspension.", + "params": [ + { + "name": "sender", + "required": true, + "type": "string" + }, + { + "name": "data", + "required": true, + "type": "null" + } + ], + "returns": null, + "type": "notification" + }, + "VideoLibrary.OnCleanFinished": { + "description": "The video library has been cleaned.", + "params": [ + { + "name": "sender", + "required": true, + "type": "string" + }, + { + "name": "data", + "required": true, + "type": "null" + } + ], + "returns": null, + "type": "notification" + }, + "VideoLibrary.OnCleanStarted": { + "description": "A video library clean operation has started.", + "params": [ + { + "name": "sender", + "required": true, + "type": "string" + }, + { + "name": "data", + "required": true, + "type": "null" + } + ], + "returns": null, + "type": "notification" + }, + "VideoLibrary.OnExport": { + "description": "A video library export has finished.", + "params": [ + { + "name": "sender", + "required": true, + "type": "string" + }, + { + "name": "data", + "properties": { + "failcount": { + "default": 0, + "minimum": 0, + "required": false, + "type": "integer" + }, + "file": { + "default": "", + "required": false, + "type": "string" + }, + "root": { + "default": "", + "required": false, + "type": "string" + } + }, + "required": false, + "type": "object" + } + ], + "returns": null, + "type": "notification" + }, + "VideoLibrary.OnRefresh": { + "description": "The video library has been refreshed and a home screen reload might be necessary.", + "params": [ + { + "name": "sender", + "required": true, + "type": "string" + }, + { + "name": "data", + "required": true, + "type": "null" + } + ], + "returns": null, + "type": "notification" + }, + "VideoLibrary.OnRemove": { + "description": "A video item has been removed.", + "params": [ + { + "name": "sender", + "required": true, + "type": "string" + }, + { + "name": "data", + "properties": { + "id": { + "$ref": "Library.Id", + "required": true + }, + "transaction": { + "$ref": "Optional.Boolean", + "description": "True if the removal is being performed within a transaction." + }, + "type": { + "$ref": "Notifications.Library.Video.Type", + "required": true + } + }, + "required": true, + "type": "object" + } + ], + "returns": null, + "type": "notification" + }, + "VideoLibrary.OnScanFinished": { + "description": "Scanning the video library has been finished.", + "params": [ + { + "name": "sender", + "required": true, + "type": "string" + }, + { + "name": "data", + "required": true, + "type": "null" + } + ], + "returns": null, + "type": "notification" + }, + "VideoLibrary.OnScanStarted": { + "description": "A video library scan has started.", + "params": [ + { + "name": "sender", + "required": true, + "type": "string" + }, + { + "name": "data", + "required": true, + "type": "null" + } + ], + "returns": null, + "type": "notification" + }, + "VideoLibrary.OnUpdate": { + "description": "A video item has been updated.", + "params": [ + { + "name": "sender", + "required": true, + "type": "string" + }, + { + "name": "data", + "properties": { + "added": { + "$ref": "Optional.Boolean", + "description": "True if the update is for a newly added item." + }, + "id": { + "$ref": "Library.Id", + "required": true + }, + "playcount": { + "default": -1, + "minimum": 0, + "type": "integer" + }, + "transaction": { + "$ref": "Optional.Boolean", + "description": "True if the update is being performed within a transaction." + }, + "type": { + "enum": [ + "movie", + "tvshow", + "episode", + "musicvideo" + ], + "id": "Notifications.Library.Video.Type", + "required": true, + "type": "string" + } + }, + "required": true, + "type": "object" + } + ], + "returns": null, + "type": "notification" + } + }, + "types": { + "Addon.Content": { + "default": "unknown", + "enums": [ + "unknown", + "video", + "audio", + "image", + "executable" + ], + "id": "Addon.Content", + "type": "string" + }, + "Addon.Details": { + "extends": "Item.Details.Base", + "id": "Addon.Details", + "properties": { + "addonid": { + "required": true, + "type": "string" + }, + "author": { + "default": "", + "type": "string" + }, + "broken": { + "default": null, + "type": [ + { + "type": "boolean" + }, + { + "type": "string" + } + ] + }, + "dependencies": { + "items": { + "properties": { + "addonid": { + "required": true, + "type": "string" + }, + "optional": { + "required": true, + "type": "boolean" + }, + "version": { + "required": true, + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "deprecated": { + "default": null, + "type": [ + { + "type": "boolean" + }, + { + "type": "string" + } + ] + }, + "description": { + "default": "", + "type": "string" + }, + "disclaimer": { + "default": "", + "type": "string" + }, + "enabled": { + "default": false, + "type": "boolean" + }, + "extrainfo": { + "items": { + "properties": { + "key": { + "required": true, + "type": "string" + }, + "value": { + "required": true, + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "fanart": { + "default": "", + "type": "string" + }, + "installed": { + "default": false, + "type": "boolean" + }, + "name": { + "default": "", + "type": "string" + }, + "path": { + "default": "", + "type": "string" + }, + "rating": { + "default": 0, + "type": "integer" + }, + "summary": { + "default": "", + "type": "string" + }, + "thumbnail": { + "default": "", + "type": "string" + }, + "type": { + "$ref": "Addon.Types", + "required": true + }, + "version": { + "default": "", + "type": "string" + } + } + }, + "Addon.Fields": { + "extends": "Item.Fields.Base", + "id": "Addon.Fields", + "items": { + "enums": [ + "name", + "version", + "summary", + "description", + "path", + "author", + "thumbnail", + "disclaimer", + "fanart", + "dependencies", + "broken", + "extrainfo", + "rating", + "enabled", + "installed", + "deprecated" + ], + "type": "string" + } + }, + "Addon.Types": { + "default": "unknown", + "enums": [ + "unknown", + "xbmc.player.musicviz", + "xbmc.gui.skin", + "kodi.pvrclient", + "kodi.inputstream", + "kodi.gameclient", + "kodi.peripheral", + "xbmc.python.script", + "xbmc.python.weather", + "xbmc.subtitle.module", + "xbmc.python.lyrics", + "xbmc.metadata.scraper.albums", + "xbmc.metadata.scraper.artists", + "xbmc.metadata.scraper.movies", + "xbmc.metadata.scraper.musicvideos", + "xbmc.metadata.scraper.tvshows", + "xbmc.ui.screensaver", + "xbmc.python.pluginsource", + "xbmc.addon.repository", + "xbmc.webinterface", + "xbmc.service", + "kodi.audioencoder", + "kodi.context.item", + "kodi.audiodecoder", + "kodi.resource.images", + "kodi.resource.language", + "kodi.resource.uisounds", + "kodi.resource.games", + "kodi.resource.font", + "kodi.vfs", + "kodi.imagedecoder", + "xbmc.metadata.scraper.library", + "xbmc.python.library", + "xbmc.python.module", + "kodi.game.controller", + "", + "xbmc.addon.video", + "xbmc.addon.audio", + "xbmc.addon.image", + "xbmc.addon.executable", + "kodi.addon.game" + ], + "id": "Addon.Types", + "type": "string" + }, + "Application.Property.Name": { + "default": "volume", + "enums": [ + "volume", + "muted", + "name", + "version", + "sorttokens", + "language" + ], + "id": "Application.Property.Name", + "type": "string" + }, + "Application.Property.Value": { + "id": "Application.Property.Value", + "properties": { + "language": { + "default": "", + "description": "Current language code and region e.g. en_GB", + "minLength": 1, + "type": "string" + }, + "muted": { + "default": false, + "type": "boolean" + }, + "name": { + "default": "", + "minLength": 1, + "type": "string" + }, + "sorttokens": { + "$ref": "Array.String", + "description": "Articles ignored during sorting when ignorearticle is enabled." + }, + "version": { + "properties": { + "major": { + "minimum": 0, + "required": true, + "type": "integer" + }, + "minor": { + "minimum": 0, + "required": true, + "type": "integer" + }, + "revision": { + "default": null, + "type": [ + { + "type": "string" + }, + { + "type": "integer" + } + ] + }, + "tag": { + "enums": [ + "prealpha", + "alpha", + "beta", + "releasecandidate", + "stable" + ], + "required": true, + "type": "string" + }, + "tagversion": { + "default": "", + "type": "string" + } + }, + "type": "object" + }, + "volume": { + "default": 0, + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "type": "object" + }, + "Array.Integer": { + "id": "Array.Integer", + "items": { + "type": "integer" + }, + "type": "array" + }, + "Array.String": { + "id": "Array.String", + "items": { + "minLength": 1, + "type": "string" + }, + "type": "array" + }, + "Audio.Album.ReleaseType": { + "default": "album", + "enums": [ + "album", + "single" + ], + "id": "Audio.Album.ReleaseType", + "type": "string" + }, + "Audio.Artist.Roles": { + "id": "Audio.Artist.Roles", + "items": { + "additionalProperties": false, + "description": "The various roles contributed by an artist to one or more songs", + "properties": { + "role": { + "required": true, + "type": "string" + }, + "roleid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, + "type": "array" + }, + "Audio.Contributors": { + "id": "Audio.Contributors", + "items": { + "additionalProperties": false, + "description": "The artist and the role they contribute to a song", + "properties": { + "artistid": { + "$ref": "Library.Id", + "required": true + }, + "name": { + "required": true, + "type": "string" + }, + "role": { + "required": true, + "type": "string" + }, + "roleid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, + "type": "array" + }, + "Audio.Details.Album": { + "extends": "Audio.Details.Media", + "id": "Audio.Details.Album", + "properties": { + "albumduration": { + "default": 0, + "type": "integer" + }, + "albumid": { + "$ref": "Library.Id", + "required": true + }, + "albumlabel": { + "default": "", + "type": "string" + }, + "albumstatus": { + "default": "", + "type": "string" + }, + "compilation": { + "default": false, + "type": "boolean" + }, + "description": { + "default": "", + "type": "string" + }, + "isboxset": { + "default": false, + "type": "boolean" + }, + "lastplayed": { + "default": "", + "type": "string" + }, + "mood": { + "$ref": "Array.String" + }, + "musicbrainzalbumid": { + "default": "", + "type": "string" + }, + "musicbrainzreleasegroupid": { + "default": "", + "type": "string" + }, + "playcount": { + "default": 0, + "type": "integer" + }, + "releasetype": { + "$ref": "Audio.Album.ReleaseType", + "default": "album" + }, + "songgenres": { + "$ref": "Audio.Details.Genres" + }, + "sourceid": { + "$ref": "Array.Integer" + }, + "style": { + "$ref": "Array.String" + }, + "theme": { + "$ref": "Array.String" + }, + "totaldiscs": { + "default": 0, + "type": "integer" + }, + "type": { + "default": "", + "type": "string" + } + } + }, + "Audio.Details.Artist": { + "extends": "Audio.Details.Base", + "id": "Audio.Details.Artist", + "properties": { + "artist": { + "required": true, + "type": "string" + }, + "artistid": { + "$ref": "Library.Id", + "required": true + }, + "born": { + "default": "", + "type": "string" + }, + "compilationartist": { + "default": false, + "type": "boolean" + }, + "description": { + "default": "", + "type": "string" + }, + "died": { + "default": "", + "type": "string" + }, + "disambiguation": { + "default": "", + "type": "string" + }, + "disbanded": { + "default": "", + "type": "string" + }, + "formed": { + "default": "", + "type": "string" + }, + "gender": { + "default": "", + "type": "string" + }, + "instrument": { + "$ref": "Array.String" + }, + "isalbumartist": { + "default": false, + "type": "boolean" + }, + "mood": { + "$ref": "Array.String" + }, + "musicbrainzartistid": { + "$ref": "Array.String" + }, + "roles": { + "$ref": "Audio.Artist.Roles" + }, + "songgenres": { + "$ref": "Audio.Details.Genres" + }, + "sortname": { + "default": "", + "type": "string" + }, + "sourceid": { + "$ref": "Array.Integer" + }, + "style": { + "$ref": "Array.String" + }, + "type": { + "default": "", + "type": "string" + }, + "yearsactive": { + "$ref": "Array.String" + } + } + }, + "Audio.Details.Base": { + "extends": "Media.Details.Base", + "id": "Audio.Details.Base", + "properties": { + "art": { + "$ref": "Media.Artwork" + }, + "dateadded": { + "default": "", + "type": "string" + }, + "genre": { + "$ref": "Array.String" + } + } + }, + "Audio.Details.Genres": { + "id": "Audio.Details.Genres", + "items": { + "properties": { + "genreid": { + "$ref": "Library.Id", + "required": true + }, + "title": { + "default": "", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "Audio.Details.Media": { + "extends": "Audio.Details.Base", + "id": "Audio.Details.Media", + "properties": { + "artist": { + "$ref": "Array.String" + }, + "artistid": { + "$ref": "Array.Integer" + }, + "displayartist": { + "default": "", + "type": "string" + }, + "musicbrainzalbumartistid": { + "$ref": "Array.String" + }, + "originaldate": { + "default": "", + "type": "string" + }, + "rating": { + "default": 0, + "type": "number" + }, + "releasedate": { + "default": "", + "type": "string" + }, + "sortartist": { + "default": "", + "type": "string" + }, + "title": { + "default": "", + "type": "string" + }, + "userrating": { + "default": 0, + "type": "integer" + }, + "votes": { + "default": 0, + "type": "integer" + }, + "year": { + "default": 0, + "type": "integer" + } + } + }, + "Audio.Details.Role": { + "extends": "Item.Details.Base", + "id": "Audio.Details.Role", + "properties": { + "roleid": { + "$ref": "Library.Id", + "required": true + }, + "title": { + "default": "", + "type": "string" + } + } + }, + "Audio.Details.Song": { + "extends": "Audio.Details.Media", + "id": "Audio.Details.Song", + "properties": { + "album": { + "default": "", + "type": "string" + }, + "albumartist": { + "$ref": "Array.String" + }, + "albumartistid": { + "$ref": "Array.Integer" + }, + "albumid": { + "$ref": "Library.Id", + "default": -1 + }, + "albumreleasetype": { + "$ref": "Audio.Album.ReleaseType", + "default": "album" + }, + "bitrate": { + "default": null, + "type": "any" + }, + "bpm": { + "default": null, + "type": "any" + }, + "channels": { + "default": null, + "type": "any" + }, + "comment": { + "default": "", + "type": "string" + }, + "contributors": { + "$ref": "Audio.Contributors" + }, + "disc": { + "default": 0, + "type": "integer" + }, + "disctitle": { + "default": "", + "type": "string" + }, + "displaycomposer": { + "default": "", + "type": "string" + }, + "displayconductor": { + "default": "", + "type": "string" + }, + "displaylyricist": { + "default": "", + "type": "string" + }, + "displayorchestra": { + "default": "", + "type": "string" + }, + "duration": { + "default": 0, + "type": "integer" + }, + "file": { + "default": "", + "type": "string" + }, + "genreid": { + "$ref": "Array.Integer" + }, + "lastplayed": { + "default": "", + "type": "string" + }, + "lyrics": { + "default": "", + "type": "string" + }, + "mood": { + "default": "", + "type": "string" + }, + "musicbrainzartistid": { + "$ref": "Array.String" + }, + "musicbrainztrackid": { + "default": "", + "type": "string" + }, + "playcount": { + "default": 0, + "type": "integer" + }, + "samplerate": { + "default": null, + "type": "any" + }, + "songid": { + "$ref": "Library.Id", + "required": true + }, + "sourceid": { + "$ref": "Array.Integer" + }, + "track": { + "default": 0, + "type": "integer" + } + } + }, + "Audio.Fields.Album": { + "extends": "Item.Fields.Base", + "id": "Audio.Fields.Album", + "items": { + "description": "Requesting the songgenres, artistid and/or sourceid fields will result in increased response times", + "enums": [ + "title", + "description", + "artist", + "genre", + "theme", + "mood", + "style", + "type", + "albumlabel", + "rating", + "votes", + "userrating", + "year", + "musicbrainzalbumid", + "musicbrainzalbumartistid", + "fanart", + "thumbnail", + "playcount", + "artistid", + "displayartist", + "compilation", + "releasetype", + "dateadded", + "sortartist", + "musicbrainzreleasegroupid", + "songgenres", + "art", + "lastplayed", + "sourceid", + "isboxset", + "totaldiscs", + "releasedate", + "originaldate", + "albumstatus", + "datemodified", + "datenew", + "albumduration" + ], + "type": "string" + } + }, + "Audio.Fields.Artist": { + "extends": "Item.Fields.Base", + "id": "Audio.Fields.Artist", + "items": { + "description": "Requesting the (song)genreid/genre, roleid/role or sourceid fields will result in increased response times", + "enums": [ + "instrument", + "style", + "mood", + "born", + "formed", + "description", + "genre", + "died", + "disbanded", + "yearsactive", + "musicbrainzartistid", + "fanart", + "thumbnail", + "compilationartist", + "dateadded", + "roles", + "songgenres", + "isalbumartist", + "sortname", + "type", + "gender", + "disambiguation", + "art", + "sourceid", + "datemodified", + "datenew" + ], + "type": "string" + } + }, + "Audio.Fields.Role": { + "extends": "Item.Fields.Base", + "id": "Audio.Fields.Role", + "items": { + "enums": [ + "title" + ], + "type": "string" + } + }, + "Audio.Fields.Song": { + "extends": "Item.Fields.Base", + "id": "Audio.Fields.Song", + "items": { + "description": "Requesting the genreid, artistid, albumartistid and/or sourceid fields will result in increased response times", + "enums": [ + "title", + "artist", + "albumartist", + "genre", + "year", + "rating", + "album", + "track", + "duration", + "comment", + "lyrics", + "musicbrainztrackid", + "musicbrainzartistid", + "musicbrainzalbumid", + "musicbrainzalbumartistid", + "playcount", + "fanart", + "thumbnail", + "file", + "albumid", + "lastplayed", + "disc", + "genreid", + "artistid", + "displayartist", + "albumartistid", + "albumreleasetype", + "dateadded", + "votes", + "userrating", + "mood", + "contributors", + "displaycomposer", + "displayconductor", + "displayorchestra", + "displaylyricist", + "sortartist", + "art", + "sourceid", + "disctitle", + "releasedate", + "originaldate", + "bpm", + "samplerate", + "bitrate", + "channels", + "datemodified", + "datenew" + ], + "type": "string" + } + }, + "Audio.Property.Name": { + "default": "missingartistid", + "enums": [ + "missingartistid", + "librarylastupdated", + "librarylastcleaned", + "artistlinksupdated", + "songslastadded", + "albumslastadded", + "artistslastadded", + "genreslastadded", + "songsmodified", + "albumsmodified", + "artistsmodified" + ], + "id": "Audio.Property.Name", + "type": "string" + }, + "Audio.Property.Value": { + "id": "Audio.Property.Value", + "properties": { + "albumslastadded": { + "default": "", + "type": "string" + }, + "albumsmodified": { + "default": "", + "type": "string" + }, + "artistlinksupdated": { + "default": "", + "type": "string" + }, + "artistslastadded": { + "default": "", + "type": "string" + }, + "artistsmodified": { + "default": "", + "type": "string" + }, + "genreslastadded": { + "default": "", + "type": "string" + }, + "librarylastcleaned": { + "default": "", + "type": "string" + }, + "librarylastupdated": { + "default": "", + "type": "string" + }, + "missingartistid": { + "$ref": "Library.Id", + "default": -1 + }, + "songslastadded": { + "default": "", + "type": "string" + }, + "songsmodified": { + "default": "", + "type": "string" + } + }, + "type": "object" + }, + "Configuration": { + "id": "Configuration", + "properties": { + "notifications": { + "$ref": "Configuration.Notifications", + "required": true + } + }, + "required": true, + "type": "object" + }, + "Configuration.Notifications": { + "additionalProperties": false, + "id": "Configuration.Notifications", + "properties": { + "application": { + "required": true, + "type": "boolean" + }, + "audiolibrary": { + "required": true, + "type": "boolean" + }, + "gui": { + "required": true, + "type": "boolean" + }, + "input": { + "required": true, + "type": "boolean" + }, + "other": { + "required": true, + "type": "boolean" + }, + "player": { + "required": true, + "type": "boolean" + }, + "playlist": { + "required": true, + "type": "boolean" + }, + "pvr": { + "required": true, + "type": "boolean" + }, + "system": { + "required": true, + "type": "boolean" + }, + "videolibrary": { + "required": true, + "type": "boolean" + } + }, + "type": "object" + }, + "Favourite.Details.Favourite": { + "additionalProperties": false, + "id": "Favourite.Details.Favourite", + "properties": { + "path": { + "default": "", + "type": "string" + }, + "thumbnail": { + "default": "", + "type": "string" + }, + "title": { + "required": true, + "type": "string" + }, + "type": { + "$ref": "Favourite.Type", + "required": true + }, + "window": { + "default": "", + "type": "string" + }, + "windowparameter": { + "default": "", + "type": "string" + } + }, + "type": "object" + }, + "Favourite.Fields.Favourite": { + "extends": "Item.Fields.Base", + "id": "Favourite.Fields.Favourite", + "items": { + "enums": [ + "window", + "windowparameter", + "thumbnail", + "path" + ], + "type": "string" + } + }, + "Favourite.Type": { + "default": "media", + "enums": [ + "media", + "window", + "script", + "androidapp", + "unknown" + ], + "id": "Favourite.Type", + "type": "string" + }, + "Files.Media": { + "default": "video", + "enums": [ + "video", + "music", + "pictures", + "files", + "programs" + ], + "id": "Files.Media", + "type": "string" + }, + "GUI.Property.Name": { + "default": "currentwindow", + "enums": [ + "currentwindow", + "currentcontrol", + "skin", + "fullscreen", + "stereoscopicmode" + ], + "id": "GUI.Property.Name", + "type": "string" + }, + "GUI.Property.Value": { + "id": "GUI.Property.Value", + "properties": { + "currentcontrol": { + "properties": { + "label": { + "required": true, + "type": "string" + } + }, + "type": "object" + }, + "currentwindow": { + "properties": { + "id": { + "required": true, + "type": "integer" + }, + "label": { + "required": true, + "type": "string" + } + }, + "type": "object" + }, + "fullscreen": { + "default": false, + "type": "boolean" + }, + "skin": { + "properties": { + "id": { + "minLength": 1, + "required": true, + "type": "string" + }, + "name": { + "default": "", + "type": "string" + } + }, + "type": "object" + }, + "stereoscopicmode": { + "$ref": "GUI.Stereoscopy.Mode" + } + }, + "type": "object" + }, + "GUI.Stereoscopy.Mode": { + "id": "GUI.Stereoscopy.Mode", + "properties": { + "label": { + "required": true, + "type": "string" + }, + "mode": { + "enums": [ + "off", + "split_vertical", + "split_horizontal", + "row_interleaved", + "hardware_based", + "anaglyph_cyan_red", + "anaglyph_green_magenta", + "anaglyph_yellow_blue", + "monoscopic" + ], + "required": true, + "type": "string" + } + }, + "type": "object" + }, + "GUI.Window": { + "default": "addon", + "enums": [ + "addon", + "addonbrowser", + "addoninformation", + "addonsettings", + "appearancesettings", + "busydialog", + "busydialognocancel", + "contentsettings", + "contextmenu", + "eventlog", + "extendedprogressdialog", + "favourites", + "filebrowser", + "filemanager", + "fullscreengame", + "fullscreeninfo", + "fullscreenlivetv", + "fullscreenlivetvinput", + "fullscreenlivetvpreview", + "fullscreenradio", + "fullscreenradioinput", + "fullscreenradiopreview", + "fullscreenvideo", + "gameadvancedsettings", + "gamecontrollers", + "gameosd", + "gamepadinput", + "games", + "gamesettings", + "gamestretchmode", + "gamevideofilter", + "gamevideorotation", + "gamevolume", + "home", + "infoprovidersettings", + "interfacesettings", + "libexportsettings", + "locksettings", + "loginscreen", + "mediafilter", + "mediasettings", + "mediasource", + "movieinformation", + "music", + "musicinformation", + "musicosd", + "musicplaylist", + "musicplaylisteditor", + "networksetup", + "notification", + "numericinput", + "okdialog", + "osdaudiosettings", + "osdcmssettings", + "osdsubtitlesettings", + "osdvideosettings", + "peripheralsettings", + "pictureinfo", + "pictures", + "playercontrols", + "playerprocessinfo", + "playersettings", + "profiles", + "profilesettings", + "programs", + "progressdialog", + "pvrchannelguide", + "pvrchannelmanager", + "pvrchannelscan", + "pvrgroupmanager", + "pvrguidecontrols", + "pvrguideinfo", + "pvrguidesearch", + "pvrosdchannels", + "pvrosdguide", + "pvrosdteletext", + "pvrradiordsinfo", + "pvrrecordinginfo", + "pvrsettings", + "pvrtimersetting", + "pvrupdateprogress", + "radiochannels", + "radioguide", + "radiorecordings", + "radiosearch", + "radiotimerrules", + "radiotimers", + "screencalibration", + "screensaver", + "seekbar", + "selectdialog", + "servicesettings", + "settings", + "shutdownmenu", + "skinsettings", + "sliderdialog", + "slideshow", + "smartplaylisteditor", + "smartplaylistrule", + "songinformation", + "splash", + "startup", + "startwindow", + "submenu", + "subtitlesearch", + "systeminfo", + "systemsettings", + "teletext", + "textviewer", + "tvchannels", + "tvguide", + "tvrecordings", + "tvsearch", + "tvtimerrules", + "tvtimers", + "videobookmarks", + "videomenu", + "videoosd", + "videoplaylist", + "videos", + "videotimeseek", + "virtualkeyboard", + "visualisation", + "visualisationpresetlist", + "volumebar", + "weather", + "yesnodialog" + ], + "id": "GUI.Window", + "type": "string" + }, + "Global.IncrementDecrement": { + "default": "increment", + "enums": [ + "increment", + "decrement" + ], + "id": "Global.IncrementDecrement", + "type": "string" + }, + "Global.String.NotEmpty": { + "default": "", + "id": "Global.String.NotEmpty", + "minLength": 1, + "type": "string" + }, + "Global.Time": { + "additionalProperties": false, + "description": "A duration.", + "id": "Global.Time", + "properties": { + "hours": { + "minimum": 0, + "required": true, + "type": "integer" + }, + "milliseconds": { + "maximum": 999, + "minimum": 0, + "required": true, + "type": "integer" + }, + "minutes": { + "maximum": 59, + "minimum": 0, + "required": true, + "type": "integer" + }, + "seconds": { + "maximum": 59, + "minimum": 0, + "required": true, + "type": "integer" + } + }, + "type": "object" + }, + "Global.Toggle": { + "default": null, + "id": "Global.Toggle", + "type": [ + { + "type": "boolean" + }, + { + "enums": [ + "toggle" + ], + "type": "string" + } + ] + }, + "Global.Weekday": { + "default": "monday", + "enums": [ + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday", + "sunday" + ], + "id": "Global.Weekday", + "type": "string" + }, + "Input.Action": { + "default": "analogfastforward", + "enums": [ + "analogfastforward", + "analogmove", + "analogmovexleft", + "analogmovexright", + "analogmoveydown", + "analogmoveyup", + "analogrewind", + "analogseekback", + "analogseekforward", + "aspectratio", + "audiodelay", + "audiodelayminus", + "audiodelayplus", + "audionextlanguage", + "audiotoggledigital", + "back", + "backspace", + "bigstepback", + "bigstepforward", + "blue", + "browsesubtitle", + "channeldown", + "channelnumberseparator", + "channelup", + "chapterorbigstepback", + "chapterorbigstepforward", + "close", + "codecinfo", + "contextmenu", + "copy", + "createbookmark", + "createepisodebookmark", + "cursorleft", + "cursorright", + "cyclesubtitle", + "cycletonemapmethod", + "decreasepar", + "decreaserating", + "decreasevisrating", + "delete", + "doubleclick", + "down", + "enter", + "error", + "fastforward", + "filter", + "filterclear", + "filtersms2", + "filtersms3", + "filtersms4", + "filtersms5", + "filtersms6", + "filtersms7", + "filtersms8", + "filtersms9", + "firstpage", + "fullscreen", + "green", + "guiprofile", + "hdrtoggle", + "highlight", + "increasepar", + "increaserating", + "increasevisrating", + "info", + "jumpsms2", + "jumpsms3", + "jumpsms4", + "jumpsms5", + "jumpsms6", + "jumpsms7", + "jumpsms8", + "jumpsms9", + "lastpage", + "left", + "leftclick", + "lockpreset", + "longclick", + "longpress", + "menu", + "middleclick", + "mousedrag", + "mousedragend", + "mousemove", + "move", + "moveitemdown", + "moveitemup", + "mute", + "nextcalibration", + "nextchannelgroup", + "nextletter", + "nextpicture", + "nextpreset", + "nextresolution", + "nextscene", + "nextstereomode", + "nextsubtitle", + "noop", + "number0", + "number1", + "number2", + "number3", + "number4", + "number5", + "number6", + "number7", + "number8", + "number9", + "osd", + "pagedown", + "pageup", + "pangesture", + "parentdir", + "parentfolder", + "pause", + "play", + "playerdebug", + "playerprocessinfo", + "playerprogramselect", + "playerresolutionselect", + "playlist", + "playnext", + "playpause", + "playpvr", + "playpvrradio", + "playpvrtv", + "previouschannelgroup", + "previousmenu", + "previouspicture", + "previouspreset", + "previousscene", + "previousstereomode", + "prevletter", + "queue", + "randompreset", + "record", + "red", + "reloadkeymaps", + "rename", + "resetcalibration", + "rewind", + "right", + "rightclick", + "rotate", + "rotateccw", + "rotategesture", + "scanitem", + "screenshot", + "scrolldown", + "scrollup", + "select", + "setrating", + "settingslevelchange", + "settingsreset", + "shift", + "showpreset", + "showsubtitles", + "showtime", + "showtimerrule", + "showvideomenu", + "skipnext", + "skipprevious", + "smallstepback", + "stepback", + "stepforward", + "stereomode", + "stereomodetomono", + "stop", + "subtitlealign", + "subtitledelay", + "subtitledelayminus", + "subtitledelayplus", + "subtitleshiftdown", + "subtitleshiftup", + "swipedown", + "swipeleft", + "swiperight", + "swipeup", + "switchplayer", + "symbols", + "tap", + "togglecommskip", + "togglefont", + "togglefullscreen", + "togglestereomode", + "togglewatched", + "up", + "verticalshiftdown", + "verticalshiftup", + "videonextstream", + "voicerecognizer", + "volampdown", + "volampup", + "volumeamplification", + "volumedown", + "volumeup", + "wheeldown", + "wheelup", + "yellow", + "zoomgesture", + "zoomin", + "zoomlevel1", + "zoomlevel2", + "zoomlevel3", + "zoomlevel4", + "zoomlevel5", + "zoomlevel6", + "zoomlevel7", + "zoomlevel8", + "zoomlevel9", + "zoomnormal", + "zoomout" + ], + "id": "Input.Action", + "type": "string" + }, + "Item.CustomProperties": { + "additionalProperties": { + "$ref": "Global.String.NotEmpty", + "default": "" + }, + "id": "Item.CustomProperties", + "type": "object" + }, + "Item.Details.Base": { + "id": "Item.Details.Base", + "properties": { + "label": { + "required": true, + "type": "string" + } + }, + "type": "object" + }, + "Item.Fields.Base": { + "id": "Item.Fields.Base", + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "Library.Details.Genre": { + "extends": "Item.Details.Base", + "id": "Library.Details.Genre", + "properties": { + "genreid": { + "$ref": "Library.Id", + "required": true + }, + "sourceid": { + "$ref": "Array.Integer", + "description": "The ids of sources with songs of the genre" + }, + "thumbnail": { + "default": "", + "type": "string" + }, + "title": { + "default": "", + "type": "string" + } + } + }, + "Library.Details.Source": { + "extends": "Item.Details.Base", + "id": "Library.Details.Source", + "properties": { + "file": { + "description": "The url encoded multipath string combining all paths of the source ", + "required": true, + "type": "string" + }, + "paths": { + "$ref": "Array.String", + "description": "The individual paths of the media source" + }, + "sourceid": { + "$ref": "Library.Id", + "required": true + } + } + }, + "Library.Details.Tag": { + "extends": "Item.Details.Base", + "id": "Library.Details.Tag", + "properties": { + "tagid": { + "$ref": "Library.Id", + "required": true + }, + "title": { + "default": "", + "type": "string" + } + } + }, + "Library.Fields.Genre": { + "extends": "Item.Fields.Base", + "id": "Library.Fields.Genre", + "items": { + "enums": [ + "title", + "thumbnail", + "sourceid" + ], + "type": "string" + } + }, + "Library.Fields.Source": { + "extends": "Item.Fields.Base", + "id": "Library.Fields.Source", + "items": { + "enums": [ + "file", + "paths" + ], + "type": "string" + } + }, + "Library.Fields.Tag": { + "extends": "Item.Fields.Base", + "id": "Library.Fields.Tag", + "items": { + "enums": [ + "title" + ], + "type": "string" + } + }, + "Library.Id": { + "default": -1, + "id": "Library.Id", + "minimum": 1, + "type": "integer" + }, + "List.Amount": { + "default": -1, + "id": "List.Amount", + "minimum": 0, + "type": "integer" + }, + "List.Fields.All": { + "extends": "Item.Fields.Base", + "id": "List.Fields.All", + "items": { + "enums": [ + "title", + "artist", + "albumartist", + "genre", + "year", + "rating", + "album", + "track", + "duration", + "comment", + "lyrics", + "musicbrainztrackid", + "musicbrainzartistid", + "musicbrainzalbumid", + "musicbrainzalbumartistid", + "playcount", + "fanart", + "director", + "trailer", + "tagline", + "plot", + "plotoutline", + "originaltitle", + "lastplayed", + "writer", + "studio", + "mpaa", + "cast", + "country", + "imdbnumber", + "premiered", + "productioncode", + "runtime", + "set", + "showlink", + "streamdetails", + "top250", + "votes", + "firstaired", + "season", + "episode", + "showtitle", + "thumbnail", + "file", + "resume", + "artistid", + "albumid", + "tvshowid", + "setid", + "watchedepisodes", + "disc", + "tag", + "art", + "genreid", + "displayartist", + "albumartistid", + "description", + "theme", + "mood", + "style", + "albumlabel", + "sorttitle", + "episodeguide", + "uniqueid", + "dateadded", + "channel", + "channeltype", + "hidden", + "locked", + "channelnumber", + "subchannelnumber", + "starttime", + "endtime", + "specialsortseason", + "specialsortepisode", + "compilation", + "releasetype", + "albumreleasetype", + "contributors", + "displaycomposer", + "displayconductor", + "displayorchestra", + "displaylyricist", + "userrating", + "sortartist", + "musicbrainzreleasegroupid", + "mediapath", + "dynpath", + "isboxset", + "totaldiscs", + "disctitle", + "releasedate", + "originaldate", + "bpm", + "bitrate", + "samplerate", + "channels", + "albumstatus", + "datemodified", + "datenew", + "customproperties", + "albumduration" + ], + "type": "string" + } + }, + "List.Fields.Files": { + "extends": "Item.Fields.Base", + "id": "List.Fields.Files", + "items": { + "enums": [ + "title", + "artist", + "albumartist", + "genre", + "year", + "rating", + "album", + "track", + "duration", + "comment", + "lyrics", + "musicbrainztrackid", + "musicbrainzartistid", + "musicbrainzalbumid", + "musicbrainzalbumartistid", + "playcount", + "fanart", + "director", + "trailer", + "tagline", + "plot", + "plotoutline", + "originaltitle", + "lastplayed", + "writer", + "studio", + "mpaa", + "cast", + "country", + "imdbnumber", + "premiered", + "productioncode", + "runtime", + "set", + "showlink", + "streamdetails", + "top250", + "votes", + "firstaired", + "season", + "episode", + "showtitle", + "thumbnail", + "file", + "resume", + "artistid", + "albumid", + "tvshowid", + "setid", + "watchedepisodes", + "disc", + "tag", + "art", + "genreid", + "displayartist", + "albumartistid", + "description", + "theme", + "mood", + "style", + "albumlabel", + "sorttitle", + "episodeguide", + "uniqueid", + "dateadded", + "size", + "lastmodified", + "mimetype", + "specialsortseason", + "specialsortepisode", + "sortartist", + "musicbrainzreleasegroupid", + "isboxset", + "totaldiscs", + "disctitle", + "releasedate", + "originaldate", + "bpm", + "bitrate", + "samplerate", + "channels", + "datemodified", + "datenew", + "customproperties", + "albumduration" + ], + "type": "string" + } + }, + "List.Filter.Albums": { + "id": "List.Filter.Albums", + "type": [ + { + "properties": { + "and": { + "items": { + "$ref": "List.Filter.Albums" + }, + "minItems": 1, + "required": true, + "type": "array" + } + }, + "type": "object" + }, + { + "properties": { + "or": { + "items": { + "$ref": "List.Filter.Albums" + }, + "minItems": 1, + "required": true, + "type": "array" + } + }, + "type": "object" + }, + { + "$ref": "List.Filter.Rule.Albums" + } + ] + }, + "List.Filter.Artists": { + "id": "List.Filter.Artists", + "type": [ + { + "properties": { + "and": { + "items": { + "$ref": "List.Filter.Artists" + }, + "minItems": 1, + "required": true, + "type": "array" + } + }, + "type": "object" + }, + { + "properties": { + "or": { + "items": { + "$ref": "List.Filter.Artists" + }, + "minItems": 1, + "required": true, + "type": "array" + } + }, + "type": "object" + }, + { + "$ref": "List.Filter.Rule.Artists" + } + ] + }, + "List.Filter.Episodes": { + "id": "List.Filter.Episodes", + "type": [ + { + "properties": { + "and": { + "items": { + "$ref": "List.Filter.Episodes" + }, + "minItems": 1, + "required": true, + "type": "array" + } + }, + "type": "object" + }, + { + "properties": { + "or": { + "items": { + "$ref": "List.Filter.Episodes" + }, + "minItems": 1, + "required": true, + "type": "array" + } + }, + "type": "object" + }, + { + "$ref": "List.Filter.Rule.Episodes" + } + ] + }, + "List.Filter.Fields.Albums": { + "default": "genre", + "enums": [ + "genre", + "source", + "album", + "disctitle", + "totaldiscs", + "isboxset", + "artist", + "albumartist", + "year", + "originalyear", + "albumduration", + "review", + "themes", + "moods", + "styles", + "compilation", + "type", + "label", + "rating", + "userrating", + "playcount", + "lastplayed", + "path", + "albumstatus", + "dateadded", + "datemodified", + "datenew", + "playlist", + "virtualfolder" + ], + "id": "List.Filter.Fields.Albums", + "type": "string" + }, + "List.Filter.Fields.Artists": { + "default": "artist", + "enums": [ + "artist", + "source", + "genre", + "moods", + "styles", + "instruments", + "biography", + "artisttype", + "gender", + "disambiguation", + "born", + "bandformed", + "disbanded", + "died", + "role", + "path", + "dateadded", + "datemodified", + "datenew", + "playlist", + "virtualfolder" + ], + "id": "List.Filter.Fields.Artists", + "type": "string" + }, + "List.Filter.Fields.Episodes": { + "default": "title", + "enums": [ + "title", + "tvshow", + "originaltitle", + "plot", + "votes", + "rating", + "userrating", + "time", + "writers", + "airdate", + "playcount", + "lastplayed", + "inprogress", + "genre", + "year", + "director", + "actor", + "episode", + "season", + "filename", + "path", + "studio", + "mpaarating", + "dateadded", + "tag", + "videoresolution", + "audiochannels", + "audiocount", + "subtitlecount", + "videocodec", + "audiocodec", + "audiolanguage", + "subtitlelanguage", + "videoaspect", + "playlist", + "virtualfolder" + ], + "id": "List.Filter.Fields.Episodes", + "type": "string" + }, + "List.Filter.Fields.Movies": { + "default": "title", + "enums": [ + "title", + "originaltitle", + "plot", + "plotoutline", + "tagline", + "votes", + "rating", + "userrating", + "time", + "writers", + "playcount", + "lastplayed", + "inprogress", + "genre", + "country", + "year", + "director", + "actor", + "mpaarating", + "top250", + "studio", + "hastrailer", + "filename", + "path", + "set", + "tag", + "dateadded", + "videoresolution", + "audiochannels", + "audiocount", + "subtitlecount", + "videocodec", + "audiocodec", + "audiolanguage", + "subtitlelanguage", + "videoaspect", + "playlist", + "virtualfolder" + ], + "id": "List.Filter.Fields.Movies", + "type": "string" + }, + "List.Filter.Fields.MusicVideos": { + "default": "title", + "enums": [ + "title", + "genre", + "album", + "year", + "artist", + "filename", + "path", + "playcount", + "lastplayed", + "rating", + "userrating", + "time", + "director", + "studio", + "plot", + "tag", + "dateadded", + "videoresolution", + "audiochannels", + "audiocount", + "subtitlecount", + "videocodec", + "audiocodec", + "audiolanguage", + "subtitlelanguage", + "videoaspect", + "playlist", + "virtualfolder" + ], + "id": "List.Filter.Fields.MusicVideos", + "type": "string" + }, + "List.Filter.Fields.Songs": { + "default": "genre", + "enums": [ + "genre", + "source", + "album", + "disctitle", + "artist", + "albumartist", + "title", + "year", + "originalyear", + "time", + "tracknumber", + "filename", + "path", + "playcount", + "lastplayed", + "rating", + "userrating", + "comment", + "moods", + "bpm", + "samplerate", + "bitrate", + "channels", + "dateadded", + "datemodified", + "datenew", + "playlist", + "virtualfolder" + ], + "id": "List.Filter.Fields.Songs", + "type": "string" + }, + "List.Filter.Fields.TVShows": { + "default": "title", + "enums": [ + "title", + "originaltitle", + "plot", + "status", + "votes", + "rating", + "userrating", + "year", + "genre", + "director", + "actor", + "numepisodes", + "numwatched", + "playcount", + "path", + "studio", + "mpaarating", + "dateadded", + "lastplayed", + "inprogress", + "tag", + "playlist", + "virtualfolder" + ], + "id": "List.Filter.Fields.TVShows", + "type": "string" + }, + "List.Filter.Fields.Textures": { + "default": "textureid", + "enums": [ + "textureid", + "url", + "cachedurl", + "lasthashcheck", + "imagehash", + "width", + "height", + "usecount", + "lastused" + ], + "id": "List.Filter.Fields.Textures", + "type": "string" + }, + "List.Filter.Movies": { + "id": "List.Filter.Movies", + "type": [ + { + "properties": { + "and": { + "items": { + "$ref": "List.Filter.Movies" + }, + "minItems": 1, + "required": true, + "type": "array" + } + }, + "type": "object" + }, + { + "properties": { + "or": { + "items": { + "$ref": "List.Filter.Movies" + }, + "minItems": 1, + "required": true, + "type": "array" + } + }, + "type": "object" + }, + { + "$ref": "List.Filter.Rule.Movies" + } + ] + }, + "List.Filter.MusicVideos": { + "id": "List.Filter.MusicVideos", + "type": [ + { + "properties": { + "and": { + "items": { + "$ref": "List.Filter.MusicVideos" + }, + "minItems": 1, + "required": true, + "type": "array" + } + }, + "type": "object" + }, + { + "properties": { + "or": { + "items": { + "$ref": "List.Filter.MusicVideos" + }, + "minItems": 1, + "required": true, + "type": "array" + } + }, + "type": "object" + }, + { + "$ref": "List.Filter.Rule.MusicVideos" + } + ] + }, + "List.Filter.Operators": { + "default": "contains", + "enums": [ + "contains", + "doesnotcontain", + "is", + "isnot", + "startswith", + "endswith", + "greaterthan", + "lessthan", + "after", + "before", + "inthelast", + "notinthelast", + "true", + "false", + "between" + ], + "id": "List.Filter.Operators", + "type": "string" + }, + "List.Filter.Rule": { + "id": "List.Filter.Rule", + "properties": { + "operator": { + "$ref": "List.Filter.Operators", + "required": true + }, + "value": { + "required": true, + "type": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ] + } + }, + "type": "object" + }, + "List.Filter.Rule.Albums": { + "extends": "List.Filter.Rule", + "id": "List.Filter.Rule.Albums", + "properties": { + "field": { + "$ref": "List.Filter.Fields.Albums", + "required": true + } + } + }, + "List.Filter.Rule.Artists": { + "extends": "List.Filter.Rule", + "id": "List.Filter.Rule.Artists", + "properties": { + "field": { + "$ref": "List.Filter.Fields.Artists", + "required": true + } + } + }, + "List.Filter.Rule.Episodes": { + "extends": "List.Filter.Rule", + "id": "List.Filter.Rule.Episodes", + "properties": { + "field": { + "$ref": "List.Filter.Fields.Episodes", + "required": true + } + } + }, + "List.Filter.Rule.Movies": { + "extends": "List.Filter.Rule", + "id": "List.Filter.Rule.Movies", + "properties": { + "field": { + "$ref": "List.Filter.Fields.Movies", + "required": true + } + } + }, + "List.Filter.Rule.MusicVideos": { + "extends": "List.Filter.Rule", + "id": "List.Filter.Rule.MusicVideos", + "properties": { + "field": { + "$ref": "List.Filter.Fields.MusicVideos", + "required": true + } + } + }, + "List.Filter.Rule.Songs": { + "extends": "List.Filter.Rule", + "id": "List.Filter.Rule.Songs", + "properties": { + "field": { + "$ref": "List.Filter.Fields.Songs", + "required": true + } + } + }, + "List.Filter.Rule.TVShows": { + "extends": "List.Filter.Rule", + "id": "List.Filter.Rule.TVShows", + "properties": { + "field": { + "$ref": "List.Filter.Fields.TVShows", + "required": true + } + } + }, + "List.Filter.Rule.Textures": { + "extends": "List.Filter.Rule", + "id": "List.Filter.Rule.Textures", + "properties": { + "field": { + "$ref": "List.Filter.Fields.Textures", + "required": true + } + } + }, + "List.Filter.Songs": { + "id": "List.Filter.Songs", + "type": [ + { + "properties": { + "and": { + "items": { + "$ref": "List.Filter.Songs" + }, + "minItems": 1, + "required": true, + "type": "array" + } + }, + "type": "object" + }, + { + "properties": { + "or": { + "items": { + "$ref": "List.Filter.Songs" + }, + "minItems": 1, + "required": true, + "type": "array" + } + }, + "type": "object" + }, + { + "$ref": "List.Filter.Rule.Songs" + } + ] + }, + "List.Filter.TVShows": { + "id": "List.Filter.TVShows", + "type": [ + { + "properties": { + "and": { + "items": { + "$ref": "List.Filter.TVShows" + }, + "minItems": 1, + "required": true, + "type": "array" + } + }, + "type": "object" + }, + { + "properties": { + "or": { + "items": { + "$ref": "List.Filter.TVShows" + }, + "minItems": 1, + "required": true, + "type": "array" + } + }, + "type": "object" + }, + { + "$ref": "List.Filter.Rule.TVShows" + } + ] + }, + "List.Filter.Textures": { + "id": "List.Filter.Textures", + "type": [ + { + "properties": { + "and": { + "items": { + "$ref": "List.Filter.Textures" + }, + "minItems": 1, + "required": true, + "type": "array" + } + }, + "type": "object" + }, + { + "properties": { + "or": { + "items": { + "$ref": "List.Filter.Textures" + }, + "minItems": 1, + "required": true, + "type": "array" + } + }, + "type": "object" + }, + { + "$ref": "List.Filter.Rule.Textures" + } + ] + }, + "List.Item.All": { + "extends": "List.Item.Base", + "id": "List.Item.All", + "properties": { + "channel": { + "default": "", + "type": "string" + }, + "channelnumber": { + "default": 0, + "type": "integer" + }, + "channeltype": { + "$ref": "PVR.Channel.Type", + "default": "tv" + }, + "endtime": { + "default": "", + "type": "string" + }, + "hidden": { + "default": false, + "type": "boolean" + }, + "locked": { + "default": false, + "type": "boolean" + }, + "starttime": { + "default": "", + "type": "string" + }, + "subchannelnumber": { + "default": 0, + "type": "integer" + } + } + }, + "List.Item.Base": { + "extends": [ + "Video.Details.File", + "Audio.Details.Media" + ], + "id": "List.Item.Base", + "properties": { + "album": { + "default": "", + "type": "string" + }, + "albumartist": { + "$ref": "Array.String" + }, + "albumartistid": { + "$ref": "Array.Integer" + }, + "albumid": { + "$ref": "Library.Id", + "default": -1 + }, + "albumlabel": { + "default": "", + "type": "string" + }, + "albumreleasetype": { + "$ref": "Audio.Album.ReleaseType", + "default": "album" + }, + "albumstatus": { + "default": "", + "type": "string" + }, + "bitrate": { + "default": 0, + "type": "integer" + }, + "bpm": { + "default": 0, + "type": "integer" + }, + "cast": { + "$ref": "Video.Cast" + }, + "channels": { + "default": 0, + "type": "integer" + }, + "comment": { + "default": "", + "type": "string" + }, + "compilation": { + "default": false, + "type": "boolean" + }, + "contributors": { + "$ref": "Audio.Contributors" + }, + "country": { + "$ref": "Array.String" + }, + "customproperties": { + "$ref": "Item.CustomProperties" + }, + "description": { + "default": "", + "type": "string" + }, + "disc": { + "default": 0, + "type": "integer" + }, + "disctitle": { + "default": "", + "type": "string" + }, + "displaycomposer": { + "default": "", + "type": "string" + }, + "displayconductor": { + "default": "", + "type": "string" + }, + "displaylyricist": { + "default": "", + "type": "string" + }, + "displayorchestra": { + "default": "", + "type": "string" + }, + "duration": { + "default": 0, + "type": "integer" + }, + "dynpath": { + "default": "", + "description": "An experimental property for debug purposes, often same as mediapath but when different gives the actual file playing that should also be in file property", + "type": "string" + }, + "episode": { + "default": 0, + "type": "integer" + }, + "episodeguide": { + "default": "", + "type": "string" + }, + "firstaired": { + "default": "", + "type": "string" + }, + "id": { + "$ref": "Library.Id", + "default": -1 + }, + "imdbnumber": { + "default": "", + "type": "string" + }, + "isboxset": { + "default": false, + "type": "boolean" + }, + "lyrics": { + "default": "", + "type": "string" + }, + "mediapath": { + "default": "", + "description": "Media source path that identifies the item", + "type": "string" + }, + "mood": { + "$ref": "Array.String" + }, + "mpaa": { + "default": "", + "type": "string" + }, + "musicbrainzartistid": { + "$ref": "Array.String" + }, + "musicbrainztrackid": { + "default": "", + "type": "string" + }, + "originaldate": { + "default": "", + "type": "string" + }, + "originaltitle": { + "default": "", + "type": "string" + }, + "plotoutline": { + "default": "", + "type": "string" + }, + "premiered": { + "default": "", + "type": "string" + }, + "productioncode": { + "default": "", + "type": "string" + }, + "releasedate": { + "default": "", + "type": "string" + }, + "releasetype": { + "$ref": "Audio.Album.ReleaseType", + "default": "album" + }, + "samplerate": { + "default": 0, + "type": "integer" + }, + "season": { + "default": 0, + "type": "integer" + }, + "set": { + "default": "", + "type": "string" + }, + "setid": { + "$ref": "Library.Id", + "default": -1 + }, + "showlink": { + "$ref": "Array.String" + }, + "showtitle": { + "default": "", + "type": "string" + }, + "sorttitle": { + "default": "", + "type": "string" + }, + "specialsortepisode": { + "default": 0, + "type": "integer" + }, + "specialsortseason": { + "default": 0, + "type": "integer" + }, + "studio": { + "$ref": "Array.String" + }, + "style": { + "$ref": "Array.String" + }, + "tag": { + "$ref": "Array.String" + }, + "tagline": { + "default": "", + "type": "string" + }, + "theme": { + "$ref": "Array.String" + }, + "top250": { + "default": 0, + "type": "integer" + }, + "totaldiscs": { + "default": 0, + "type": "integer" + }, + "track": { + "default": 0, + "type": "integer" + }, + "trailer": { + "default": "", + "type": "string" + }, + "tvshowid": { + "$ref": "Library.Id", + "default": -1 + }, + "type": { + "default": "unknown", + "enums": [ + "unknown", + "movie", + "episode", + "musicvideo", + "song", + "picture", + "channel" + ], + "type": "string" + }, + "uniqueid": { + "$ref": "Media.UniqueID" + }, + "votes": { + "default": "", + "type": "string" + }, + "watchedepisodes": { + "default": 0, + "type": "integer" + }, + "writer": { + "$ref": "Array.String" + } + } + }, + "List.Item.File": { + "extends": "List.Item.Base", + "id": "List.Item.File", + "properties": { + "file": { + "required": true, + "type": "string" + }, + "filetype": { + "enums": [ + "file", + "directory" + ], + "required": true, + "type": "string" + }, + "lastmodified": { + "default": "", + "type": "string" + }, + "mimetype": { + "default": "", + "type": "string" + }, + "size": { + "default": 0, + "description": "Size of the file in bytes", + "type": "integer" + } + } + }, + "List.Items.Sources": { + "id": "List.Items.Sources", + "items": { + "extends": "Item.Details.Base", + "properties": { + "file": { + "required": true, + "type": "string" + } + } + }, + "type": "array" + }, + "List.Limits": { + "additionalProperties": false, + "id": "List.Limits", + "properties": { + "end": { + "$ref": "List.Amount", + "default": -1, + "description": "Index of the last item to return" + }, + "start": { + "default": 0, + "description": "Index of the first item to return", + "minimum": 0, + "type": "integer" + } + }, + "type": "object" + }, + "List.LimitsReturned": { + "additionalProperties": false, + "id": "List.LimitsReturned", + "properties": { + "end": { + "$ref": "List.Amount", + "default": -1 + }, + "start": { + "default": 0, + "minimum": 0, + "type": "integer" + }, + "total": { + "minimum": 0, + "required": true, + "type": "integer" + } + }, + "type": "object" + }, + "List.Sort": { + "id": "List.Sort", + "properties": { + "ignorearticle": { + "default": false, + "type": "boolean" + }, + "method": { + "default": "none", + "enums": [ + "none", + "label", + "date", + "size", + "file", + "path", + "drivetype", + "title", + "track", + "time", + "artist", + "album", + "albumtype", + "genre", + "country", + "year", + "rating", + "userrating", + "votes", + "top250", + "programcount", + "playlist", + "episode", + "season", + "totalepisodes", + "watchedepisodes", + "tvshowstatus", + "tvshowtitle", + "sorttitle", + "productioncode", + "mpaa", + "studio", + "dateadded", + "lastplayed", + "playcount", + "listeners", + "bitrate", + "random", + "totaldiscs", + "originaldate", + "bpm" + ], + "type": "string" + }, + "order": { + "default": "ascending", + "enums": [ + "ascending", + "descending" + ], + "type": "string" + }, + "useartistsortname": { + "default": false, + "type": "boolean" + } + }, + "type": "object" + }, + "Media.Artwork": { + "additionalProperties": { + "$ref": "Global.String.NotEmpty", + "default": "" + }, + "id": "Media.Artwork", + "properties": { + "banner": { + "$ref": "Global.String.NotEmpty", + "default": "" + }, + "fanart": { + "$ref": "Global.String.NotEmpty", + "default": "" + }, + "poster": { + "$ref": "Global.String.NotEmpty", + "default": "" + }, + "thumb": { + "$ref": "Global.String.NotEmpty", + "default": "" + } + }, + "type": "object" + }, + "Media.Artwork.Set": { + "additionalProperties": { + "default": null, + "type": [ + { + "type": "null" + }, + { + "$ref": "Global.String.NotEmpty" + } + ] + }, + "id": "Media.Artwork.Set", + "properties": { + "banner": { + "default": "", + "type": [ + { + "type": "null" + }, + { + "$ref": "Global.String.NotEmpty" + } + ] + }, + "fanart": { + "default": "", + "type": [ + { + "type": "null" + }, + { + "$ref": "Global.String.NotEmpty" + } + ] + }, + "poster": { + "default": "", + "type": [ + { + "type": "null" + }, + { + "$ref": "Global.String.NotEmpty" + } + ] + }, + "thumb": { + "default": "", + "type": [ + { + "type": "null" + }, + { + "$ref": "Global.String.NotEmpty" + } + ] + } + }, + "type": "object" + }, + "Media.Details.Base": { + "extends": "Item.Details.Base", + "id": "Media.Details.Base", + "properties": { + "fanart": { + "default": "", + "type": "string" + }, + "thumbnail": { + "default": "", + "type": "string" + } + } + }, + "Media.UniqueID": { + "additionalProperties": { + "$ref": "Global.String.NotEmpty", + "default": "" + }, + "id": "Media.UniqueID", + "type": "object" + }, + "Media.UniqueID.Set": { + "additionalProperties": { + "default": null, + "type": [ + { + "type": "null" + }, + { + "$ref": "Global.String.NotEmpty" + } + ] + }, + "id": "Media.UniqueID.Set", + "type": "object" + }, + "Notifications.Item": { + "id": "Notifications.Item", + "type": [ + { + "description": "An unknown item does not have any additional information.", + "properties": { + "type": { + "$ref": "Notifications.Item.Type", + "required": true + } + }, + "type": "object" + }, + { + "description": "An item known to the database has an identification.", + "properties": { + "id": { + "$ref": "Library.Id", + "required": true + }, + "type": { + "$ref": "Notifications.Item.Type", + "required": true + } + }, + "type": "object" + }, + { + "description": "A movie item has a title and may have a release year.", + "properties": { + "title": { + "required": true, + "type": "string" + }, + "type": { + "$ref": "Notifications.Item.Type", + "required": true + }, + "year": { + "default": 0, + "type": "integer" + } + }, + "type": "object" + }, + { + "description": "A tv episode has a title and may have an episode number, season number and the title of the show it belongs to.", + "properties": { + "episode": { + "default": 0, + "type": "integer" + }, + "season": { + "default": 0, + "type": "integer" + }, + "showtitle": { + "default": "", + "type": "string" + }, + "title": { + "required": true, + "type": "string" + }, + "type": { + "$ref": "Notifications.Item.Type", + "required": true + } + }, + "type": "object" + }, + { + "description": "A music video has a title and may have an album and an artist.", + "properties": { + "album": { + "default": "", + "type": "string" + }, + "artist": { + "default": "", + "type": "string" + }, + "title": { + "required": true, + "type": "string" + }, + "type": { + "$ref": "Notifications.Item.Type", + "required": true + } + }, + "type": "object" + }, + { + "description": "A song has a title and may have an album, an artist and a track number.", + "properties": { + "album": { + "default": "", + "type": "string" + }, + "artist": { + "default": "", + "type": "string" + }, + "title": { + "required": true, + "type": "string" + }, + "track": { + "default": 0, + "type": "integer" + }, + "type": { + "$ref": "Notifications.Item.Type", + "required": true + } + }, + "type": "object" + }, + { + "description": "A picture has a file path.", + "properties": { + "file": { + "required": true, + "type": "string" + }, + "type": { + "$ref": "Notifications.Item.Type", + "required": true + } + }, + "type": "object" + }, + { + "description": "A PVR channel is either a radio or tv channel and has a title.", + "properties": { + "channeltype": { + "$ref": "PVR.Channel.Type", + "required": true + }, + "id": { + "$ref": "Library.Id", + "required": true + }, + "title": { + "required": true, + "type": "string" + }, + "type": { + "$ref": "Notifications.Item.Type", + "required": true + } + }, + "type": "object" + } + ] + }, + "Notifications.Item.Type": { + "default": "unknown", + "enums": [ + "unknown", + "movie", + "episode", + "musicvideo", + "song", + "picture", + "channel" + ], + "id": "Notifications.Item.Type", + "type": "string" + }, + "Optional.Boolean": { + "default": null, + "id": "Optional.Boolean", + "type": [ + { + "type": "null" + }, + { + "type": "boolean" + } + ] + }, + "Optional.Integer": { + "default": null, + "id": "Optional.Integer", + "type": [ + { + "type": "null" + }, + { + "type": "integer" + } + ] + }, + "Optional.Number": { + "default": null, + "id": "Optional.Number", + "type": [ + { + "type": "null" + }, + { + "type": "number" + } + ] + }, + "Optional.String": { + "default": null, + "id": "Optional.String", + "type": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + }, + "PVR.Channel.Type": { + "default": "tv", + "enums": [ + "tv", + "radio" + ], + "id": "PVR.Channel.Type", + "type": "string" + }, + "PVR.ChannelGroup.Id": { + "default": null, + "id": "PVR.ChannelGroup.Id", + "type": [ + { + "$ref": "Library.Id" + }, + { + "enums": [ + "alltv", + "allradio" + ], + "type": "string" + } + ] + }, + "PVR.Details.Broadcast": { + "extends": "Item.Details.Base", + "id": "PVR.Details.Broadcast", + "properties": { + "broadcastid": { + "$ref": "Library.Id", + "required": true + }, + "cast": { + "default": "", + "type": "string" + }, + "clientid": { + "$ref": "Library.Id", + "default": -1 + }, + "director": { + "default": "", + "type": "string" + }, + "endtime": { + "default": "", + "type": "string" + }, + "episodename": { + "default": "", + "type": "string" + }, + "episodenum": { + "default": 0, + "type": "integer" + }, + "episodepart": { + "default": 0, + "type": "integer" + }, + "firstaired": { + "default": "", + "type": "string" + }, + "genre": { + "default": "", + "type": "string" + }, + "hasrecording": { + "default": false, + "type": "boolean" + }, + "hastimer": { + "default": false, + "type": "boolean" + }, + "hastimerrule": { + "default": false, + "type": "boolean" + }, + "imdbnumber": { + "default": 0, + "type": "integer" + }, + "isactive": { + "default": false, + "type": "boolean" + }, + "isplayable": { + "default": false, + "description": "Deprecated - Use GetBroadcastIsPlayable instead", + "type": "boolean" + }, + "isseries": { + "default": false, + "type": "boolean" + }, + "originaltitle": { + "default": "", + "type": "string" + }, + "parentalrating": { + "default": 0, + "type": "integer" + }, + "plot": { + "default": "", + "type": "string" + }, + "plotoutline": { + "default": "", + "type": "string" + }, + "progress": { + "default": 0, + "type": "integer" + }, + "progresspercentage": { + "default": 0, + "type": "number" + }, + "rating": { + "default": 0, + "type": "integer" + }, + "recording": { + "default": "", + "type": "string" + }, + "runtime": { + "default": 0, + "type": "integer" + }, + "starttime": { + "default": "", + "type": "string" + }, + "thumbnail": { + "default": "", + "type": "string" + }, + "title": { + "default": "", + "type": "string" + }, + "wasactive": { + "default": false, + "type": "boolean" + }, + "writer": { + "default": "", + "type": "string" + }, + "year": { + "default": 0, + "type": "integer" + } + } + }, + "PVR.Details.Channel": { + "extends": "Item.Details.Base", + "id": "PVR.Details.Channel", + "properties": { + "broadcastnext": { + "$ref": "PVR.Details.Broadcast" + }, + "broadcastnow": { + "$ref": "PVR.Details.Broadcast" + }, + "channel": { + "default": "", + "type": "string" + }, + "channelid": { + "$ref": "Library.Id", + "required": true + }, + "channelnumber": { + "default": 0, + "type": "integer" + }, + "channeltype": { + "$ref": "PVR.Channel.Type", + "default": "tv" + }, + "clientid": { + "$ref": "Library.Id", + "default": -1 + }, + "hasarchive": { + "default": false, + "type": "boolean" + }, + "hidden": { + "default": false, + "type": "boolean" + }, + "icon": { + "default": "", + "type": "string" + }, + "isrecording": { + "default": false, + "type": "boolean" + }, + "lastplayed": { + "default": "", + "type": "string" + }, + "locked": { + "default": false, + "type": "boolean" + }, + "subchannelnumber": { + "default": 0, + "type": "integer" + }, + "thumbnail": { + "default": "", + "type": "string" + }, + "uniqueid": { + "required": true, + "type": "integer" + } + } + }, + "PVR.Details.ChannelGroup": { + "extends": "Item.Details.Base", + "id": "PVR.Details.ChannelGroup", + "properties": { + "channelgroupid": { + "$ref": "Library.Id", + "required": true + }, + "channeltype": { + "$ref": "PVR.Channel.Type", + "required": true + } + } + }, + "PVR.Details.ChannelGroup.Extended": { + "extends": "PVR.Details.ChannelGroup", + "id": "PVR.Details.ChannelGroup.Extended", + "properties": { + "channels": { + "items": { + "$ref": "PVR.Details.Channel" + }, + "type": "array" + }, + "limits": { + "$ref": "List.LimitsReturned", + "required": true + } + } + }, + "PVR.Details.Client": { + "extends": "Item.Details.Base", + "id": "PVR.Details.Client", + "properties": { + "addonid": { + "default": "", + "type": "string" + }, + "clientid": { + "$ref": "Library.Id", + "required": true + }, + "supportschannelgroups": { + "default": false, + "type": "boolean" + }, + "supportschannelscan": { + "default": false, + "type": "boolean" + }, + "supportsepg": { + "default": false, + "type": "boolean" + }, + "supportsradio": { + "default": false, + "type": "boolean" + }, + "supportsrecordings": { + "default": false, + "type": "boolean" + }, + "supportstimers": { + "default": false, + "type": "boolean" + }, + "supportstv": { + "default": false, + "type": "boolean" + } + } + }, + "PVR.Details.Recording": { + "extends": "Item.Details.Base", + "id": "PVR.Details.Recording", + "properties": { + "art": { + "$ref": "Media.Artwork" + }, + "channel": { + "default": "", + "type": "string" + }, + "channeluid": { + "default": 0, + "type": "integer" + }, + "clientid": { + "$ref": "Library.Id", + "default": -1 + }, + "directory": { + "default": "", + "type": "string" + }, + "endtime": { + "default": "", + "type": "string" + }, + "epgeventid": { + "default": 0, + "type": "integer" + }, + "episode": { + "default": 0, + "type": "integer" + }, + "file": { + "default": "", + "type": "string" + }, + "genre": { + "default": "", + "type": "string" + }, + "icon": { + "default": "", + "type": "string" + }, + "isdeleted": { + "default": false, + "type": "boolean" + }, + "lifetime": { + "default": 0, + "type": "integer" + }, + "playcount": { + "default": 0, + "type": "integer" + }, + "plot": { + "default": "", + "type": "string" + }, + "plotoutline": { + "default": "", + "type": "string" + }, + "radio": { + "default": false, + "type": "boolean" + }, + "recordingid": { + "$ref": "Library.Id", + "required": true + }, + "resume": { + "$ref": "Video.Resume" + }, + "runtime": { + "default": 0, + "type": "integer" + }, + "season": { + "default": 0, + "type": "integer" + }, + "showtitle": { + "default": "", + "type": "string" + }, + "starttime": { + "default": "", + "type": "string" + }, + "streamurl": { + "default": "", + "type": "string" + }, + "title": { + "default": "", + "type": "string" + } + } + }, + "PVR.Details.Timer": { + "extends": "Item.Details.Base", + "id": "PVR.Details.Timer", + "properties": { + "broadcastid": { + "$ref": "Library.Id", + "default": -1 + }, + "channelid": { + "$ref": "Library.Id", + "default": -1 + }, + "clientid": { + "$ref": "Library.Id", + "default": -1 + }, + "directory": { + "default": "", + "type": "string" + }, + "endanytime": { + "default": false, + "type": "boolean" + }, + "endmargin": { + "default": 0, + "type": "integer" + }, + "endtime": { + "default": "", + "type": "string" + }, + "epgsearchstring": { + "default": "", + "type": "string" + }, + "epguid": { + "default": 0, + "type": "integer" + }, + "file": { + "default": "", + "type": "string" + }, + "firstday": { + "default": "", + "type": "string" + }, + "fulltextepgsearch": { + "default": false, + "type": "boolean" + }, + "ismanual": { + "default": false, + "type": "boolean" + }, + "isradio": { + "default": false, + "type": "boolean" + }, + "isreadonly": { + "default": false, + "type": "boolean" + }, + "isreminder": { + "default": false, + "type": "boolean" + }, + "istimerrule": { + "default": false, + "type": "boolean" + }, + "lifetime": { + "default": 0, + "type": "integer" + }, + "maxrecordings": { + "default": 0, + "type": "integer" + }, + "preventduplicateepisodes": { + "default": 0, + "type": "integer" + }, + "priority": { + "default": 0, + "type": "integer" + }, + "recordinggroup": { + "default": 0, + "type": "integer" + }, + "runtime": { + "default": 0, + "type": "integer" + }, + "startanytime": { + "default": false, + "type": "boolean" + }, + "startmargin": { + "default": 0, + "type": "integer" + }, + "starttime": { + "default": "", + "type": "string" + }, + "state": { + "$ref": "PVR.TimerState", + "default": "unknown" + }, + "summary": { + "default": "", + "type": "string" + }, + "timerid": { + "$ref": "Library.Id", + "required": true + }, + "title": { + "default": "", + "type": "string" + }, + "weekdays": { + "items": { + "$ref": "Global.Weekday" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "PVR.Fields.Broadcast": { + "extends": "Item.Fields.Base", + "id": "PVR.Fields.Broadcast", + "items": { + "enums": [ + "title", + "plot", + "plotoutline", + "starttime", + "endtime", + "runtime", + "progress", + "progresspercentage", + "genre", + "episodename", + "episodenum", + "episodepart", + "firstaired", + "hastimer", + "isactive", + "parentalrating", + "wasactive", + "thumbnail", + "rating", + "originaltitle", + "cast", + "director", + "writer", + "year", + "imdbnumber", + "hastimerrule", + "hasrecording", + "recording", + "isseries", + "isplayable", + "clientid" + ], + "type": "string" + } + }, + "PVR.Fields.Channel": { + "extends": "Item.Fields.Base", + "id": "PVR.Fields.Channel", + "items": { + "enums": [ + "thumbnail", + "channeltype", + "hidden", + "locked", + "channel", + "lastplayed", + "broadcastnow", + "broadcastnext", + "uniqueid", + "icon", + "channelnumber", + "subchannelnumber", + "isrecording", + "hasarchive", + "clientid" + ], + "type": "string" + } + }, + "PVR.Fields.Client": { + "extends": "Item.Fields.Base", + "id": "PVR.Fields.Client", + "items": { + "enums": [ + "addonid", + "supportstv", + "supportsradio", + "supportsepg", + "supportsrecordings", + "supportstimers", + "supportschannelgroups", + "supportschannelscan" + ], + "type": "string" + } + }, + "PVR.Fields.Recording": { + "extends": "Item.Fields.Base", + "id": "PVR.Fields.Recording", + "items": { + "enums": [ + "title", + "plot", + "plotoutline", + "genre", + "playcount", + "resume", + "channel", + "starttime", + "endtime", + "runtime", + "lifetime", + "icon", + "art", + "streamurl", + "file", + "directory", + "radio", + "isdeleted", + "epgeventid", + "channeluid", + "season", + "episode", + "showtitle", + "clientid" + ], + "type": "string" + } + }, + "PVR.Fields.Timer": { + "extends": "Item.Fields.Base", + "id": "PVR.Fields.Timer", + "items": { + "enums": [ + "title", + "summary", + "channelid", + "isradio", + "istimerrule", + "ismanual", + "starttime", + "endtime", + "runtime", + "lifetime", + "firstday", + "weekdays", + "priority", + "startmargin", + "endmargin", + "state", + "file", + "directory", + "preventduplicateepisodes", + "startanytime", + "endanytime", + "epgsearchstring", + "fulltextepgsearch", + "recordinggroup", + "maxrecordings", + "epguid", + "isreadonly", + "isreminder", + "clientid", + "broadcastid" + ], + "type": "string" + } + }, + "PVR.Property.Name": { + "default": "available", + "enums": [ + "available", + "recording", + "scanning" + ], + "id": "PVR.Property.Name", + "type": "string" + }, + "PVR.Property.Value": { + "id": "PVR.Property.Value", + "properties": { + "available": { + "default": false, + "type": "boolean" + }, + "recording": { + "default": false, + "type": "boolean" + }, + "scanning": { + "default": false, + "type": "boolean" + } + }, + "type": "object" + }, + "PVR.TimerState": { + "default": "unknown", + "enums": [ + "unknown", + "new", + "scheduled", + "recording", + "completed", + "aborted", + "cancelled", + "conflict_ok", + "conflict_notok", + "error", + "disabled" + ], + "id": "PVR.TimerState", + "type": "string" + }, + "Player.Audio.Stream": { + "id": "Player.Audio.Stream", + "properties": { + "bitrate": { + "required": true, + "type": "integer" + }, + "channels": { + "required": true, + "type": "integer" + }, + "codec": { + "required": true, + "type": "string" + }, + "index": { + "minimum": 0, + "required": true, + "type": "integer" + }, + "isdefault": { + "required": true, + "type": "boolean" + }, + "isimpaired": { + "required": true, + "type": "boolean" + }, + "isoriginal": { + "required": true, + "type": "boolean" + }, + "language": { + "required": true, + "type": "string" + }, + "name": { + "required": true, + "type": "string" + }, + "samplerate": { + "required": true, + "type": "integer" + } + }, + "type": "object" + }, + "Player.CustomViewMode": { + "id": "Player.CustomViewMode", + "properties": { + "nonlinearstretch": { + "default": null, + "type": [ + { + "enums": [ + "increase", + "decrease" + ], + "type": "string" + }, + { + "$ref": "Optional.Boolean", + "description": "Flag to enable nonlinear stretch" + } + ] + }, + "pixelratio": { + "default": null, + "type": [ + { + "enums": [ + "increase", + "decrease" + ], + "type": "string" + }, + { + "$ref": "Optional.Number", + "description": "Pixel aspect ratio where 1.0 means square pixel" + } + ] + }, + "verticalshift": { + "default": null, + "type": [ + { + "enums": [ + "increase", + "decrease" + ], + "type": "string" + }, + { + "$ref": "Optional.Number", + "description": "Vertical shift 1.0 means shift to bottom" + } + ] + }, + "zoom": { + "default": null, + "type": [ + { + "enums": [ + "increase", + "decrease" + ], + "type": "string" + }, + { + "$ref": "Optional.Number", + "description": "Zoom where 1.0 means 100%" + } + ] + } + }, + "required": true, + "type": "object" + }, + "Player.Id": { + "default": -1, + "id": "Player.Id", + "maximum": 2, + "minimum": 0, + "type": "integer" + }, + "Player.Notifications.Data": { + "id": "Player.Notifications.Data", + "properties": { + "item": { + "$ref": "Notifications.Item", + "required": true + }, + "player": { + "$ref": "Player.Notifications.Player", + "required": true + } + }, + "type": "object" + }, + "Player.Notifications.Player": { + "id": "Player.Notifications.Player", + "properties": { + "playerid": { + "$ref": "Player.Id", + "required": true + }, + "speed": { + "default": 0, + "type": "integer" + } + }, + "type": "object" + }, + "Player.Notifications.Player.Seek": { + "extends": "Player.Notifications.Player", + "id": "Player.Notifications.Player.Seek", + "properties": { + "seekoffset": { + "$ref": "Global.Time", + "description": "A duration." + }, + "time": { + "$ref": "Global.Time", + "description": "A duration." + } + } + }, + "Player.Position.Percentage": { + "default": 0, + "id": "Player.Position.Percentage", + "maximum": 100, + "minimum": 0, + "type": "number" + }, + "Player.Position.Time": { + "additionalProperties": false, + "description": "A position in duration.", + "id": "Player.Position.Time", + "properties": { + "hours": { + "default": 0, + "minimum": 0, + "type": "integer" + }, + "milliseconds": { + "default": 0, + "maximum": 999, + "minimum": 0, + "type": "integer" + }, + "minutes": { + "default": 0, + "maximum": 59, + "minimum": 0, + "type": "integer" + }, + "seconds": { + "default": 0, + "maximum": 59, + "minimum": 0, + "type": "integer" + } + }, + "type": "object" + }, + "Player.Property.Name": { + "default": "type", + "enums": [ + "type", + "partymode", + "speed", + "time", + "percentage", + "totaltime", + "playlistid", + "position", + "repeat", + "shuffled", + "canseek", + "canchangespeed", + "canmove", + "canzoom", + "canrotate", + "canshuffle", + "canrepeat", + "currentaudiostream", + "audiostreams", + "subtitleenabled", + "currentsubtitle", + "subtitles", + "live", + "currentvideostream", + "videostreams", + "cachepercentage" + ], + "id": "Player.Property.Name", + "type": "string" + }, + "Player.Property.Value": { + "id": "Player.Property.Value", + "properties": { + "audiostreams": { + "items": { + "$ref": "Player.Audio.Stream" + }, + "type": "array" + }, + "cachepercentage": { + "$ref": "Player.Position.Percentage", + "default": 0 + }, + "canchangespeed": { + "default": false, + "type": "boolean" + }, + "canmove": { + "default": false, + "type": "boolean" + }, + "canrepeat": { + "default": false, + "type": "boolean" + }, + "canrotate": { + "default": false, + "type": "boolean" + }, + "canseek": { + "default": false, + "type": "boolean" + }, + "canshuffle": { + "default": false, + "type": "boolean" + }, + "canzoom": { + "default": false, + "type": "boolean" + }, + "currentaudiostream": { + "$ref": "Player.Audio.Stream" + }, + "currentsubtitle": { + "$ref": "Player.Subtitle" + }, + "currentvideostream": { + "$ref": "Player.Video.Stream" + }, + "live": { + "default": false, + "type": "boolean" + }, + "partymode": { + "default": false, + "type": "boolean" + }, + "percentage": { + "$ref": "Player.Position.Percentage", + "default": 0 + }, + "playlistid": { + "$ref": "Playlist.Id", + "default": -1 + }, + "position": { + "$ref": "Playlist.Position", + "default": -1 + }, + "repeat": { + "$ref": "Player.Repeat", + "default": "off" + }, + "shuffled": { + "default": false, + "type": "boolean" + }, + "speed": { + "default": 0, + "type": "integer" + }, + "subtitleenabled": { + "default": false, + "type": "boolean" + }, + "subtitles": { + "items": { + "$ref": "Player.Subtitle" + }, + "type": "array" + }, + "time": { + "$ref": "Global.Time", + "description": "A duration." + }, + "totaltime": { + "$ref": "Global.Time", + "description": "A duration." + }, + "type": { + "$ref": "Player.Type", + "default": "video" + }, + "videostreams": { + "items": { + "$ref": "Player.Video.Stream" + }, + "type": "array" + } + }, + "type": "object" + }, + "Player.Repeat": { + "default": "off", + "enums": [ + "off", + "one", + "all" + ], + "id": "Player.Repeat", + "type": "string" + }, + "Player.Speed": { + "id": "Player.Speed", + "properties": { + "speed": { + "default": 0, + "type": "integer" + } + }, + "required": true, + "type": "object" + }, + "Player.Subtitle": { + "id": "Player.Subtitle", + "properties": { + "index": { + "minimum": 0, + "required": true, + "type": "integer" + }, + "isdefault": { + "required": true, + "type": "boolean" + }, + "isforced": { + "required": true, + "type": "boolean" + }, + "isimpaired": { + "required": true, + "type": "boolean" + }, + "language": { + "required": true, + "type": "string" + }, + "name": { + "required": true, + "type": "string" + } + }, + "type": "object" + }, + "Player.Type": { + "default": "video", + "enums": [ + "video", + "audio", + "picture" + ], + "id": "Player.Type", + "type": "string" + }, + "Player.Video.Stream": { + "id": "Player.Video.Stream", + "properties": { + "codec": { + "required": true, + "type": "string" + }, + "height": { + "required": true, + "type": "integer" + }, + "index": { + "minimum": 0, + "required": true, + "type": "integer" + }, + "language": { + "required": true, + "type": "string" + }, + "name": { + "required": true, + "type": "string" + }, + "width": { + "required": true, + "type": "integer" + } + }, + "type": "object" + }, + "Player.ViewMode": { + "default": "normal", + "enums": [ + "normal", + "zoom", + "stretch4x3", + "widezoom", + "stretch16x9", + "original", + "stretch16x9nonlin", + "zoom120width", + "zoom110width" + ], + "id": "Player.ViewMode", + "type": "string" + }, + "Playlist.Id": { + "default": -1, + "id": "Playlist.Id", + "maximum": 2, + "minimum": 0, + "type": "integer" + }, + "Playlist.Item": { + "id": "Playlist.Item", + "type": [ + { + "additionalProperties": false, + "properties": { + "file": { + "description": "Path to a file (not a directory) to be added to the playlist", + "required": true, + "type": "string" + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "directory": { + "required": true, + "type": "string" + }, + "media": { + "$ref": "Files.Media", + "default": "files" + }, + "recursive": { + "default": false, + "type": "boolean" + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "movieid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "episodeid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "musicvideoid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "artistid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "albumid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "songid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "genreid": { + "$ref": "Library.Id", + "description": "Identification of a genre from the AudioLibrary", + "required": true + } + }, + "type": "object" + } + ] + }, + "Playlist.Position": { + "default": -1, + "id": "Playlist.Position", + "minimum": 0, + "type": "integer" + }, + "Playlist.Property.Name": { + "default": "type", + "enums": [ + "type", + "size" + ], + "id": "Playlist.Property.Name", + "type": "string" + }, + "Playlist.Property.Value": { + "id": "Playlist.Property.Value", + "properties": { + "size": { + "default": 0, + "minimum": 0, + "type": "integer" + }, + "type": { + "$ref": "Playlist.Type", + "default": "unknown" + } + }, + "type": "object" + }, + "Playlist.Type": { + "default": "unknown", + "enums": [ + "unknown", + "video", + "audio", + "picture", + "mixed" + ], + "id": "Playlist.Type", + "type": "string" + }, + "Profiles.Details.Profile": { + "extends": "Item.Details.Base", + "id": "Profiles.Details.Profile", + "properties": { + "lockmode": { + "default": 0, + "type": "integer" + }, + "thumbnail": { + "default": "", + "type": "string" + } + } + }, + "Profiles.Fields.Profile": { + "extends": "Item.Fields.Base", + "id": "Profiles.Fields.Profile", + "items": { + "enums": [ + "thumbnail", + "lockmode" + ], + "type": "string" + } + }, + "Profiles.Password": { + "id": "Profiles.Password", + "properties": { + "encryption": { + "default": "md5", + "description": "Password Encryption", + "enums": [ + "none", + "md5" + ], + "type": "string" + }, + "value": { + "description": "Password", + "required": true, + "type": "string" + } + }, + "type": "object" + }, + "Setting.Details.Base": { + "id": "Setting.Details.Base", + "properties": { + "help": { + "default": "", + "type": "string" + }, + "id": { + "minLength": 1, + "required": true, + "type": "string" + }, + "label": { + "required": true, + "type": "string" + } + }, + "type": "object" + }, + "Setting.Details.Category": { + "additionalProperties": false, + "extends": "Setting.Details.Base", + "id": "Setting.Details.Category", + "properties": { + "groups": { + "items": { + "$ref": "Setting.Details.Group" + }, + "minItems": 1, + "type": "array", + "uniqueItems": true + } + } + }, + "Setting.Details.Control": { + "id": "Setting.Details.Control", + "type": [ + { + "$ref": "Setting.Details.ControlCheckmark" + }, + { + "$ref": "Setting.Details.ControlSpinner" + }, + { + "$ref": "Setting.Details.ControlEdit" + }, + { + "$ref": "Setting.Details.ControlButton" + }, + { + "$ref": "Setting.Details.ControlList" + }, + { + "$ref": "Setting.Details.ControlSlider" + }, + { + "$ref": "Setting.Details.ControlRange" + }, + { + "$ref": "Setting.Details.ControlLabel" + } + ] + }, + "Setting.Details.ControlBase": { + "id": "Setting.Details.ControlBase", + "properties": { + "delayed": { + "required": true, + "type": "boolean" + }, + "format": { + "required": true, + "type": "string" + }, + "type": { + "required": true, + "type": "string" + } + }, + "type": "object" + }, + "Setting.Details.ControlButton": { + "extends": "Setting.Details.ControlHeading", + "id": "Setting.Details.ControlButton", + "properties": { + "type": { + "enums": [ + "button" + ], + "required": true, + "type": "string" + } + } + }, + "Setting.Details.ControlCheckmark": { + "extends": "Setting.Details.ControlBase", + "id": "Setting.Details.ControlCheckmark", + "properties": { + "format": { + "enums": [ + "boolean" + ], + "required": true, + "type": "string" + }, + "type": { + "enums": [ + "toggle" + ], + "required": true, + "type": "string" + } + } + }, + "Setting.Details.ControlEdit": { + "extends": "Setting.Details.ControlHeading", + "id": "Setting.Details.ControlEdit", + "properties": { + "hidden": { + "required": true, + "type": "boolean" + }, + "type": { + "enums": [ + "edit" + ], + "required": true, + "type": "string" + }, + "verifynewvalue": { + "required": true, + "type": "boolean" + } + } + }, + "Setting.Details.ControlHeading": { + "extends": "Setting.Details.ControlBase", + "id": "Setting.Details.ControlHeading", + "properties": { + "heading": { + "default": "", + "type": "string" + } + } + }, + "Setting.Details.ControlLabel": { + "extends": "Setting.Details.ControlBase", + "id": "Setting.Details.ControlLabel", + "properties": { + "format": { + "enums": [ + "string" + ], + "required": true, + "type": "string" + }, + "type": { + "enums": [ + "label" + ], + "required": true, + "type": "string" + } + } + }, + "Setting.Details.ControlList": { + "extends": "Setting.Details.ControlHeading", + "id": "Setting.Details.ControlList", + "properties": { + "multiselect": { + "required": true, + "type": "boolean" + }, + "type": { + "enums": [ + "list" + ], + "required": true, + "type": "string" + } + } + }, + "Setting.Details.ControlRange": { + "extends": "Setting.Details.ControlBase", + "id": "Setting.Details.ControlRange", + "properties": { + "formatlabel": { + "required": true, + "type": "string" + }, + "formatvalue": { + "required": true, + "type": "string" + }, + "type": { + "enums": [ + "range" + ], + "required": true, + "type": "string" + } + } + }, + "Setting.Details.ControlSlider": { + "extends": "Setting.Details.ControlHeading", + "id": "Setting.Details.ControlSlider", + "properties": { + "formatlabel": { + "required": true, + "type": "string" + }, + "popup": { + "required": true, + "type": "boolean" + }, + "type": { + "enums": [ + "slider" + ], + "required": true, + "type": "string" + } + } + }, + "Setting.Details.ControlSpinner": { + "extends": "Setting.Details.ControlBase", + "id": "Setting.Details.ControlSpinner", + "properties": { + "formatlabel": { + "default": "", + "type": "string" + }, + "minimumlabel": { + "default": "", + "type": "string" + }, + "type": { + "enums": [ + "spinner" + ], + "required": true, + "type": "string" + } + } + }, + "Setting.Details.Group": { + "additionalProperties": false, + "id": "Setting.Details.Group", + "properties": { + "id": { + "minLength": 1, + "required": true, + "type": "string" + }, + "settings": { + "items": { + "$ref": "Setting.Details.Setting" + }, + "minItems": 1, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + }, + "Setting.Details.Section": { + "additionalProperties": false, + "extends": "Setting.Details.Base", + "id": "Setting.Details.Section", + "properties": { + "categories": { + "items": { + "$ref": "Setting.Details.Category" + }, + "minItems": 1, + "type": "array", + "uniqueItems": true + } + } + }, + "Setting.Details.Setting": { + "id": "Setting.Details.Setting", + "type": [ + { + "$ref": "Setting.Details.SettingBool" + }, + { + "$ref": "Setting.Details.SettingInt" + }, + { + "$ref": "Setting.Details.SettingNumber" + }, + { + "$ref": "Setting.Details.SettingString" + }, + { + "$ref": "Setting.Details.SettingAction" + }, + { + "$ref": "Setting.Details.SettingList" + }, + { + "$ref": "Setting.Details.SettingPath" + }, + { + "$ref": "Setting.Details.SettingAddon" + }, + { + "$ref": "Setting.Details.SettingDate" + }, + { + "$ref": "Setting.Details.SettingTime" + } + ] + }, + "Setting.Details.SettingAction": { + "additionalProperties": false, + "extends": "Setting.Details.SettingBase", + "id": "Setting.Details.SettingAction", + "properties": { + "data": { + "required": true, + "type": "string" + } + } + }, + "Setting.Details.SettingAddon": { + "additionalProperties": false, + "extends": "Setting.Details.SettingString", + "id": "Setting.Details.SettingAddon", + "properties": { + "addontype": { + "$ref": "Addon.Types", + "required": true + } + } + }, + "Setting.Details.SettingBase": { + "additionalProperties": false, + "extends": "Setting.Details.Base", + "id": "Setting.Details.SettingBase", + "properties": { + "control": { + "$ref": "Setting.Details.Control" + }, + "enabled": { + "required": true, + "type": "boolean" + }, + "level": { + "$ref": "Setting.Level", + "required": true + }, + "parent": { + "default": "", + "type": "string" + }, + "type": { + "$ref": "Setting.Type", + "required": true + } + } + }, + "Setting.Details.SettingBool": { + "additionalProperties": false, + "extends": "Setting.Details.SettingBase", + "id": "Setting.Details.SettingBool", + "properties": { + "default": { + "required": true, + "type": "boolean" + }, + "value": { + "required": true, + "type": "boolean" + } + } + }, + "Setting.Details.SettingDate": { + "additionalProperties": false, + "extends": "Setting.Details.SettingString", + "id": "Setting.Details.SettingDate" + }, + "Setting.Details.SettingInt": { + "additionalProperties": false, + "extends": "Setting.Details.SettingBase", + "id": "Setting.Details.SettingInt", + "properties": { + "default": { + "required": true, + "type": "integer" + }, + "maximum": { + "default": 0, + "type": "integer" + }, + "minimum": { + "default": 0, + "type": "integer" + }, + "options": { + "items": { + "properties": { + "label": { + "required": true, + "type": "string" + }, + "value": { + "required": true, + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "step": { + "default": 0, + "type": "integer" + }, + "value": { + "required": true, + "type": "integer" + } + } + }, + "Setting.Details.SettingList": { + "additionalProperties": false, + "extends": "Setting.Details.SettingBase", + "id": "Setting.Details.SettingList", + "properties": { + "default": { + "$ref": "Setting.Value.List", + "required": true + }, + "definition": { + "$ref": "Setting.Details.Setting", + "required": true + }, + "delimiter": { + "required": true, + "type": "string" + }, + "elementtype": { + "$ref": "Setting.Type", + "required": true + }, + "maximumitems": { + "default": 0, + "type": "integer" + }, + "minimumitems": { + "default": 0, + "type": "integer" + }, + "value": { + "$ref": "Setting.Value.List", + "required": true + } + } + }, + "Setting.Details.SettingNumber": { + "additionalProperties": false, + "extends": "Setting.Details.SettingBase", + "id": "Setting.Details.SettingNumber", + "properties": { + "default": { + "required": true, + "type": "number" + }, + "maximum": { + "required": true, + "type": "number" + }, + "minimum": { + "required": true, + "type": "number" + }, + "step": { + "required": true, + "type": "number" + }, + "value": { + "required": true, + "type": "number" + } + } + }, + "Setting.Details.SettingPath": { + "additionalProperties": false, + "extends": "Setting.Details.SettingString", + "id": "Setting.Details.SettingPath", + "properties": { + "sources": { + "items": { + "type": "string" + }, + "type": "array" + }, + "writable": { + "required": true, + "type": "boolean" + } + } + }, + "Setting.Details.SettingString": { + "extends": "Setting.Details.SettingBase", + "id": "Setting.Details.SettingString", + "properties": { + "allowempty": { + "required": true, + "type": "boolean" + }, + "default": { + "required": true, + "type": "string" + }, + "options": { + "items": { + "properties": { + "label": { + "required": true, + "type": "string" + }, + "value": { + "required": true, + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "value": { + "required": true, + "type": "string" + } + } + }, + "Setting.Details.SettingTime": { + "additionalProperties": false, + "extends": "Setting.Details.SettingString", + "id": "Setting.Details.SettingTime" + }, + "Setting.Level": { + "default": "basic", + "enums": [ + "basic", + "standard", + "advanced", + "expert" + ], + "id": "Setting.Level", + "type": "string" + }, + "Setting.Type": { + "default": "boolean", + "enums": [ + "boolean", + "integer", + "number", + "string", + "action", + "list", + "path", + "addon", + "date", + "time" + ], + "id": "Setting.Type", + "type": "string" + }, + "Setting.Value": { + "default": null, + "id": "Setting.Value", + "type": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "Setting.Value.Extended": { + "default": null, + "id": "Setting.Value.Extended", + "type": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "Setting.Value.List" + } + ] + }, + "Setting.Value.List": { + "id": "Setting.Value.List", + "items": { + "$ref": "Setting.Value" + }, + "type": "array" + }, + "System.Property.Name": { + "default": "canshutdown", + "enums": [ + "canshutdown", + "cansuspend", + "canhibernate", + "canreboot" + ], + "id": "System.Property.Name", + "type": "string" + }, + "System.Property.Value": { + "id": "System.Property.Value", + "properties": { + "canhibernate": { + "default": false, + "type": "boolean" + }, + "canreboot": { + "default": false, + "type": "boolean" + }, + "canshutdown": { + "default": false, + "type": "boolean" + }, + "cansuspend": { + "default": false, + "type": "boolean" + } + }, + "type": "object" + }, + "Textures.Details.Size": { + "id": "Textures.Details.Size", + "properties": { + "height": { + "default": 0, + "description": "Height of texture", + "type": "integer" + }, + "lastused": { + "default": "", + "description": "Date of last use", + "type": "string" + }, + "size": { + "default": 0, + "description": "Size of the texture (1 == largest)", + "type": "integer" + }, + "usecount": { + "default": 0, + "description": "Number of uses", + "type": "integer" + }, + "width": { + "default": 0, + "description": "Width of texture", + "type": "integer" + } + }, + "type": "object" + }, + "Textures.Details.Texture": { + "id": "Textures.Details.Texture", + "properties": { + "cachedurl": { + "default": "", + "description": "Cached URL on disk", + "type": "string" + }, + "imagehash": { + "default": "", + "description": "Hash of image", + "type": "string" + }, + "lasthashcheck": { + "default": "", + "description": "Last time source was checked for changes", + "type": "string" + }, + "sizes": { + "items": { + "$ref": "Textures.Details.Size" + }, + "type": "array" + }, + "textureid": { + "$ref": "Library.Id", + "default": -1 + }, + "url": { + "default": "", + "description": "Original source URL", + "type": "string" + } + }, + "type": "object" + }, + "Textures.Fields.Texture": { + "extends": "Item.Fields.Base", + "id": "Textures.Fields.Texture", + "items": { + "enums": [ + "url", + "cachedurl", + "lasthashcheck", + "imagehash", + "sizes" + ], + "type": "string" + } + }, + "Video.Cast": { + "id": "Video.Cast", + "items": { + "additionalProperties": false, + "properties": { + "name": { + "required": true, + "type": "string" + }, + "order": { + "required": true, + "type": "integer" + }, + "role": { + "required": true, + "type": "string" + }, + "thumbnail": { + "default": "", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "Video.Details.Base": { + "extends": "Media.Details.Base", + "id": "Video.Details.Base", + "properties": { + "art": { + "$ref": "Media.Artwork" + }, + "playcount": { + "default": 0, + "type": "integer" + } + } + }, + "Video.Details.Episode": { + "extends": "Video.Details.File", + "id": "Video.Details.Episode", + "properties": { + "cast": { + "$ref": "Video.Cast" + }, + "episode": { + "default": 0, + "type": "integer" + }, + "episodeid": { + "$ref": "Library.Id", + "required": true + }, + "firstaired": { + "default": "", + "type": "string" + }, + "originaltitle": { + "default": "", + "type": "string" + }, + "productioncode": { + "default": "", + "type": "string" + }, + "rating": { + "default": 0, + "type": "number" + }, + "ratings": { + "default": null, + "type": "any" + }, + "season": { + "default": 0, + "type": "integer" + }, + "seasonid": { + "$ref": "Library.Id", + "default": -1 + }, + "showtitle": { + "default": "", + "type": "string" + }, + "specialsortepisode": { + "default": 0, + "type": "integer" + }, + "specialsortseason": { + "default": 0, + "type": "integer" + }, + "tvshowid": { + "$ref": "Library.Id", + "default": -1 + }, + "uniqueid": { + "$ref": "Media.UniqueID" + }, + "userrating": { + "default": 0, + "type": "integer" + }, + "votes": { + "default": "", + "type": "string" + }, + "writer": { + "$ref": "Array.String" + } + } + }, + "Video.Details.File": { + "extends": "Video.Details.Item", + "id": "Video.Details.File", + "properties": { + "director": { + "$ref": "Array.String" + }, + "resume": { + "$ref": "Video.Resume" + }, + "runtime": { + "default": 0, + "description": "Runtime in seconds", + "type": "integer" + }, + "streamdetails": { + "$ref": "Video.Streams" + } + } + }, + "Video.Details.Item": { + "extends": "Video.Details.Media", + "id": "Video.Details.Item", + "properties": { + "dateadded": { + "default": "", + "type": "string" + }, + "file": { + "default": "", + "type": "string" + }, + "lastplayed": { + "default": "", + "type": "string" + }, + "plot": { + "default": "", + "type": "string" + } + } + }, + "Video.Details.Media": { + "extends": "Video.Details.Base", + "id": "Video.Details.Media", + "properties": { + "title": { + "default": "", + "type": "string" + } + } + }, + "Video.Details.Movie": { + "extends": "Video.Details.File", + "id": "Video.Details.Movie", + "properties": { + "cast": { + "$ref": "Video.Cast" + }, + "country": { + "$ref": "Array.String" + }, + "genre": { + "$ref": "Array.String" + }, + "imdbnumber": { + "default": "", + "type": "string" + }, + "movieid": { + "$ref": "Library.Id", + "required": true + }, + "mpaa": { + "default": "", + "type": "string" + }, + "originaltitle": { + "default": "", + "type": "string" + }, + "plotoutline": { + "default": "", + "type": "string" + }, + "premiered": { + "default": "", + "type": "string" + }, + "rating": { + "default": 0, + "type": "number" + }, + "ratings": { + "default": null, + "type": "any" + }, + "set": { + "default": "", + "type": "string" + }, + "setid": { + "$ref": "Library.Id", + "default": -1 + }, + "showlink": { + "$ref": "Array.String" + }, + "sorttitle": { + "default": "", + "type": "string" + }, + "studio": { + "$ref": "Array.String" + }, + "tag": { + "$ref": "Array.String" + }, + "tagline": { + "default": "", + "type": "string" + }, + "top250": { + "default": 0, + "type": "integer" + }, + "trailer": { + "default": "", + "type": "string" + }, + "uniqueid": { + "$ref": "Media.UniqueID" + }, + "userrating": { + "default": 0, + "type": "integer" + }, + "votes": { + "default": "", + "type": "string" + }, + "writer": { + "$ref": "Array.String" + }, + "year": { + "default": 0, + "type": "integer" + } + } + }, + "Video.Details.MovieSet": { + "extends": "Video.Details.Media", + "id": "Video.Details.MovieSet", + "properties": { + "plot": { + "default": "", + "type": "string" + }, + "setid": { + "$ref": "Library.Id", + "required": true + } + } + }, + "Video.Details.MovieSet.Extended": { + "extends": "Video.Details.MovieSet", + "id": "Video.Details.MovieSet.Extended", + "properties": { + "limits": { + "$ref": "List.LimitsReturned", + "required": true + }, + "movies": { + "items": { + "$ref": "Video.Details.Movie" + }, + "type": "array" + } + } + }, + "Video.Details.MusicVideo": { + "extends": "Video.Details.File", + "id": "Video.Details.MusicVideo", + "properties": { + "album": { + "default": "", + "type": "string" + }, + "artist": { + "$ref": "Array.String" + }, + "genre": { + "$ref": "Array.String" + }, + "musicvideoid": { + "$ref": "Library.Id", + "required": true + }, + "premiered": { + "default": "", + "type": "string" + }, + "rating": { + "default": 0, + "type": "number" + }, + "studio": { + "$ref": "Array.String" + }, + "tag": { + "$ref": "Array.String" + }, + "track": { + "default": 0, + "type": "integer" + }, + "userrating": { + "default": 0, + "type": "integer" + }, + "year": { + "default": 0, + "type": "integer" + } + } + }, + "Video.Details.Season": { + "extends": "Video.Details.Base", + "id": "Video.Details.Season", + "properties": { + "episode": { + "default": 0, + "type": "integer" + }, + "season": { + "required": true, + "type": "integer" + }, + "seasonid": { + "$ref": "Library.Id", + "required": true + }, + "showtitle": { + "default": "", + "type": "string" + }, + "title": { + "default": "", + "type": "string" + }, + "tvshowid": { + "$ref": "Library.Id", + "default": -1 + }, + "userrating": { + "default": 0, + "type": "integer" + }, + "watchedepisodes": { + "default": 0, + "type": "integer" + } + } + }, + "Video.Details.TVShow": { + "extends": "Video.Details.Item", + "id": "Video.Details.TVShow", + "properties": { + "cast": { + "$ref": "Video.Cast" + }, + "episode": { + "default": 0, + "type": "integer" + }, + "episodeguide": { + "default": "", + "type": "string" + }, + "genre": { + "$ref": "Array.String" + }, + "imdbnumber": { + "default": "", + "type": "string" + }, + "mpaa": { + "default": "", + "type": "string" + }, + "originaltitle": { + "default": "", + "type": "string" + }, + "premiered": { + "default": "", + "type": "string" + }, + "rating": { + "default": 0, + "type": "number" + }, + "ratings": { + "default": null, + "type": "any" + }, + "runtime": { + "default": 0, + "description": "Runtime in seconds", + "type": "integer" + }, + "season": { + "default": 0, + "type": "integer" + }, + "sorttitle": { + "default": "", + "type": "string" + }, + "status": { + "default": "", + "description": "Returns 'returning series', 'in production', 'planned', 'cancelled' or 'ended'", + "type": "string" + }, + "studio": { + "$ref": "Array.String" + }, + "tag": { + "$ref": "Array.String" + }, + "tvshowid": { + "$ref": "Library.Id", + "required": true + }, + "uniqueid": { + "$ref": "Media.UniqueID" + }, + "userrating": { + "default": 0, + "type": "integer" + }, + "votes": { + "default": "", + "type": "string" + }, + "watchedepisodes": { + "default": 0, + "type": "integer" + }, + "year": { + "default": 0, + "type": "integer" + } + } + }, + "Video.Fields.Episode": { + "extends": "Item.Fields.Base", + "id": "Video.Fields.Episode", + "items": { + "description": "Requesting the cast, ratings, streamdetails, uniqueid and/or tag field will result in increased response times", + "enums": [ + "title", + "plot", + "votes", + "rating", + "writer", + "firstaired", + "playcount", + "runtime", + "director", + "productioncode", + "season", + "episode", + "originaltitle", + "showtitle", + "cast", + "streamdetails", + "lastplayed", + "fanart", + "thumbnail", + "file", + "resume", + "tvshowid", + "dateadded", + "uniqueid", + "art", + "specialsortseason", + "specialsortepisode", + "userrating", + "seasonid", + "ratings" + ], + "type": "string" + } + }, + "Video.Fields.Movie": { + "extends": "Item.Fields.Base", + "id": "Video.Fields.Movie", + "items": { + "description": "Requesting the cast, ratings, showlink, streamdetails, uniqueid and/or tag field will result in increased response times", + "enums": [ + "title", + "genre", + "year", + "rating", + "director", + "trailer", + "tagline", + "plot", + "plotoutline", + "originaltitle", + "lastplayed", + "playcount", + "writer", + "studio", + "mpaa", + "cast", + "country", + "imdbnumber", + "runtime", + "set", + "showlink", + "streamdetails", + "top250", + "votes", + "fanart", + "thumbnail", + "file", + "sorttitle", + "resume", + "setid", + "dateadded", + "tag", + "art", + "userrating", + "ratings", + "premiered", + "uniqueid" + ], + "type": "string" + } + }, + "Video.Fields.MovieSet": { + "extends": "Item.Fields.Base", + "id": "Video.Fields.MovieSet", + "items": { + "enums": [ + "title", + "playcount", + "fanart", + "thumbnail", + "art", + "plot" + ], + "type": "string" + } + }, + "Video.Fields.MusicVideo": { + "extends": "Item.Fields.Base", + "id": "Video.Fields.MusicVideo", + "items": { + "description": "Requesting the streamdetails and/or tag field will result in increased response times", + "enums": [ + "title", + "playcount", + "runtime", + "director", + "studio", + "year", + "plot", + "album", + "artist", + "genre", + "track", + "streamdetails", + "lastplayed", + "fanart", + "thumbnail", + "file", + "resume", + "dateadded", + "tag", + "art", + "rating", + "userrating", + "premiered" + ], + "type": "string" + } + }, + "Video.Fields.Season": { + "extends": "Item.Fields.Base", + "id": "Video.Fields.Season", + "items": { + "enums": [ + "season", + "showtitle", + "playcount", + "episode", + "fanart", + "thumbnail", + "tvshowid", + "watchedepisodes", + "art", + "userrating", + "title" + ], + "type": "string" + } + }, + "Video.Fields.TVShow": { + "extends": "Item.Fields.Base", + "id": "Video.Fields.TVShow", + "items": { + "description": "Requesting the cast, ratings, uniqueid and/or tag field will result in increased response times", + "enums": [ + "title", + "genre", + "year", + "rating", + "plot", + "studio", + "mpaa", + "cast", + "playcount", + "episode", + "imdbnumber", + "premiered", + "votes", + "lastplayed", + "fanart", + "thumbnail", + "file", + "originaltitle", + "sorttitle", + "episodeguide", + "season", + "watchedepisodes", + "dateadded", + "tag", + "art", + "userrating", + "ratings", + "runtime", + "uniqueid" + ], + "type": "string" + } + }, + "Video.Rating": { + "id": "Video.Rating", + "properties": { + "default": { + "default": false, + "type": "boolean" + }, + "rating": { + "required": true, + "type": "number" + }, + "votes": { + "default": 0, + "type": "integer" + } + }, + "type": "object" + }, + "Video.Ratings": { + "additionalProperties": { + "$ref": "Video.Rating" + }, + "id": "Video.Ratings", + "type": "object" + }, + "Video.Ratings.Set": { + "additionalProperties": { + "default": null, + "type": [ + { + "type": "null" + }, + { + "$ref": "Video.Rating" + } + ] + }, + "id": "Video.Ratings.Set", + "type": "object" + }, + "Video.Resume": { + "additionalProperties": false, + "id": "Video.Resume", + "properties": { + "position": { + "default": 0, + "minimum": 0, + "type": "number" + }, + "total": { + "default": 0, + "minimum": 0, + "type": "number" + } + }, + "type": "object" + }, + "Video.Streams": { + "additionalProperties": false, + "id": "Video.Streams", + "properties": { + "audio": { + "items": { + "additionalProperties": false, + "properties": { + "channels": { + "default": 0, + "type": "integer" + }, + "codec": { + "default": "", + "type": "string" + }, + "language": { + "default": "", + "type": "string" + } + }, + "type": "object" + }, + "minItems": 1, + "type": "array" + }, + "subtitle": { + "items": { + "additionalProperties": false, + "properties": { + "language": { + "default": "", + "type": "string" + } + }, + "type": "object" + }, + "minItems": 1, + "type": "array" + }, + "video": { + "items": { + "additionalProperties": false, + "properties": { + "aspect": { + "default": 0, + "type": "number" + }, + "codec": { + "default": "", + "type": "string" + }, + "duration": { + "default": 0, + "type": "integer" + }, + "height": { + "default": 0, + "type": "integer" + }, + "width": { + "default": 0, + "type": "integer" + } + }, + "type": "object" + }, + "minItems": 1, + "type": "array" + } + }, + "type": "object" + } + }, + "version": "12.2.1" + } +} \ No newline at end of file