Merge pull request #1129 from jmarshallnz/remove_smb_auth_details_in_add_source
[vuplus_xbmc] / xbmc / interfaces / json-rpc / ServiceDescription.h
1 #pragma once
2 /*
3  *      Copyright (C) 2005-2012 Team XBMC
4  *      http://www.xbmc.org
5  *
6  *  This Program is free software; you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public License as published by
8  *  the Free Software Foundation; either version 2, or (at your option)
9  *  any later version.
10  *
11  *  This Program is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  *  GNU General Public License for more details.
15  *
16  *  You should have received a copy of the GNU General Public License
17  *  along with XBMC; see the file COPYING.  If not, write to
18  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
19  *  http://www.gnu.org/copyleft/gpl.html
20  *
21  */
22
23 namespace JSONRPC
24 {
25   const char* const JSONRPC_SERVICE_ID          = "http://www.xbmc.org/jsonrpc/ServiceDescription.json";
26   const int         JSONRPC_SERVICE_VERSION     = 5;
27   const char* const JSONRPC_SERVICE_DESCRIPTION = "JSON-RPC API of XBMC";
28
29   const char* const JSONRPC_SERVICE_TYPES[] = {  
30     "\"Optional.Boolean\": {"
31       "\"type\": [ \"null\", \"boolean\" ],"
32       "\"default\": null"
33     "}",
34     "\"Optional.String\": {"
35       "\"type\": [ \"null\", \"string\" ], "
36       "\"default\": null"
37     "}",
38     "\"Optional.Integer\": {"
39       "\"type\": [ \"null\", \"integer\" ], "
40       "\"default\": null"
41     "}",
42     "\"Optional.Number\": {"
43       "\"type\": [ \"null\", \"number\" ], "
44       "\"default\": null"
45     "}",
46     "\"Array.String\": {"
47       "\"type\": \"array\","
48       "\"items\": { \"type\": \"string\", \"minLength\": 1 }"
49     "}",
50     "\"Array.Integer\": {"
51       "\"type\": \"array\","
52       "\"items\": { \"type\": \"integer\" }"
53     "}",
54     "\"Global.Time\": {"
55       "\"type\": \"object\","
56       "\"properties\": {"
57         "\"hours\": { \"type\": \"integer\", \"required\": true, \"minimum\": 0, \"maximum\": 23 },"
58         "\"minutes\": { \"type\": \"integer\", \"required\": true, \"minimum\": 0, \"maximum\": 59 },"
59         "\"seconds\": { \"type\": \"integer\", \"required\": true, \"minimum\": 0, \"maximum\": 59 },"
60         "\"milliseconds\": { \"type\": \"integer\", \"required\": true, \"minimum\": 0, \"maximum\": 999 }"
61       "},"
62       "\"additionalProperties\": false"
63     "}",
64     "\"Global.IncrementDecrement\": {"
65       "\"type\": \"string\","
66       "\"enum\": [ \"increment\", \"decrement\" ]"
67     "}",
68     "\"Global.Toggle\": {"
69       "\"type\": ["
70         "{ \"type\": \"boolean\", \"required\": true },"
71         "{ \"type\": \"string\", \"enum\": [ \"toggle\" ], \"required\": true }"
72       "]"
73     "}",
74     "\"Configuration.Notifications\": {"
75       "\"type\": \"object\","
76       "\"properties\": {"
77         "\"Player\": { \"type\": \"boolean\", \"required\": true },"
78         "\"GUI\": { \"type\": \"boolean\", \"required\": true },"
79         "\"System\": { \"type\": \"boolean\", \"required\": true },"
80         "\"VideoLibrary\": { \"type\": \"boolean\", \"required\": true },"
81         "\"AudioLibrary\": { \"type\": \"boolean\", \"required\": true },"
82         "\"Other\": { \"type\": \"boolean\", \"required\": true }"
83       "},"
84       "\"additionalProperties\": false"
85     "}",
86     "\"Configuration\": {"
87       "\"type\": \"object\", \"required\": true,"
88       "\"properties\": {"
89         "\"notifications\": { \"$ref\": \"Configuration.Notifications\", \"required\": true }"
90       "}"
91     "}",
92     "\"Library.Id\": {"
93       "\"type\": \"integer\","
94       "\"default\": -1,"
95       "\"minimum\": 1"
96     "}",
97     "\"Playlist.Id\": {"
98       "\"type\": \"integer\","
99       "\"minimum\": 0,"
100       "\"maximum\": 2,"
101       "\"default\": -1"
102     "}",
103     "\"Playlist.Type\": {"
104       "\"type\": \"string\","
105       "\"enum\": [ \"unknown\", \"video\", \"audio\", \"picture\", \"mixed\" ]"
106     "}",
107     "\"Playlist.Property.Name\": {"
108       "\"type\": \"string\","
109       "\"enum\": [ \"type\", \"size\" ]"
110     "}",
111     "\"Playlist.Property.Value\": {"
112       "\"type\": \"object\","
113       "\"properties\": {"
114         "\"type\": { \"$ref\": \"Playlist.Type\" },"
115         "\"size\": { \"type\": \"integer\", \"minimum\": 0 }"
116       "}"
117     "}",
118     "\"Playlist.Position\": {"
119       "\"type\": \"integer\","
120       "\"minimum\": 0,"
121       "\"default\": -1"
122     "}",
123     "\"Playlist.Item\": {"
124       "\"type\": ["
125         "{ \"type\": \"object\", \"properties\": { \"file\": { \"type\": \"string\", \"description\": \"Path to a file (not a directory) to be added to the playlist\", \"required\": true } }, \"additionalProperties\": false },"
126         "{ \"type\": \"object\", \"properties\": { \"directory\": { \"type\": \"string\", \"required\": true } }, \"additionalProperties\": false },"
127         "{ \"type\": \"object\", \"properties\": { \"movieid\": { \"$ref\": \"Library.Id\", \"required\": true } }, \"additionalProperties\": false },"
128         "{ \"type\": \"object\", \"properties\": { \"episodeid\": { \"$ref\": \"Library.Id\", \"required\": true } }, \"additionalProperties\": false },"
129         "{ \"type\": \"object\", \"properties\": { \"musicvideoid\": { \"$ref\": \"Library.Id\", \"required\": true } }, \"additionalProperties\": false },"
130         "{ \"type\": \"object\", \"properties\": { \"artistid\": { \"$ref\": \"Library.Id\", \"required\": true } }, \"additionalProperties\": false },"
131         "{ \"type\": \"object\", \"properties\": { \"albumid\": { \"$ref\": \"Library.Id\", \"required\": true } }, \"additionalProperties\": false },"
132         "{ \"type\": \"object\", \"properties\": { \"songid\": { \"$ref\": \"Library.Id\", \"required\": true } }, \"additionalProperties\": false },"
133         "{ \"type\": \"object\", \"properties\": { \"genreid\": { \"$ref\": \"Library.Id\", \"required\": true, \"description\": \"Identification of a genre from the AudioLibrary\" } }, \"additionalProperties\": false }"
134       "]"
135     "}",
136     "\"Player.Id\": {"
137       "\"type\": \"integer\","
138       "\"minimum\": 0,"
139       "\"maximum\": 2,"
140       "\"default\": -1"
141     "}",
142     "\"Player.Type\": {"
143       "\"type\": \"string\","
144       "\"enum\": [ \"video\", \"audio\", \"picture\" ]"
145     "}",
146     "\"Player.Position.Percentage\": {"
147       "\"type\": \"number\","
148       "\"minimum\": 0.0,"
149       "\"maximum\": 100.0"
150     "}",
151     "\"Player.Position.Time\": {"
152       "\"type\": \"object\","
153       "\"additionalProperties\": false,"
154       "\"properties\": {"
155         "\"hours\": { \"type\": \"integer\", \"minimum\": 0, \"maximum\": 23, \"default\": 0 },"
156         "\"minutes\": { \"type\": \"integer\", \"minimum\": 0, \"maximum\": 59, \"default\": 0 },"
157         "\"seconds\": { \"type\": \"integer\", \"minimum\": 0, \"maximum\": 59, \"default\": 0 },"
158         "\"milliseconds\": { \"type\": \"integer\", \"minimum\": 0, \"maximum\": 999, \"default\": 0 }"
159       "}"
160     "}",
161     "\"Player.Speed\": {"
162       "\"type\": \"object\","
163       "\"required\": true,"
164       "\"properties\": {"
165         "\"speed\": { \"type\": \"integer\" }"
166       "}"
167     "}",
168     "\"Player.Repeat\": {"
169       "\"type\": \"string\","
170       "\"enum\": [ \"off\", \"one\", \"all\" ]"
171     "}",
172     "\"Player.Audio.Stream\": {"
173       "\"type\": \"object\","
174       "\"properties\": {"
175         "\"index\": { \"type\": \"integer\", \"minimum\": 0, \"required\": true },"
176         "\"name\": { \"type\": \"string\", \"required\": true },"
177         "\"language\": { \"type\": \"string\", \"required\": true }"
178       "}"
179     "}",
180     "\"Player.Audio.Stream.Extended\": {"
181       "\"extends\": \"Player.Audio.Stream\","
182       "\"properties\": {"
183         "\"codec\": { \"type\": \"string\", \"required\": true },"
184         "\"bitrate\": { \"type\": \"integer\", \"required\": true },"
185         "\"channels\": { \"type\": \"integer\", \"required\": true }"
186       "}"
187     "}",
188     "\"Player.Subtitle\": {"
189       "\"type\": \"object\","
190       "\"properties\": {"
191         "\"index\": { \"type\": \"integer\", \"minimum\": 0, \"required\": true },"
192         "\"name\": { \"type\": \"string\", \"required\": true },"
193         "\"language\": { \"type\": \"string\", \"required\": true }"
194       "}"
195     "}",
196     "\"Player.Property.Name\": {"
197       "\"type\": \"string\","
198       "\"enum\": [ \"type\", \"partymode\", \"speed\", \"time\", \"percentage\","
199                 "\"totaltime\", \"playlistid\", \"position\", \"repeat\", \"shuffled\","
200                 "\"canseek\", \"canchangespeed\", \"canmove\", \"canzoom\", \"canrotate\","
201                 "\"canshuffle\", \"canrepeat\", \"currentaudiostream\", \"audiostreams\","
202                 "\"subtitleenabled\", \"currentsubtitle\", \"subtitles\" ]"
203     "}",
204     "\"Player.Property.Value\": {"
205       "\"type\": \"object\","
206       "\"properties\": {"
207         "\"type\": { \"$ref\": \"Player.Type\" },"
208         "\"partymode\": { \"type\": \"boolean\" },"
209         "\"speed\": { \"type\": \"integer\" },"
210         "\"time\": { \"$ref\": \"Global.Time\" },"
211         "\"percentage\": { \"$ref\": \"Player.Position.Percentage\" },"
212         "\"totaltime\": { \"$ref\": \"Global.Time\" },"
213         "\"playlistid\": { \"$ref\": \"Playlist.Id\" },"
214         "\"position\": { \"$ref\": \"Playlist.Position\" },"
215         "\"repeat\": { \"$ref\": \"Player.Repeat\" },"
216         "\"shuffled\": { \"type\": \"boolean\" },"
217         "\"canseek\": { \"type\": \"boolean\" },"
218         "\"canchangespeed\": { \"type\": \"boolean\" },"
219         "\"canmove\": { \"type\": \"boolean\" },"
220         "\"canzoom\": { \"type\": \"boolean\" },"
221         "\"canrotate\": { \"type\": \"boolean\" },"
222         "\"canshuffle\": { \"type\": \"boolean\" },"
223         "\"canrepeat\": { \"type\": \"boolean\" },"
224         "\"currentaudiostream\": { \"$ref\": \"Player.Audio.Stream.Extended\" },"
225         "\"audiostreams\": { \"type\": \"array\", \"items\": { \"$ref\": \"Player.Audio.Stream\" } },"
226         "\"subtitleenabled\": { \"type\": \"boolean\" },"
227         "\"currentsubtitle\": { \"$ref\": \"Player.Subtitle\" },"
228         "\"subtitles\": { \"type\": \"array\", \"items\": { \"$ref\": \"Player.Subtitle\" } }"
229       "}"
230     "}",
231     "\"Player.Notifications.Item.Type\": {"
232       "\"type\": \"string\","
233       "\"enum\": [ \"unknown\", \"movie\", \"episode\", \"musicvideo\", \"song\" ]"
234     "}",
235     "\"Player.Notifications.Item\": {"
236       "\"type\": ["
237         "{ \"type\": \"object\", \"description\": \"An unknown item does not have any additional information.\","
238           "\"properties\": {"
239             "\"type\": { \"$ref\": \"Player.Notifications.Item.Type\", \"required\": true }"
240           "}"
241         "},"
242         "{ \"type\": \"object\", \"description\": \"An item known to the database has an identification.\","
243           "\"properties\": {"
244             "\"type\": { \"$ref\": \"Player.Notifications.Item.Type\", \"required\": true },"
245             "\"id\": { \"$ref\": \"Library.Id\", \"required\": true  }"
246           "}"
247         "},"
248         "{ \"type\": \"object\", \"description\": \"A movie item has a title and may have a release year.\","
249           "\"properties\": {"
250             "\"type\": { \"$ref\": \"Player.Notifications.Item.Type\", \"required\": true },"
251             "\"title\": { \"type\": \"string\", \"required\": true },"
252             "\"year\": { \"type\": \"integer\" }"
253           "}"
254         "},"
255         "{ \"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.\","
256           "\"properties\": {"
257             "\"type\": { \"$ref\": \"Player.Notifications.Item.Type\", \"required\": true },"
258             "\"title\": { \"type\": \"string\", \"required\": true },"
259             "\"episode\": { \"type\": \"integer\" },"
260             "\"season\": { \"type\": \"integer\" },"
261             "\"showtitle\": { \"type\": \"string\" }"
262           "}"
263         "},"
264         "{ \"type\": \"object\", \"description\": \"A music video has a title and may have an album and an artist.\","
265           "\"properties\": {"
266             "\"type\": { \"$ref\": \"Player.Notifications.Item.Type\", \"required\": true },"
267             "\"title\": { \"type\": \"string\", \"required\": true },"
268             "\"album\": { \"type\": \"string\" },"
269             "\"artist\": { \"type\": \"string\" }"
270           "}"
271         "},"
272         "{ \"type\": \"object\", \"description\": \"A song has a title and may have an album, an artist and a track number.\","
273           "\"properties\": {"
274             "\"type\": { \"$ref\": \"Player.Notifications.Item.Type\", \"required\": true },"
275             "\"title\": { \"type\": \"string\", \"required\": true },"
276             "\"album\": { \"type\": \"string\" },"
277             "\"artist\": { \"type\": \"string\" },"
278             "\"track\": { \"type\": \"integer\" }"
279           "}"
280         "}"
281       "]"
282     "}",
283     "\"Player.Notifications.Player\": {"
284       "\"type\": \"object\","
285       "\"properties\": {"
286         "\"playerid\": { \"$ref\": \"Player.Id\", \"required\": true },"
287         "\"speed\": { \"type\": \"integer\" }"
288       "}"
289     "}",
290     "\"Player.Notifications.Player.Seek\": {"
291       "\"extends\": \"Player.Notifications.Player\","
292       "\"properties\": {"
293         "\"time\": { \"$ref\": \"Global.Time\" },"
294         "\"seekoffset\": { \"$ref\": \"Global.Time\" }"
295       "}"
296     "}",
297     "\"Player.Notifications.Data\": {"
298       "\"type\": \"object\","
299       "\"properties\": {"
300         "\"item\": { \"$ref\": \"Player.Notifications.Item\", \"required\": true },"
301         "\"player\": { \"$ref\": \"Player.Notifications.Player\", \"required\": true }"
302       "}"
303     "}",
304     "\"Item.Fields.Base\": {"
305       "\"type\": \"array\","
306       "\"uniqueItems\": true,"
307       "\"items\": { \"type\": \"string\" }"
308     "}",
309     "\"Item.Details.Base\": {"
310       "\"type\": \"object\","
311       "\"properties\": {"
312         "\"label\": { \"type\": \"string\", \"required\": true }"
313       "}"
314     "}",
315     "\"Media.Details.Base\": {"
316       "\"extends\": \"Item.Details.Base\","
317       "\"properties\": {"
318         "\"fanart\": { \"type\": \"string\" },"
319         "\"thumbnail\": { \"type\": \"string\" }"
320       "}"
321     "}",
322     "\"Library.Fields.Genre\": {"
323       "\"extends\": \"Item.Fields.Base\","
324       "\"items\": { \"type\": \"string\", \"enum\": [ \"title\", \"thumbnail\" ] }"
325     "}",
326     "\"Library.Details.Genre\": {"
327       "\"extends\": \"Item.Details.Base\","
328       "\"properties\": {"
329         "\"genreid\": { \"$ref\": \"Library.Id\", \"required\": true },"
330         "\"title\": { \"type\": \"string\" },"
331         "\"thumbnail\": { \"type\": \"string\" }"
332       "}"
333     "}",
334     "\"Audio.Fields.Artist\": {"
335       "\"extends\": \"Item.Fields.Base\","
336       "\"items\": { \"type\": \"string\","
337         "\"enum\": [ \"instrument\", \"style\", \"mood\", \"born\", \"formed\","
338                   "\"description\", \"genre\", \"died\", \"disbanded\","
339                   "\"yearsactive\", \"musicbrainzartistid\", \"fanart\","
340                   "\"thumbnail\" ]"
341       "}"
342     "}",
343     "\"Audio.Fields.Album\": {"
344       "\"extends\": \"Item.Fields.Base\","
345       "\"items\": { \"type\": \"string\","
346         "\"enum\": [ \"title\", \"description\", \"artist\", \"genre\","
347                   "\"theme\", \"mood\", \"style\", \"type\", \"albumlabel\","
348                   "\"rating\", \"year\", \"musicbrainzalbumid\","
349                   "\"musicbrainzalbumartistid\", \"fanart\", \"thumbnail\","
350                   "\"artistid\" ]"
351       "}"
352     "}",
353     "\"Audio.Fields.Song\": {"
354       "\"extends\": \"Item.Fields.Base\","
355       "\"items\": { \"type\": \"string\","
356         "\"enum\": [ \"title\", \"artist\", \"albumartist\", \"genre\", \"year\","
357                   "\"rating\", \"album\", \"track\", \"duration\", \"comment\","
358                   "\"lyrics\", \"musicbrainztrackid\", \"musicbrainzartistid\","
359                   "\"musicbrainzalbumid\", \"musicbrainzalbumartistid\","
360                   "\"playcount\", \"fanart\", \"thumbnail\", \"file\", \"artistid\","
361                   "\"albumid\", \"lastplayed\", \"disc\" ]"
362       "}"
363     "}",
364     "\"Audio.Details.Base\": {"
365       "\"extends\": \"Media.Details.Base\","
366       "\"properties\": {"
367         "\"genre\": { \"type\": \"string\" }"
368       "}"
369     "}",
370     "\"Audio.Details.Media\": {"
371       "\"extends\": \"Audio.Details.Base\","
372       "\"properties\": {"
373         "\"title\": { \"type\": \"string\" },"
374         "\"artist\": { \"type\": \"string\" },"
375         "\"year\": { \"type\": \"integer\" },"
376         "\"rating\": { \"type\": \"integer\" },"
377         "\"musicbrainzalbumid\": { \"type\": \"string\" },"
378         "\"musicbrainzalbumartistid\": { \"type\": \"string\" }"
379       "}"
380     "}",
381     "\"Audio.Details.Artist\": {"
382       "\"extends\": \"Audio.Details.Base\","
383       "\"properties\": {"
384         "\"artistid\": { \"$ref\": \"Library.Id\", \"required\": true },"
385         "\"artist\": { \"type\": \"string\", \"required\": true },"
386         "\"instrument\": { \"type\": \"string\" },"
387         "\"style\": { \"type\": \"string\" },"
388         "\"mood\": { \"type\": \"string\" },"
389         "\"born\": { \"type\": \"string\" },"
390         "\"formed\": { \"type\": \"string\" },"
391         "\"description\": { \"type\": \"string\" },"
392         "\"died\": { \"type\": \"string\" },"
393         "\"disbanded\": { \"type\": \"string\" },"
394         "\"yearsactive\": { \"type\": \"string\" },"
395         "\"musicbrainzartistid\": { \"type\": \"string\" }"
396       "}"
397     "}",
398     "\"Audio.Details.Album\": {"
399       "\"extends\": \"Audio.Details.Media\","
400       "\"properties\": {"
401         "\"albumid\": { \"$ref\": \"Library.Id\", \"required\": true },"
402         "\"description\": { \"type\": \"string\" },"
403         "\"theme\": { \"type\": \"string\" },"
404         "\"mood\": { \"type\": \"string\" },"
405         "\"style\": { \"type\": \"string\" },"
406         "\"type\": { \"type\": \"string\" },"
407         "\"albumlabel\": { \"type\": \"string\" },"
408         "\"artistid\": { \"$ref\": \"Library.Id\" }"
409       "}"
410     "}",
411     "\"Audio.Details.Song\": {"
412       "\"extends\": \"Audio.Details.Media\","
413       "\"properties\": {"
414         "\"songid\": { \"$ref\": \"Library.Id\", \"required\": true },"
415         "\"file\": { \"type\": \"string\" },"
416         "\"albumartist\": { \"type\": \"string\" },"
417         "\"album\": { \"type\": \"string\" },"
418         "\"track\": { \"type\": \"integer\" },"
419         "\"duration\": { \"type\": \"integer\" },"
420         "\"comment\": { \"type\": \"string\" },"
421         "\"lyrics\": { \"type\": \"string\" },"
422         "\"playcount\": { \"type\": \"integer\" },"
423         "\"musicbrainztrackid\": { \"type\": \"string\" },"
424         "\"musicbrainzartistid\": { \"type\": \"string\" },"
425         "\"artistid\": { \"$ref\": \"Library.Id\" },"
426         "\"albumid\": { \"$ref\": \"Library.Id\" },"
427         "\"lastplayed\": { \"type\": \"string\" },"
428         "\"disc\": { \"type\": \"integer\" }"
429       "}"
430     "}",
431     "\"Video.Fields.Movie\": {"
432       "\"extends\": \"Item.Fields.Base\","
433       "\"items\": { \"type\": \"string\","
434         "\"description\": \"Requesting the cast, set, showling and/or resume field will result in increased response times\","
435         "\"enum\": [ \"title\", \"genre\", \"year\", \"rating\", \"director\", \"trailer\","
436                   "\"tagline\", \"plot\", \"plotoutline\", \"originaltitle\", \"lastplayed\","
437                   "\"playcount\", \"writer\", \"studio\", \"mpaa\", \"cast\", \"country\","
438                   "\"imdbnumber\", \"premiered\", \"productioncode\", \"runtime\", \"set\","
439                   "\"showlink\", \"streamdetails\", \"top250\", \"votes\", \"fanart\","
440                   "\"thumbnail\", \"file\", \"sorttitle\", \"resume\", \"setid\", \"dateadded\" ]"
441       "}"
442     "}",
443     "\"Video.Fields.MovieSet\": {"
444       "\"extends\": \"Item.Fields.Base\","
445       "\"items\": { \"type\": \"string\","
446         "\"enum\": [ \"title\", \"playcount\", \"fanart\", \"thumbnail\" ]"
447       "}"
448     "}",
449     "\"Video.Fields.TVShow\": {"
450       "\"extends\": \"Item.Fields.Base\","
451       "\"items\": { \"type\": \"string\","
452         "\"description\": \"Requesting the cast field will result in increased response times\","
453         "\"enum\": [ \"title\", \"genre\", \"year\", \"rating\", \"plot\","
454                   "\"studio\", \"mpaa\", \"cast\", \"playcount\", \"episode\","
455                   "\"imdbnumber\", \"premiered\", \"votes\", \"lastplayed\","
456                   "\"fanart\", \"thumbnail\", \"file\", \"originaltitle\","
457                   "\"sorttitle\", \"episodeguide\", \"season\", \"watchedepisodes\","
458                   "\"dateadded\"]"
459       "}"
460     "}",
461     "\"Video.Fields.Season\": {"
462       "\"extends\": \"Item.Fields.Base\","
463       "\"items\": { \"type\": \"string\","
464         "\"enum\": [ \"season\", \"showtitle\", \"playcount\", \"episode\", \"fanart\", \"thumbnail\", \"tvshowid\","
465                   "\"watchedepisodes\" ]"
466       "}"
467     "}",
468     "\"Video.Fields.Episode\": {"
469       "\"extends\": \"Item.Fields.Base\","
470       "\"items\": { \"type\": \"string\","
471         "\"description\": \"Requesting the cast and/or resume field will result in increased response times\","
472         "\"enum\": [ \"title\", \"plot\", \"votes\", \"rating\", \"writer\","
473                   "\"firstaired\", \"playcount\", \"runtime\", \"director\","
474                   "\"productioncode\", \"season\", \"episode\", \"originaltitle\","
475                   "\"showtitle\", \"cast\", \"streamdetails\", \"lastplayed\", \"fanart\","
476                   "\"thumbnail\", \"file\", \"resume\", \"tvshowid\", \"dateadded\" ]"
477       "}"
478     "}",
479     "\"Video.Fields.MusicVideo\": {"
480       "\"extends\": \"Item.Fields.Base\","
481       "\"items\": { \"type\": \"string\","
482         "\"description\": \"Requesting the resume field will result in increased response times\","
483         "\"enum\": [ \"title\", \"playcount\", \"runtime\", \"director\","
484                   "\"studio\", \"year\", \"plot\", \"album\", \"artist\","
485                   "\"genre\", \"track\", \"streamdetails\", \"lastplayed\","
486                   "\"fanart\", \"thumbnail\", \"file\", \"resume\", \"dateadded\" ]"
487       "}"
488     "}",
489     "\"Video.Cast\": {"
490       "\"type\": \"array\","
491       "\"items\": { \"type\": \"object\","
492         "\"properties\": {"
493           "\"name\": { \"type\": \"string\", \"required\": true },"
494           "\"role\": { \"type\": \"string\", \"required\": true },"
495           "\"thumbnail\": { \"type\": \"string\" }"
496         "},"
497         "\"additionalProperties\": false"
498       "}"
499     "}",
500     "\"Video.Streams\": {"
501       "\"type\": \"object\","
502       "\"properties\": {"
503         "\"audio\": { \"type\": \"array\", \"minItems\": 1,"
504           "\"items\": { \"type\": \"object\","
505             "\"properties\": {"
506               "\"codec\": { \"type\": \"string\" },"
507               "\"language\": { \"type\": \"string\" },"
508               "\"channels\": { \"type\": \"integer\" }"
509             "},"
510             "\"additionalProperties\": false"
511           "}"
512         "},"
513         "\"video\": { \"type\": \"array\", \"minItems\": 1,"
514           "\"items\": { \"type\": \"object\","
515             "\"properties\": {"
516               "\"codec\": { \"type\": \"string\" },"
517               "\"aspect\": { \"type\": \"number\" },"
518               "\"width\": { \"type\": \"integer\" },"
519               "\"height\": { \"type\": \"integer\" },"
520               "\"duration\": { \"type\": \"integer\" }"
521             "},"
522             "\"additionalProperties\": false"
523           "}"
524         "},"
525         "\"subtitle\": { \"type\": \"array\", \"minItems\": 1,"
526           "\"items\": { \"type\": \"object\","
527             "\"properties\": {"
528               "\"language\": { \"type\": \"string\" }"
529             "},"
530             "\"additionalProperties\": false"
531           "}"
532         "}"
533       "},"
534       "\"additionalProperties\": false"
535     "}",
536     "\"Video.Resume\": {"
537       "\"type\": \"object\","
538       "\"properties\": {"
539         "\"position\": { \"type\": \"number\", \"minimum\": 0 },"
540         "\"total\": { \"type\": \"number\", \"minimum\": 0 }"
541       "},"
542       "\"additionalProperties\": false"
543     "}",
544     "\"Video.Details.Base\": {"
545       "\"extends\": \"Media.Details.Base\","
546       "\"properties\": {"
547         "\"playcount\": { \"type\": \"integer\" }"
548       "}"
549     "}",
550     "\"Video.Details.Media\": {"
551       "\"extends\": \"Video.Details.Base\","
552       "\"properties\": {"
553         "\"title\": { \"type\": \"string\" }"
554       "}"
555     "}",
556     "\"Video.Details.Item\": {"
557       "\"extends\": \"Video.Details.Media\","
558       "\"properties\": {"
559         "\"file\": { \"type\": \"string\" },"
560         "\"plot\": { \"type\": \"string\" },"
561         "\"lastplayed\": { \"type\": \"string\" },"
562         "\"dateadded\": { \"type\": \"string\" }"
563       "}"
564     "}",
565     "\"Video.Details.File\": {"
566       "\"extends\": \"Video.Details.Item\","
567       "\"properties\": {"
568         "\"runtime\": { \"type\": \"string\" },"
569         "\"director\": { \"type\": \"string\" },"
570         "\"streamdetails\": { \"$ref\": \"Video.Streams\" },"
571         "\"resume\": { \"$ref\": \"Video.Resume\" }"
572       "}"
573     "}",
574     "\"Video.Details.Movie\": {"
575       "\"extends\": \"Video.Details.File\","
576       "\"properties\": {"
577         "\"movieid\": { \"$ref\": \"Library.Id\", \"required\": true },"
578         "\"genre\": { \"type\": \"string\" },"
579         "\"year\": { \"type\": \"integer\" },"
580         "\"rating\": { \"type\": \"number\" },"
581         "\"trailer\": { \"type\": \"string\" },"
582         "\"tagline\": { \"type\": \"string\" },"
583         "\"plotoutline\": { \"type\": \"string\" },"
584         "\"originaltitle\": { \"type\": \"string\" },"
585         "\"sorttitle\": { \"type\": \"string\" },"
586         "\"writer\": { \"type\": \"string\" },"
587         "\"studio\": { \"type\": \"string\" },"
588         "\"mpaa\": { \"type\": \"string\" },"
589         "\"cast\": { \"$ref\": \"Video.Cast\" },"
590         "\"country\": { \"type\": \"string\" },"
591         "\"imdbnumber\": { \"type\": \"string\" },"
592         "\"premiered\": { \"type\": \"string\" },"
593         "\"productioncode\": { \"type\": \"string\" },"
594         "\"set\": { \"$ref\": \"Array.String\" },"
595         "\"showlink\": { \"type\": \"string\" },"
596         "\"top250\": { \"type\": \"integer\" },"
597         "\"votes\": { \"type\": \"string\" },"
598         "\"setid\": { \"$ref\": \"Array.Integer\" }"
599       "}"
600     "}",
601     "\"Video.Details.MovieSet\": {"
602       "\"extends\": \"Video.Details.Media\","
603       "\"properties\": {"
604         "\"setid\": { \"$ref\": \"Library.Id\", \"required\": true }"
605       "}"
606     "}",
607     "\"Video.Details.MovieSet.Extended\": {"
608       "\"extends\": \"Video.Details.MovieSet\","
609       "\"properties\": {"
610         "\"movies\": { \"type\": \"array\","
611           "\"items\": { \"$ref\": \"Video.Details.Movie\" }"
612         "}"
613       "}"
614     "}",
615     "\"Video.Details.TVShow\": {"
616       "\"extends\": \"Video.Details.Item\","
617       "\"properties\": {"
618         "\"tvshowid\": { \"$ref\": \"Library.Id\", \"required\": true },"
619         "\"genre\": { \"type\": \"string\" },"
620         "\"year\": { \"type\": \"integer\" },"
621         "\"rating\": { \"type\": \"number\" },"
622         "\"originaltitle\": { \"type\": \"string\" },"
623         "\"sorttitle\": { \"type\": \"string\" },"
624         "\"studio\": { \"type\": \"string\" },"
625         "\"mpaa\": { \"type\": \"string\" },"
626         "\"cast\": { \"$ref\": \"Video.Cast\" },"
627         "\"episode\": { \"type\": \"integer\" },"
628         "\"watchedepisodes\": { \"type\": \"integer\" },"
629         "\"imdbnumber\": { \"type\": \"string\" },"
630         "\"premiered\": { \"type\": \"string\" },"
631         "\"votes\": { \"type\": \"string\" },"
632         "\"episodeguide\": { \"type\": \"string\" },"
633         "\"season\": { \"type\": \"integer\" }"
634       "}"
635     "}",
636     "\"Video.Details.Season\": {"
637       "\"extends\": \"Video.Details.Base\","
638       "\"properties\": {"
639         "\"season\": { \"type\": \"integer\", \"required\": true },"
640         "\"showtitle\": { \"type\": \"string\" },"
641         "\"episode\": { \"type\": \"integer\" },"
642         "\"watchedepisodes\": { \"type\": \"integer\" },"
643         "\"tvshowid\": { \"$ref\": \"Library.Id\" }"
644       "}"
645     "}",
646     "\"Video.Details.Episode\": {"
647       "\"extends\": \"Video.Details.File\","
648       "\"properties\": {"
649         "\"episodeid\": { \"$ref\": \"Library.Id\", \"required\": true },"
650         "\"votes\": { \"type\": \"string\" },"
651         "\"rating\": { \"type\": \"number\" },"
652         "\"writer\": { \"type\": \"string\" },"
653         "\"firstaired\": { \"type\": \"string\" },"
654         "\"productioncode\": { \"type\": \"string\" },"
655         "\"season\": { \"type\": \"integer\" },"
656         "\"episode\": { \"type\": \"integer\" },"
657         "\"originaltitle\": { \"type\": \"string\" },"
658         "\"showtitle\": { \"type\": \"string\" },"
659         "\"cast\": { \"$ref\": \"Video.Cast\" },"
660         "\"tvshowid\": { \"$ref\": \"Library.Id\" }"
661       "}"
662     "}",
663     "\"Video.Details.MusicVideo\": {"
664       "\"extends\": \"Video.Details.File\","
665       "\"properties\": {"
666         "\"musicvideoid\": { \"$ref\": \"Library.Id\", \"required\": true },"
667         "\"studio\": { \"type\": \"string\" },"
668         "\"year\": { \"type\": \"integer\" },"
669         "\"album\": { \"type\": \"string\" },"
670         "\"artist\": { \"type\": \"string\" },"
671         "\"genre\": { \"type\": \"string\" },"
672         "\"track\": { \"type\": \"integer\" }"
673       "}"
674     "}",
675     "\"Files.Media\": {"
676       "\"type\": \"string\","
677       "\"enum\": [ \"video\", \"music\", \"pictures\", \"files\", \"programs\" ]"
678     "}",
679     "\"List.Amount\": {"
680       "\"type\": \"integer\","
681       "\"default\": -1,"
682       "\"minimum\": 0"
683     "}",
684     "\"List.Limits\": {"
685       "\"type\": \"object\","
686       "\"properties\": {"
687         "\"start\": { \"type\": \"integer\", \"minimum\": 0, \"default\": 0 },"
688         "\"end\": { \"type\": \"integer\", \"minimum\": 0, \"default\": -1, \"description\": \"The number of items in the list being returned\" }"
689       "},"
690       "\"additionalProperties\": false"
691     "}",
692     "\"List.Sort\": {"
693       "\"type\": \"object\","
694       "\"properties\": {"
695         "\"method\": { \"type\": \"string\", \"default\": \"none\","
696           "\"enum\": [ \"none\", \"label\", \"date\", \"size\", \"file\", \"drivetype\", \"track\", \"duration\", \"title\", \"artist\","
697                     "\"album\", \"genre\", \"country\", \"year\", \"videorating\", \"dateadded\", \"programcount\", \"playlist\","
698                     "\"episode\", \"videotitle\", \"sorttitle\", \"productioncode\", \"songrating\", \"mpaarating\", \"videoruntime\","
699                     "\"studio\", \"fullpath\", \"lastplayed\", \"playcount\", \"listeners\", \"bitrate\", \"unsorted\" ]"
700         "},"
701         "\"order\": { \"type\": \"string\", \"default\": \"ascending\", \"enum\": [ \"ascending\", \"descending\" ] },"
702         "\"ignorearticle\": { \"type\": \"boolean\", \"default\": false }"
703       "}"
704     "}",
705     "\"List.LimitsReturned\": {"
706       "\"type\": \"object\","
707       "\"properties\": {"
708         "\"start\": { \"type\": \"integer\", \"minimum\": 0, \"default\": 0 },"
709         "\"end\": { \"type\": \"integer\", \"minimum\": 0, \"default\": -1 },"
710         "\"total\": { \"type\": \"integer\", \"minimum\": 0, \"required\": true }"
711       "},"
712       "\"additionalProperties\": false"
713     "}",
714     "\"List.Fields.All\": {"
715       "\"extends\": \"Item.Fields.Base\","
716       "\"items\": { \"type\": \"string\","
717         "\"enum\": [ \"title\", \"artist\", \"albumartist\", \"genre\", \"year\", \"rating\","
718                   "\"album\", \"track\", \"duration\", \"comment\", \"lyrics\", \"musicbrainztrackid\","
719                   "\"musicbrainzartistid\", \"musicbrainzalbumid\", \"musicbrainzalbumartistid\","
720                   "\"playcount\", \"fanart\", \"director\", \"trailer\", \"tagline\", \"plot\","
721                   "\"plotoutline\", \"originaltitle\", \"lastplayed\", \"writer\", \"studio\","
722                   "\"mpaa\", \"cast\", \"country\", \"imdbnumber\", \"premiered\", \"productioncode\","
723                   "\"runtime\", \"set\", \"showlink\", \"streamdetails\", \"top250\", \"votes\","
724                   "\"firstaired\", \"season\", \"episode\", \"showtitle\", \"thumbnail\", \"file\","
725                   "\"resume\", \"artistid\", \"albumid\", \"tvshowid\", \"setid\", \"watchedepisodes\","
726                   "\"disc\" ]"
727       "}"
728     "}",
729     "\"List.Item.All\": {"
730       "\"extends\": [ \"Video.Details.File\", \"Audio.Details.Media\" ],"
731       "\"properties\": {"
732         "\"id\": { \"$ref\": \"Library.Id\" },"
733         "\"type\": { \"type\": \"string\", \"enum\": [ \"unknown\", \"movie\", \"episode\", \"musicvideo\", \"song\", \"picture\" ] },"
734         "\"albumartist\": { \"type\": \"string\" },"
735         "\"album\": { \"type\": \"string\" },"
736         "\"track\": { \"type\": \"integer\" },"
737         "\"duration\": { \"type\": \"integer\" },"
738         "\"comment\": { \"type\": \"string\" },"
739         "\"lyrics\": { \"type\": \"string\" },"
740         "\"musicbrainztrackid\": { \"type\": \"string\" },"
741         "\"musicbrainzartistid\": { \"type\": \"string\" },"
742         "\"trailer\": { \"type\": \"string\" },"
743         "\"tagline\": { \"type\": \"string\" },"
744         "\"plotoutline\": { \"type\": \"string\" },"
745         "\"originaltitle\": { \"type\": \"string\" },"
746         "\"writer\": { \"type\": \"string\" },"
747         "\"studio\": { \"type\": \"string\" },"
748         "\"mpaa\": { \"type\": \"string\" },"
749         "\"cast\": { \"$ref\": \"Video.Cast\" },"
750         "\"country\": { \"type\": \"string\" },"
751         "\"imdbnumber\": { \"type\": \"string\" },"
752         "\"premiered\": { \"type\": \"string\" },"
753         "\"productioncode\": { \"type\": \"string\" },"
754         "\"set\": { \"$ref\": \"Array.String\" },"
755         "\"showlink\": { \"type\": \"string\" },"
756         "\"top250\": { \"type\": \"integer\" },"
757         "\"votes\": { \"type\": \"string\" },"
758         "\"firstaired\": { \"type\": \"string\" },"
759         "\"season\": { \"type\": \"integer\" },"
760         "\"episode\": { \"type\": \"integer\" },"
761         "\"showtitle\": { \"type\": \"string\" },"
762         "\"artistid\": { \"$ref\": \"Library.Id\" },"
763         "\"albumid\": { \"$ref\": \"Library.Id\" },"
764         "\"setid\": { \"$ref\": \"Array.Integer\" },"
765         "\"tvshowid\": { \"$ref\": \"Library.Id\" },"
766         "\"watchedepisodes\": { \"type\": \"integer\" },"
767         "\"disc\": { \"type\": \"integer\" }"
768       "}"
769     "}",
770     "\"List.Fields.Files\": {"
771       "\"extends\": \"Item.Fields.Base\","
772       "\"items\": { \"type\": \"string\","
773         "\"enum\": [ \"title\", \"artist\", \"albumartist\", \"genre\", \"year\", \"rating\","
774                   "\"album\", \"track\", \"duration\", \"comment\", \"lyrics\", \"musicbrainztrackid\","
775                   "\"musicbrainzartistid\", \"musicbrainzalbumid\", \"musicbrainzalbumartistid\","
776                   "\"playcount\", \"fanart\", \"director\", \"trailer\", \"tagline\", \"plot\","
777                   "\"plotoutline\", \"originaltitle\", \"lastplayed\", \"writer\", \"studio\","
778                   "\"mpaa\", \"cast\", \"country\", \"imdbnumber\", \"premiered\", \"productioncode\","
779                   "\"runtime\", \"set\", \"showlink\", \"streamdetails\", \"top250\", \"votes\","
780                   "\"firstaired\", \"season\", \"episode\", \"showtitle\", \"thumbnail\", \"file\","
781                   "\"resume\", \"artistid\", \"albumid\", \"tvshowid\", \"setid\", \"size\","
782                   "\"lastmodified\", \"mimetype\", \"watchedepisodes\", \"disc\" ]"
783       "}"
784     "}",
785     "\"List.Item.File\": {"
786       "\"extends\": \"List.Item.All\","
787       "\"properties\": {"
788         "\"file\": { \"type\": \"string\", \"required\": true },"
789         "\"filetype\": { \"type\": \"string\", \"enum\": [ \"file\", \"directory\" ], \"required\": true },"
790         "\"size\": { \"type\": \"integer\", \"description\": \"Size of the file in kB (1000 Byte)\" },"
791         "\"lastmodified\": { \"type\": \"string\" },"
792         "\"mimetype\": { \"type\": \"string\" }"
793       "}"
794     "}",
795     "\"List.Items.Sources\": {"
796       "\"type\": \"array\","
797       "\"items\": {"
798         "\"extends\": \"Item.Details.Base\","
799         "\"properties\": {"
800           "\"file\": { \"type\": \"string\", \"required\": true }"
801         "}"
802       "}"
803     "}",
804     "\"GUI.Property.Name\": {"
805       "\"type\": \"string\","
806       "\"enum\": [ \"currentwindow\", \"currentcontrol\", \"skin\", \"fullscreen\" ]"
807     "}",
808     "\"GUI.Property.Value\": {"
809       "\"type\": \"object\","
810       "\"properties\": {"
811         "\"currentwindow\": { \"type\": \"object\","
812           "\"properties\": {"
813             "\"id\": { \"type\": \"integer\", \"required\": true },"
814             "\"label\": { \"type\": \"string\", \"required\": true }"
815           "}"
816         "},"
817         "\"currentcontrol\": { \"type\": \"object\","
818           "\"properties\": {"
819             "\"label\": { \"type\": \"string\", \"required\": true }"
820           "}"
821         "},"
822         "\"skin\": { \"type\": \"object\","
823           "\"properties\": {"
824             "\"id\": { \"type\": \"string\", \"required\": true, \"minLength\": 1 },"
825             "\"name\": { \"type\": \"string\" }"
826           "}"
827         "},"
828         "\"fullscreen\": { \"type\": \"boolean\" }"
829       "}"
830     "}",
831     "\"System.Property.Name\": {"
832       "\"type\": \"string\","
833       "\"enum\": [ \"canshutdown\", \"cansuspend\", \"canhibernate\", \"canreboot\" ]"
834     "}",
835     "\"System.Property.Value\": {"
836       "\"type\": \"object\","
837       "\"properties\": {"
838         "\"canshutdown\": { \"type\": \"boolean\" },"
839         "\"cansuspend\": { \"type\": \"boolean\" },"
840         "\"canhibernate\": { \"type\": \"boolean\" },"
841         "\"canreboot\": { \"type\": \"boolean\" }"
842       "}"
843     "}",
844     "\"Application.Property.Name\": {"
845       "\"type\": \"string\","
846       "\"enum\": [ \"volume\", \"muted\", \"name\", \"version\" ]"
847     "}",
848     "\"Application.Property.Value\": {"
849       "\"type\": \"object\","
850       "\"properties\": {"
851         "\"volume\": { \"type\": \"integer\", \"minimum\": 0, \"maximum\": 100 },"
852         "\"muted\": { \"type\": \"boolean\" },"
853         "\"name\": { \"type\": \"string\", \"minLength\": 1 },"
854         "\"version\": { \"type\": \"object\","
855           "\"properties\": {"
856             "\"major\": { \"type\": \"integer\", \"minimum\": 0, \"required\": true },"
857             "\"minor\": { \"type\": \"integer\", \"minimum\": 0, \"required\": true },"
858             "\"revision\": { \"type\": [ \"string\", \"integer\" ] },"
859             "\"tag\": { \"type\": \"string\", \"enum\": [ \"prealpha\", \"alpha\", \"beta\", \"releasecandidate\", \"stable\" ], \"required\": true }"
860           "}"
861         "}"
862       "}"
863     "}"
864   };
865
866   const char* const JSONRPC_SERVICE_METHODS[] = {  
867     "\"JSONRPC.Introspect\": {"
868       "\"type\": \"method\","
869       "\"description\": \"Enumerates all actions and descriptions\","
870       "\"transport\": \"Response\","
871       "\"permission\": \"ReadData\","
872       "\"params\": ["
873         "{ \"name\": \"getdescriptions\", \"type\": \"boolean\", \"default\": true },"
874         "{ \"name\": \"getmetadata\", \"type\": \"boolean\", \"default\": false },"
875         "{ \"name\": \"filterbytransport\", \"type\": \"boolean\", \"default\": true },"
876         "{ \"name\": \"filter\", \"type\": \"object\","
877           "\"properties\": {"
878             "\"id\": { \"type\": \"string\", \"required\": true, \"description\": \"Name of a namespace, method or type\" },"
879             "\"type\": { \"type\": \"string\", \"required\": true, \"enum\": [ \"method\", \"namespace\", \"type\", \"notification\" ], \"description\": \"Type of the given name\" },"
880             "\"getreferences\": { \"type\": \"boolean\", \"default\": true, \"description\": \"Whether or not to print the schema for referenced types\" }"
881           "}"
882         "}"
883       "],"
884       "\"returns\": \"object\""
885     "}",
886     "\"JSONRPC.Version\": {"
887       "\"type\": \"method\","
888       "\"description\": \"Retrieve the jsonrpc protocol version\","
889       "\"transport\": \"Response\","
890       "\"permission\": \"ReadData\","
891       "\"params\": [],"
892       "\"returns\": \"string\""
893     "}",
894     "\"JSONRPC.Permission\": {"
895       "\"type\": \"method\","
896       "\"description\": \"Retrieve the clients permissions\","
897       "\"transport\": \"Response\","
898       "\"permission\": \"ReadData\","
899       "\"params\": [],"
900       "\"returns\": {"
901         "\"type\": \"object\","
902         "\"properties\": {"
903           "\"ReadData\": { \"type\": \"boolean\", \"required\": true },"
904           "\"ControlPlayback\": { \"type\": \"boolean\", \"required\": true },"
905           "\"ControlNotify\": { \"type\": \"boolean\", \"required\": true },"
906           "\"ControlPower\": { \"type\": \"boolean\", \"required\": true },"
907           "\"UpdateData\": { \"type\": \"boolean\", \"required\": true },"
908           "\"RemoveData\": { \"type\": \"boolean\", \"required\": true },"
909           "\"Navigate\": { \"type\": \"boolean\", \"required\": true },"
910           "\"WriteFile\": { \"type\": \"boolean\", \"required\": true },"
911           "\"ControlSystem\": { \"type\": \"boolean\", \"required\": true },"
912           "\"ControlGUI\": { \"type\": \"boolean\", \"required\": true }"
913         "}"
914       "}"
915     "}",
916     "\"JSONRPC.Ping\": {"
917       "\"type\": \"method\","
918       "\"description\": \"Ping responder\","
919       "\"transport\": \"Response\","
920       "\"permission\": \"ReadData\","
921       "\"params\": [],"
922       "\"returns\": \"string\""
923     "}",
924     "\"JSONRPC.GetConfiguration\": {"
925       "\"type\": \"method\","
926       "\"description\": \"Get client-specific configurations\","
927       "\"transport\": \"Announcing\","
928       "\"permission\": \"ReadData\","
929       "\"params\": [],"
930       "\"returns\": { \"$ref\": \"Configuration\" }"
931     "}",
932     "\"JSONRPC.SetConfiguration\": {"
933       "\"type\": \"method\","
934       "\"description\": \"Change the client-specific configuration\","
935       "\"transport\": \"Announcing\","
936       "\"permission\": \"ControlNotify\","
937       "\"params\": ["
938         "{ \"name\": \"notifications\", \"type\": \"object\","
939           "\"properties\": {"
940             "\"Player\": { \"$ref\": \"Optional.Boolean\" },"
941             "\"GUI\": { \"$ref\": \"Optional.Boolean\" },"
942             "\"System\": { \"$ref\": \"Optional.Boolean\" },"
943             "\"AudioLibrary\": { \"$ref\": \"Optional.Boolean\" },"
944             "\"VideoLibrary\": { \"$ref\": \"Optional.Boolean\" },"
945             "\"Application\": { \"$ref\": \"Optional.Boolean\" },"
946             "\"Other\": { \"$ref\": \"Optional.Boolean\" }"
947           "}"
948         "}"
949       "],"
950       "\"returns\": { \"$ref\": \"Configuration\" }"
951     "}",
952     "\"JSONRPC.NotifyAll\": {"
953       "\"type\": \"method\","
954       "\"description\": \"Notify all other connected clients\","
955       "\"transport\": \"Response\","
956       "\"permission\": \"ReadData\","
957       "\"params\": ["
958         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
959         "{ \"name\": \"message\", \"type\": \"string\", \"required\": true },"
960         "{ \"name\": \"data\", \"type\": \"any\", \"default\": null }"
961       "],"
962       "\"returns\": \"any\""
963     "}",
964     "\"Player.Open\": {"
965       "\"type\": \"method\","
966       "\"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.\","
967       "\"transport\": \"Response\","
968       "\"permission\": \"ControlPlayback\","
969       "\"params\": ["
970         "{ \"name\": \"item\","
971           "\"type\": ["
972             "{ \"type\": \"object\", \"required\": true, \"additionalProperties\": false,"
973               "\"properties\": {"
974                 "\"playlistid\": { \"$ref\": \"Playlist.Id\", \"required\": true },"
975                 "\"position\": { \"$ref\": \"Playlist.Position\", \"default\": 0 }"
976               "}"
977             "},"
978             "{ \"$ref\": \"Playlist.Item\", \"required\": true },"
979             "{ \"type\": \"object\", \"required\": true, \"additionalProperties\": false,"
980               "\"properties\": {"
981                 "\"path\": { \"type\": \"string\", \"required\": true },"
982                 "\"random\": { \"type\": \"boolean\", \"default\": true, \"description\": \"Deprecated, use the shuffled property of the options parameter instead\" },"
983                 "\"recursive\": { \"type\": \"boolean\", \"default\": true }"
984               "}"
985             "}"
986           "]"
987         "},"
988         "{ \"name\": \"options\", \"type\": \"object\", \"additionalProperties\": false,"
989           "\"properties\": {"
990             "\"shuffled\": { \"$ref\": \"Optional.Boolean\" },"
991             "\"repeat\": { \"type\": [ \"null\", { \"$ref\": \"Player.Repeat\", \"required\": true } ], \"default\": null },"
992             "\"resume\": { \"type\": ["
993                 "{ \"type\": \"boolean\", \"required\": true, \"description\": \"Whether to resume from the resume point or not\" },"
994                 "{ \"$ref\": \"Player.Position.Percentage\", \"required\": true, \"description\": \"Percentage value to start from\" },"
995                 "{ \"$ref\": \"Player.Position.Time\", \"required\": true, \"description\": \"Time to start from\" }"
996               "],"
997               "\"default\": false"
998             "}"
999           "}"
1000         "}"
1001       "],"
1002       "\"returns\": \"string\""
1003     "}",
1004     "\"Player.GetActivePlayers\": {"
1005       "\"type\": \"method\","
1006       "\"description\": \"Returns all active players\","
1007       "\"transport\": \"Response\","
1008       "\"permission\": \"ReadData\","
1009       "\"params\": [],"
1010       "\"returns\": {"
1011         "\"type\": \"array\","
1012         "\"uniqueItems\": true,"
1013         "\"items\": {"
1014           "\"type\": \"object\","
1015           "\"properties\": {"
1016             "\"playerid\": { \"$ref\": \"Player.Id\", \"required\": true },"
1017             "\"type\": { \"$ref\": \"Player.Type\", \"required\": true }"
1018           "}"
1019         "}"
1020       "}"
1021     "}",
1022     "\"Player.GetProperties\": {"
1023       "\"type\": \"method\","
1024       "\"description\": \"Retrieves the values of the given properties\","
1025       "\"transport\": \"Response\","
1026       "\"permission\": \"ReadData\","
1027       "\"params\": ["
1028         "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true },"
1029         "{ \"name\": \"properties\", \"type\": \"array\", \"uniqueItems\": true, \"required\": true, \"items\": { \"$ref\": \"Player.Property.Name\" } }"
1030       "],"
1031       "\"returns\":  { \"$ref\": \"Player.Property.Value\", \"required\": true }"
1032     "}",
1033     "\"Player.GetItem\": {"
1034       "\"type\": \"method\","
1035       "\"description\": \"Retrieves the currently played item\","
1036       "\"transport\": \"Response\","
1037       "\"permission\": \"ReadData\","
1038       "\"params\": ["
1039         "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true },"
1040         "{ \"name\": \"properties\", \"$ref\": \"List.Fields.All\" }"
1041       "],"
1042       "\"returns\": { \"type\": \"object\","
1043         "\"properties\": {"
1044           "\"item\": { \"$ref\": \"List.Item.All\", \"required\": true }"
1045         "}"
1046       "}"
1047     "}",
1048     "\"Player.PlayPause\": {"
1049       "\"type\": \"method\","
1050       "\"description\": \"Pauses or unpause playback and returns the new state\","
1051       "\"transport\": \"Response\","
1052       "\"permission\": \"ControlPlayback\","
1053       "\"params\": ["
1054         "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true },"
1055         "{ \"name\": \"play\", \"$ref\": \"Global.Toggle\", \"default\": \"toggle\" }"
1056       "],"
1057       "\"returns\": { \"$ref\": \"Player.Speed\" }"
1058     "}",
1059     "\"Player.Stop\": {"
1060       "\"type\": \"method\","
1061       "\"description\": \"Stops playback\","
1062       "\"transport\": \"Response\","
1063       "\"permission\": \"ControlPlayback\","
1064       "\"params\": ["
1065         "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true }"
1066       "],"
1067       "\"returns\": \"string\""
1068     "}",
1069     "\"Player.SetSpeed\": {"
1070       "\"type\": \"method\","
1071       "\"description\": \"Set the speed of the current playback\","
1072       "\"transport\": \"Response\","
1073       "\"permission\": \"ControlPlayback\","
1074       "\"params\": ["
1075         "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true },"
1076         "{ \"name\": \"speed\", \"type\": ["
1077             "{ \"type\": \"integer\", \"required\": true, \"enum\": [ -32, -16, -8, -4, -2, -1, 0, 1, 2, 4, 8, 16, 32 ] },"
1078             "{ \"$ref\": \"Global.IncrementDecrement\", \"required\": true }"
1079           "],"
1080           "\"required\": true"
1081         "}"
1082       "],"
1083       "\"returns\": { \"$ref\": \"Player.Speed\" }"
1084     "}",
1085     "\"Player.Seek\": {"
1086       "\"type\": \"method\","
1087       "\"description\": \"Seek through the playing item\","
1088       "\"transport\": \"Response\","
1089       "\"permission\": \"ControlPlayback\","
1090       "\"params\": ["
1091         "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true },"
1092         "{ \"name\": \"value\", \"required\": true, \"type\": ["
1093             "{ \"$ref\": \"Player.Position.Percentage\", \"required\": true, \"description\": \"Percentage value to seek to\" },"
1094             "{ \"$ref\": \"Player.Position.Time\", \"required\": true, \"description\": \"Time to seek to\" },"
1095             "{ \"type\": \"string\", \"enum\": [ \"smallforward\", \"smallbackward\", \"bigforward\", \"bigbackward\" ], \"required\": true, \"description\": \"Seek by predefined jumps\" }"
1096           "]"
1097         "}"
1098       "],"
1099       "\"returns\": {"
1100         "\"type\": \"object\","
1101         "\"properties\": {"
1102           "\"percentage\": { \"$ref\": \"Player.Position.Percentage\" },"
1103           "\"time\": { \"$ref\": \"Global.Time\" },"
1104           "\"totaltime\": { \"$ref\": \"Global.Time\" }"
1105         "}"
1106       "}"
1107     "}",
1108     "\"Player.MoveLeft\": {"
1109       "\"type\": \"method\","
1110       "\"description\": \"If picture is zoomed move viewport left otherwise skip previous\","
1111       "\"transport\": \"Response\","
1112       "\"permission\": \"ControlPlayback\","
1113       "\"params\": ["
1114         "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true }"
1115       "],"
1116       "\"returns\": \"string\""
1117     "}",
1118     "\"Player.MoveRight\": {"
1119       "\"type\": \"method\","
1120       "\"description\": \"If picture is zoomed move viewport right otherwise skip next\","
1121       "\"transport\": \"Response\","
1122       "\"permission\": \"ControlPlayback\","
1123       "\"params\": ["
1124         "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true }"
1125       "],"
1126       "\"returns\": \"string\""
1127     "}",
1128     "\"Player.MoveDown\": {"
1129       "\"type\": \"method\","
1130       "\"description\": \"If picture is zoomed move viewport down\","
1131       "\"transport\": \"Response\","
1132       "\"permission\": \"ControlPlayback\","
1133       "\"params\": ["
1134         "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true }"
1135       "],"
1136       "\"returns\": \"string\""
1137     "}",
1138     "\"Player.MoveUp\": {"
1139       "\"type\": \"method\","
1140       "\"description\": \"If picture is zoomed move viewport up\","
1141       "\"transport\": \"Response\","
1142       "\"permission\": \"ControlPlayback\","
1143       "\"params\": ["
1144         "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true }"
1145       "],"
1146       "\"returns\": \"string\""
1147     "}",
1148     "\"Player.ZoomOut\": {"
1149       "\"type\": \"method\","
1150       "\"description\": \"Zoom out once\","
1151       "\"transport\": \"Response\","
1152       "\"permission\": \"ControlPlayback\","
1153       "\"params\": ["
1154         "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true }"
1155       "],"
1156       "\"returns\": \"string\""
1157     "}",
1158     "\"Player.ZoomIn\": {"
1159       "\"type\": \"method\","
1160       "\"description\": \"Zoom in once\","
1161       "\"transport\": \"Response\","
1162       "\"permission\": \"ControlPlayback\","
1163       "\"params\": ["
1164         "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true }"
1165       "],"
1166       "\"returns\": \"string\""
1167     "}",
1168     "\"Player.Zoom\": {"
1169       "\"type\": \"method\","
1170       "\"description\": \"Zooms current picture\","
1171       "\"transport\": \"Response\","
1172       "\"permission\": \"ControlPlayback\","
1173       "\"params\": ["
1174         "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true },"
1175         "{ \"name\": \"value\", \"type\": \"integer\", \"required\": true, \"minimum\": 1, \"maximum\": 10, \"description\": \"Zoom level\" }"
1176       "],"
1177       "\"returns\": \"string\""
1178     "}",
1179     "\"Player.Rotate\": {"
1180       "\"type\": \"method\","
1181       "\"description\": \"Rotates current picture\","
1182       "\"transport\": \"Response\","
1183       "\"permission\": \"ControlPlayback\","
1184       "\"params\": ["
1185         "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true }"
1186       "],"
1187       "\"returns\": \"string\""
1188     "}",
1189     "\"Player.GoPrevious\": {"
1190       "\"type\": \"method\","
1191       "\"description\": \"Go to previous item on the playlist\","
1192       "\"transport\": \"Response\","
1193       "\"permission\": \"ControlPlayback\","
1194       "\"params\": ["
1195         "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true }"
1196       "],"
1197       "\"returns\": \"string\""
1198     "}",
1199     "\"Player.GoNext\": {"
1200       "\"type\": \"method\","
1201       "\"description\": \"Go to next item on the playlist\","
1202       "\"transport\": \"Response\","
1203       "\"permission\": \"ControlPlayback\","
1204       "\"params\": ["
1205         "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true }"
1206       "],"
1207       "\"returns\": \"string\""
1208     "}",
1209     "\"Player.GoTo\": {"
1210       "\"type\": \"method\","
1211       "\"description\": \"Go to item at the given position in the playlist\","
1212       "\"transport\": \"Response\","
1213       "\"permission\": \"ControlPlayback\","
1214       "\"params\": ["
1215         "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true },"
1216         "{ \"name\": \"position\", \"$ref\": \"Playlist.Position\", \"required\": true }"
1217       "],"
1218       "\"returns\": \"string\""
1219     "}",
1220     "\"Player.Shuffle\": {"
1221       "\"type\": \"method\","
1222       "\"description\": \"Shuffle items in the player\","
1223       "\"transport\": \"Response\","
1224       "\"permission\": \"ControlPlayback\","
1225       "\"params\": ["
1226         "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true }"
1227       "],"
1228       "\"returns\": \"string\""
1229     "}",
1230     "\"Player.UnShuffle\": {"
1231       "\"type\": \"method\","
1232       "\"description\": \"Unshuffle items in the player\","
1233       "\"transport\": \"Response\","
1234       "\"permission\": \"ControlPlayback\","
1235       "\"params\": ["
1236         "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true }"
1237       "],"
1238       "\"returns\": \"string\""
1239     "}",
1240     "\"Player.Repeat\": {"
1241       "\"type\": \"method\","
1242       "\"description\": \"Set the repeat mode of the player\","
1243       "\"transport\": \"Response\","
1244       "\"permission\": \"ControlPlayback\","
1245       "\"params\": ["
1246         "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true },"
1247         "{ \"name\": \"state\", \"$ref\": \"Player.Repeat\", \"required\": true }"
1248       "],"
1249       "\"returns\": \"string\""
1250     "}",
1251     "\"Player.SetAudioStream\": {"
1252       "\"type\": \"method\","
1253       "\"description\": \"Set the audio stream played by the player\","
1254       "\"transport\": \"Response\","
1255       "\"permission\": \"ControlPlayback\","
1256       "\"params\": ["
1257         "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true },"
1258         "{ \"name\": \"stream\", \"required\": true, \"type\": ["
1259             "{ \"type\": \"string\", \"enum\": [ \"previous\", \"next\" ] },"
1260             "{ \"type\": \"integer\", \"minimum\": 0, \"description\": \"Index of the audio stream to play\" }"
1261           "]"
1262         "}"
1263       "],"
1264       "\"returns\": \"string\""
1265     "}",
1266     "\"Player.SetSubtitle\": {"
1267       "\"type\": \"method\","
1268       "\"description\": \"Set the subtitle displayed by the player\","
1269       "\"transport\": \"Response\","
1270       "\"permission\": \"ControlPlayback\","
1271       "\"params\": ["
1272         "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true },"
1273         "{ \"name\": \"subtitle\", \"required\": true, \"type\": ["
1274             "{ \"type\": \"string\", \"enum\": [ \"previous\", \"next\", \"off\", \"on\" ] },"
1275             "{ \"type\": \"integer\", \"minimum\": 0, \"description\": \"Index of the subtitle to display\" }"
1276           "]"
1277         "},"
1278         "{ \"name\": \"enable\", \"type\": \"boolean\", \"default\": false, \"description\": \"Whether to enable subtitles to be displayed after setting the new subtitle\" }"
1279       "],"
1280       "\"returns\": \"string\""
1281     "}",
1282     "\"Playlist.GetPlaylists\": {"
1283       "\"type\": \"method\","
1284       "\"description\": \"Returns all existing playlists\","
1285       "\"transport\": \"Response\","
1286       "\"permission\": \"ReadData\","
1287       "\"params\": [],"
1288       "\"returns\": {"
1289         "\"type\": \"array\","
1290         "\"uniqueItems\": true,"
1291         "\"items\": {"
1292           "\"type\": \"object\","
1293           "\"properties\": {"
1294             "\"playlistid\": { \"$ref\": \"Playlist.Id\", \"required\": true },"
1295             "\"type\": { \"$ref\": \"Playlist.Type\", \"required\": true }"
1296           "}"
1297         "}"
1298       "}"
1299     "}",
1300     "\"Playlist.GetProperties\": {"
1301       "\"type\": \"method\","
1302       "\"description\": \"Retrieves the values of the given properties\","
1303       "\"transport\": \"Response\","
1304       "\"permission\": \"ReadData\","
1305       "\"params\": ["
1306         "{ \"name\": \"playlistid\", \"$ref\": \"Playlist.Id\", \"required\": true },"
1307         "{ \"name\": \"properties\", \"type\": \"array\", \"uniqueItems\": true, \"required\": true, \"items\": { \"$ref\": \"Playlist.Property.Name\" } }"
1308       "],"
1309       "\"returns\":  { \"$ref\": \"Playlist.Property.Value\", \"required\": true }"
1310     "}",
1311     "\"Playlist.GetItems\": {"
1312       "\"type\": \"method\","
1313       "\"description\": \"Get all items from playlist\","
1314       "\"transport\": \"Response\","
1315       "\"permission\": \"ReadData\","
1316       "\"params\": ["
1317         "{ \"name\": \"playlistid\", \"$ref\": \"Playlist.Id\", \"required\": true },"
1318         "{ \"name\": \"properties\", \"$ref\": \"List.Fields.All\" },"
1319         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
1320         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" }"
1321       "],"
1322       "\"returns\": { \"type\": \"object\","
1323         "\"properties\": {"
1324           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
1325           "\"items\": { \"type\": \"array\", \"items\": { \"$ref\": \"List.Item.All\" }, \"required\": true }"
1326         "}"
1327       "}"
1328     "}",
1329     "\"Playlist.Add\": {"
1330       "\"type\": \"method\","
1331       "\"description\": \"Add item(s) to playlist\","
1332       "\"transport\": \"Response\","
1333       "\"permission\": \"ControlPlayback\","
1334       "\"params\": ["
1335         "{ \"name\": \"playlistid\", \"$ref\": \"Playlist.Id\", \"required\": true },"
1336         "{ \"name\": \"item\", \"$ref\": \"Playlist.Item\", \"required\": true }"
1337       "],"
1338       "\"returns\": \"string\""
1339     "}",
1340     "\"Playlist.Insert\": {"
1341       "\"type\": \"method\","
1342       "\"description\": \"Insert item(s) into playlist. Does not work for picture playlists (aka slideshows).\","
1343       "\"transport\": \"Response\","
1344       "\"permission\": \"ControlPlayback\","
1345       "\"params\": ["
1346         "{ \"name\": \"playlistid\", \"$ref\": \"Playlist.Id\", \"required\": true },"
1347         "{ \"name\": \"position\", \"$ref\": \"Playlist.Position\", \"required\": true },"
1348         "{ \"name\": \"item\", \"$ref\": \"Playlist.Item\", \"required\": true }"
1349       "],"
1350       "\"returns\": \"string\""
1351     "}",
1352     "\"Playlist.Remove\": {"
1353       "\"type\": \"method\","
1354       "\"description\": \"Remove item from playlist. Does not work for picture playlists (aka slideshows).\","
1355       "\"transport\": \"Response\","
1356       "\"permission\": \"ControlPlayback\","
1357       "\"params\": ["
1358         "{ \"name\": \"playlistid\", \"$ref\": \"Playlist.Id\", \"required\": true },"
1359         "{ \"name\": \"position\", \"$ref\": \"Playlist.Position\", \"required\": true }"
1360       "],"
1361       "\"returns\": \"string\""
1362     "}",
1363     "\"Playlist.Clear\": {"
1364       "\"type\": \"method\","
1365       "\"description\": \"Clear playlist\","
1366       "\"transport\": \"Response\","
1367       "\"permission\": \"ControlPlayback\","
1368       "\"params\": ["
1369         "{ \"name\": \"playlistid\", \"$ref\": \"Playlist.Id\", \"required\": true }"
1370       "],"
1371       "\"returns\": \"string\""
1372     "}",
1373     "\"Playlist.Swap\": {"
1374       "\"type\": \"method\","
1375       "\"description\": \"Swap items in the playlist. Does not work for picture playlists (aka slideshows).\","
1376       "\"transport\": \"Response\","
1377       "\"permission\": \"ControlPlayback\","
1378       "\"params\": ["
1379         "{ \"name\": \"playlistid\", \"$ref\": \"Playlist.Id\", \"required\": true },"
1380         "{ \"name\": \"position1\", \"$ref\": \"Playlist.Position\", \"required\": true },"
1381         "{ \"name\": \"position2\", \"$ref\": \"Playlist.Position\", \"required\": true }"
1382       "],"
1383       "\"returns\": \"string\""
1384     "}",
1385     "\"Files.GetSources\": {"
1386       "\"type\": \"method\","
1387       "\"description\": \"Get the sources of the media windows\","
1388       "\"transport\": \"Response\","
1389       "\"permission\": \"ReadData\","
1390       "\"params\": ["
1391         "{ \"name\": \"media\", \"$ref\": \"Files.Media\", \"required\": true },"
1392         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
1393         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" }"
1394       "],"
1395       "\"returns\": {"
1396         "\"type\": \"object\","
1397         "\"properties\": {"
1398           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
1399           "\"sources\": { \"$ref\": \"List.Items.Sources\", \"required\": true }"
1400         "}"
1401       "}"
1402     "}",
1403     "\"Files.PrepareDownload\": {"
1404       "\"type\": \"method\","
1405       "\"description\": \"Provides a way to download a given file (e.g. providing an URL to the real file location)\","
1406       "\"transport\": [ \"Response\", \"FileDownloadRedirect\" ],"
1407       "\"permission\": \"ReadData\","
1408       "\"params\": ["
1409         "{ \"name\": \"path\", \"type\": \"string\", \"required\": true }"
1410       "],"
1411       "\"returns\": {"
1412         "\"type\": \"object\","
1413         "\"properties\": {"
1414           "\"protocol\": { \"type\": \"string\", \"enum\": [ \"http\" ], \"required\": true },"
1415           "\"details\": { \"type\": \"any\", \"required\": true, \"description\": \"Transport specific details on how/from where to download the given file\" },"
1416           "\"mode\": { \"type\": \"string\", \"enum\": [ \"redirect\", \"direct\" ], \"required\": true, \"description\": \"Direct mode allows using Files.Download whereas redirect mode requires the usage of a different protocol\" }"
1417         "}"
1418       "}"
1419     "}",
1420     "\"Files.Download\": {"
1421       "\"type\": \"method\","
1422       "\"description\": \"Downloads the given file\","
1423       "\"transport\": [ \"Response\", \"FileDownloadDirect\" ],"
1424       "\"permission\": \"ReadData\","
1425       "\"params\": ["
1426         "{ \"name\": \"path\", \"type\": \"string\", \"required\": true }"
1427       "],"
1428       "\"returns\": { \"type\": \"any\", \"required\": true }"
1429     "}",
1430     "\"Files.GetDirectory\": {"
1431       "\"type\": \"method\","
1432       "\"description\": \"Get the directories and files in the given directory\","
1433       "\"transport\": \"Response\","
1434       "\"permission\": \"ReadData\","
1435       "\"params\": ["
1436         "{ \"name\": \"directory\", \"type\": \"string\", \"required\": true },"
1437         "{ \"name\": \"media\", \"$ref\": \"Files.Media\", \"default\": \"files\" },"
1438         "{ \"name\": \"properties\", \"$ref\": \"List.Fields.Files\" },"
1439         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" }"
1440       "],"
1441       "\"returns\": {"
1442         "\"type\": \"object\","
1443         "\"properties\": {"
1444           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
1445           "\"files\": { \"type\": \"array\", \"items\": { \"$ref\": \"List.Item.File\" }, \"required\": true }"
1446         "}"
1447       "}"
1448     "}",
1449     "\"AudioLibrary.GetArtists\": {"
1450       "\"type\": \"method\","
1451       "\"description\": \"Retrieve all artists\","
1452       "\"transport\": \"Response\","
1453       "\"permission\": \"ReadData\","
1454       "\"params\": ["
1455         "{ \"name\": \"albumartistsonly\", \"$ref\": \"Optional.Boolean\", \"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\" },"
1456         "{ \"name\": \"genreid\", \"$ref\": \"Library.Id\" },"
1457         "{ \"name\": \"properties\", \"$ref\": \"Audio.Fields.Artist\" },"
1458         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
1459         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" }"
1460       "],"
1461       "\"returns\": {"
1462         "\"type\": \"object\","
1463         "\"properties\": {"
1464           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
1465           "\"artists\": { \"type\": \"array\","
1466             "\"items\": { \"$ref\": \"Audio.Details.Artist\" }"
1467           "}"
1468         "}"
1469       "}"
1470     "}",
1471     "\"AudioLibrary.GetArtistDetails\": {"
1472       "\"type\": \"method\","
1473       "\"description\": \"Retrieve details about a specific artist\","
1474       "\"transport\": \"Response\","
1475       "\"permission\": \"ReadData\","
1476       "\"params\": ["
1477         "{ \"name\": \"artistid\", \"$ref\": \"Library.Id\", \"required\": true },"
1478         "{ \"name\": \"properties\", \"$ref\": \"Audio.Fields.Artist\" }"
1479       "],"
1480       "\"returns\": { \"type\": \"object\","
1481         "\"properties\": {"
1482           "\"artistdetails\": { \"$ref\": \"Audio.Details.Artist\" }"
1483         "}"
1484       "}"
1485     "}",
1486     "\"AudioLibrary.GetAlbums\": {"
1487       "\"type\": \"method\","
1488       "\"description\": \"Retrieve all albums from specified artist or genre\","
1489       "\"transport\": \"Response\","
1490       "\"permission\": \"ReadData\","
1491       "\"params\": ["
1492         "{ \"name\": \"artistid\", \"$ref\": \"Library.Id\" },"
1493         "{ \"name\": \"genreid\", \"$ref\": \"Library.Id\" },"
1494         "{ \"name\": \"properties\", \"$ref\": \"Audio.Fields.Album\" },"
1495         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
1496         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" }"
1497       "],"
1498       "\"returns\": {"
1499         "\"type\": \"object\","
1500         "\"properties\": {"
1501           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
1502           "\"albums\": { \"type\": \"array\","
1503             "\"items\": { \"$ref\": \"Audio.Details.Album\" }"
1504           "}"
1505         "}"
1506       "}"
1507     "}",
1508     "\"AudioLibrary.GetAlbumDetails\": {"
1509       "\"type\": \"method\","
1510       "\"description\": \"Retrieve details about a specific album\","
1511       "\"transport\": \"Response\","
1512       "\"permission\": \"ReadData\","
1513       "\"params\": ["
1514         "{ \"name\": \"albumid\", \"$ref\": \"Library.Id\", \"required\": true },"
1515         "{ \"name\": \"properties\", \"$ref\": \"Audio.Fields.Album\" }"
1516       "],"
1517       "\"returns\": { \"type\": \"object\","
1518         "\"properties\": {"
1519           "\"albumdetails\": { \"$ref\": \"Audio.Details.Album\" }"
1520         "}"
1521       "}"
1522     "}",
1523     "\"AudioLibrary.GetSongs\": {"
1524       "\"type\": \"method\","
1525       "\"description\": \"Retrieve all songs from specified album, artist or genre\","
1526       "\"transport\": \"Response\","
1527       "\"permission\": \"ReadData\","
1528       "\"params\": ["
1529         "{ \"name\": \"artistid\", \"$ref\": \"Library.Id\" },"
1530         "{ \"name\": \"albumid\", \"$ref\": \"Library.Id\" },"
1531         "{ \"name\": \"genreid\", \"$ref\": \"Library.Id\" },"
1532         "{ \"name\": \"properties\", \"$ref\": \"Audio.Fields.Song\" },"
1533         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
1534         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" }"
1535       "],"
1536       "\"returns\": {"
1537         "\"type\": \"object\","
1538         "\"properties\": {"
1539           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
1540           "\"songs\": { \"type\": \"array\","
1541             "\"items\": { \"$ref\": \"Audio.Details.Song\" }"
1542           "}"
1543         "}"
1544       "}"
1545     "}",
1546     "\"AudioLibrary.GetSongDetails\": {"
1547       "\"type\": \"method\","
1548       "\"description\": \"Retrieve details about a specific song\","
1549       "\"transport\": \"Response\","
1550       "\"permission\": \"ReadData\","
1551       "\"params\": ["
1552         "{ \"name\": \"songid\", \"$ref\": \"Library.Id\", \"required\": true },"
1553         "{ \"name\": \"properties\", \"$ref\": \"Audio.Fields.Song\" }"
1554       "],"
1555       "\"returns\": { \"type\": \"object\","
1556         "\"properties\": {"
1557           "\"songdetails\": { \"$ref\": \"Audio.Details.Song\" }"
1558         "}"
1559       "}"
1560     "}",
1561     "\"AudioLibrary.GetRecentlyAddedAlbums\": {"
1562       "\"type\": \"method\","
1563       "\"description\": \"Retrieve recently added albums\","
1564       "\"transport\": \"Response\","
1565       "\"permission\": \"ReadData\","
1566       "\"params\": ["
1567         "{ \"name\": \"properties\", \"$ref\": \"Audio.Fields.Album\" },"
1568         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
1569         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" }"
1570       "],"
1571       "\"returns\": {"
1572         "\"type\": \"object\","
1573         "\"properties\": {"
1574           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
1575           "\"albums\": { \"type\": \"array\","
1576             "\"items\": { \"$ref\": \"Audio.Details.Album\" }"
1577           "}"
1578         "}"
1579       "}"
1580     "}",
1581     "\"AudioLibrary.GetRecentlyAddedSongs\": {"
1582       "\"type\": \"method\","
1583       "\"description\": \"Retrieve recently added songs\","
1584       "\"transport\": \"Response\","
1585       "\"permission\": \"ReadData\","
1586       "\"params\": ["
1587         "{ \"name\": \"albumlimit\", \"$ref\": \"List.Amount\", \"description\": \"The amount of recently added albums from which to return the songs\" },"
1588         "{ \"name\": \"properties\", \"$ref\": \"Audio.Fields.Song\" },"
1589         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
1590         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" }"
1591       "],"
1592       "\"returns\": {"
1593         "\"type\": \"object\","
1594         "\"properties\": {"
1595           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
1596           "\"songs\": { \"type\": \"array\","
1597             "\"items\": { \"$ref\": \"Audio.Details.Song\" }"
1598           "}"
1599         "}"
1600       "}"
1601     "}",
1602       "\"AudioLibrary.GetRecentlyPlayedAlbums\": {"
1603       "\"type\": \"method\","
1604       "\"description\": \"Retrieve recently played albums\","
1605       "\"transport\": \"Response\","
1606       "\"permission\": \"ReadData\","
1607       "\"params\": ["
1608         "{ \"name\": \"properties\", \"$ref\": \"Audio.Fields.Album\" },"
1609         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
1610         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" }"
1611       "],"
1612       "\"returns\": {"
1613         "\"type\": \"object\","
1614         "\"properties\": {"
1615           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
1616           "\"albums\": { \"type\": \"array\","
1617             "\"items\": { \"$ref\": \"Audio.Details.Album\" }"
1618           "}"
1619         "}"
1620       "}"
1621     "}",
1622     "\"AudioLibrary.GetRecentlyPlayedSongs\": {"
1623       "\"type\": \"method\","
1624       "\"description\": \"Retrieve recently played songs\","
1625       "\"transport\": \"Response\","
1626       "\"permission\": \"ReadData\","
1627       "\"params\": ["
1628         "{ \"name\": \"properties\", \"$ref\": \"Audio.Fields.Song\" },"
1629         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
1630         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" }"
1631       "],"
1632       "\"returns\": {"
1633         "\"type\": \"object\","
1634         "\"properties\": {"
1635           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
1636           "\"songs\": { \"type\": \"array\","
1637             "\"items\": { \"$ref\": \"Audio.Details.Song\" }"
1638           "}"
1639         "}"
1640       "}"
1641     "}",
1642     "\"AudioLibrary.GetGenres\": {"
1643       "\"type\": \"method\","
1644       "\"description\": \"Retrieve all genres\","
1645       "\"transport\": \"Response\","
1646       "\"permission\": \"ReadData\","
1647       "\"params\": ["
1648         "{ \"name\": \"properties\", \"$ref\": \"Library.Fields.Genre\" },"
1649         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
1650         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" }"
1651       "],"
1652       "\"returns\": {"
1653         "\"type\": \"object\","
1654         "\"properties\": {"
1655           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
1656           "\"genres\": { \"type\": \"array\", \"required\": true,"
1657             "\"items\": { \"$ref\": \"Library.Details.Genre\" }"
1658           "}"
1659         "}"
1660       "}"
1661     "}",
1662     "\"AudioLibrary.SetArtistDetails\": {"
1663       "\"type\": \"method\","
1664       "\"description\": \"Update the given artist with the given details\","
1665       "\"transport\": \"Response\","
1666       "\"permission\": \"UpdateData\","
1667       "\"params\": ["
1668         "{ \"name\": \"artistid\", \"$ref\": \"Library.Id\", \"required\": true },"
1669         "{ \"name\": \"artist\", \"$ref\": \"Optional.String\" },"
1670         "{ \"name\": \"instrument\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
1671         "{ \"name\": \"style\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
1672         "{ \"name\": \"mood\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
1673         "{ \"name\": \"born\", \"$ref\": \"Optional.String\" },"
1674         "{ \"name\": \"formed\", \"$ref\": \"Optional.String\" },"
1675         "{ \"name\": \"description\", \"$ref\": \"Optional.String\" },"
1676         "{ \"name\": \"genre\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
1677         "{ \"name\": \"died\", \"$ref\": \"Optional.String\" },"
1678         "{ \"name\": \"disbanded\", \"$ref\": \"Optional.String\" },"
1679         "{ \"name\": \"yearsactive\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null }"
1680       "],"
1681       "\"returns\": \"string\""
1682     "}",
1683     "\"AudioLibrary.SetAlbumDetails\": {"
1684       "\"type\": \"method\","
1685       "\"description\": \"Update the given album with the given details\","
1686       "\"transport\": \"Response\","
1687       "\"permission\": \"UpdateData\","
1688       "\"params\": ["
1689         "{ \"name\": \"albumid\", \"$ref\": \"Library.Id\", \"required\": true },"
1690         "{ \"name\": \"title\", \"$ref\": \"Optional.String\" },"
1691         "{ \"name\": \"artist\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
1692         "{ \"name\": \"description\", \"$ref\": \"Optional.String\" },"
1693         "{ \"name\": \"genre\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
1694         "{ \"name\": \"theme\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
1695         "{ \"name\": \"mood\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
1696         "{ \"name\": \"style\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
1697         "{ \"name\": \"type\", \"$ref\": \"Optional.String\" },"
1698         "{ \"name\": \"albumlabel\", \"$ref\": \"Optional.String\" },"
1699         "{ \"name\": \"rating\", \"$ref\": \"Optional.Integer\" },"
1700         "{ \"name\": \"year\", \"$ref\": \"Optional.Integer\" }"
1701       "],"
1702       "\"returns\": \"string\""
1703     "}",
1704     "\"AudioLibrary.SetSongDetails\": {"
1705       "\"type\": \"method\","
1706       "\"description\": \"Update the given song with the given details\","
1707       "\"transport\": \"Response\","
1708       "\"permission\": \"UpdateData\","
1709       "\"params\": ["
1710         "{ \"name\": \"songid\", \"$ref\": \"Library.Id\", \"required\": true },"
1711         "{ \"name\": \"title\", \"$ref\": \"Optional.String\" },"
1712         "{ \"name\": \"artist\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
1713         "{ \"name\": \"albumartist\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
1714         "{ \"name\": \"genre\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
1715         "{ \"name\": \"year\", \"$ref\": \"Optional.Integer\" },"
1716         "{ \"name\": \"rating\", \"$ref\": \"Optional.Integer\" },"
1717         "{ \"name\": \"album\", \"$ref\": \"Optional.String\" },"
1718         "{ \"name\": \"track\", \"$ref\": \"Optional.Integer\" },"
1719         "{ \"name\": \"disc\", \"$ref\": \"Optional.Integer\" },"
1720         "{ \"name\": \"duration\", \"$ref\": \"Optional.Integer\" },"
1721         "{ \"name\": \"comment\", \"$ref\": \"Optional.String\" },"
1722         "{ \"name\": \"musicbrainztrackid\", \"$ref\": \"Optional.String\" },"
1723         "{ \"name\": \"musicbrainzartistid\", \"$ref\": \"Optional.String\" },"
1724         "{ \"name\": \"musicbrainzalbumid\", \"$ref\": \"Optional.String\" },"
1725         "{ \"name\": \"musicbrainzalbumartistid\", \"$ref\": \"Optional.String\" }"
1726       "],"
1727       "\"returns\": \"string\""
1728     "}",
1729     "\"AudioLibrary.Scan\": {"
1730       "\"type\": \"method\","
1731       "\"description\": \"Scans the audio sources for new library items\","
1732       "\"transport\": \"Response\","
1733       "\"permission\": \"UpdateData\","
1734       "\"params\": ["
1735         "{ \"name\": \"directory\", \"type\": \"string\", \"default\": \"\" }"
1736       "],"
1737       "\"returns\": \"string\""
1738     "}",
1739     "\"AudioLibrary.Export\": {"
1740       "\"type\": \"method\","
1741       "\"description\": \"Exports all items from the audio library\","
1742       "\"transport\": \"Response\","
1743       "\"permission\": \"WriteFile\","
1744       "\"params\": ["
1745         "{ \"name\": \"options\", \"type\": ["
1746             "{ \"type\": \"object\", \"required\": true, \"additionalProperties\": false,"
1747               "\"properties\": {"
1748                 "\"path\": { \"type\": \"string\", \"required\": true, \"minLength\": 1, \"description\": \"Path to the directory to where the data should be exported\" }"
1749               "}"
1750             "},"
1751             "{ \"type\": \"object\", \"required\": true, \"additionalProperties\": false,"
1752               "\"properties\": {"
1753                 "\"overwrite\": { \"type\": \"boolean\", \"default\": false, \"description\": \"Whether to overwrite existing exported files\" },"
1754                 "\"images\": { \"type\": \"boolean\", \"default\": false, \"description\": \"Whether to export thumbnails and fanart images\" }"
1755               "}"
1756             "}"
1757           "]"
1758         "}"
1759       "],"
1760       "\"returns\": \"string\""
1761     "}",
1762     "\"AudioLibrary.Clean\": {"
1763       "\"type\": \"method\","
1764       "\"description\": \"Cleans the audio library from non-existent items\","
1765       "\"transport\": \"Response\","
1766       "\"permission\": \"RemoveData\","
1767       "\"params\": [ ],"
1768       "\"returns\": \"string\""
1769     "}",
1770     "\"VideoLibrary.GetMovies\": {"
1771       "\"type\": \"method\","
1772       "\"description\": \"Retrieve all movies\","
1773       "\"transport\": \"Response\","
1774       "\"permission\": \"ReadData\","
1775       "\"params\": ["
1776         "{ \"name\": \"properties\", \"$ref\": \"Video.Fields.Movie\" },"
1777         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
1778         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" }"
1779       "],"
1780       "\"returns\": {"
1781         "\"type\": \"object\","
1782         "\"properties\": {"
1783           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
1784           "\"movies\": { \"type\": \"array\","
1785             "\"items\": { \"$ref\": \"Video.Details.Movie\" }"
1786           "}"
1787         "}"
1788       "}"
1789     "}",
1790     "\"VideoLibrary.GetMovieDetails\": {"
1791       "\"type\": \"method\","
1792       "\"description\": \"Retrieve details about a specific movie\","
1793       "\"transport\": \"Response\","
1794       "\"permission\": \"ReadData\","
1795       "\"params\": ["
1796         "{ \"name\": \"movieid\", \"$ref\": \"Library.Id\", \"required\": true },"
1797         "{ \"name\": \"properties\", \"$ref\": \"Video.Fields.Movie\" }"
1798       "],"
1799       "\"returns\": { \"type\": \"object\","
1800         "\"properties\": {"
1801           "\"moviedetails\": { \"$ref\": \"Video.Details.Movie\" }"
1802         "}"
1803       "}"
1804     "}",
1805     "\"VideoLibrary.GetMovieSets\": {"
1806       "\"type\": \"method\","
1807       "\"description\": \"Retrieve all movie sets\","
1808       "\"transport\": \"Response\","
1809       "\"permission\": \"ReadData\","
1810       "\"params\": ["
1811         "{ \"name\": \"properties\", \"$ref\": \"Video.Fields.MovieSet\" },"
1812         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
1813         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" }"
1814       "],"
1815       "\"returns\": { \"type\": \"object\","
1816         "\"properties\": {"
1817           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
1818           "\"sets\": { \"type\": \"array\","
1819             "\"items\": { \"$ref\": \"Video.Details.MovieSet\" }"
1820           "}"
1821         "}"
1822       "}"
1823     "}",
1824     "\"VideoLibrary.GetMovieSetDetails\": {"
1825       "\"type\": \"method\","
1826       "\"description\": \"Retrieve details about a specific movie set\","
1827       "\"transport\": \"Response\","
1828       "\"permission\": \"ReadData\","
1829       "\"params\": ["
1830         "{ \"name\": \"setid\", \"$ref\": \"Library.Id\", \"required\": true },"
1831         "{ \"name\": \"properties\", \"$ref\": \"Video.Fields.MovieSet\" },"
1832         "{ \"name\": \"movies\", \"type\": \"object\","
1833           "\"properties\": {"
1834             "\"properties\": { \"$ref\": \"Video.Fields.Movie\" },"
1835             "\"limits\": { \"$ref\": \"List.Limits\" },"
1836             "\"sort\": { \"$ref\": \"List.Sort\" }"
1837           "}"
1838         "}"
1839       "],"
1840       "\"returns\": { \"type\": \"object\","
1841         "\"properties\": {"
1842           "\"setdetails\": { \"$ref\": \"Video.Details.MovieSet.Extended\" }"
1843         "}"
1844       "}"
1845     "}",
1846     "\"VideoLibrary.GetTVShows\": {"
1847       "\"type\": \"method\","
1848       "\"description\": \"Retrieve all tv shows\","
1849       "\"transport\": \"Response\","
1850       "\"permission\": \"ReadData\","
1851       "\"params\": ["
1852         "{ \"name\": \"properties\", \"$ref\": \"Video.Fields.TVShow\" },"
1853         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
1854         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" }"
1855       "],"
1856       "\"returns\": { \"type\": \"object\","
1857         "\"properties\": {"
1858           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
1859           "\"tvshows\": { \"type\": \"array\","
1860             "\"items\": { \"$ref\": \"Video.Details.TVShow\" }"
1861           "}"
1862         "}"
1863       "}"
1864     "}",
1865     "\"VideoLibrary.GetTVShowDetails\": {"
1866       "\"type\": \"method\","
1867       "\"description\": \"Retrieve details about a specific tv show\","
1868       "\"transport\": \"Response\","
1869       "\"permission\": \"ReadData\","
1870       "\"params\": ["
1871         "{ \"name\": \"tvshowid\", \"$ref\": \"Library.Id\", \"required\": true },"
1872         "{ \"name\": \"properties\", \"$ref\": \"Video.Fields.TVShow\" }"
1873       "],"
1874       "\"returns\": { \"type\": \"object\","
1875         "\"properties\": {"
1876           "\"tvshowdetails\": { \"$ref\": \"Video.Details.TVShow\" }"
1877         "}"
1878       "}"
1879     "}",
1880     "\"VideoLibrary.GetSeasons\": {"
1881       "\"type\": \"method\","
1882       "\"description\": \"Retrieve all tv seasons\","
1883       "\"transport\": \"Response\","
1884       "\"permission\": \"ReadData\","
1885       "\"params\": ["
1886         "{ \"name\": \"tvshowid\", \"$ref\": \"Library.Id\", \"required\": true },"
1887         "{ \"name\": \"properties\", \"$ref\": \"Video.Fields.Season\" },"
1888         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
1889         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" }"
1890       "],"
1891       "\"returns\": { \"type\": \"object\","
1892         "\"properties\": {"
1893           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
1894           "\"seasons\": { \"type\": \"array\","
1895             "\"items\": { \"$ref\": \"Video.Details.Season\" }"
1896           "}"
1897         "}"
1898       "}"
1899     "}",
1900     "\"VideoLibrary.GetEpisodes\": {"
1901       "\"type\": \"method\","
1902       "\"description\": \"Retrieve all tv show episodes\","
1903       "\"transport\": \"Response\","
1904       "\"permission\": \"ReadData\","
1905       "\"params\": ["
1906         "{ \"name\": \"tvshowid\", \"$ref\": \"Library.Id\" },"
1907         "{ \"name\": \"season\", \"type\": \"integer\", \"minimum\": 0, \"default\": -1 },"
1908         "{ \"name\": \"properties\", \"$ref\": \"Video.Fields.Episode\" },"
1909         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
1910         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" }"
1911       "],"
1912       "\"returns\": { \"type\": \"object\","
1913         "\"properties\": {"
1914           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
1915           "\"episodes\": { \"type\": \"array\","
1916             "\"items\": { \"$ref\": \"Video.Details.Episode\" }"
1917           "}"
1918         "}"
1919       "}"
1920     "}",
1921     "\"VideoLibrary.GetEpisodeDetails\": {"
1922       "\"type\": \"method\","
1923       "\"description\": \"Retrieve details about a specific tv show episode\","
1924       "\"transport\": \"Response\","
1925       "\"permission\": \"ReadData\","
1926       "\"params\": ["
1927         "{ \"name\": \"episodeid\", \"$ref\": \"Library.Id\", \"required\": true },"
1928         "{ \"name\": \"properties\", \"$ref\": \"Video.Fields.Episode\" }"
1929       "],"
1930       "\"returns\": { \"type\": \"object\","
1931         "\"properties\": {"
1932           "\"episodedetails\": { \"$ref\": \"Video.Details.Episode\" }"
1933         "}"
1934       "}"
1935     "}",
1936     "\"VideoLibrary.GetMusicVideos\": {"
1937       "\"type\": \"method\","
1938       "\"description\": \"Retrieve all music videos\","
1939       "\"transport\": \"Response\","
1940       "\"permission\": \"ReadData\","
1941       "\"params\": ["
1942         "{ \"name\": \"artistid\", \"$ref\": \"Library.Id\" },"
1943         "{ \"name\": \"albumid\", \"$ref\": \"Library.Id\" },"
1944         "{ \"name\": \"properties\", \"$ref\": \"Video.Fields.MusicVideo\" },"
1945         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
1946         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" }"
1947       "],"
1948       "\"returns\": { \"type\": \"object\","
1949         "\"properties\": {"
1950           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
1951           "\"musicvideos\": { \"type\": \"array\","
1952             "\"items\": { \"$ref\": \"Video.Details.MusicVideo\" }"
1953           "}"
1954         "}"
1955       "}"
1956     "}",
1957     "\"VideoLibrary.GetMusicVideoDetails\": {"
1958       "\"type\": \"method\","
1959       "\"description\": \"Retrieve details about a specific music video\","
1960       "\"transport\": \"Response\","
1961       "\"permission\": \"ReadData\","
1962       "\"params\": ["
1963         "{ \"name\": \"musicvideoid\", \"$ref\": \"Library.Id\", \"required\": true },"
1964         "{ \"name\": \"properties\", \"$ref\": \"Video.Fields.MusicVideo\" }"
1965       "],"
1966       "\"returns\": { \"type\": \"object\","
1967         "\"properties\": {"
1968           "\"musicvideodetails\": { \"$ref\": \"Video.Details.MusicVideo\" }"
1969         "}"
1970       "}"
1971     "}",
1972     "\"VideoLibrary.GetRecentlyAddedMovies\": {"
1973       "\"type\": \"method\","
1974       "\"description\": \"Retrieve all recently added movies\","
1975       "\"transport\": \"Response\","
1976       "\"permission\": \"ReadData\","
1977       "\"params\": ["
1978         "{ \"name\": \"properties\", \"$ref\": \"Video.Fields.Movie\" },"
1979         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
1980         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" }"
1981       "],"
1982       "\"returns\": { \"type\": \"object\","
1983         "\"properties\": {"
1984           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
1985           "\"movies\": { \"type\": \"array\","
1986             "\"items\": { \"$ref\": \"Video.Details.Movie\" }"
1987           "}"
1988         "}"
1989       "}"
1990     "}",
1991     "\"VideoLibrary.GetRecentlyAddedEpisodes\": {"
1992       "\"type\": \"method\","
1993       "\"description\": \"Retrieve all recently added tv episodes\","
1994       "\"transport\": \"Response\","
1995       "\"permission\": \"ReadData\","
1996       "\"params\": ["
1997         "{ \"name\": \"properties\", \"$ref\": \"Video.Fields.Episode\" },"
1998         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
1999         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" }"
2000       "],"
2001       "\"returns\": { \"type\": \"object\","
2002         "\"properties\": {"
2003           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
2004           "\"episodes\": { \"type\": \"array\","
2005             "\"items\": { \"$ref\": \"Video.Details.Episode\" }"
2006           "}"
2007         "}"
2008       "}"
2009     "}",
2010     "\"VideoLibrary.GetRecentlyAddedMusicVideos\": {"
2011       "\"type\": \"method\","
2012       "\"description\": \"Retrieve all recently added music videos\","
2013       "\"transport\": \"Response\","
2014       "\"permission\": \"ReadData\","
2015       "\"params\": ["
2016         "{ \"name\": \"properties\", \"$ref\": \"Video.Fields.MusicVideo\" },"
2017         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
2018         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" }"
2019       "],"
2020       "\"returns\": { \"type\": \"object\","
2021         "\"properties\": {"
2022           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
2023           "\"musicvideos\": { \"type\": \"array\","
2024             "\"items\": { \"$ref\": \"Video.Details.MusicVideo\" }"
2025           "}"
2026         "}"
2027       "}"
2028     "}",
2029     "\"VideoLibrary.GetGenres\": {"
2030       "\"type\": \"method\","
2031       "\"description\": \"Retrieve all genres\","
2032       "\"transport\": \"Response\","
2033       "\"permission\": \"ReadData\","
2034       "\"params\": ["
2035         "{ \"name\": \"type\", \"type\": \"string\", \"required\": true, \"enum\": [ \"movie\", \"tvshow\", \"musicvideo\"] },"
2036         "{ \"name\": \"properties\", \"$ref\": \"Library.Fields.Genre\" },"
2037         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
2038         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" }"
2039       "],"
2040       "\"returns\": {"
2041         "\"type\": \"object\","
2042         "\"properties\": {"
2043           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
2044           "\"genres\": { \"type\": \"array\", \"required\": true,"
2045             "\"items\": { \"$ref\": \"Library.Details.Genre\" }"
2046           "}"
2047         "}"
2048       "}"
2049     "}",
2050     "\"VideoLibrary.SetMovieDetails\": {"
2051       "\"type\": \"method\","
2052       "\"description\": \"Update the given movie with the given details\","
2053       "\"transport\": \"Response\","
2054       "\"permission\": \"UpdateData\","
2055       "\"params\": ["
2056         "{ \"name\": \"movieid\", \"$ref\": \"Library.Id\", \"required\": true },"
2057         "{ \"name\": \"title\", \"$ref\": \"Optional.String\" },"
2058         "{ \"name\": \"playcount\", \"$ref\": \"Optional.Integer\" },"
2059         "{ \"name\": \"runtime\", \"$ref\": \"Optional.String\" },"
2060         "{ \"name\": \"director\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
2061         "{ \"name\": \"studio\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
2062         "{ \"name\": \"year\", \"$ref\": \"Optional.Integer\" },"
2063         "{ \"name\": \"plot\", \"$ref\": \"Optional.String\" },"
2064         "{ \"name\": \"genre\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
2065         "{ \"name\": \"rating\", \"$ref\": \"Optional.Number\" },"
2066         "{ \"name\": \"mpaa\", \"$ref\": \"Optional.String\" },"
2067         "{ \"name\": \"imdbnumber\", \"$ref\": \"Optional.String\" },"
2068         "{ \"name\": \"votes\", \"$ref\": \"Optional.String\" },"
2069         "{ \"name\": \"lastplayed\", \"$ref\": \"Optional.String\" },"
2070         "{ \"name\": \"originaltitle\", \"$ref\": \"Optional.String\" },"
2071         "{ \"name\": \"trailer\", \"$ref\": \"Optional.String\" },"
2072         "{ \"name\": \"tagline\", \"$ref\": \"Optional.String\" },"
2073         "{ \"name\": \"plotoutline\", \"$ref\": \"Optional.String\" },"
2074         "{ \"name\": \"writer\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
2075         "{ \"name\": \"country\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
2076         "{ \"name\": \"top250\", \"$ref\": \"Optional.Integer\" },"
2077         "{ \"name\": \"sorttitle\", \"$ref\": \"Optional.String\" },"
2078         "{ \"name\": \"set\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
2079         "{ \"name\": \"showlink\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
2080         "{ \"name\": \"thumbnail\", \"$ref\": \"Optional.String\" },"
2081         "{ \"name\": \"fanart\", \"$ref\": \"Optional.String\" }"
2082       "],"
2083       "\"returns\": \"string\""
2084     "}",
2085     "\"VideoLibrary.SetTVShowDetails\": {"
2086       "\"type\": \"method\","
2087       "\"description\": \"Update the given tvshow with the given details\","
2088       "\"transport\": \"Response\","
2089       "\"permission\": \"UpdateData\","
2090       "\"params\": ["
2091         "{ \"name\": \"tvshowid\", \"$ref\": \"Library.Id\", \"required\": true },"
2092         "{ \"name\": \"title\", \"$ref\": \"Optional.String\" },"
2093         "{ \"name\": \"playcount\", \"$ref\": \"Optional.Integer\" },"
2094         "{ \"name\": \"studio\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
2095         "{ \"name\": \"year\", \"$ref\": \"Optional.Integer\" },"
2096         "{ \"name\": \"plot\", \"$ref\": \"Optional.String\" },"
2097         "{ \"name\": \"genre\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
2098         "{ \"name\": \"rating\", \"$ref\": \"Optional.Number\" },"
2099         "{ \"name\": \"mpaa\", \"$ref\": \"Optional.String\" },"
2100         "{ \"name\": \"imdbnumber\", \"$ref\": \"Optional.String\" },"
2101         "{ \"name\": \"premiered\", \"$ref\": \"Optional.String\" },"
2102         "{ \"name\": \"votes\", \"$ref\": \"Optional.String\" },"
2103         "{ \"name\": \"lastplayed\", \"$ref\": \"Optional.String\" },"
2104         "{ \"name\": \"originaltitle\", \"$ref\": \"Optional.String\" },"
2105         "{ \"name\": \"sorttitle\", \"$ref\": \"Optional.String\" },"
2106         "{ \"name\": \"episodeguide\", \"$ref\": \"Optional.String\" },"
2107         "{ \"name\": \"thumbnail\", \"$ref\": \"Optional.String\" },"
2108         "{ \"name\": \"fanart\", \"$ref\": \"Optional.String\" }"
2109       "],"
2110       "\"returns\": \"string\""
2111     "}",
2112     "\"VideoLibrary.SetEpisodeDetails\": {"
2113       "\"type\": \"method\","
2114       "\"description\": \"Update the given episode with the given details\","
2115       "\"transport\": \"Response\","
2116       "\"permission\": \"UpdateData\","
2117       "\"params\": ["
2118         "{ \"name\": \"episodeid\", \"$ref\": \"Library.Id\", \"required\": true },"
2119         "{ \"name\": \"title\", \"$ref\": \"Optional.String\" },"
2120         "{ \"name\": \"playcount\", \"$ref\": \"Optional.Integer\" },"
2121         "{ \"name\": \"runtime\", \"$ref\": \"Optional.String\" },"
2122         "{ \"name\": \"director\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
2123         "{ \"name\": \"plot\", \"$ref\": \"Optional.String\" },"
2124         "{ \"name\": \"rating\", \"$ref\": \"Optional.Number\" },"
2125         "{ \"name\": \"votes\", \"$ref\": \"Optional.String\" },"
2126         "{ \"name\": \"lastplayed\", \"$ref\": \"Optional.String\" },"
2127         "{ \"name\": \"writer\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
2128         "{ \"name\": \"firstaired\", \"$ref\": \"Optional.String\" },"
2129         "{ \"name\": \"productioncode\", \"$ref\": \"Optional.String\" },"
2130         "{ \"name\": \"season\", \"$ref\": \"Optional.Integer\" },"
2131         "{ \"name\": \"episode\", \"$ref\": \"Optional.Integer\" },"
2132         "{ \"name\": \"originaltitle\", \"$ref\": \"Optional.String\" },"
2133         "{ \"name\": \"thumbnail\", \"$ref\": \"Optional.String\" },"
2134         "{ \"name\": \"fanart\", \"$ref\": \"Optional.String\" }"
2135       "],"
2136       "\"returns\": \"string\""
2137     "}",
2138     "\"VideoLibrary.SetMusicVideoDetails\": {"
2139       "\"type\": \"method\","
2140       "\"description\": \"Update the given music video with the given details\","
2141       "\"transport\": \"Response\","
2142       "\"permission\": \"UpdateData\","
2143       "\"params\": ["
2144         "{ \"name\": \"musicvideoid\", \"$ref\": \"Library.Id\", \"required\": true },"
2145         "{ \"name\": \"title\", \"$ref\": \"Optional.String\" },"
2146         "{ \"name\": \"playcount\", \"$ref\": \"Optional.Integer\" },"
2147         "{ \"name\": \"runtime\", \"$ref\": \"Optional.String\" },"
2148         "{ \"name\": \"director\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
2149         "{ \"name\": \"studio\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
2150         "{ \"name\": \"year\", \"$ref\": \"Optional.Integer\" },"
2151         "{ \"name\": \"plot\", \"$ref\": \"Optional.String\" },"
2152         "{ \"name\": \"album\", \"$ref\": \"Optional.String\" },"
2153         "{ \"name\": \"artist\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ] },"
2154         "{ \"name\": \"genre\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
2155         "{ \"name\": \"track\", \"$ref\": \"Optional.Integer\" },"
2156         "{ \"name\": \"lastplayed\", \"$ref\": \"Optional.String\" },"
2157         "{ \"name\": \"thumbnail\", \"$ref\": \"Optional.String\" },"
2158         "{ \"name\": \"fanart\", \"$ref\": \"Optional.String\" }"
2159       "],"
2160       "\"returns\": \"string\""
2161     "}",
2162     "\"VideoLibrary.RemoveMovie\": {"
2163       "\"type\": \"method\","
2164       "\"description\": \"Removes the given movie from the library\","
2165       "\"transport\": \"Response\","
2166       "\"permission\": \"RemoveData\","
2167       "\"params\": ["
2168         "{ \"name\": \"movieid\", \"$ref\": \"Library.Id\", \"required\": true }"
2169       "],"
2170       "\"returns\": \"string\""
2171     "}",
2172     "\"VideoLibrary.RemoveTVShow\": {"
2173       "\"type\": \"method\","
2174       "\"description\": \"Removes the given tv show from the library\","
2175       "\"transport\": \"Response\","
2176       "\"permission\": \"RemoveData\","
2177       "\"params\": ["
2178         "{ \"name\": \"tvshowid\", \"$ref\": \"Library.Id\", \"required\": true }"
2179       "],"
2180       "\"returns\": \"string\""
2181     "}",
2182     "\"VideoLibrary.RemoveEpisode\": {"
2183       "\"type\": \"method\","
2184       "\"description\": \"Removes the given episode from the library\","
2185       "\"transport\": \"Response\","
2186       "\"permission\": \"RemoveData\","
2187       "\"params\": ["
2188         "{ \"name\": \"episodeid\", \"$ref\": \"Library.Id\", \"required\": true }"
2189       "],"
2190       "\"returns\": \"string\""
2191     "}",
2192     "\"VideoLibrary.RemoveMusicVideo\": {"
2193       "\"type\": \"method\","
2194       "\"description\": \"Removes the given music video from the library\","
2195       "\"transport\": \"Response\","
2196       "\"permission\": \"RemoveData\","
2197       "\"params\": ["
2198         "{ \"name\": \"musicvideoid\", \"$ref\": \"Library.Id\", \"required\": true }"
2199       "],"
2200       "\"returns\": \"string\""
2201     "}",
2202     "\"VideoLibrary.Scan\": {"
2203       "\"type\": \"method\","
2204       "\"description\": \"Scans the video sources for new library items\","
2205       "\"transport\": \"Response\","
2206       "\"permission\": \"UpdateData\","
2207       "\"params\": ["
2208         "{ \"name\": \"directory\", \"type\": \"string\", \"default\": \"\" }"
2209       "],"
2210       "\"returns\": \"string\""
2211     "}",
2212     "\"VideoLibrary.Export\": {"
2213       "\"type\": \"method\","
2214       "\"description\": \"Exports all items from the video library\","
2215       "\"transport\": \"Response\","
2216       "\"permission\": \"WriteFile\","
2217       "\"params\": ["
2218         "{ \"name\": \"options\", \"type\": ["
2219             "{ \"type\": \"object\", \"required\": true, \"additionalProperties\": false,"
2220               "\"properties\": {"
2221                 "\"path\": { \"type\": \"string\", \"required\": true, \"minLength\": 1, \"description\": \"Path to the directory to where the data should be exported\" }"
2222               "}"
2223             "},"
2224             "{ \"type\": \"object\", \"required\": true, \"additionalProperties\": false,"
2225               "\"properties\": {"
2226                 "\"overwrite\": { \"type\": \"boolean\", \"default\": false, \"description\": \"Whether to overwrite existing exported files\" },"
2227                 "\"images\": { \"type\": \"boolean\", \"default\": false, \"description\": \"Whether to export thumbnails and fanart images\" },"
2228                 "\"actorthumbs\": { \"type\": \"boolean\", \"default\": false, \"description\": \"Whether to export actor thumbnails\" }"
2229               "}"
2230             "}"
2231           "]"
2232         "}"
2233       "],"
2234       "\"returns\": \"string\""
2235     "}",
2236     "\"VideoLibrary.Clean\": {"
2237       "\"type\": \"method\","
2238       "\"description\": \"Cleans the video library from non-existent items\","
2239       "\"transport\": \"Response\","
2240       "\"permission\": \"RemoveData\","
2241       "\"params\": [ ],"
2242       "\"returns\": \"string\""
2243     "}",
2244     "\"GUI.ShowNotification\": {"
2245       "\"type\": \"method\","
2246       "\"description\": \"Shows a GUI notification\","
2247       "\"transport\": \"Response\","
2248       "\"permission\": \"ControlGUI\","
2249       "\"params\": ["
2250         "{ \"name\": \"title\", \"type\": \"string\", \"required\": true },"
2251         "{ \"name\": \"message\", \"type\": \"string\", \"required\": true },"
2252         "{ \"name\": \"image\", \"type\": ["
2253             "{ \"type\": \"string\", \"required\": true, \"enum\": [ \"info\", \"warning\", \"error\" ] },"
2254             "{ \"type\": \"string\", \"required\": true }"
2255           "], \"default\": \"\""
2256         "},"
2257         "{ \"name\": \"displaytime\", \"type\": \"integer\", \"minimum\": 1500, \"default\": 5000, \"description\": \"The time in milliseconds the notification will be visible\" }"
2258       "],"
2259       "\"returns\":  { \"$ref\": \"System.Property.Value\", \"required\": true }"
2260     "}",
2261     "\"GUI.GetProperties\": {"
2262       "\"type\": \"method\","
2263       "\"description\": \"Retrieves the values of the given properties\","
2264       "\"transport\": \"Response\","
2265       "\"permission\": \"ReadData\","
2266       "\"params\": ["
2267         "{ \"name\": \"properties\", \"type\": \"array\", \"uniqueItems\": true, \"required\": true, \"items\": { \"$ref\": \"GUI.Property.Name\" } }"
2268       "],"
2269       "\"returns\":  { \"$ref\": \"GUI.Property.Value\", \"required\": true }"
2270     "}",
2271     "\"GUI.SetFullscreen\": {"
2272       "\"type\": \"method\","
2273       "\"description\": \"Toggle fullscreen/GUI\","
2274       "\"transport\": \"Response\","
2275       "\"permission\": \"ControlGUI\","
2276       "\"params\": ["
2277         "{ \"name\": \"fullscreen\", \"required\": true, \"$ref\": \"Global.Toggle\" }"
2278       "],"
2279       "\"returns\": { \"type\": \"boolean\", \"description\": \"Fullscreen state\" }"
2280     "}",
2281     "\"System.GetProperties\": {"
2282       "\"type\": \"method\","
2283       "\"description\": \"Retrieves the values of the given properties\","
2284       "\"transport\": \"Response\","
2285       "\"permission\": \"ReadData\","
2286       "\"params\": ["
2287         "{ \"name\": \"properties\", \"type\": \"array\", \"uniqueItems\": true, \"required\": true, \"items\": { \"$ref\": \"System.Property.Name\" } }"
2288       "],"
2289       "\"returns\":  { \"$ref\": \"System.Property.Value\", \"required\": true }"
2290     "}",
2291     "\"System.EjectOpticalDrive\": {"
2292       "\"type\": \"method\","
2293       "\"description\": \"Ejects or closes the optical disc drive (if available)\","
2294       "\"transport\": \"Response\","
2295       "\"permission\": \"ControlSystem\","
2296       "\"params\": [ ],"
2297       "\"returns\":  \"string\""
2298     "}",
2299     "\"System.Shutdown\": {"
2300       "\"type\": \"method\","
2301       "\"description\": \"Shuts the system running XBMC down\","
2302       "\"transport\": \"Response\","
2303       "\"permission\": \"ControlPower\","
2304       "\"params\": [],"
2305       "\"returns\": \"string\""
2306     "}",
2307     "\"System.Suspend\": {"
2308       "\"type\": \"method\","
2309       "\"description\": \"Suspends the system running XBMC\","
2310       "\"transport\": \"Response\","
2311       "\"permission\": \"ControlPower\","
2312       "\"params\": [],"
2313       "\"returns\": \"string\""
2314     "}",
2315     "\"System.Hibernate\": {"
2316       "\"type\": \"method\","
2317       "\"description\": \"Puts the system running XBMC into hibernate mode\","
2318       "\"transport\": \"Response\","
2319       "\"permission\": \"ControlPower\","
2320       "\"params\": [],"
2321       "\"returns\": \"string\""
2322     "}",
2323     "\"System.Reboot\": {"
2324       "\"type\": \"method\","
2325       "\"description\": \"Reboots the system running XBMC\","
2326       "\"transport\": \"Response\","
2327       "\"permission\": \"ControlPower\","
2328       "\"params\": [],"
2329       "\"returns\": \"string\""
2330     "}",
2331     "\"Input.SendText\": {"
2332       "\"type\": \"method\","
2333       "\"description\": \"Send a generic (unicode) text\","
2334       "\"transport\": \"Response\","
2335       "\"permission\": \"Navigate\","
2336       "\"params\": ["
2337         "{ \"name\": \"text\", \"type\": \"string\", \"minLength\": 1, \"required\": true, \"description\": \"Unicode text\" },"
2338         "{ \"name\": \"done\", \"type\": \"boolean\", \"default\": true, \"description\": \"Whether this is the whole input or not (closes an open input dialog if true).\" }"
2339       "],"
2340       "\"returns\": \"string\""
2341     "}",
2342     "\"Input.ExecuteAction\": {"
2343       "\"type\": \"method\","
2344       "\"description\": \"Execute a specific action\","
2345       "\"transport\": \"Response\","
2346       "\"permission\": \"Navigate\","
2347       "\"params\": ["
2348         "{ \"name\": \"action\", \"$ref\": \"Input.Action\", \"required\": true }"
2349       "],"
2350       "\"returns\": \"string\""
2351     "}",
2352     "\"Input.Left\": {"
2353       "\"type\": \"method\","
2354       "\"description\": \"Navigate left in GUI\","
2355       "\"transport\": \"Response\","
2356       "\"permission\": \"Navigate\","
2357       "\"params\": [],"
2358       "\"returns\": \"string\""
2359     "}",
2360     "\"Input.Right\": {"
2361       "\"type\": \"method\","
2362       "\"description\": \"Navigate right in GUI\","
2363       "\"transport\": \"Response\","
2364       "\"permission\": \"Navigate\","
2365       "\"params\": [],"
2366       "\"returns\": \"string\""
2367     "}",
2368     "\"Input.Down\": {"
2369       "\"type\": \"method\","
2370       "\"description\": \"Navigate down in GUI\","
2371       "\"transport\": \"Response\","
2372       "\"permission\": \"Navigate\","
2373       "\"params\": [],"
2374       "\"returns\": \"string\""
2375     "}",
2376     "\"Input.Up\": {"
2377       "\"type\": \"method\","
2378       "\"description\": \"Navigate up in GUI\","
2379       "\"transport\": \"Response\","
2380       "\"permission\": \"Navigate\","
2381       "\"params\": [],"
2382       "\"returns\": \"string\""
2383     "}",
2384     "\"Input.Select\": {"
2385       "\"type\": \"method\","
2386       "\"description\": \"Select current item in GUI\","
2387       "\"transport\": \"Response\","
2388       "\"permission\": \"Navigate\","
2389       "\"params\": [],"
2390       "\"returns\": \"string\""
2391     "}",
2392     "\"Input.Back\": {"
2393       "\"type\": \"method\","
2394       "\"description\": \"Goes back in GUI\","
2395       "\"transport\": \"Response\","
2396       "\"permission\": \"Navigate\","
2397       "\"params\": [],"
2398       "\"returns\": \"string\""
2399     "}",
2400     "\"Input.ContextMenu\": {"
2401       "\"type\": \"method\","
2402       "\"description\": \"Shows the context menu\","
2403       "\"transport\": \"Response\","
2404       "\"permission\": \"Navigate\","
2405       "\"params\": [],"
2406       "\"returns\": \"string\""
2407     "}",
2408     "\"Input.Info\": {"
2409       "\"type\": \"method\","
2410       "\"description\": \"Shows the information dialog\","
2411       "\"transport\": \"Response\","
2412       "\"permission\": \"Navigate\","
2413       "\"params\": [],"
2414       "\"returns\": \"string\""
2415     "}",
2416     "\"Input.Home\": {"
2417       "\"type\": \"method\","
2418       "\"description\": \"Goes to home window in GUI\","
2419       "\"transport\": \"Response\","
2420       "\"permission\": \"Navigate\","
2421       "\"params\": [],"
2422       "\"returns\": \"string\""
2423     "}",
2424     "\"Input.ShowCodec\": {"
2425       "\"type\": \"method\","
2426       "\"description\": \"Show codec information of the playing item\","
2427       "\"transport\": \"Response\","
2428       "\"permission\": \"Navigate\","
2429       "\"params\": [],"
2430       "\"returns\": \"string\""
2431     "}",
2432     "\"Input.ShowOSD\": {"
2433       "\"type\": \"method\","
2434       "\"description\": \"Show the on-screen display for the current player\","
2435       "\"transport\": \"Response\","
2436       "\"permission\": \"Navigate\","
2437       "\"params\": [],"
2438       "\"returns\": \"string\""
2439     "}",
2440     "\"Application.GetProperties\": {"
2441       "\"type\": \"method\","
2442       "\"description\": \"Retrieves the values of the given properties\","
2443       "\"transport\": \"Response\","
2444       "\"permission\": \"ReadData\","
2445       "\"params\": ["
2446         "{ \"name\": \"properties\", \"type\": \"array\", \"uniqueItems\": true, \"required\": true, \"items\": { \"$ref\": \"Application.Property.Name\" } }"
2447       "],"
2448       "\"returns\":  { \"$ref\": \"Application.Property.Value\", \"required\": true }"
2449     "}",
2450     "\"Application.SetVolume\": {"
2451       "\"type\": \"method\","
2452       "\"description\": \"Set the current volume\","
2453       "\"transport\": \"Response\","
2454       "\"permission\": \"ControlPlayback\","
2455       "\"params\": ["
2456         "{ \"name\": \"volume\", \"type\": ["
2457             "{ \"type\": \"integer\", \"minimum\": 0, \"maximum\": 100, \"required\": true },"
2458             "{ \"$ref\": \"Global.IncrementDecrement\", \"required\": true }"
2459           "],"
2460           "\"required\": true"
2461         "}"
2462       "],"
2463       "\"returns\": \"integer\""
2464     "}",
2465     "\"Application.SetMute\": {"
2466       "\"type\": \"method\","
2467       "\"description\": \"Toggle mute/unmute\","
2468       "\"transport\": \"Response\","
2469       "\"permission\": \"ControlPlayback\","
2470       "\"params\": ["
2471         "{ \"name\": \"mute\", \"required\": true, \"$ref\": \"Global.Toggle\" }"
2472       "],"
2473       "\"returns\": { \"type\": \"boolean\", \"description\": \"Mute state\" }"
2474     "}",
2475     "\"Application.Quit\": {"
2476       "\"type\": \"method\","
2477       "\"description\": \"Quit application\","
2478       "\"transport\": \"Response\","
2479       "\"permission\": \"ControlPower\","
2480       "\"params\": [],"
2481       "\"returns\": \"string\""
2482     "}",
2483     "\"XBMC.GetInfoLabels\": {"
2484       "\"type\": \"method\","
2485       "\"description\": \"Retrieve info labels about XBMC and the system\","
2486       "\"transport\": \"Response\","
2487       "\"permission\": \"ReadData\","
2488       "\"params\": ["
2489         "{ \"name\": \"labels\", \"type\": \"array\", \"required\": true, \"items\": { \"type\": \"string\" }, \"minItems\": 1, \"description\": \"See http://wiki.xbmc.org/index.php?title=InfoLabels for a list of possible info labels\" }"
2490       "],"
2491       "\"returns\": {"
2492         "\"type\": \"object\","
2493         "\"description\": \"List of key-value pairs of the retrieved info labels\""
2494       "}"
2495     "}",
2496     "\"XBMC.GetInfoBooleans\": {"
2497       "\"type\": \"method\","
2498       "\"description\": \"Retrieve info booleans about XBMC and the system\","
2499       "\"transport\": \"Response\","
2500       "\"permission\": \"ReadData\","
2501       "\"params\": ["
2502         "{ \"name\": \"booleans\", \"type\": \"array\", \"required\": true, \"items\": { \"type\": \"string\" }, \"minItems\": 1 }"
2503       "],"
2504       "\"returns\": {"
2505         "\"type\": \"object\","
2506         "\"description\": \"List of key-value pairs of the retrieved info booleans\""
2507       "}"
2508     "}"
2509   };
2510
2511   const char* const JSONRPC_SERVICE_NOTIFICATIONS[] = {  
2512     "\"Player.OnPlay\": {"
2513       "\"type\": \"notification\","
2514       "\"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.\","
2515       "\"params\": ["
2516         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
2517         "{ \"name\": \"data\", \"$ref\": \"Player.Notifications.Data\", \"required\": true }"
2518       "],"
2519       "\"returns\": null"
2520     "}",
2521     "\"Player.OnPause\": {"
2522       "\"type\": \"notification\","
2523       "\"description\": \"Playback of a media item has been paused. If there is no ID available extra information will be provided.\","
2524       "\"params\": ["
2525         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
2526         "{ \"name\": \"data\", \"$ref\": \"Player.Notifications.Data\", \"required\": true }"
2527       "],"
2528       "\"returns\": null"
2529     "}",
2530     "\"Player.OnStop\": {"
2531       "\"type\": \"notification\","
2532       "\"description\": \"Playback of a media item has been stopped. If there is no ID available extra information will be provided.\","
2533       "\"params\": ["
2534         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
2535         "{ \"name\": \"data\", \"type\": \"object\", \"required\": true, "
2536           "\"properties\": {"
2537             "\"item\": { \"$ref\": \"Player.Notifications.Item\" },"
2538             "\"end\": { \"type\": \"boolean\", \"required\": true, \"description\": \"Whether the player has reached the end of the playable item(s) or not\" }"
2539           "}"
2540         "}"
2541       "],"
2542       "\"returns\": null"
2543     "}",
2544     "\"Player.OnSpeedChanged\": {"
2545       "\"type\": \"notification\","
2546       "\"description\": \"Speed of the playback of a media item has been changed. If there is no ID available extra information will be provided.\","
2547       "\"params\": ["
2548         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
2549         "{ \"name\": \"data\", \"$ref\": \"Player.Notifications.Data\", \"required\": true }"
2550       "],"
2551       "\"returns\": null"
2552     "}",
2553     "\"Player.OnSeek\": {"
2554       "\"type\": \"notification\","
2555       "\"description\": \"The playback position has been changed. If there is no ID available extra information will be provided.\","
2556       "\"params\": ["
2557         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
2558         "{ \"name\": \"data\", \"type\": \"object\", \"required\": true, "
2559           "\"properties\": {"
2560             "\"item\": { \"$ref\": \"Player.Notifications.Item\" },"
2561             "\"player\": { \"$ref\": \"Player.Notifications.Player.Seek\", \"required\": true }"
2562           "}"
2563         "}"
2564       "],"
2565       "\"returns\": null"
2566     "}",
2567     "\"AudioLibrary.OnUpdate\": {"
2568       "\"type\": \"notification\","
2569       "\"description\": \"An audio item has been updated.\","
2570       "\"params\": ["
2571         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
2572         "{ \"name\": \"data\", \"type\": \"object\", \"required\": true,"
2573           "\"properties\": {"
2574             "\"id\": { \"$ref\": \"Library.Id\", \"required\": true },"
2575             "\"type\": { \"type\": \"string\", \"id\": \"Notifications.Library.Audio.Type\", \"enum\": [ \"song\" ], \"required\": true }"
2576           "}"
2577         "}"
2578       "],"
2579       "\"returns\": null"
2580     "}",
2581     "\"AudioLibrary.OnRemove\": {"
2582       "\"type\": \"notification\","
2583       "\"description\": \"An audio item has been removed.\","
2584       "\"params\": ["
2585         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
2586         "{ \"name\": \"data\", \"type\": \"object\", \"required\": true,"
2587           "\"properties\": {"
2588             "\"id\": { \"$ref\": \"Library.Id\", \"required\": true },"
2589             "\"type\": { \"$ref\": \"Notifications.Library.Audio.Type\", \"required\": true }"
2590           "}"
2591         "}"
2592       "],"
2593       "\"returns\": null"
2594     "}",
2595     "\"AudioLibrary.OnScanFinished\": {"
2596       "\"type\": \"notification\","
2597       "\"description\": \"Scanning the audio library has been finished.\","
2598       "\"params\": ["
2599         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
2600         "{ \"name\": \"data\", \"type\": \"null\", \"required\": true }"
2601       "],"
2602       "\"returns\": null"
2603     "}",
2604     "\"VideoLibrary.OnUpdate\": {"
2605       "\"type\": \"notification\","
2606       "\"description\": \"A video item has been updated.\","
2607       "\"params\": ["
2608         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
2609         "{ \"name\": \"data\", \"type\": \"object\", \"required\": true,"
2610           "\"properties\": {"
2611             "\"id\": { \"$ref\": \"Library.Id\", \"required\": true },"
2612             "\"type\": { \"type\": \"string\", \"id\": \"Notifications.Library.Video.Type\", \"enum\": [ \"movie\", \"tvshow\", \"episode\", \"musicvideo\" ], \"required\": true },"
2613             "\"playcount\": { \"type\": \"integer\", \"minimum\": 0, \"default\": -1 }"
2614           "}"
2615         "}"
2616       "],"
2617       "\"returns\": null"
2618     "}",
2619     "\"VideoLibrary.OnRemove\": {"
2620       "\"type\": \"notification\","
2621       "\"description\": \"A video item has been removed.\","
2622       "\"params\": ["
2623         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
2624         "{ \"name\": \"data\", \"type\": \"object\", \"required\": true,"
2625           "\"properties\": {"
2626             "\"id\": { \"$ref\": \"Library.Id\", \"required\": true },"
2627             "\"type\": { \"$ref\": \"Notifications.Library.Video.Type\", \"required\": true }"
2628           "}"
2629         "}"
2630       "],"
2631       "\"returns\": null"
2632     "}",
2633     "\"VideoLibrary.OnScanFinished\": {"
2634       "\"type\": \"notification\","
2635       "\"description\": \"Scanning the video library has been finished.\","
2636       "\"params\": ["
2637         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
2638         "{ \"name\": \"data\", \"type\": \"null\", \"required\": true }"
2639       "],"
2640       "\"returns\": null"
2641     "}",
2642     "\"System.OnQuit\": {"
2643       "\"type\": \"notification\","
2644       "\"description\": \"XBMC will be closed.\","
2645       "\"params\": ["
2646         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
2647         "{ \"name\": \"data\", \"type\": \"null\", \"required\": true }"
2648       "],"
2649       "\"returns\": null"
2650     "}",
2651     "\"System.OnRestart\": {"
2652       "\"type\": \"notification\","
2653       "\"description\": \"The system will be restarted.\","
2654       "\"params\": ["
2655         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
2656         "{ \"name\": \"data\", \"type\": \"null\", \"required\": true }"
2657       "],"
2658       "\"returns\": null"
2659     "}",
2660     "\"System.OnSleep\": {"
2661       "\"type\": \"notification\","
2662       "\"description\": \"The system will be suspended.\","
2663       "\"params\": ["
2664         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
2665         "{ \"name\": \"data\", \"type\": \"null\", \"required\": true }"
2666       "],"
2667       "\"returns\": null"
2668     "}",
2669     "\"System.OnWake\": {"
2670       "\"type\": \"notification\","
2671       "\"description\": \"The system woke up from suspension.\","
2672       "\"params\": ["
2673         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
2674         "{ \"name\": \"data\", \"type\": \"null\", \"required\": true }"
2675       "],"
2676       "\"returns\": null"
2677     "}",
2678     "\"System.OnLowBattery\": {"
2679       "\"type\": \"notification\","
2680       "\"description\": \"The system is on low battery.\","
2681       "\"params\": ["
2682         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
2683         "{ \"name\": \"data\", \"type\": \"null\", \"required\": true }"
2684       "],"
2685       "\"returns\": null"
2686     "}",
2687     "\"Application.OnVolumeChanged\": {"
2688       "\"type\": \"notification\","
2689       "\"description\": \"The volume of the application has changed.\","
2690       "\"params\": ["
2691         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
2692         "{ \"name\": \"data\", \"type\": \"object\", \"required\": true,"
2693           "\"properties\": {"
2694             "\"volume\": { \"type\": \"integer\", \"minimum\": 0, \"maximum\": 100, \"required\": true },"
2695             "\"muted\": { \"type\": \"boolean\", \"required\": true }"
2696           "}"
2697         "}"
2698       "],"
2699       "\"returns\": null"
2700     "}",
2701     "\"Input.OnInputRequested\": {"
2702       "\"type\": \"notification\","
2703       "\"description\": \"The user is requested to provide some information.\","
2704       "\"params\": ["
2705         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
2706         "{ \"name\": \"data\", \"type\": \"object\", \"required\": true,"
2707           "\"properties\": {"
2708             "\"type\": { \"type\": \"string\", \"enum\": [ \"keyboard\", \"time\", \"date\", \"ip\", \"password\", \"number\", \"seconds\" ], \"required\": true },"
2709             "\"title\": { \"type\": \"string\" }"
2710           "}"
2711         "}"
2712       "],"
2713       "\"returns\": null"
2714     "}",
2715     "\"Input.OnInputFinished\": {"
2716       "\"type\": \"notification\","
2717       "\"description\": \"The user has provided the requested input.\","
2718       "\"params\": ["
2719         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
2720         "{ \"name\": \"data\", \"type\": \"null\", \"required\": true }"
2721       "],"
2722       "\"returns\": null"
2723     "}"
2724   };
2725 }