dsander-kodi 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +22 -0
- data/.rspec +2 -0
- data/.travis.yml +6 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +32 -0
- data/Rakefile +9 -0
- data/kodi.gemspec +27 -0
- data/lib/kodi.rb +12 -0
- data/lib/kodi/RPC.rb +31 -0
- data/lib/kodi/client.rb +20 -0
- data/lib/kodi/namespace.rb +25 -0
- data/lib/kodi/namespace_builder.rb +46 -0
- data/lib/kodi/version.rb +3 -0
- data/spec/assets/JSONRPC.Introspect.json +1 -0
- data/spec/client_spec.rb +82 -0
- data/spec/spec_helper.rb +27 -0
- metadata +134 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d77e740ba76204391f6ae747d541854f521b7d1d
|
4
|
+
data.tar.gz: b2a792f9cb1edbe44874c1dcf455ccefc3437584
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 35e349fe4407d351e6c8758d728caf7a324733133f0847264321759159181a1aa94cc935284a08fba5b6393a8f96934cae764e0c1cc65245fdc40421b0545bad
|
7
|
+
data.tar.gz: 3508068404f9c7419efcf800bd27c1367737ae373c5698a50dd8491c6e0a2ddcb2c0e85a727ec9ac1d0620e64a3ebb06b481e7122a42e417a91516b8fca3301a
|
data/.gitignore
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
.bundle
|
4
|
+
.config
|
5
|
+
.yardoc
|
6
|
+
Gemfile.lock
|
7
|
+
InstalledFiles
|
8
|
+
_yardoc
|
9
|
+
coverage
|
10
|
+
doc/
|
11
|
+
lib/bundler/man
|
12
|
+
pkg
|
13
|
+
rdoc
|
14
|
+
spec/reports
|
15
|
+
test/tmp
|
16
|
+
test/version_tmp
|
17
|
+
tmp
|
18
|
+
*.bundle
|
19
|
+
*.so
|
20
|
+
*.o
|
21
|
+
*.a
|
22
|
+
mkmf.log
|
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2015 Howard Wilson
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
# Kodi
|
2
|
+
|
3
|
+
[![Build Status](http://img.shields.io/travis/watsonbox/kodi.svg?style=flat)](https://travis-ci.org/watsonbox/kodi)
|
4
|
+
|
5
|
+
Ruby wrapper for [Kodi JSON-RPC API](http://kodi.wiki/view/JSON-RPC_API/v6).
|
6
|
+
|
7
|
+
|
8
|
+
## Installation
|
9
|
+
|
10
|
+
Add this line to your application's Gemfile:
|
11
|
+
|
12
|
+
gem 'kodi'
|
13
|
+
|
14
|
+
And then execute:
|
15
|
+
|
16
|
+
$ bundle
|
17
|
+
|
18
|
+
Or install it yourself as:
|
19
|
+
|
20
|
+
$ gem install kodi
|
21
|
+
|
22
|
+
## Usage
|
23
|
+
|
24
|
+
TODO: Write usage instructions here
|
25
|
+
|
26
|
+
## Contributing
|
27
|
+
|
28
|
+
1. Fork it ( https://github.com/[my-github-username]/kodi/fork )
|
29
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
30
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
31
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
32
|
+
5. Create a new Pull Request
|
data/Rakefile
ADDED
data/kodi.gemspec
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'kodi/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "dsander-kodi"
|
8
|
+
spec.version = Kodi::VERSION
|
9
|
+
spec.authors = ["Howard Wilson"]
|
10
|
+
spec.email = ["howard@watsonbox.net"]
|
11
|
+
spec.summary = %q{Ruby wrapper for Kodi JSON-RPC API}
|
12
|
+
spec.description = %q{Ruby wrapper for Kodi JSON-RPC API. See http://kodi.wiki/view/JSON-RPC_API/v6.}
|
13
|
+
spec.homepage = ""
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_dependency "activesupport", "~> 5.0.1"
|
22
|
+
|
23
|
+
spec.add_development_dependency "bundler", "~> 1.6"
|
24
|
+
spec.add_development_dependency "rake"
|
25
|
+
spec.add_development_dependency "rspec", "~> 3.5.0"
|
26
|
+
spec.add_development_dependency "webmock", "~> 1.20.4"
|
27
|
+
end
|
data/lib/kodi.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require "active_support/core_ext/string"
|
2
|
+
require "active_support/core_ext/enumerable"
|
3
|
+
|
4
|
+
require "kodi/version"
|
5
|
+
require "kodi/RPC"
|
6
|
+
require "kodi/namespace"
|
7
|
+
require "kodi/namespace_builder"
|
8
|
+
require "kodi/client"
|
9
|
+
|
10
|
+
module Kodi
|
11
|
+
# Your code goes here...
|
12
|
+
end
|
data/lib/kodi/RPC.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'uri'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
module Kodi
|
6
|
+
class RPC
|
7
|
+
def initialize(uri)
|
8
|
+
@uri = uri
|
9
|
+
end
|
10
|
+
|
11
|
+
def dispatch(name, args = {})
|
12
|
+
post_body = { 'method' => name, 'params' => args, 'jsonrpc' => '2.0', 'id' => '1' }.to_json
|
13
|
+
resp = JSON.parse( http_post_request(post_body) )
|
14
|
+
raise JSONRPCError, resp['error'] if resp['error']
|
15
|
+
resp['result']
|
16
|
+
end
|
17
|
+
|
18
|
+
class JSONRPCError < RuntimeError; end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def http_post_request(post_body)
|
23
|
+
http = Net::HTTP.new(@uri.host, @uri.port)
|
24
|
+
request = Net::HTTP::Post.new(@uri.request_uri)
|
25
|
+
request.basic_auth @uri.user, @uri.password
|
26
|
+
request.content_type = 'application/json'
|
27
|
+
request.body = post_body
|
28
|
+
http.request(request).body
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/kodi/client.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
module Kodi
|
2
|
+
class Client
|
3
|
+
attr_reader :uri, :namespaces
|
4
|
+
|
5
|
+
def initialize(uri, method_groups = nil)
|
6
|
+
@uri = URI.parse(uri)
|
7
|
+
@namespaces = NamespaceBuilder.new(self.uri).build_namespaces(method_groups)
|
8
|
+
end
|
9
|
+
|
10
|
+
def method_missing(method_name, *arguments, &block)
|
11
|
+
find_namespace(method_name) || super
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def find_namespace(name)
|
17
|
+
namespaces[name.to_s.camelize]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Kodi
|
2
|
+
class Namespace
|
3
|
+
attr_reader :uri, :name
|
4
|
+
|
5
|
+
def initialize(uri, name, *methods)
|
6
|
+
@uri = uri
|
7
|
+
@name = name
|
8
|
+
@methods = methods
|
9
|
+
end
|
10
|
+
|
11
|
+
def method_missing(method_name, *arguments, &block)
|
12
|
+
if method = find_method(method_name)
|
13
|
+
RPC.new(uri).dispatch(name + '.' + method.name, *arguments)
|
14
|
+
else
|
15
|
+
super
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def find_method(name)
|
22
|
+
@methods.find { |m| m.name == name.to_s.camelize }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Kodi
|
2
|
+
class NamespaceBuilder < Struct.new(:uri)
|
3
|
+
# Generates a hash of Namespaces by name for a particular URI
|
4
|
+
#
|
5
|
+
# Params
|
6
|
+
# +method_groups+ (optional):: A Hash where the key is the name of the created namespace and the value is an Array
|
7
|
+
# of the desired methods. A valid hash could be:
|
8
|
+
# {
|
9
|
+
# 'AudioLibrary' => ['GetArtists'],
|
10
|
+
# 'Input' => ['Up', 'Down', 'Left', 'Right', 'Select', 'Back'],
|
11
|
+
# 'Player' => ['GetActivePlayers', 'PlayPause']
|
12
|
+
# }
|
13
|
+
# If left empty, the complete API will be requested from the server. This will cost an
|
14
|
+
# extra second or two, but ensures that you have all methods available.
|
15
|
+
def build_namespaces(method_groups = nil)
|
16
|
+
method_groups = to_structs(method_groups) if method_groups
|
17
|
+
namespaces = (method_groups || api_method_groups).map do |name, methods|
|
18
|
+
Namespace.new(uri, name, *methods)
|
19
|
+
end
|
20
|
+
|
21
|
+
namespaces.index_by(&:name)
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def to_structs(method_groups)
|
27
|
+
Hash[method_groups.map do |namespace, methods|
|
28
|
+
[namespace, methods.map { |method| Struct.new(:namespace, :name).new(namespace, method) }]
|
29
|
+
end]
|
30
|
+
end
|
31
|
+
|
32
|
+
def api_method_groups
|
33
|
+
api_methods.group_by(&:namespace)
|
34
|
+
end
|
35
|
+
|
36
|
+
def api_methods
|
37
|
+
api_introspect['methods'].keys.map do |path|
|
38
|
+
Struct.new(:namespace, :name).new(*path.split('.', 2))
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def api_introspect
|
43
|
+
@api_introspect ||= RPC.new(uri).dispatch('JSONRPC.Introspect')
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/lib/kodi/version.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{"id":"1","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"}]}],"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"}]}],"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"}],"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"}]}],"returns":{"properties":{"percentage":{"$ref":"Player.Position.Percentage","default":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.metadata.scraper.albums","xbmc.metadata.scraper.artists","xbmc.metadata.scraper.movies","xbmc.metadata.scraper.musicvideos","xbmc.metadata.scraper.tvshows","xbmc.ui.screensaver","xbmc.player.musicviz","xbmc.python.pluginsource","xbmc.python.script","xbmc.python.weather","xbmc.python.subtitles","xbmc.python.lyrics","xbmc.gui.skin","xbmc.gui.webinterface","xbmc.pvrclient","xbmc.addon.video","xbmc.addon.audio","xbmc.addon.image","xbmc.addon.executable","xbmc.service","xbmc.subtitle.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.Details.Album":{"extends":"Audio.Details.Media","id":"Audio.Details.Album","properties":{"albumid":{"$ref":"Library.Id","required":true},"albumlabel":{"default":"","type":"string"},"description":{"default":"","type":"string"},"mood":{"$ref":"Array.String"},"playcount":{"default":0,"type":"integer"},"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},"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"],"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"],"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","monoscopic"],"required":true,"type":"string"}},"type":"object"},"GUI.Window":{"default":"home","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","pvrosddirector","pvrosdcutter","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","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","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","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","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"],"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":{"enums":["title","tvshow","plot","votes","rating","time","writers","airdate","playcount","lastplayed","inprogress","genre","year","director","actor","episode","season","filename","path","studio","mpaarating","dateadded","videoresolution","audiochannels","videocodec","audiocodec","audiolanguage","subtitlelanguage","videoaspect","playlist","virtualfolder"],"id":"List.Filter.Fields.Episodes","required":true,"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":{"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","required":true,"type":"string"},"List.Filter.Fields.Songs":{"enums":["genre","album","artist","albumartist","title","year","time","tracknumber","filename","path","playcount","lastplayed","rating","comment","playlist","virtualfolder"],"id":"List.Filter.Fields.Songs","required":true,"type":"string"},"List.Filter.Fields.TVShows":{"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","required":true,"type":"string"},"List.Filter.Fields.Textures":{"enums":["textureid","url","cachedurl","lasthashcheck","imagehash","width","height","usecount","lastused"],"id":"List.Filter.Fields.Textures","required":true,"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"},"cast":{"$ref":"Video.Cast"},"comment":{"default":"","type":"string"},"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"},"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,"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,"id":"Player.Position.Percentage","maximum":100,"minimum":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},"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":{"required":true,"type":"integer"},"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,"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,"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,"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,"minimum":0,"type":"number"},"total":{"default":0,"minimum":0,"type":"number"}},"type":"object"},"Video.Streams":{"additionalProperties":false,"id":"Video.Streams","properties":{"audio":{"items":{"additionalProperties":false,"properties":{"channels":{"default":0,"type":"integer"},"codec":{"default":"","type":"string"},"language":{"default":"","type":"string"}},"type":"object"},"minItems":1,"type":"array"},"subtitle":{"items":{"additionalProperties":false,"properties":{"language":{"default":"","type":"string"}},"type":"object"},"minItems":1,"type":"array"},"video":{"items":{"additionalProperties":false,"properties":{"aspect":{"default":0,"type":"number"},"codec":{"default":"","type":"string"},"duration":{"default":0,"type":"integer"},"height":{"default":0,"type":"integer"},"width":{"default":0,"type":"integer"}},"type":"object"},"minItems":1,"type":"array"}},"type":"object"}},"version":"6.21.2"}}
|
data/spec/client_spec.rb
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Kodi::Client do
|
4
|
+
let(:uri) { "http://xbmc:pass@localhost:8080/jsonrpc" }
|
5
|
+
let(:client) { Kodi::Client.new(uri, {'Input' => ['Up'], 'Player' => ['PlayPause']}) }
|
6
|
+
subject { client }
|
7
|
+
|
8
|
+
it { is_expected.to be_a Kodi::Client }
|
9
|
+
|
10
|
+
# TODO: Move - integration test
|
11
|
+
describe 'input.up' do
|
12
|
+
before do
|
13
|
+
stub_request(:post, uri).with(
|
14
|
+
:body => '{"method":"Input.Up","params":{},"jsonrpc":"2.0","id":"1"}',
|
15
|
+
:headers => { 'Content-Type'=>'application/json' }
|
16
|
+
).to_return(
|
17
|
+
:status => 200,
|
18
|
+
:body => '{"id":"1","jsonrpc":"2.0","result":"OK"}',
|
19
|
+
:headers => {}
|
20
|
+
)
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'invokes the expected RPC call' do
|
24
|
+
expect(client.input.up).to eq "OK"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# TODO: Move - integration test
|
29
|
+
describe 'player.play_pause' do
|
30
|
+
before do
|
31
|
+
stub_request(:post, uri).with(
|
32
|
+
:body => '{"method":"Player.PlayPause","params":{"playerid":1},"jsonrpc":"2.0","id":"1"}',
|
33
|
+
:headers => { 'Content-Type'=>'application/json' }
|
34
|
+
).to_return(
|
35
|
+
:status => 200,
|
36
|
+
:body => '{"id":"1","jsonrpc":"2.0","result":"OK"}',
|
37
|
+
:headers => {}
|
38
|
+
)
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'invokes the expected RPC call' do
|
42
|
+
expect(client.player.play_pause playerid: 1).to eq "OK"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
context 'automatic namespace population' do
|
47
|
+
let(:client) { Kodi::Client.new(uri) }
|
48
|
+
|
49
|
+
before do
|
50
|
+
stub_request(:post, uri).with(
|
51
|
+
:body => '{"method":"JSONRPC.Introspect","params":{},"jsonrpc":"2.0","id":"1"}',
|
52
|
+
:headers => { 'Content-Type'=>'application/json' }
|
53
|
+
).to_return(
|
54
|
+
:status => 200,
|
55
|
+
:body => File.read('spec/assets/JSONRPC.Introspect.json'),
|
56
|
+
:headers => {}
|
57
|
+
)
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'populates namespaces' do
|
61
|
+
expect(client.namespaces.keys).to eq([
|
62
|
+
"Addons",
|
63
|
+
"Application",
|
64
|
+
"AudioLibrary",
|
65
|
+
"Favourites",
|
66
|
+
"Files",
|
67
|
+
"GUI",
|
68
|
+
"Input",
|
69
|
+
"JSONRPC",
|
70
|
+
"PVR",
|
71
|
+
"Player",
|
72
|
+
"Playlist",
|
73
|
+
"Profiles",
|
74
|
+
"Settings",
|
75
|
+
"System",
|
76
|
+
"Textures",
|
77
|
+
"VideoLibrary",
|
78
|
+
"XBMC"
|
79
|
+
])
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'webmock/rspec'
|
2
|
+
require 'kodi'
|
3
|
+
|
4
|
+
RSpec.configure do |config|
|
5
|
+
# rspec-expectations config goes here. You can use an alternate
|
6
|
+
# assertion/expectation library such as wrong or the stdlib/minitest
|
7
|
+
# assertions if you prefer.
|
8
|
+
config.expect_with :rspec do |expectations|
|
9
|
+
# This option will default to `true` in RSpec 4. It makes the `description`
|
10
|
+
# and `failure_message` of custom matchers include text for helper methods
|
11
|
+
# defined using `chain`, e.g.:
|
12
|
+
# be_bigger_than(2).and_smaller_than(4).description
|
13
|
+
# # => "be bigger than 2 and smaller than 4"
|
14
|
+
# ...rather than:
|
15
|
+
# # => "be bigger than 2"
|
16
|
+
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
|
17
|
+
end
|
18
|
+
|
19
|
+
# rspec-mocks config goes here. You can use an alternate test double
|
20
|
+
# library (such as bogus or mocha) by changing the `mock_with` option here.
|
21
|
+
config.mock_with :rspec do |mocks|
|
22
|
+
# Prevents you from mocking or stubbing a method that does not exist on
|
23
|
+
# a real object. This is generally recommended, and will default to
|
24
|
+
# `true` in RSpec 4.
|
25
|
+
mocks.verify_partial_doubles = true
|
26
|
+
end
|
27
|
+
end
|
metadata
ADDED
@@ -0,0 +1,134 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dsander-kodi
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Howard Wilson
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-05-02 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 5.0.1
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 5.0.1
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.6'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.6'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 3.5.0
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 3.5.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: webmock
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 1.20.4
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 1.20.4
|
83
|
+
description: Ruby wrapper for Kodi JSON-RPC API. See http://kodi.wiki/view/JSON-RPC_API/v6.
|
84
|
+
email:
|
85
|
+
- howard@watsonbox.net
|
86
|
+
executables: []
|
87
|
+
extensions: []
|
88
|
+
extra_rdoc_files: []
|
89
|
+
files:
|
90
|
+
- ".gitignore"
|
91
|
+
- ".rspec"
|
92
|
+
- ".travis.yml"
|
93
|
+
- Gemfile
|
94
|
+
- LICENSE.txt
|
95
|
+
- README.md
|
96
|
+
- Rakefile
|
97
|
+
- kodi.gemspec
|
98
|
+
- lib/kodi.rb
|
99
|
+
- lib/kodi/RPC.rb
|
100
|
+
- lib/kodi/client.rb
|
101
|
+
- lib/kodi/namespace.rb
|
102
|
+
- lib/kodi/namespace_builder.rb
|
103
|
+
- lib/kodi/version.rb
|
104
|
+
- spec/assets/JSONRPC.Introspect.json
|
105
|
+
- spec/client_spec.rb
|
106
|
+
- spec/spec_helper.rb
|
107
|
+
homepage: ''
|
108
|
+
licenses:
|
109
|
+
- MIT
|
110
|
+
metadata: {}
|
111
|
+
post_install_message:
|
112
|
+
rdoc_options: []
|
113
|
+
require_paths:
|
114
|
+
- lib
|
115
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - ">="
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '0'
|
120
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
requirements: []
|
126
|
+
rubyforge_project:
|
127
|
+
rubygems_version: 2.6.8
|
128
|
+
signing_key:
|
129
|
+
specification_version: 4
|
130
|
+
summary: Ruby wrapper for Kodi JSON-RPC API
|
131
|
+
test_files:
|
132
|
+
- spec/assets/JSONRPC.Introspect.json
|
133
|
+
- spec/client_spec.rb
|
134
|
+
- spec/spec_helper.rb
|