From fe9f45bb4a0fa2a059463eb529eacf471544a95b Mon Sep 17 00:00:00 2001 From: Synced Synapse Date: Tue, 3 Nov 2015 23:36:28 +0000 Subject: [PATCH] Added PVR jsonrpc methods and types --- .../org/xbmc/kore/jsonrpc/method/PVR.java | 206 + .../org/xbmc/kore/jsonrpc/type/PVRType.java | 211 + .../{introspect.json => IntrospectHelix.json} | 0 doc/json_responses/IntrospectIsenguard.json | 8650 +++++++++++++++++ doc/json_responses/PVR.Details.Broadcast.json | 1156 +++ doc/json_responses/PVR.Details.Channel.json | 306 + .../PVR.Details.ChannelGroup.json | 24 + 7 files changed, 10553 insertions(+) create mode 100644 app/src/main/java/org/xbmc/kore/jsonrpc/method/PVR.java create mode 100644 app/src/main/java/org/xbmc/kore/jsonrpc/type/PVRType.java rename doc/json_responses/{introspect.json => IntrospectHelix.json} (100%) create mode 100644 doc/json_responses/IntrospectIsenguard.json create mode 100644 doc/json_responses/PVR.Details.Broadcast.json create mode 100644 doc/json_responses/PVR.Details.Channel.json create mode 100644 doc/json_responses/PVR.Details.ChannelGroup.json diff --git a/app/src/main/java/org/xbmc/kore/jsonrpc/method/PVR.java b/app/src/main/java/org/xbmc/kore/jsonrpc/method/PVR.java new file mode 100644 index 0000000..cc3cf5a --- /dev/null +++ b/app/src/main/java/org/xbmc/kore/jsonrpc/method/PVR.java @@ -0,0 +1,206 @@ +package org.xbmc.kore.jsonrpc.method; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.ObjectNode; + +import org.xbmc.kore.jsonrpc.ApiException; +import org.xbmc.kore.jsonrpc.ApiMethod; +import org.xbmc.kore.jsonrpc.type.PVRType; + +import java.util.ArrayList; +import java.util.List; + +/** + * All JSON RPC methods in PVR.* + */ +public class PVR { + + /** + * Retrieves the channel groups for the specified type + */ + public static class GetChannelGroups extends ApiMethod> { + public final static String METHOD_NAME = "PVR.GetChannelGroups"; + private final static String LIST_NODE = "channelgroups"; + + /** + * Retrieves the channel groups for the specified type + * + * @param channeltype Channel type. See {@link org.xbmc.kore.jsonrpc.type.PVRType.ChannelType} + */ + public GetChannelGroups(String channeltype) { + super(); + addParameterToRequest("channeltype", channeltype); + } + + @Override + public String getMethodName() { + return METHOD_NAME; + } + + @Override + public List resultFromJson(ObjectNode jsonObject) + throws ApiException { + JsonNode resultNode = jsonObject.get(RESULT_NODE); + ArrayNode items = resultNode.has(LIST_NODE) ? + (ArrayNode)resultNode.get(LIST_NODE) : null; + if (items == null) { + return new ArrayList<>(0); + } + ArrayList result = new ArrayList<>(items.size()); + + for (JsonNode item : items) { + result.add(new PVRType.DetailsChannelGroup(item)); + } + + return result; + } + } + + /** + * Retrieves the channel list + */ + public static class GetChannels extends ApiMethod> { + public final static String METHOD_NAME = "PVR.GetChannels"; + private final static String LIST_NODE = "channels"; + + /** + * Retrieves the channel list + * + * @param channelgroupid Group id, required + * @param properties Properties to retrieve. See {@link PVRType.FieldsChannel} for a list of + * accepted values + */ + public GetChannels(int channelgroupid, String... properties) { + super(); + addParameterToRequest("channelgroupid", channelgroupid); + addParameterToRequest("properties", properties); + } + + @Override + public String getMethodName() { + return METHOD_NAME; + } + + @Override + public List resultFromJson(ObjectNode jsonObject) + throws ApiException { + JsonNode resultNode = jsonObject.get(RESULT_NODE); + ArrayNode items = resultNode.has(LIST_NODE) ? + (ArrayNode)resultNode.get(LIST_NODE) : null; + if (items == null) { + return new ArrayList<>(0); + } + ArrayList result = new ArrayList<>(items.size()); + + for (JsonNode item : items) { + result.add(new PVRType.DetailsChannel(item)); + } + + return result; + } + } + + /** + * Retrieves the program of a specific channel + */ + public static class GetBroadcasts extends ApiMethod> { + public final static String METHOD_NAME = "PVR.GetBroadcasts"; + private final static String LIST_NODE = "broadcasts"; + + /** + * Retrieves the program of a specific channel + * + * @param channelid Channel id, required + * @param properties Properties to retrieve. See {@link PVRType.FieldsBroadcast} for a list of + * accepted values + */ + public GetBroadcasts(int channelid, String... properties) { + super(); + addParameterToRequest("channelid", channelid); + addParameterToRequest("properties", properties); + } + + @Override + public String getMethodName() { + return METHOD_NAME; + } + + @Override + public List resultFromJson(ObjectNode jsonObject) + throws ApiException { + JsonNode resultNode = jsonObject.get(RESULT_NODE); + ArrayNode items = resultNode.has(LIST_NODE) ? + (ArrayNode)resultNode.get(LIST_NODE) : null; + if (items == null) { + return new ArrayList<>(0); + } + ArrayList result = new ArrayList<>(items.size()); + + for (JsonNode item : items) { + result.add(new PVRType.DetailsBroadcast(item)); + } + + return result; + } + } + + /** + * Toggle recording of a channel + */ + public static final class Record extends ApiMethod { + public final static String METHOD_NAME = "PVR.Record"; + + /** + * Records a channel + */ + public Record(boolean record) { + super(); + addParameterToRequest("record", record); + } + + /** + * Toggle recording of a channel + */ + public Record() { + super(); + addParameterToRequest("record", "toggle"); + } + + @Override + public String getMethodName() { + return METHOD_NAME; + } + + @Override + public String resultFromJson(ObjectNode jsonObject) throws ApiException { + return jsonObject.get(RESULT_NODE).textValue(); + } + } + + + /** + * Starts a channel scan + */ + public static final class Scan extends ApiMethod { + public final static String METHOD_NAME = "PVR.Shutdown"; + + /** + * Starts a channel scan + */ + public Scan() { + super(); + } + + @Override + public String getMethodName() { + return METHOD_NAME; + } + + @Override + public String resultFromJson(ObjectNode jsonObject) throws ApiException { + return jsonObject.get(RESULT_NODE).textValue(); + } + } + +} diff --git a/app/src/main/java/org/xbmc/kore/jsonrpc/type/PVRType.java b/app/src/main/java/org/xbmc/kore/jsonrpc/type/PVRType.java new file mode 100644 index 0000000..61f10cb --- /dev/null +++ b/app/src/main/java/org/xbmc/kore/jsonrpc/type/PVRType.java @@ -0,0 +1,211 @@ +package org.xbmc.kore.jsonrpc.type; + +import com.fasterxml.jackson.databind.JsonNode; + +import org.xbmc.kore.utils.JsonUtils; + +/** + * Types from PVR.* + */ +public class PVRType { + + /** + * Enums for File.Media + */ + public interface ChannelType { + String TV = "tv"; + String RADIO = "radio"; + String[] allValues = new String[] { + TV, RADIO + }; + } + + /** + * PVR.Details.ChannelGroup + */ + public static class DetailsChannelGroup extends ItemType.DetailsBase { + public static final String CHANNELGROUPID = "channelgroupid"; + public static final String CHANNELTYPE = "channeltype"; + + public final int channelgroupid; + public final String channeltype; + + /** + * Constructor + * @param node JSON object representing a Detail object + */ + public DetailsChannelGroup(JsonNode node) { + super(node); + channelgroupid = JsonUtils.intFromJsonNode(node, CHANNELGROUPID); + channeltype = JsonUtils.stringFromJsonNode(node, CHANNELTYPE, ChannelType.TV); + } + } + + /** + * Enums for PVR.Fields.Broadcast + */ + public interface FieldsBroadcast { + String TITLE = "title"; + String PLOT = "plot"; + String PLOTOUTLINE = "plotoutline"; + String STARTTIME = "starttime"; + String ENDTIME = "endtime"; + String RUNTIME = "runtime"; + String PROGRESS = "progress"; + String PROGRESSPERCENTAGE = "progresspercentage"; + String GENRE = "genre"; + String EPISODENAME = "episodename"; + String EPISODENUM = "episodenum"; + String EPISODEPART = "episodepart"; + String FIRSTAIRED = "firstaired"; + String HASTIMER = "hastimer"; + String ISACTIVE = "isactive"; + String PARENTALRATING = "parentalrating"; + String WASACTIVE = "wasactive"; + String THUMBNAIL = "thumbnail"; + String RATING = "rating"; + + public final static String[] allValues = new String[] { + TITLE, PLOT, PLOTOUTLINE, STARTTIME, ENDTIME, RUNTIME, PROGRESS, PROGRESSPERCENTAGE, GENRE, + EPISODENAME, EPISODENUM, EPISODEPART, FIRSTAIRED, HASTIMER, ISACTIVE, PARENTALRATING, + WASACTIVE, THUMBNAIL, RATING + }; + } + + /** + * PVR.Details.Broadcast type + */ + public static class DetailsBroadcast extends ItemType.DetailsBase { + public static final String BROADCASTID = "broadcastid"; + public static final String ENDTIME = "endtime"; + public static final String EPISODENAME = "episodename"; + public static final String EPISODENUM = "episodenum"; + public static final String EPISODEPART = "episodepart"; + public static final String FIRSTAIRED = "firstaired"; + public static final String GENRE = "genre"; + public static final String HASTIMER = "hastimer"; + public static final String ISACTIVE = "isactive"; + public static final String PARENTALRATING = "parentalrating"; + public static final String PLOT = "plot"; + public static final String PLOTOUTLINE = "plotoutline"; + public static final String PROGRESS = "progress"; + public static final String PROGRESSPERCENTAGE = "progresspercentage"; + public static final String RATING = "rating"; + public static final String RUNTIME = "runtime"; + public static final String STARTTIME = "starttime"; + public static final String THUMBNAIL = "thumbnail"; + public static final String TITLE = "title"; + public static final String WASACTIVE = "wasactive"; + + public final int broadcastid; + public final String endtime; + public final String episodename; + public final int episodenum; + public final int episodepart; + public final String firstaired; + public final String genre; + public final boolean hastimer; + public final boolean isactive; + public final int parentalrating; + public final String plot; + public final String plotoutline; + public final int progress; + public final double progresspercentage; + public final int rating; + public final int runtime; + public final String starttime; + public final String thumbnail; + public final String title; + public final boolean wasactive; + + /** + * Constructor + * @param node JSON object representing a DetailsBroadcast object + */ + public DetailsBroadcast(JsonNode node) { + super(node); + broadcastid = JsonUtils.intFromJsonNode(node, BROADCASTID); + endtime = JsonUtils.stringFromJsonNode(node, ENDTIME); + episodename = JsonUtils.stringFromJsonNode(node, EPISODENAME); + episodenum = JsonUtils.intFromJsonNode(node, EPISODENUM, 0); + episodepart = JsonUtils.intFromJsonNode(node, EPISODEPART, 0); + firstaired = JsonUtils.stringFromJsonNode(node, FIRSTAIRED); + genre = JsonUtils.stringFromJsonNode(node, GENRE); + hastimer = JsonUtils.booleanFromJsonNode(node, HASTIMER, false); + isactive = JsonUtils.booleanFromJsonNode(node, ISACTIVE, false); + parentalrating = JsonUtils.intFromJsonNode(node, PARENTALRATING, 0); + plot = JsonUtils.stringFromJsonNode(node, PLOT); + plotoutline = JsonUtils.stringFromJsonNode(node, PLOTOUTLINE); + progress = JsonUtils.intFromJsonNode(node, PROGRESS, 0); + progresspercentage = JsonUtils.doubleFromJsonNode(node, PROGRESSPERCENTAGE, 0); + rating = JsonUtils.intFromJsonNode(node, RATING, 0); + runtime = JsonUtils.intFromJsonNode(node, RUNTIME, 0); + starttime = JsonUtils.stringFromJsonNode(node, STARTTIME); + thumbnail = JsonUtils.stringFromJsonNode(node, THUMBNAIL); + title = JsonUtils.stringFromJsonNode(node, TITLE); + wasactive = JsonUtils.booleanFromJsonNode(node, WASACTIVE, false); + } + + } + + /** + * Enums for PVR.Fields.Channel + */ + public interface FieldsChannel { + String THUMBNAIL = "thumbnail"; + String CHANNELTYPE = "channeltype"; + String HIDDEN = "hidden"; + String LOCKED = "locked"; + String CHANNEL = "channel"; + String LASTPLAYED = "lastplayed"; + String BROADCASTNOW = "broadcastnow"; + String BROADCASTNEXT = "broadcastnext"; + + public final static String[] allValues = new String[] { + THUMBNAIL, CHANNELTYPE, HIDDEN, LOCKED, CHANNEL, LASTPLAYED, BROADCASTNOW, BROADCASTNEXT + }; + } + + /** + * PVR.Details.Channel + */ + public static class DetailsChannel extends ItemType.DetailsBase { + public static final String BROADCASTNEXT = "broadcastnext"; + public static final String BROADCASTNOW = "broadcastnow"; + public static final String CHANNEL = "channel"; + public static final String CHANNELID = "channelid"; + public static final String CHANNELTYPE = "channeltype"; + public static final String HIDDEN = "hidden"; + public static final String LASTPLAYED = "lastplayed"; + public static final String LOCKED = "locked"; + public static final String THUMBNAIL = "thumbnail"; + + public final DetailsBroadcast broadcastnext; + public final DetailsBroadcast broadcastnow; + public final String channel; + public final int channelid; + public final String channeltype; + public final boolean hidden; + public final String lastplayed; + public final boolean locked; + public final String thumbnail; + + /** + * Constructor + * @param node JSON object representing a Detail object + */ + public DetailsChannel(JsonNode node) { + super(node); + broadcastnext = node.has(BROADCASTNEXT) ? new DetailsBroadcast(node.get(BROADCASTNEXT)) : null; + broadcastnow = node.has(BROADCASTNOW) ? new DetailsBroadcast(node.get(BROADCASTNOW)) : null; + channel = JsonUtils.stringFromJsonNode(node, CHANNEL); + channelid = JsonUtils.intFromJsonNode(node, CHANNELID); + channeltype = JsonUtils.stringFromJsonNode(node, CHANNELTYPE, ChannelType.TV); + hidden = JsonUtils.booleanFromJsonNode(node, HIDDEN, false); + lastplayed = JsonUtils.stringFromJsonNode(node, LASTPLAYED); + locked = JsonUtils.booleanFromJsonNode(node, LOCKED, false); + thumbnail = JsonUtils.stringFromJsonNode(node, THUMBNAIL); + } + } + +} diff --git a/doc/json_responses/introspect.json b/doc/json_responses/IntrospectHelix.json similarity index 100% rename from doc/json_responses/introspect.json rename to doc/json_responses/IntrospectHelix.json diff --git a/doc/json_responses/IntrospectIsenguard.json b/doc/json_responses/IntrospectIsenguard.json new file mode 100644 index 0000000..e43f97a --- /dev/null +++ b/doc/json_responses/IntrospectIsenguard.json @@ -0,0 +1,8650 @@ +{ + "id": 32, + "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" + }], + "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 or 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", + "required": true + } + }, + "type": "object" + }, { + "additionalProperties": false, + "properties": { + "genre": { + "minLength": 1, + "required": true, + "type": "string" + } + }, + "type": "object" + }, { + "additionalProperties": false, + "properties": { + "artistid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, { + "additionalProperties": false, + "properties": { + "artist": { + "minLength": 1, + "required": true, + "type": "string" + } + }, + "type": "object" + }, { + "$ref": "List.Filter.Albums" + }] + }, { + "default": false, + "name": "includesingles", + "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", + "params": [{ + "$ref": "Optional.Boolean", + "default": null, + "description": "Whether or not to include artists only appearing in compilations. 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", + "required": true + } + }, + "type": "object" + }, { + "additionalProperties": false, + "properties": { + "genre": { + "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" + }, { + "$ref": "List.Filter.Artists" + }] + }], + "returns": { + "properties": { + "artists": { + "items": { + "$ref": "Audio.Details.Artist" + }, + "type": "array" + }, + "limits": { + "$ref": "List.LimitsReturned", + "required": true + } + }, + "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.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.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", + "required": true + } + }, + "type": "object" + }, { + "additionalProperties": false, + "properties": { + "genre": { + "minLength": 1, + "required": true, + "type": "string" + } + }, + "type": "object" + }, { + "additionalProperties": false, + "properties": { + "artistid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, { + "additionalProperties": false, + "properties": { + "artist": { + "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, + "name": "includesingles", + "type": "boolean" + }], + "returns": { + "properties": { + "limits": { + "$ref": "List.LimitsReturned", + "required": true + }, + "songs": { + "items": { + "$ref": "Audio.Details.Song" + }, + "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.Integer", + "default": null, + "name": "rating" + }, { + "$ref": "Optional.Integer", + "default": null, + "name": "year" + }], + "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" + }] + }], + "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": "albumartist", + "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.Integer", + "default": null, + "name": "rating" + }, { + "$ref": "Optional.String", + "default": null, + "name": "album" + }, { + "$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.String", + "default": null, + "name": "musicbrainzalbumid" + }, { + "$ref": "Optional.String", + "default": null, + "name": "musicbrainzalbumartistid" + }, { + "$ref": "Optional.Integer", + "default": null, + "name": "playcount" + }, { + "$ref": "Optional.String", + "default": null, + "name": "lastplayed" + }], + "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 and script 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" + }, + "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.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.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.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.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" + }], + "returns": { + "properties": { + "channels": { + "items": { + "$ref": "PVR.Details.Channel" + }, + "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" + }], + "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" + }], + "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": [], + "returns": { + "type": "string" + }, + "type": "method" + }, + "Player.GetActivePlayers": { + "description": "Returns all active players", + "params": [], + "returns": { + "items": { + "properties": { + "playerid": { + "$ref": "Player.Id", + "required": true + }, + "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 + }, + "playercoreid": { + "minimum": 1, + "required": true, + "type": "integer" + }, + "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.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": { + "channelid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }, { + "additionalProperties": false, + "properties": { + "recordingid": { + "$ref": "Library.Id", + "required": true + } + }, + "type": "object" + }] + }, { + "additionalProperties": false, + "name": "options", + "properties": { + "playercoreid": { + "default": null, + "type": [{ + "type": "null" + }, { + "enums": ["default"], + "type": "string" + }, { + "minimum": 1, + "type": "integer" + }] + }, + "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": [{ + "$ref": "Player.Position.Percentage", + "description": "Percentage value to seek to" + }, { + "$ref": "Player.Position.Time", + "description": "Time to seek to" + }, { + "description": "Seek by predefined jumps", + "enums": ["smallforward", "smallbackward", "bigforward", "bigbackward"], + "type": "string" + }, { + "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.0 + }, + "time": { + "$ref": "Global.Time" + }, + "totaltime": { + "$ref": "Global.Time" + } + }, + "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.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 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" + }, + "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.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.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", + "name": "tvshowid", + "required": true + }, { + "$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.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" + }] + }], + "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, + "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" + }] + }], + "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" + }] + }], + "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, + "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" + }] + }], + "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" + }] + }], + "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" + }] + }], + "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.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": { + "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.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.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.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": { + "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" + }, + "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" + }, + "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"], + "type": "string" + } + }, + "Addon.Types": { + "default": "unknown", + "enums": ["unknown", "xbmc.player.musicviz", "xbmc.gui.skin", "xbmc.pvrclient", "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", "xbmc.audioencoder", "kodi.context.item", "kodi.audiodecoder", "kodi.resource.language", "kodi.resource.uisounds", "xbmc.addon.video", "xbmc.addon.audio", "xbmc.addon.image", "xbmc.addon.executable", "visualization-library", "xbmc.metadata.scraper.library", "xbmc.python.library", "xbmc.python.module"], + "id": "Addon.Types", + "type": "string" + }, + "Application.Property.Name": { + "default": "volume", + "enums": ["volume", "muted", "name", "version"], + "id": "Application.Property.Name", + "type": "string" + }, + "Application.Property.Value": { + "id": "Application.Property.Value", + "properties": { + "muted": { + "default": false, + "type": "boolean" + }, + "name": { + "default": "", + "minLength": 1, + "type": "string" + }, + "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.Details.Album": { + "extends": "Audio.Details.Media", + "id": "Audio.Details.Album", + "properties": { + "albumid": { + "$ref": "Library.Id", + "required": true + }, + "albumlabel": { + "default": "", + "type": "string" + }, + "compilation": { + "default": false, + "type": "boolean" + }, + "description": { + "default": "", + "type": "string" + }, + "mood": { + "$ref": "Array.String" + }, + "playcount": { + "default": 0, + "type": "integer" + }, + "releasetype": { + "$ref": "Audio.Album.ReleaseType", + "default": "album" + }, + "style": { + "$ref": "Array.String" + }, + "theme": { + "$ref": "Array.String" + }, + "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" + }, + "disbanded": { + "default": "", + "type": "string" + }, + "formed": { + "default": "", + "type": "string" + }, + "instrument": { + "$ref": "Array.String" + }, + "mood": { + "$ref": "Array.String" + }, + "musicbrainzartistid": { + "default": "", + "type": "string" + }, + "style": { + "$ref": "Array.String" + }, + "yearsactive": { + "$ref": "Array.String" + } + } + }, + "Audio.Details.Base": { + "extends": "Media.Details.Base", + "id": "Audio.Details.Base", + "properties": { + "genre": { + "$ref": "Array.String" + } + } + }, + "Audio.Details.Media": { + "extends": "Audio.Details.Base", + "id": "Audio.Details.Media", + "properties": { + "artist": { + "$ref": "Array.String" + }, + "artistid": { + "$ref": "Array.Integer" + }, + "displayartist": { + "default": "", + "type": "string" + }, + "genreid": { + "$ref": "Array.Integer" + }, + "musicbrainzalbumartistid": { + "default": "", + "type": "string" + }, + "musicbrainzalbumid": { + "default": "", + "type": "string" + }, + "rating": { + "default": 0, + "type": "integer" + }, + "title": { + "default": "", + "type": "string" + }, + "year": { + "default": 0, + "type": "integer" + } + } + }, + "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" + }, + "comment": { + "default": "", + "type": "string" + }, + "disc": { + "default": 0, + "type": "integer" + }, + "duration": { + "default": 0, + "type": "integer" + }, + "file": { + "default": "", + "type": "string" + }, + "lastplayed": { + "default": "", + "type": "string" + }, + "lyrics": { + "default": "", + "type": "string" + }, + "musicbrainzartistid": { + "default": "", + "type": "string" + }, + "musicbrainztrackid": { + "default": "", + "type": "string" + }, + "playcount": { + "default": 0, + "type": "integer" + }, + "songid": { + "$ref": "Library.Id", + "required": true + }, + "track": { + "default": 0, + "type": "integer" + } + } + }, + "Audio.Fields.Album": { + "extends": "Item.Fields.Base", + "id": "Audio.Fields.Album", + "items": { + "description": "Requesting the genreid and/or artistid field will result in increased response times", + "enums": ["title", "description", "artist", "genre", "theme", "mood", "style", "type", "albumlabel", "rating", "year", "musicbrainzalbumid", "musicbrainzalbumartistid", "fanart", "thumbnail", "playcount", "genreid", "artistid", "displayartist", "compilation", "releasetype"], + "type": "string" + } + }, + "Audio.Fields.Artist": { + "extends": "Item.Fields.Base", + "id": "Audio.Fields.Artist", + "items": { + "enums": ["instrument", "style", "mood", "born", "formed", "description", "genre", "died", "disbanded", "yearsactive", "musicbrainzartistid", "fanart", "thumbnail", "compilationartist"], + "type": "string" + } + }, + "Audio.Fields.Song": { + "extends": "Item.Fields.Base", + "id": "Audio.Fields.Song", + "items": { + "description": "Requesting the genreid, artistid and/or albumartistid field 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"], + "type": "string" + } + }, + "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", "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", + "default": null + } + }, + "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": { + "enums": ["home", "programs", "pictures", "filemanager", "files", "settings", "music", "video", "videos", "pvr", "tvchannels", "tvrecordings", "tvguide", "tvtimers", "tvsearch", "radiochannels", "radiorecordings", "radioguide", "radiotimers", "radiosearch", "pvrguideinfo", "pvrrecordinginfo", "pvrtimersetting", "pvrgroupmanager", "pvrchannelmanager", "pvrguidesearch", "pvrchannelscan", "pvrupdateprogress", "pvrosdchannels", "pvrosdguide", "pvrosdteletext", "systeminfo", "testpattern", "screencalibration", "guicalibration", "picturessettings", "programssettings", "weathersettings", "musicsettings", "systemsettings", "videossettings", "networksettings", "servicesettings", "appearancesettings", "pvrsettings", "tvsettings", "scripts", "videofiles", "videolibrary", "videoplaylist", "loginscreen", "profiles", "skinsettings", "addonbrowser", "yesnodialog", "progressdialog", "virtualkeyboard", "volumebar", "submenu", "favourites", "contextmenu", "infodialog", "numericinput", "gamepadinput", "shutdownmenu", "mutebug", "playercontrols", "seekbar", "musicosd", "addonsettings", "visualisationsettings", "visualisationpresetlist", "osdvideosettings", "osdaudiosettings", "videobookmarks", "filebrowser", "networksetup", "mediasource", "profilesettings", "locksettings", "contentsettings", "songinformation", "smartplaylisteditor", "smartplaylistrule", "busydialog", "pictureinfo", "accesspoints", "fullscreeninfo", "karaokeselector", "karaokelargeselector", "sliderdialog", "addoninformation", "subtitlesearch", "musicplaylist", "musicfiles", "musiclibrary", "musicplaylisteditor", "teletext", "selectdialog", "musicinformation", "okdialog", "movieinformation", "textviewer", "fullscreenvideo", "fullscreenlivetv", "fullscreenradio", "visualisation", "slideshow", "filestackingdialog", "karaoke", "weather", "screensaver", "videoosd", "videomenu", "videotimeseek", "musicoverlay", "videooverlay", "startwindow", "startup", "peripherals", "peripheralsettings", "extendedprogressdialog", "mediafilter", "addon"], + "id": "GUI.Window", + "required": true, + "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, + "id": "Global.Time", + "properties": { + "hours": { + "maximum": 23, + "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": "left", + "enums": ["left", "right", "up", "down", "pageup", "pagedown", "select", "highlight", "parentdir", "parentfolder", "back", "previousmenu", "info", "pause", "stop", "skipnext", "skipprevious", "fullscreen", "aspectratio", "stepforward", "stepback", "bigstepforward", "bigstepback", "chapterorbigstepforward", "chapterorbigstepback", "osd", "showsubtitles", "nextsubtitle", "cyclesubtitle", "codecinfo", "nextpicture", "previouspicture", "zoomout", "zoomin", "playlist", "queue", "zoomnormal", "zoomlevel1", "zoomlevel2", "zoomlevel3", "zoomlevel4", "zoomlevel5", "zoomlevel6", "zoomlevel7", "zoomlevel8", "zoomlevel9", "nextcalibration", "resetcalibration", "analogmove", "analogmovex", "analogmovey", "rotate", "rotateccw", "close", "subtitledelayminus", "subtitledelay", "subtitledelayplus", "audiodelayminus", "audiodelay", "audiodelayplus", "subtitleshiftup", "subtitleshiftdown", "subtitlealign", "audionextlanguage", "verticalshiftup", "verticalshiftdown", "nextresolution", "audiotoggledigital", "number0", "number1", "number2", "number3", "number4", "number5", "number6", "number7", "number8", "number9", "osdleft", "osdright", "osdup", "osddown", "osdselect", "osdvalueplus", "osdvalueminus", "smallstepback", "fastforward", "rewind", "play", "playpause", "switchplayer", "delete", "copy", "move", "mplayerosd", "hidesubmenu", "screenshot", "rename", "togglewatched", "scanitem", "reloadkeymaps", "volumeup", "volumedown", "mute", "backspace", "scrollup", "scrolldown", "analogfastforward", "analogrewind", "moveitemup", "moveitemdown", "contextmenu", "shift", "symbols", "cursorleft", "cursorright", "showtime", "analogseekforward", "analogseekback", "showpreset", "nextpreset", "previouspreset", "lockpreset", "randompreset", "increasevisrating", "decreasevisrating", "showvideomenu", "enter", "increaserating", "decreaserating", "togglefullscreen", "nextscene", "previousscene", "nextletter", "prevletter", "jumpsms2", "jumpsms3", "jumpsms4", "jumpsms5", "jumpsms6", "jumpsms7", "jumpsms8", "jumpsms9", "filter", "filterclear", "filtersms2", "filtersms3", "filtersms4", "filtersms5", "filtersms6", "filtersms7", "filtersms8", "filtersms9", "firstpage", "lastpage", "guiprofile", "red", "green", "yellow", "blue", "increasepar", "decreasepar", "volampup", "volampdown", "volumeamplification", "createbookmark", "createepisodebookmark", "settingsreset", "settingslevelchange", "stereomode", "nextstereomode", "previousstereomode", "togglestereomode", "stereomodetomono", "channelup", "channeldown", "previouschannelgroup", "nextchannelgroup", "playpvr", "playpvrtv", "playpvrradio", "record", "leftclick", "rightclick", "middleclick", "doubleclick", "longclick", "wheelup", "wheeldown", "mousedrag", "mousemove", "tap", "longpress", "pangesture", "zoomgesture", "rotategesture", "swipeleft", "swiperight", "swipeup", "swipedown", "error", "noop"], + "id": "Input.Action", + "type": "string" + }, + "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 + }, + "thumbnail": { + "default": "", + "type": "string" + }, + "title": { + "default": "", + "type": "string" + } + } + }, + "Library.Fields.Genre": { + "extends": "Item.Fields.Base", + "id": "Library.Fields.Genre", + "items": { + "enums": ["title", "thumbnail"], + "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", "starttime", "endtime", "specialsortseason", "specialsortepisode", "compilation", "releasetype", "albumreleasetype"], + "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"], + "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": { + "enums": ["genre", "album", "artist", "albumartist", "year", "review", "themes", "moods", "styles", "type", "label", "rating", "playcount", "playlist", "virtualfolder"], + "id": "List.Filter.Fields.Albums", + "required": true, + "type": "string" + }, + "List.Filter.Fields.Artists": { + "default": "artist", + "enums": ["artist", "genre", "moods", "styles", "instruments", "biography", "born", "bandformed", "disbanded", "died", "playlist", "virtualfolder"], + "id": "List.Filter.Fields.Artists", + "type": "string" + }, + "List.Filter.Fields.Episodes": { + "default": "title", + "enums": ["title", "tvshow", "plot", "votes", "rating", "time", "writers", "airdate", "playcount", "lastplayed", "inprogress", "genre", "year", "director", "actor", "episode", "season", "filename", "path", "studio", "mpaarating", "dateadded", "tag", "videoresolution", "audiochannels", "videocodec", "audiocodec", "audiolanguage", "subtitlelanguage", "videoaspect", "playlist", "virtualfolder"], + "id": "List.Filter.Fields.Episodes", + "type": "string" + }, + "List.Filter.Fields.Movies": { + "default": "title", + "enums": ["title", "plot", "plotoutline", "tagline", "votes", "rating", "time", "writers", "playcount", "lastplayed", "inprogress", "genre", "country", "year", "director", "actor", "mpaarating", "top250", "studio", "hastrailer", "filename", "path", "set", "tag", "dateadded", "videoresolution", "audiochannels", "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", "time", "director", "studio", "plot", "tag", "dateadded", "videoresolution", "audiochannels", "videocodec", "audiocodec", "audiolanguage", "subtitlelanguage", "videoaspect", "playlist", "virtualfolder"], + "id": "List.Filter.Fields.MusicVideos", + "type": "string" + }, + "List.Filter.Fields.Songs": { + "default": "genre", + "enums": ["genre", "album", "artist", "albumartist", "title", "year", "time", "tracknumber", "filename", "path", "playcount", "lastplayed", "rating", "comment", "moods", "playlist", "virtualfolder"], + "id": "List.Filter.Fields.Songs", + "type": "string" + }, + "List.Filter.Fields.TVShows": { + "default": "title", + "enums": ["title", "plot", "status", "votes", "rating", "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" + } + } + }, + "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" + }, + "cast": { + "$ref": "Video.Cast" + }, + "comment": { + "default": "", + "type": "string" + }, + "compilation": { + "default": false, + "type": "boolean" + }, + "country": { + "$ref": "Array.String" + }, + "description": { + "default": "", + "type": "string" + }, + "disc": { + "default": 0, + "type": "integer" + }, + "duration": { + "default": 0, + "type": "integer" + }, + "episode": { + "default": 0, + "type": "integer" + }, + "episodeguide": { + "default": "", + "type": "string" + }, + "firstaired": { + "default": "", + "type": "string" + }, + "id": { + "$ref": "Library.Id", + "default": -1 + }, + "imdbnumber": { + "default": "", + "type": "string" + }, + "lyrics": { + "default": "", + "type": "string" + }, + "mood": { + "$ref": "Array.String" + }, + "mpaa": { + "default": "", + "type": "string" + }, + "musicbrainzartistid": { + "default": "", + "type": "string" + }, + "musicbrainztrackid": { + "default": "", + "type": "string" + }, + "originaltitle": { + "default": "", + "type": "string" + }, + "plotoutline": { + "default": "", + "type": "string" + }, + "premiered": { + "default": "", + "type": "string" + }, + "productioncode": { + "default": "", + "type": "string" + }, + "releasetype": { + "$ref": "Audio.Album.ReleaseType", + "default": "album" + }, + "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" + }, + "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": { + "additionalProperties": { + "default": "", + "minLength": 1, + "type": "string" + }, + "type": "object" + }, + "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", "votes", "top250", "programcount", "playlist", "episode", "season", "totalepisodes", "watchedepisodes", "tvshowstatus", "tvshowtitle", "sorttitle", "productioncode", "mpaa", "studio", "dateadded", "lastplayed", "playcount", "listeners", "bitrate", "random"], + "type": "string" + }, + "order": { + "default": "ascending", + "enums": ["ascending", "descending"], + "type": "string" + } + }, + "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" + } + } + }, + "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 + }, + "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" + }, + "hastimer": { + "default": false, + "type": "boolean" + }, + "isactive": { + "default": false, + "type": "boolean" + }, + "parentalrating": { + "default": 0, + "type": "integer" + }, + "plot": { + "default": "", + "type": "string" + }, + "plotoutline": { + "default": "", + "type": "string" + }, + "progress": { + "default": 0, + "type": "integer" + }, + "progresspercentage": { + "default": 0.0, + "type": "number" + }, + "rating": { + "default": 0, + "type": "integer" + }, + "runtime": { + "default": 0, + "type": "integer" + }, + "starttime": { + "default": "", + "type": "string" + }, + "thumbnail": { + "default": "", + "type": "string" + }, + "title": { + "default": "", + "type": "string" + }, + "wasactive": { + "default": false, + "type": "boolean" + } + } + }, + "PVR.Details.Channel": { + "extends": "Item.Details.Base", + "id": "PVR.Details.Channel", + "properties": { + "broadcastnext": { + "$ref": "PVR.Details.Broadcast", + "default": null + }, + "broadcastnow": { + "$ref": "PVR.Details.Broadcast", + "default": null + }, + "channel": { + "default": "", + "type": "string" + }, + "channelid": { + "$ref": "Library.Id", + "required": true + }, + "channeltype": { + "$ref": "PVR.Channel.Type", + "default": "tv" + }, + "hidden": { + "default": false, + "type": "boolean" + }, + "lastplayed": { + "default": "", + "type": "string" + }, + "locked": { + "default": false, + "type": "boolean" + }, + "thumbnail": { + "default": "", + "type": "string" + } + } + }, + "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.Recording": { + "extends": "Item.Details.Base", + "id": "PVR.Details.Recording", + "properties": { + "art": { + "$ref": "Media.Artwork" + }, + "channel": { + "default": "", + "type": "string" + }, + "directory": { + "default": "", + "type": "string" + }, + "endtime": { + "default": "", + "type": "string" + }, + "file": { + "default": "", + "type": "string" + }, + "genre": { + "default": "", + "type": "string" + }, + "icon": { + "default": "", + "type": "string" + }, + "lifetime": { + "default": 0, + "type": "integer" + }, + "playcount": { + "default": 0, + "type": "integer" + }, + "plot": { + "default": "", + "type": "string" + }, + "plotoutline": { + "default": "", + "type": "string" + }, + "recordingid": { + "$ref": "Library.Id", + "required": true + }, + "resume": { + "$ref": "Video.Resume" + }, + "runtime": { + "default": 0, + "type": "integer" + }, + "starttime": { + "default": "", + "type": "string" + }, + "streamurl": { + "default": "", + "type": "string" + }, + "title": { + "default": "", + "type": "string" + } + } + }, + "PVR.Details.Timer": { + "extends": "Item.Details.Base", + "id": "PVR.Details.Timer", + "properties": { + "channelid": { + "$ref": "Library.Id", + "default": -1 + }, + "directory": { + "default": "", + "type": "string" + }, + "endmargin": { + "default": 0, + "type": "integer" + }, + "endtime": { + "default": "", + "type": "string" + }, + "file": { + "default": "", + "type": "string" + }, + "firstday": { + "default": "", + "type": "string" + }, + "isradio": { + "default": false, + "type": "boolean" + }, + "lifetime": { + "default": 0, + "type": "integer" + }, + "priority": { + "default": 0, + "type": "integer" + }, + "repeating": { + "default": false, + "type": "boolean" + }, + "runtime": { + "default": 0, + "type": "integer" + }, + "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"], + "type": "string" + } + }, + "PVR.Fields.Channel": { + "extends": "Item.Fields.Base", + "id": "PVR.Fields.Channel", + "items": { + "enums": ["thumbnail", "channeltype", "hidden", "locked", "channel", "lastplayed", "broadcastnow", "broadcastnext"], + "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"], + "type": "string" + } + }, + "PVR.Fields.Timer": { + "extends": "Item.Fields.Base", + "id": "PVR.Fields.Timer", + "items": { + "enums": ["title", "summary", "channelid", "isradio", "repeating", "starttime", "endtime", "runtime", "lifetime", "firstday", "weekdays", "priority", "startmargin", "endmargin", "state", "file", "directory"], + "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"], + "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" + }, + "language": { + "required": true, + "type": "string" + }, + "name": { + "required": true, + "type": "string" + } + }, + "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" + }, + "time": { + "$ref": "Global.Time" + } + } + }, + "Player.Position.Percentage": { + "default": 0.0, + "id": "Player.Position.Percentage", + "maximum": 100.0, + "minimum": 0.0, + "type": "number" + }, + "Player.Position.Time": { + "additionalProperties": false, + "id": "Player.Position.Time", + "properties": { + "hours": { + "default": 0, + "maximum": 23, + "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"], + "id": "Player.Property.Name", + "type": "string" + }, + "Player.Property.Value": { + "id": "Player.Property.Value", + "properties": { + "audiostreams": { + "items": { + "$ref": "Player.Audio.Stream" + }, + "type": "array" + }, + "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" + }, + "live": { + "default": false, + "type": "boolean" + }, + "partymode": { + "default": false, + "type": "boolean" + }, + "percentage": { + "$ref": "Player.Position.Percentage", + "default": 0.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" + }, + "totaltime": { + "$ref": "Global.Time" + }, + "type": { + "$ref": "Player.Type", + "default": "video" + } + }, + "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" + }, + "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" + }, + "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" + }] + }, + "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.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" + }] + }, + "Setting.Details.SettingAction": { + "additionalProperties": false, + "extends": "Setting.Details.SettingBase", + "id": "Setting.Details.SettingAction" + }, + "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.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.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"], + "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.0, + "type": "number" + }, + "season": { + "default": 0, + "type": "integer" + }, + "showtitle": { + "default": "", + "type": "string" + }, + "specialsortepisode": { + "default": 0, + "type": "integer" + }, + "specialsortseason": { + "default": 0, + "type": "integer" + }, + "tvshowid": { + "$ref": "Library.Id", + "default": -1 + }, + "uniqueid": { + "additionalProperties": { + "default": "", + "minLength": 1, + "type": "string" + }, + "type": "object" + }, + "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" + }, + "rating": { + "default": 0.0, + "type": "number" + }, + "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" + }, + "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": { + "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 + }, + "studio": { + "$ref": "Array.String" + }, + "tag": { + "$ref": "Array.String" + }, + "track": { + "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" + }, + "tvshowid": { + "$ref": "Library.Id", + "default": -1 + }, + "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.0, + "type": "number" + }, + "season": { + "default": 0, + "type": "integer" + }, + "sorttitle": { + "default": "", + "type": "string" + }, + "studio": { + "$ref": "Array.String" + }, + "tag": { + "$ref": "Array.String" + }, + "tvshowid": { + "$ref": "Library.Id", + "required": true + }, + "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 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"], + "type": "string" + } + }, + "Video.Fields.Movie": { + "extends": "Item.Fields.Base", + "id": "Video.Fields.Movie", + "items": { + "description": "Requesting the cast, showlink 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"], + "type": "string" + } + }, + "Video.Fields.MovieSet": { + "extends": "Item.Fields.Base", + "id": "Video.Fields.MovieSet", + "items": { + "enums": ["title", "playcount", "fanart", "thumbnail", "art"], + "type": "string" + } + }, + "Video.Fields.MusicVideo": { + "extends": "Item.Fields.Base", + "id": "Video.Fields.MusicVideo", + "items": { + "enums": ["title", "playcount", "runtime", "director", "studio", "year", "plot", "album", "artist", "genre", "track", "streamdetails", "lastplayed", "fanart", "thumbnail", "file", "resume", "dateadded", "tag", "art"], + "type": "string" + } + }, + "Video.Fields.Season": { + "extends": "Item.Fields.Base", + "id": "Video.Fields.Season", + "items": { + "enums": ["season", "showtitle", "playcount", "episode", "fanart", "thumbnail", "tvshowid", "watchedepisodes", "art"], + "type": "string" + } + }, + "Video.Fields.TVShow": { + "extends": "Item.Fields.Base", + "id": "Video.Fields.TVShow", + "items": { + "description": "Requesting the cast 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"], + "type": "string" + } + }, + "Video.Resume": { + "additionalProperties": false, + "id": "Video.Resume", + "properties": { + "position": { + "default": 0.0, + "minimum": 0.0, + "type": "number" + }, + "total": { + "default": 0.0, + "minimum": 0.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.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": "6.25.2" + } +} \ No newline at end of file diff --git a/doc/json_responses/PVR.Details.Broadcast.json b/doc/json_responses/PVR.Details.Broadcast.json new file mode 100644 index 0000000..43a5e1b --- /dev/null +++ b/doc/json_responses/PVR.Details.Broadcast.json @@ -0,0 +1,1156 @@ +{ + "id": 32, + "jsonrpc": "2.0", + "result": { + "broadcasts": [{ + "broadcastid": 47654, + "endtime": "2015-11-03 18:00:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "Agora Nós", + "parentalrating": 0, + "plot": "As tardes estão cheias de surpresas, jogos, dicas, alegria e muito humor. Tânia Ribas de Oliveira e Zé Pedro Vasconcelos vão estar consigo de segunda a sexta no \"Agora Nós\". A eles juntam-se Joana Teles e Tiago Goes Ferreira quer em estúdio, quer no exterior, em reportagem.", + "plotoutline": "As tardes estão cheias de surpresas, jogos, dicas, alegria e muito humor. Tânia Ribas de Oliveira e Zé Pedro Vasconcelos vão estar consigo de segunda a sexta no \"Agora Nós\". A eles juntam-s...", + "progress": 8029, + "progresspercentage": 100.0, + "rating": 0, + "runtime": "129", + "starttime": "2015-11-03 15:51:00", + "thumbnail": "", + "title": "Agora Nós", + "wasactive": true + }, { + "broadcastid": 47655, + "endtime": "2015-11-03 19:00:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": true, + "label": "Portugal em Direto", + "parentalrating": 0, + "plot": "A atualidade diária do nosso país. Portugal em Direto é um espaço de informação nacional apresentado pela jornalista Dina Aguiar.", + "plotoutline": "", + "progress": 289, + "progresspercentage": 10.666666984558105469, + "rating": 0, + "runtime": "60", + "starttime": "2015-11-03 18:00:00", + "thumbnail": "", + "title": "Portugal em Direto", + "wasactive": false + }, { + "broadcastid": 47656, + "endtime": "2015-11-03 19:30:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "Telejornal", + "parentalrating": 0, + "plot": "A síntese noticiosa sobre o que de mais importante se passou durante o dia. Com apresentação de José Rodrigues dos Santos e João Adelino Faria.", + "plotoutline": "", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "30", + "starttime": "2015-11-03 19:00:00", + "thumbnail": "", + "title": "Telejornal", + "wasactive": false + }, { + "broadcastid": 47657, + "endtime": "2015-11-03 21:39:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "Benfica x Galatasaray - Liga dos Campeões (Direto)", + "parentalrating": 0, + "plot": "Espaço dedicado à transmissão do encontro a contar para a Liga dos Campeões.", + "plotoutline": "", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "129", + "starttime": "2015-11-03 19:30:00", + "thumbnail": "", + "title": "Benfica x Galatasaray - Liga dos Campeões (Direto)", + "wasactive": false + }, { + "broadcastid": 47658, + "endtime": "2015-11-03 22:58:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "Futebol: Liga dos Campeões (Resumos)", + "parentalrating": 0, + "plot": "Espaço dedicado aos resumos da liga milionária. Os momentos que marcaram cada jogo numa síntese cuidada, ilustrada com as melhores imagens.", + "plotoutline": "", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "79", + "starttime": "2015-11-03 21:39:00", + "thumbnail": "", + "title": "Futebol: Liga dos Campeões (Resumos)", + "wasactive": false + }, { + "broadcastid": 47659, + "endtime": "2015-11-04 00:27:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "Treze - Ep. 4", + "parentalrating": 0, + "plot": "\"Treze\" é um talk-show semanal moderado por Sílvia Alberto, que conta sempre com a companhia de um painel de convidados que com ela irão elaborar e discutir um ranking sobre o tema em análise, que varia de semana para semana. Um programa que associa o entretenimento à cultura geral e à História, tratados de forma rigorosa mas descontraída.", + "plotoutline": "\"Treze\" é um talk-show semanal moderado por Sílvia Alberto, que conta sempre com a companhia de um painel de convidados que com ela irão elaborar e discutir um ranking sobre o tema em análi...", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "89", + "starttime": "2015-11-03 22:58:00", + "thumbnail": "", + "title": "Treze - Ep. 4", + "wasactive": false + }, { + "broadcastid": 47660, + "endtime": "2015-11-04 01:31:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "5 Para a Meia-Noite T11 - Ep. 12", + "parentalrating": 0, + "plot": "Verbo: Representar. Rui Unas convida: César Mourão e NTS, na música: Pérola. Boa conversa, convívio, em boa companhia, as noites de tertúlia continuam. Filomena Cautela, Rui Unas e Fernando Alvim, juntam-se a Pedro Fernandes e a Nilton, para a 11ª temporada do \"5 Para a Meia-Noite\".", + "plotoutline": "Verbo: Representar. Rui Unas convida: César Mourão e NTS, na música: Pérola. Boa conversa, convívio, em boa companhia, as noites de tertúlia continuam.", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "64", + "starttime": "2015-11-04 00:27:00", + "thumbnail": "", + "title": "5 Para a Meia-Noite T11 - Ep. 12", + "wasactive": false + }, { + "broadcastid": 47661, + "endtime": "2015-11-04 02:11:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "The Flash - Ep. 7", + "parentalrating": 0, + "plot": "Flash enfrenta Farooq, conhecido como Blackout, um meta-humano que pode controlar a eletricidade. Durante a batalha, Farroq atinge Flash e drena toda a sua eletricidade, deixando Barry sem os seus poderes.", + "plotoutline": "Flash enfrenta Farooq, conhecido como Blackout, um meta-humano que pode controlar a eletricidade. Durante a batalha, Farroq atinge Flash e drena toda a sua eletricidade, deixando Barry sem ...", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "40", + "starttime": "2015-11-04 01:31:00", + "thumbnail": "", + "title": "The Flash - Ep. 7", + "wasactive": false + }, { + "broadcastid": 47662, + "endtime": "2015-11-04 03:11:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "Os Números do Dinheiro", + "parentalrating": 0, + "plot": "A economia não é uma ciência exata. O que revelam e o que escondem os números? O sobe e desce da economia. Os grandes negócios. As visões opostas de Teixeira dos Santos, Braga de Macedo e Ricardo Pais Mamede. Com António Peres Metello.", + "plotoutline": "A economia não é uma ciência exata. O que revelam e o que escondem os números? O sobe e desce da economia. Os grandes negócios. As visões opostas de Teixeira dos Santos, Braga de Macedo e R...", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "60", + "starttime": "2015-11-04 02:11:00", + "thumbnail": "", + "title": "Os Números do Dinheiro", + "wasactive": false + }, { + "broadcastid": 47663, + "endtime": "2015-11-04 03:54:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "Os Nossos Dias T1 - Ep. 42", + "parentalrating": 0, + "plot": "Henrique protesta com Bela porque quer ficar em casa em vez de estar com ela no supermercado. A mãe explica-lhe que ele não pode ficar sozinho em casa e que Filipe também não pode tomar conta dele porque arranjou outro emprego. Henrique diz que assim prefere ir para casa do pai e Bela impõe-lhe que tem de fazer o que ela manda.", + "plotoutline": "Henrique protesta com Bela porque quer ficar em casa em vez de estar com ela no supermercado. A mãe explica-lhe que ele não pode ficar sozinho em casa e que Filipe também não pode tomar con...", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "43", + "starttime": "2015-11-04 03:11:00", + "thumbnail": "", + "title": "Os Nossos Dias T1 - Ep. 42", + "wasactive": false + }, { + "broadcastid": 47664, + "endtime": "2015-11-04 05:40:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "Televendas", + "parentalrating": 0, + "plot": "Todos os dias, um espaço dedicado a vendas por televisão, em que são feitas demonstrações dos produtos.", + "plotoutline": "", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "106", + "starttime": "2015-11-04 03:54:00", + "thumbnail": "", + "title": "Televendas", + "wasactive": false + }, { + "broadcastid": 47665, + "endtime": "2015-11-04 06:30:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "Central Parque", + "parentalrating": 0, + "plot": "Com Joana Stichini Vilela e Pedro Rolo Duarte vamos falar das novas tendências multiplataforma. O que se vê, o que se escreve e do que se fala.", + "plotoutline": "", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "50", + "starttime": "2015-11-04 05:40:00", + "thumbnail": "", + "title": "Central Parque", + "wasactive": false + }, { + "broadcastid": 47666, + "endtime": "2015-11-04 10:00:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "Bom Dia Portugal", + "parentalrating": 0, + "plot": "Espaço informativo, com as primeiras notícias do dia, a partir das 6h30. Apresentado por Carla Trafaria e João Tomé de Carvalho.", + "plotoutline": "", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "210", + "starttime": "2015-11-04 06:30:00", + "thumbnail": "", + "title": "Bom Dia Portugal", + "wasactive": false + }, { + "broadcastid": 47667, + "endtime": "2015-11-04 13:00:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "A Praça", + "parentalrating": 0, + "plot": "Jorge Gabriel, Sónia Araújo, Hélder Reis e Catarina Camacho chegam todas as manhãs com o programa “A Praça”. Um programa onde se cruzam amizades e gerações. Gente de todas as áreas e portugueses de todo o mundo. Manhãs divertidas e informativas, com rubricas de saúde e moda, culinária, estética, jardinagem e a decoração da casa.", + "plotoutline": "Jorge Gabriel, Sónia Araújo, Hélder Reis e Catarina Camacho chegam todas as manhãs com o programa “A Praça”. Um programa onde se cruzam amizades e gerações. Gente de todas as áreas e portug...", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "180", + "starttime": "2015-11-04 10:00:00", + "thumbnail": "", + "title": "A Praça", + "wasactive": false + }, { + "broadcastid": 47668, + "endtime": "2015-11-04 14:30:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "Jornal da Tarde", + "parentalrating": 0, + "plot": "As notícias que marcam a atualidade nacional e internacional.", + "plotoutline": "", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "90", + "starttime": "2015-11-04 13:00:00", + "thumbnail": "", + "title": "Jornal da Tarde", + "wasactive": false + }, { + "broadcastid": 47669, + "endtime": "2015-11-04 15:45:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "Os Nossos Dias T2 - Ep. 146", + "parentalrating": 0, + "plot": "Francisco informa os colaboradores que o cliente exigiu que a campanha fosse retirada e que nem quer ouvir falar no nome da agência. Tiago quer assumir a responsabilidade mas Francisco diz-lhe que não há nada a fazer. Sofia fica com remorsos mas não assume a responsabilidade.", + "plotoutline": "Francisco informa os colaboradores que o cliente exigiu que a campanha fosse retirada e que nem quer ouvir falar no nome da agência. Tiago quer assumir a responsabilidade mas Francisco diz-...", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "75", + "starttime": "2015-11-04 14:30:00", + "thumbnail": "", + "title": "Os Nossos Dias T2 - Ep. 146", + "wasactive": false + }, { + "broadcastid": 47670, + "endtime": "2015-11-04 18:00:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "Agora Nós", + "parentalrating": 0, + "plot": "As tardes estão cheias de surpresas, jogos, dicas, alegria e muito humor. Tânia Ribas de Oliveira e Zé Pedro Vasconcelos vão estar consigo de segunda a sexta no \"Agora Nós\". A eles juntam-se Joana Teles e Tiago Goes Ferreira quer em estúdio, quer no exterior, em reportagem.", + "plotoutline": "As tardes estão cheias de surpresas, jogos, dicas, alegria e muito humor. Tânia Ribas de Oliveira e Zé Pedro Vasconcelos vão estar consigo de segunda a sexta no \"Agora Nós\". A eles juntam-s...", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "135", + "starttime": "2015-11-04 15:45:00", + "thumbnail": "", + "title": "Agora Nós", + "wasactive": false + }, { + "broadcastid": 47671, + "endtime": "2015-11-04 19:00:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "Portugal em Direto", + "parentalrating": 0, + "plot": "A atualidade diária do nosso país. Portugal em Direto é um espaço de informação nacional apresentado pela jornalista Dina Aguiar.", + "plotoutline": "", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "60", + "starttime": "2015-11-04 18:00:00", + "thumbnail": "", + "title": "Portugal em Direto", + "wasactive": false + }, { + "broadcastid": 47672, + "endtime": "2015-11-04 20:00:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "O Preço Certo", + "parentalrating": 0, + "plot": "Um dos concursos mais famosos da Europa com um ambiente elétrico onde quem se senta na plateia é convidado a jogar. Um programa de entretenimento com um caráter informativo sobre os preços de mercado e sobre novos produtos. Junte-se a Fernando Mendes e divirta-se!", + "plotoutline": "Um dos concursos mais famosos da Europa com um ambiente elétrico onde quem se senta na plateia é convidado a jogar. Um programa de entretenimento com um caráter informativo sobre os preços ...", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "60", + "starttime": "2015-11-04 19:00:00", + "thumbnail": "", + "title": "O Preço Certo", + "wasactive": false + }, { + "broadcastid": 47673, + "endtime": "2015-11-04 21:15:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "Telejornal", + "parentalrating": 0, + "plot": "A síntese noticiosa sobre o que de mais importante se passou durante o dia. Com apresentação de José Rodrigues dos Santos e João Adelino Faria.", + "plotoutline": "", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "75", + "starttime": "2015-11-04 20:00:00", + "thumbnail": "", + "title": "Telejornal", + "wasactive": false + }, { + "broadcastid": 47674, + "endtime": "2015-11-04 21:45:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "Bem-vindos a Beirais T4 - Ep. 194", + "parentalrating": 0, + "plot": "Agostinho está de ressaca devido ao jantar em que esteve com Manel, Tozé e Fernando. Estes fazem troça dele e Fernando mostra o vídeo que fizeram onde Agostinho, bêbado, não diz coisa com coisa. Na rádio, Carlos anuncia que a Beirais FM vai criar uma vaga para estágio e que os candidatos se devem dirigir à sociedade recreativa.", + "plotoutline": "Agostinho está de ressaca devido ao jantar em que esteve com Manel, Tozé e Fernando. Estes fazem troça dele e Fernando mostra o vídeo que fizeram onde Agostinho, bêbado, não diz coisa com c...", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "30", + "starttime": "2015-11-04 21:15:00", + "thumbnail": "", + "title": "Bem-vindos a Beirais T4 - Ep. 194", + "wasactive": false + }, { + "broadcastid": 47675, + "endtime": "2015-11-04 23:15:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "Futebol: Liga dos Campeões (Resumos)", + "parentalrating": 0, + "plot": "Espaço dedicado aos resumos da liga milionária. Os momentos que marcaram cada jogo numa síntese cuidada, ilustrada com as melhores imagens.", + "plotoutline": "", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "90", + "starttime": "2015-11-04 21:45:00", + "thumbnail": "", + "title": "Futebol: Liga dos Campeões (Resumos)", + "wasactive": false + }, { + "broadcastid": 47676, + "endtime": "2015-11-05 00:30:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "A Arte Elétrica em Portugal - Ep. 2", + "parentalrating": 0, + "plot": "Hoje: \"Progressivo vs Punk\". Uma série que convida à reflexão sobre os últimos 50 anos na música popular portuguesa.", + "plotoutline": "", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "75", + "starttime": "2015-11-04 23:15:00", + "thumbnail": "", + "title": "A Arte Elétrica em Portugal - Ep. 2", + "wasactive": false + }, { + "broadcastid": 47677, + "endtime": "2015-11-05 01:30:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "5 Para a Meia-Noite T11 - Ep. 13", + "parentalrating": 0, + "plot": "Verbo Representar. Filomena Cautela convida: Álvaro Costa e David Fonseca. Boa conversa, convívio, em boa companhia, as noites de tertúlia continuam. Filomena Cautela, Rui Unas e Fernando Alvim, juntam-se a Pedro Fernandes e a Nilton, para a 11ª temporada do \"5 Para a Meia-Noite\".", + "plotoutline": "Verbo Representar. Filomena Cautela convida: Álvaro Costa e David Fonseca. Boa conversa, convívio, em boa companhia, as noites de tertúlia continuam.", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "60", + "starttime": "2015-11-05 00:30:00", + "thumbnail": "", + "title": "5 Para a Meia-Noite T11 - Ep. 13", + "wasactive": false + }, { + "broadcastid": 47678, + "endtime": "2015-11-05 02:15:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "The Flash - Ep. 8", + "parentalrating": 0, + "plot": "Barry fica empolgado quando Oliver, Felicity e Diggle chegam a Central City para investigar um caso relacionado com um bumerangue mortal. Feliz por se juntar ao amigo, Barry pede a Oliver para o ajudar a parar Ray Bivolo, o meta-humano que Barry procura.", + "plotoutline": "Barry fica empolgado quando Oliver, Felicity e Diggle chegam a Central City para investigar um caso relacionado com um bumerangue mortal. Feliz por se juntar ao amigo, Barry pede a Oliver p...", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "45", + "starttime": "2015-11-05 01:30:00", + "thumbnail": "", + "title": "The Flash - Ep. 8", + "wasactive": false + }, { + "broadcastid": 47679, + "endtime": "2015-11-05 03:15:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "Grande Entrevista", + "parentalrating": 0, + "plot": "Todas as semanas, um protagonista da vida portuguesa responde às perguntas de Vitor Gonçalves.", + "plotoutline": "", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "60", + "starttime": "2015-11-05 02:15:00", + "thumbnail": "", + "title": "Grande Entrevista", + "wasactive": false + }, { + "broadcastid": 47680, + "endtime": "2015-11-05 04:00:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "Os Nossos Dias T1 - Ep. 43", + "parentalrating": 0, + "plot": "João conversa com o pai sobre a difícil situação do País e Manuel está cético, não acreditando que o desemprego diminua e que ele e Patrícia consigam arranjar emprego. Laura junta-se a eles e, como é habitual, começa a criticar patrícia por nunca estar em casa com eles.", + "plotoutline": "João conversa com o pai sobre a difícil situação do País e Manuel está cético, não acreditando que o desemprego diminua e que ele e Patrícia consigam arranjar emprego. Laura junta-se a eles...", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "45", + "starttime": "2015-11-05 03:15:00", + "thumbnail": "", + "title": "Os Nossos Dias T1 - Ep. 43", + "wasactive": false + }, { + "broadcastid": 47681, + "endtime": "2015-11-05 06:00:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "Televendas", + "parentalrating": 0, + "plot": "Todos os dias, um espaço dedicado a vendas por televisão, em que são feitas demonstrações dos produtos.", + "plotoutline": "", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "120", + "starttime": "2015-11-05 04:00:00", + "thumbnail": "", + "title": "Televendas", + "wasactive": false + }, { + "broadcastid": 47682, + "endtime": "2015-11-05 06:30:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "Sabia Que?", + "parentalrating": 0, + "plot": "Daniel Catalão apresenta \"Sabia que?\", um programa sobre curiosidades do dia a dia.", + "plotoutline": "", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "30", + "starttime": "2015-11-05 06:00:00", + "thumbnail": "", + "title": "Sabia Que?", + "wasactive": false + }, { + "broadcastid": 47683, + "endtime": "2015-11-05 10:00:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "Bom Dia Portugal", + "parentalrating": 0, + "plot": "Espaço informativo, com as primeiras notícias do dia, a partir das 6h30. Apresentado por Carla Trafaria e João Tomé de Carvalho.", + "plotoutline": "", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "210", + "starttime": "2015-11-05 06:30:00", + "thumbnail": "", + "title": "Bom Dia Portugal", + "wasactive": false + }, { + "broadcastid": 47684, + "endtime": "2015-11-05 13:00:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "A Praça", + "parentalrating": 0, + "plot": "Jorge Gabriel, Sónia Araújo, Hélder Reis e Catarina Camacho chegam todas as manhãs com o programa “A Praça”. Um programa onde se cruzam amizades e gerações. Gente de todas as áreas e portugueses de todo o mundo. Manhãs divertidas e informativas, com rubricas de saúde e moda, culinária, estética, jardinagem e a decoração da casa.", + "plotoutline": "Jorge Gabriel, Sónia Araújo, Hélder Reis e Catarina Camacho chegam todas as manhãs com o programa “A Praça”. Um programa onde se cruzam amizades e gerações. Gente de todas as áreas e portug...", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "180", + "starttime": "2015-11-05 10:00:00", + "thumbnail": "", + "title": "A Praça", + "wasactive": false + }, { + "broadcastid": 47685, + "endtime": "2015-11-05 14:30:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "Jornal da Tarde", + "parentalrating": 0, + "plot": "As notícias que marcam a atualidade nacional e internacional.", + "plotoutline": "", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "90", + "starttime": "2015-11-05 13:00:00", + "thumbnail": "", + "title": "Jornal da Tarde", + "wasactive": false + }, { + "broadcastid": 47686, + "endtime": "2015-11-05 15:45:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "Os Nossos Dias T2 - Ep. 147", + "parentalrating": 0, + "plot": "Assim que Conceição se ausenta, Bernardo não resiste e vai à oficina de Jacinto. Lá vê uma esmeralda e não resiste. Agarra nela e coloca-a na mochila. Quando Conceição regressa à sala, Bernardo disfarça. Francisco continua a ser bombardeado pelos telefonemas e a presença dos jornalistas.", + "plotoutline": "Assim que Conceição se ausenta, Bernardo não resiste e vai à oficina de Jacinto. Lá vê uma esmeralda e não resiste. Agarra nela e coloca-a na mochila. Quando Conceição regressa à sala, Bern...", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "75", + "starttime": "2015-11-05 14:30:00", + "thumbnail": "", + "title": "Os Nossos Dias T2 - Ep. 147", + "wasactive": false + }, { + "broadcastid": 47687, + "endtime": "2015-11-05 18:00:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "Agora Nós", + "parentalrating": 0, + "plot": "As tardes estão cheias de surpresas, jogos, dicas, alegria e muito humor. Tânia Ribas de Oliveira e Zé Pedro Vasconcelos vão estar consigo de segunda a sexta no \"Agora Nós\". A eles juntam-se Joana Teles e Tiago Goes Ferreira quer em estúdio, quer no exterior, em reportagem.", + "plotoutline": "As tardes estão cheias de surpresas, jogos, dicas, alegria e muito humor. Tânia Ribas de Oliveira e Zé Pedro Vasconcelos vão estar consigo de segunda a sexta no \"Agora Nós\". A eles juntam-s...", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "135", + "starttime": "2015-11-05 15:45:00", + "thumbnail": "", + "title": "Agora Nós", + "wasactive": false + }, { + "broadcastid": 47688, + "endtime": "2015-11-05 19:15:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "Portugal em Direto", + "parentalrating": 0, + "plot": "A atualidade diária do nosso país. Portugal em Direto é um espaço de informação nacional apresentado pela jornalista Dina Aguiar.", + "plotoutline": "", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "75", + "starttime": "2015-11-05 18:00:00", + "thumbnail": "", + "title": "Portugal em Direto", + "wasactive": false + }, { + "broadcastid": 47689, + "endtime": "2015-11-05 20:00:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "O Preço Certo", + "parentalrating": 0, + "plot": "Um dos concursos mais famosos da Europa com um ambiente elétrico onde quem se senta na plateia é convidado a jogar. Um programa de entretenimento com um caráter informativo sobre os preços de mercado e sobre novos produtos. Junte-se a Fernando Mendes e divirta-se!", + "plotoutline": "Um dos concursos mais famosos da Europa com um ambiente elétrico onde quem se senta na plateia é convidado a jogar. Um programa de entretenimento com um caráter informativo sobre os preços ...", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "45", + "starttime": "2015-11-05 19:15:00", + "thumbnail": "", + "title": "O Preço Certo", + "wasactive": false + }, { + "broadcastid": 47690, + "endtime": "2015-11-05 20:45:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "Telejornal", + "parentalrating": 0, + "plot": "A síntese noticiosa sobre o que de mais importante se passou durante o dia. Com apresentação de José Rodrigues dos Santos e João Adelino Faria.", + "plotoutline": "", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "45", + "starttime": "2015-11-05 20:00:00", + "thumbnail": "", + "title": "Telejornal", + "wasactive": false + }, { + "broadcastid": 47691, + "endtime": "2015-11-05 21:40:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "As Palavras e os Atos", + "parentalrating": 0, + "plot": "Programa de debate político, com moderação de Carlos Daniel . É um espaço aberto a todas as forças políticas, não apenas às que estão representadas no parlamento mas também a outras que estão a emergir. O painel de convidados é definido semanalmente de acordo com o tema do programa.", + "plotoutline": "Programa de debate político, com moderação de Carlos Daniel . É um espaço aberto a todas as forças políticas, não apenas às que estão representadas no parlamento mas também a outras que est...", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "55", + "starttime": "2015-11-05 20:45:00", + "thumbnail": "", + "title": "As Palavras e os Atos", + "wasactive": false + }, { + "broadcastid": 47692, + "endtime": "2015-11-05 21:45:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "Fatura da Sorte", + "parentalrating": 0, + "plot": "O concurso que vai premiar os portugueses que pedem faturas com número de contribuinte. Todas as semanas, o sorteio de um automóvel, que tem por finalidade \"valorizar e premiar a cidadania fiscal dos contribuintes no combate à economia paralela e à evasão fiscal\".", + "plotoutline": "O concurso que vai premiar os portugueses que pedem faturas com número de contribuinte. Todas as semanas, o sorteio de um automóvel, que tem por finalidade \"valorizar e premiar a cidadania ...", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "5", + "starttime": "2015-11-05 21:40:00", + "thumbnail": "", + "title": "Fatura da Sorte", + "wasactive": false + }, { + "broadcastid": 47693, + "endtime": "2015-11-05 22:30:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "Bem-vindos a Beirais T4 - Ep. 195", + "parentalrating": 0, + "plot": "Alzira serve cafés a Joaquim e Moisés que se queixam do negócio pois as pessoas não querem morrer, ao contrário é fácil para ela porquanto as pessoas precisam de comer. Alzira incentiva-os a fazerem qualquer coisa por Beirais, pois dinheiro chama dinheiro. Eles ficaram encantados com a ideia e saem do minimercado.", + "plotoutline": "Alzira serve cafés a Joaquim e Moisés que se queixam do negócio pois as pessoas não querem morrer, ao contrário é fácil para ela porquanto as pessoas precisam de comer. Alzira incentiva-os ...", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "45", + "starttime": "2015-11-05 21:45:00", + "thumbnail": "", + "title": "Bem-vindos a Beirais T4 - Ep. 195", + "wasactive": false + }, { + "broadcastid": 47694, + "endtime": "2015-11-05 23:45:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "Quem Quer Ser Milionário - Alta Pressão", + "parentalrating": 0, + "plot": "Quem Quer Ser Milionário é o rei dos concursos de cultura geral e de conhecimento. Alta Pressão, é uma nova versão, apresentado por José Carlos Malato.", + "plotoutline": "", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "75", + "starttime": "2015-11-05 22:30:00", + "thumbnail": "", + "title": "Quem Quer Ser Milionário - Alta Pressão", + "wasactive": false + }, { + "broadcastid": 47695, + "endtime": "2015-11-06 00:45:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "5 Para a Meia-Noite T11 - Ep. 14", + "parentalrating": 0, + "plot": "Verbo Representar. Hoje com Pedro Fernandes. Boa conversa, convívio, em boa companhia, as noites de tertúlia continuam. Filomena Cautela, Rui Unas e Fernando Alvim, juntam-se a Pedro Fernandes e a Nilton, para a 11ª temporada do \"5 Para a Meia-Noite\".", + "plotoutline": "Verbo Representar. Hoje com Pedro Fernandes. Boa conversa, convívio, em boa companhia, as noites de tertúlia continuam. Filomena Cautela, Rui Unas e Fernando Alvim, juntam-se a Pedro Fernandes e a Nilton, par...", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "60", + "starttime": "2015-11-05 23:45:00", + "thumbnail": "", + "title": "5 Para a Meia-Noite T11 - Ep. 14", + "wasactive": false + }, { + "broadcastid": 47696, + "endtime": "2015-11-06 01:30:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "The Flash - Ep. 9", + "parentalrating": 0, + "plot": "Barry depara-se com o seu inimigo, mais conhecido como Flash Reverso, aquele que matou a sua mãe. Barry sente-se frustrado quando ele escapa, mas o Dr. Wells e Cisco arquitetam um plano para o capturar. Tudo o que precisam é de um isco, e entram em contacto com a Dra. Tina McGee, do Laboratório Mercury, para pedir ajuda.", + "plotoutline": "Barry depara-se com o seu inimigo, mais conhecido como Flash Reverso, aquele que matou a sua mãe. Barry sente-se frustrado quando ele escapa, mas o Dr. Wells e Cisco arquitetam um plano par...", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "45", + "starttime": "2015-11-06 00:45:00", + "thumbnail": "", + "title": "The Flash - Ep. 9", + "wasactive": false + }, { + "broadcastid": 47697, + "endtime": "2015-11-06 02:30:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "Ainda Bem Que Vieste!", + "parentalrating": 0, + "plot": "Ao fim de semana, há mais tempo para conversar e para ouvir. Na sala de estar da RTP Informação, o jornalista Nuno Azinheira, recebe uma figura conhecida para uma conversa informal e descontraída. Da televisão ao cinema, da política ao desporto, do teatro à música, da sociedade às letras, há gente com histórias de vida interessantes para contar.", + "plotoutline": "Ao fim de semana, há mais tempo para conversar e para ouvir. Na sala de estar da RTP Informação, o jornalista Nuno Azinheira, recebe uma figura conhecida para uma conversa informal e descon...", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "60", + "starttime": "2015-11-06 01:30:00", + "thumbnail": "", + "title": "Ainda Bem Que Vieste!", + "wasactive": false + }, { + "broadcastid": 47698, + "endtime": "2015-11-06 04:00:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "Os Nossos Dias T1 - Ep. 44", + "parentalrating": 0, + "plot": "Filipe confessa a Bárbara que está decidido a emigrar, pois considera irrecusável o que pode ganhar na Alemanha como trabalhador das obras. A secretária questiona de Bela aceita ir com ele sem o filho e Filipe assume que esse é o grande obstáculo que tem pela frente, temendo ter de escolher entre a família e o trabalho.", + "plotoutline": "Filipe confessa a Bárbara que está decidido a emigrar, pois considera irrecusável o que pode ganhar na Alemanha como trabalhador das obras. A secretária questiona de Bela aceita ir com ele ...", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "90", + "starttime": "2015-11-06 02:30:00", + "thumbnail": "", + "title": "Os Nossos Dias T1 - Ep. 44", + "wasactive": false + }, { + "broadcastid": 47699, + "endtime": "2015-11-06 06:00:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "Televendas", + "parentalrating": 0, + "plot": "Todos os dias, um espaço dedicado a vendas por televisão, em que são feitas demonstrações dos produtos.", + "plotoutline": "", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "120", + "starttime": "2015-11-06 04:00:00", + "thumbnail": "", + "title": "Televendas", + "wasactive": false + }, { + "broadcastid": 47700, + "endtime": "2015-11-06 06:30:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "Visita Guiada T1 - Ep. 3", + "parentalrating": 0, + "plot": "O tesouro da Rainha Santa Isabel e o seu túmulo são preciosidades da arte medieval europeia. E contam-nos outras histórias sobre a célebre esposa de D. Dinis. Uma rainha caridosa, sim, mas também muito ligada ao poder e à política.", + "plotoutline": "O tesouro da Rainha Santa Isabel e o seu túmulo são preciosidades da arte medieval europeia. E contam-nos outras histórias sobre a célebre esposa de D. Dinis. Uma rainha caridosa, sim, mas ...", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "30", + "starttime": "2015-11-06 06:00:00", + "thumbnail": "", + "title": "Visita Guiada T1 - Ep. 3", + "wasactive": false + }, { + "broadcastid": 47701, + "endtime": "2015-11-06 10:00:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "Bom Dia Portugal", + "parentalrating": 0, + "plot": "Espaço informativo, com as primeiras notícias do dia, a partir das 6h30. Apresentado por Carla Trafaria e João Tomé de Carvalho.", + "plotoutline": "", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "210", + "starttime": "2015-11-06 06:30:00", + "thumbnail": "", + "title": "Bom Dia Portugal", + "wasactive": false + }, { + "broadcastid": 47702, + "endtime": "2015-11-06 13:00:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "A Praça", + "parentalrating": 0, + "plot": "Jorge Gabriel, Sónia Araújo, Hélder Reis e Catarina Camacho chegam todas as manhãs com o programa “A Praça”. Um programa onde se cruzam amizades e gerações. Gente de todas as áreas e portugueses de todo o mundo. Manhãs divertidas e informativas, com rubricas de saúde e moda, culinária, estética, jardinagem e a decoração da casa.", + "plotoutline": "Jorge Gabriel, Sónia Araújo, Hélder Reis e Catarina Camacho chegam todas as manhãs com o programa “A Praça”. Um programa onde se cruzam amizades e gerações. Gente de todas as áreas e portug...", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "180", + "starttime": "2015-11-06 10:00:00", + "thumbnail": "", + "title": "A Praça", + "wasactive": false + }, { + "broadcastid": 47703, + "endtime": "2015-11-06 14:30:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "Jornal da Tarde", + "parentalrating": 0, + "plot": "As notícias que marcam a atualidade nacional e internacional.", + "plotoutline": "", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "90", + "starttime": "2015-11-06 13:00:00", + "thumbnail": "", + "title": "Jornal da Tarde", + "wasactive": false + }, { + "broadcastid": 47704, + "endtime": "2015-11-06 15:45:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "Os Nossos Dias T2 - Ep. 148", + "parentalrating": 0, + "plot": "Xana recebe um telefonema de Edgar que foi fazer a entrega das joias roubadas à fundição e sai em pânico a correr. Emília chega a casa e aguarda pela chamada de Edgar. Junto do filho, alega ter ficado a trabalhar até tarde. Edgar chega à pensão apoiado em Xana e ferido no ombro depois de ter levado um tiro de raspão.", + "plotoutline": "Xana recebe um telefonema de Edgar que foi fazer a entrega das joias roubadas à fundição e sai em pânico a correr. Emília chega a casa e aguarda pela chamada de Edgar. Junto do filho, alega...", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "75", + "starttime": "2015-11-06 14:30:00", + "thumbnail": "", + "title": "Os Nossos Dias T2 - Ep. 148", + "wasactive": false + }, { + "broadcastid": 47705, + "endtime": "2015-11-06 18:00:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hastimer": false, + "isactive": false, + "label": "Agora Nós", + "parentalrating": 0, + "plot": "As tardes estão cheias de surpresas, jogos, dicas, alegria e muito humor. Tânia Ribas de Oliveira e Zé Pedro Vasconcelos vão estar consigo de segunda a sexta no \"Agora Nós\". A eles juntam-se Joana Teles e Tiago Goes Ferreira quer em estúdio, quer no exterior, em reportagem.", + "plotoutline": "As tardes estão cheias de surpresas, jogos, dicas, alegria e muito humor. Tânia Ribas de Oliveira e Zé Pedro Vasconcelos vão estar consigo de segunda a sexta no \"Agora Nós\". A eles juntam-s...", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "runtime": "135", + "starttime": "2015-11-06 15:45:00", + "thumbnail": "", + "title": "Agora Nós", + "wasactive": false + }], + "limits": { + "end": 52, + "start": 0, + "total": 52 + } + } +} \ No newline at end of file diff --git a/doc/json_responses/PVR.Details.Channel.json b/doc/json_responses/PVR.Details.Channel.json new file mode 100644 index 0000000..794d84e --- /dev/null +++ b/doc/json_responses/PVR.Details.Channel.json @@ -0,0 +1,306 @@ +{ + "id": 32, + "jsonrpc": "2.0", + "result": { + "channels": [{ + "broadcastnext": { + "broadcastid": 47656, + "cast": "", + "director": "", + "endtime": "2015-11-03 19:30:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "filenameandpath": "pvr://guide/0004/2015-11-03 19:00:00.epg", + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hasrecording": false, + "hastimer": false, + "imdbnumber": "", + "isactive": false, + "originaltitle": "", + "parentalrating": 0, + "plot": "A síntese noticiosa sobre o que de mais importante se passou durante o dia. Com apresentação de José Rodrigues dos Santos e João Adelino Faria.", + "plotoutline": "", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "recording": "", + "runtime": "30", + "starttime": "2015-11-03 19:00:00", + "title": "Telejornal", + "wasactive": false, + "writer": "", + "year": 0 + }, + "broadcastnow": { + "broadcastid": 47655, + "cast": "", + "director": "", + "endtime": "2015-11-03 19:00:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "filenameandpath": "pvr://guide/0004/2015-11-03 18:00:00.epg", + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hasrecording": false, + "hastimer": false, + "imdbnumber": "", + "isactive": true, + "originaltitle": "", + "parentalrating": 0, + "plot": "A atualidade diária do nosso país. Portugal em Direto é um espaço de informação nacional apresentado pela jornalista Dina Aguiar.", + "plotoutline": "", + "progress": 458, + "progresspercentage": 14.222222328186035156, + "rating": 0, + "recording": "", + "runtime": "60", + "starttime": "2015-11-03 18:00:00", + "title": "Portugal em Direto", + "wasactive": false, + "writer": "", + "year": 0 + }, + "channel": "RTP 1", + "channelid": 4, + "channeltype": "tv", + "hidden": false, + "label": "RTP 1", + "lastplayed": "2015-11-03", + "locked": false, + "thumbnail": "" + }, { + "broadcastnext": { + "broadcastid": 54436, + "cast": "", + "director": "", + "endtime": "2015-11-03 21:00:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "filenameandpath": "pvr://guide/0006/2015-11-03 20:08:00.epg", + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hasrecording": false, + "hastimer": false, + "imdbnumber": "", + "isactive": false, + "originaltitle": "", + "parentalrating": 0, + "plot": "É Natal na casa dos Lepic. Como todos os anos, a família recebe a visita dos pais de Renaud. Mas rapidamente se percebe que o Bom Papá escondeu certas coisas importantes à Boa Mamã... Na casa dos Bouley, Valérie começou a sua gravidez em grande.", + "plotoutline": "É Natal na casa dos Lepic. Como todos os anos, a família recebe a visita dos pais de Renaud. Mas rapidamente se percebe que o Bom Papá escondeu certas coisas importantes à Boa Mamã... Na ca...", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "recording": "", + "runtime": "52", + "starttime": "2015-11-03 20:08:00", + "title": "Pais Desesperados T1 - Ep. 19", + "wasactive": false, + "writer": "", + "year": 0 + }, + "broadcastnow": { + "broadcastid": 54435, + "cast": "", + "director": "", + "endtime": "2015-11-03 20:08:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "filenameandpath": "pvr://guide/0006/2015-11-03 15:59:00.epg", + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hasrecording": false, + "hastimer": false, + "imdbnumber": "", + "isactive": true, + "originaltitle": "", + "parentalrating": 0, + "plot": "Um mundo de séries de aventura e animação para os mais pequenos. Os desenhos animados mais divertidos e também os heróis de sempre para brincar e jogar com as crianças.", + "plotoutline": "", + "progress": 7718, + "progresspercentage": 51.405620574951171875, + "rating": 0, + "recording": "", + "runtime": "249", + "starttime": "2015-11-03 15:59:00", + "title": "Zig Zag", + "wasactive": false, + "writer": "", + "year": 0 + }, + "channel": "RTP 2", + "channelid": 6, + "channeltype": "tv", + "hidden": false, + "label": "RTP 2", + "lastplayed": "1970-01-01", + "locked": false, + "thumbnail": "" + }, { + "broadcastnext": { + "broadcastid": 50088, + "cast": "", + "director": "", + "endtime": "2015-11-03 20:00:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "filenameandpath": "pvr://guide/0001/2015-11-03 18:35:00.epg", + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hasrecording": false, + "hastimer": false, + "imdbnumber": "", + "isactive": false, + "originaltitle": "", + "parentalrating": 0, + "plot": "Beatriz diz a Murilo que Evandro tem que vê-lo com o relógio no pulso. Silvia interessa-se por Sérgio. Carlos Alberto vai à Souza Rangel para uma reunião com Beatriz. Evandro pede desculpas a Teresa e Estela por causa do vídeo de Rafael e Ivan.", + "plotoutline": "Beatriz diz a Murilo que Evandro tem que vê-lo com o relógio no pulso. Silvia interessa-se por Sérgio. Carlos Alberto vai à Souza Rangel para uma reunião com Beatriz. Evandro pede desculpas...", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "recording": "", + "runtime": "85", + "starttime": "2015-11-03 18:35:00", + "title": "Babilónia - Ep. 125", + "wasactive": false, + "writer": "", + "year": 0 + }, + "broadcastnow": { + "broadcastid": 50087, + "cast": "", + "director": "", + "endtime": "2015-11-03 18:35:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "filenameandpath": "pvr://guide/0001/2015-11-03 16:00:00.epg", + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hasrecording": false, + "hastimer": false, + "imdbnumber": "", + "isactive": true, + "originaltitle": "", + "parentalrating": 0, + "plot": "João Baião e Andreia Rodrigues vão mudar as nossas tardes. Com eles tudo pode acontecer! Surpresas, reencontros, abraços... todos os dias um programa especial.", + "plotoutline": "", + "progress": 7658, + "progresspercentage": 82.5806427001953125, + "rating": 0, + "recording": "", + "runtime": "155", + "starttime": "2015-11-03 16:00:00", + "title": "Grande Tarde T2 - Ep. 212", + "wasactive": false, + "writer": "", + "year": 0 + }, + "channel": "SIC", + "channelid": 1, + "channeltype": "tv", + "hidden": false, + "label": "SIC", + "lastplayed": "1970-01-01", + "locked": false, + "thumbnail": "" + }, { + "broadcastnext": { + "broadcastid": 46764, + "cast": "", + "director": "", + "endtime": "2015-11-03 20:00:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "filenameandpath": "pvr://guide/0003/2015-11-03 19:13:00.epg", + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hasrecording": false, + "hastimer": false, + "imdbnumber": "", + "isactive": false, + "originaltitle": "", + "parentalrating": 0, + "plot": "Acompanhe os resumos do que se passa na Quinta, no Rurality Show que reúne famosos e anónimos num ambiente onde todos são postos à prova.", + "plotoutline": "", + "progress": 0, + "progresspercentage": 0.0, + "rating": 0, + "recording": "", + "runtime": "47", + "starttime": "2015-11-03 19:13:00", + "title": "A Quinta: Diário da Tarde", + "wasactive": false, + "writer": "", + "year": 0 + }, + "broadcastnow": { + "broadcastid": 46763, + "cast": "", + "director": "", + "endtime": "2015-11-03 19:13:00", + "episodename": "", + "episodenum": 0, + "episodepart": 0, + "filenameandpath": "pvr://guide/0003/2015-11-03 16:00:00.epg", + "firstaired": "1970-01-01", + "genre": ["Other", "Unknown"], + "hasrecording": false, + "hastimer": false, + "imdbnumber": "", + "isactive": true, + "originaltitle": "", + "parentalrating": 0, + "plot": "Fátima Lopes faz-lhe companhia todas as tardes, com um programa muito especial onde a boa disposição da apresentadora nunca irá faltar. Os temas centram-se em todas as áreas da sociedade: a saúde, a família, as finanças, os afetos, os famosos, a moda e as grandes polémicas da atualidade.", + "plotoutline": "Fátima Lopes faz-lhe companhia todas as tardes, com um programa muito especial onde a boa disposição da apresentadora nunca irá faltar. Os temas centram-se em todas as áreas da sociedade: a...", + "progress": 7658, + "progresspercentage": 66.3212432861328125, + "rating": 0, + "recording": "", + "runtime": "193", + "starttime": "2015-11-03 16:00:00", + "title": "A Tarde é Sua", + "wasactive": false, + "writer": "", + "year": 0 + }, + "channel": "TVI", + "channelid": 3, + "channeltype": "tv", + "hidden": false, + "label": "TVI", + "lastplayed": "1970-01-01", + "locked": false, + "thumbnail": "" + }, { + "channel": "ARTV", + "channelid": 2, + "channeltype": "tv", + "hidden": false, + "label": "ARTV", + "lastplayed": "1970-01-01", + "locked": false, + "thumbnail": "" + }, { + "channel": "HD", + "channelid": 5, + "channeltype": "tv", + "hidden": false, + "label": "HD", + "lastplayed": "1970-01-01", + "locked": false, + "thumbnail": "" + }], + "limits": { + "end": 6, + "start": 0, + "total": 6 + } + } +} diff --git a/doc/json_responses/PVR.Details.ChannelGroup.json b/doc/json_responses/PVR.Details.ChannelGroup.json new file mode 100644 index 0000000..c6ca5c3 --- /dev/null +++ b/doc/json_responses/PVR.Details.ChannelGroup.json @@ -0,0 +1,24 @@ +{ + "id": 32, + "jsonrpc": "2.0", + "result": { + "channelgroups": [{ + "channelgroupid": 40, + "channeltype": "tv", + "label": "All channels" + }, { + "channelgroupid": -1, + "channeltype": "tv", + "label": "Main" + }, { + "channelgroupid": -1, + "channeltype": "tv", + "label": "Other" + }], + "limits": { + "end": 3, + "start": 0, + "total": 3 + } + } +}