DVDCodecs: Amlogic: Handle conditions in which amcodec should be opened during Open()
[vuplus_xbmc] / xbmc / interfaces / json-rpc / ServiceDescription.h
1 #pragma once
2 /*
3  *      Copyright (C) 2005-2013 Team XBMC
4  *      http://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, see
18  *  <http://www.gnu.org/licenses/>.
19  *
20  */
21
22 namespace JSONRPC
23 {
24   const char* const JSONRPC_SERVICE_ID          = "http://xbmc.org/jsonrpc/ServiceDescription.json";
25   const char* const JSONRPC_SERVICE_VERSION     = "6.14.2";
26   const char* const JSONRPC_SERVICE_DESCRIPTION = "JSON-RPC API of XBMC";
27
28   const char* const JSONRPC_SERVICE_TYPES[] = {  
29     "\"Optional.Boolean\": {"
30       "\"type\": [ \"null\", \"boolean\" ],"
31       "\"default\": null"
32     "}",
33     "\"Optional.String\": {"
34       "\"type\": [ \"null\", \"string\" ],"
35       "\"default\": null"
36     "}",
37     "\"Optional.Integer\": {"
38       "\"type\": [ \"null\", \"integer\" ],"
39       "\"default\": null"
40     "}",
41     "\"Optional.Number\": {"
42       "\"type\": [ \"null\", \"number\" ],"
43       "\"default\": null"
44     "}",
45     "\"Array.String\": {"
46       "\"type\": \"array\","
47       "\"items\": { \"type\": \"string\", \"minLength\": 1 }"
48     "}",
49     "\"Array.Integer\": {"
50       "\"type\": \"array\","
51       "\"items\": { \"type\": \"integer\" }"
52     "}",
53     "\"Global.Time\": {"
54       "\"type\": \"object\","
55       "\"properties\": {"
56         "\"hours\": { \"type\": \"integer\", \"required\": true, \"minimum\": 0, \"maximum\": 23 },"
57         "\"minutes\": { \"type\": \"integer\", \"required\": true, \"minimum\": 0, \"maximum\": 59 },"
58         "\"seconds\": { \"type\": \"integer\", \"required\": true, \"minimum\": 0, \"maximum\": 59 },"
59         "\"milliseconds\": { \"type\": \"integer\", \"required\": true, \"minimum\": 0, \"maximum\": 999 }"
60       "},"
61       "\"additionalProperties\": false"
62     "}",
63     "\"Global.Weekday\": {"
64       "\"type\": \"string\","
65       "\"enum\": [ \"monday\", \"tuesday\", \"wednesday\", \"thursday\","
66                 "\"friday\", \"saturday\", \"sunday\" ]"
67     "}",
68     "\"Global.IncrementDecrement\": {"
69       "\"type\": \"string\","
70       "\"enum\": [ \"increment\", \"decrement\" ]"
71     "}",
72     "\"Global.Toggle\": {"
73       "\"type\": ["
74         "{ \"type\": \"boolean\", \"required\": true },"
75         "{ \"type\": \"string\", \"enum\": [ \"toggle\" ], \"required\": true }"
76       "]"
77     "}",
78     "\"Global.String.NotEmpty\": {"
79       "\"type\": \"string\","
80       "\"minLength\": 1"
81     "}",
82     "\"Configuration.Notifications\": {"
83       "\"type\": \"object\","
84       "\"properties\": {"
85         "\"Player\": { \"type\": \"boolean\", \"required\": true },"
86         "\"Playlist\": { \"type\": \"boolean\", \"required\": true },"
87         "\"GUI\": { \"type\": \"boolean\", \"required\": true },"
88         "\"System\": { \"type\": \"boolean\", \"required\": true },"
89         "\"VideoLibrary\": { \"type\": \"boolean\", \"required\": true },"
90         "\"AudioLibrary\": { \"type\": \"boolean\", \"required\": true },"
91         "\"Application\": { \"type\": \"boolean\", \"required\": true },"
92         "\"Input\": { \"type\": \"boolean\", \"required\": true },"
93         "\"PVR\": { \"type\": \"boolean\", \"required\": true },"
94         "\"Other\": { \"type\": \"boolean\", \"required\": true }"
95       "},"
96       "\"additionalProperties\": false"
97     "}",
98     "\"Configuration\": {"
99       "\"type\": \"object\", \"required\": true,"
100       "\"properties\": {"
101         "\"notifications\": { \"$ref\": \"Configuration.Notifications\", \"required\": true }"
102       "}"
103     "}",
104     "\"Files.Media\": {"
105       "\"type\": \"string\","
106       "\"enum\": [ \"video\", \"music\", \"pictures\", \"files\", \"programs\" ]"
107     "}",
108     "\"List.Amount\": {"
109       "\"type\": \"integer\","
110       "\"default\": -1,"
111       "\"minimum\": 0"
112     "}",
113     "\"List.Limits\": {"
114       "\"type\": \"object\","
115       "\"properties\": {"
116         "\"start\": { \"type\": \"integer\", \"minimum\": 0, \"default\": 0, \"description\": \"Index of the first item to return\" },"
117         "\"end\": { \"$ref\": \"List.Amount\", \"description\": \"Index of the last item to return\" }"
118       "},"
119       "\"additionalProperties\": false"
120     "}",
121     "\"List.LimitsReturned\": {"
122       "\"type\": \"object\","
123       "\"properties\": {"
124         "\"start\": { \"type\": \"integer\", \"minimum\": 0, \"default\": 0 },"
125         "\"end\": { \"$ref\": \"List.Amount\" },"
126         "\"total\": { \"type\": \"integer\", \"minimum\": 0, \"required\": true }"
127       "},"
128       "\"additionalProperties\": false"
129     "}",
130     "\"List.Sort\": {"
131       "\"type\": \"object\","
132       "\"properties\": {"
133         "\"method\": { \"type\": \"string\", \"default\": \"none\","
134           "\"enum\": [ \"none\", \"label\", \"date\", \"size\", \"file\", \"path\", \"drivetype\", \"title\", \"track\", \"time\", \"artist\","
135                     "\"album\", \"albumtype\", \"genre\", \"country\", \"year\", \"rating\", \"votes\", \"top250\", \"programcount\","
136                     "\"playlist\", \"episode\", \"season\", \"totalepisodes\", \"watchedepisodes\", \"tvshowstatus\", \"tvshowtitle\","
137                     "\"sorttitle\", \"productioncode\", \"mpaa\", \"studio\", \"dateadded\", \"lastplayed\", \"playcount\", \"listeners\","
138                     "\"bitrate\", \"random\" ]"
139         "},"
140         "\"order\": { \"type\": \"string\", \"default\": \"ascending\", \"enum\": [ \"ascending\", \"descending\" ] },"
141         "\"ignorearticle\": { \"type\": \"boolean\", \"default\": false }"
142       "}"
143     "}",
144     "\"Library.Id\": {"
145       "\"type\": \"integer\","
146       "\"default\": -1,"
147       "\"minimum\": 1"
148     "}",
149     "\"PVR.Channel.Type\": {"
150       "\"type\": \"string\","
151       "\"enum\": [ \"tv\", \"radio\" ]"
152     "}",
153     "\"Playlist.Id\": {"
154       "\"type\": \"integer\","
155       "\"minimum\": 0,"
156       "\"maximum\": 2,"
157       "\"default\": -1"
158     "}",
159     "\"Playlist.Type\": {"
160       "\"type\": \"string\","
161       "\"enum\": [ \"unknown\", \"video\", \"audio\", \"picture\", \"mixed\" ]"
162     "}",
163     "\"Playlist.Property.Name\": {"
164       "\"type\": \"string\","
165       "\"enum\": [ \"type\", \"size\" ]"
166     "}",
167     "\"Playlist.Property.Value\": {"
168       "\"type\": \"object\","
169       "\"properties\": {"
170         "\"type\": { \"$ref\": \"Playlist.Type\" },"
171         "\"size\": { \"type\": \"integer\", \"minimum\": 0 }"
172       "}"
173     "}",
174     "\"Playlist.Position\": {"
175       "\"type\": \"integer\","
176       "\"minimum\": 0,"
177       "\"default\": -1"
178     "}",
179     "\"Playlist.Item\": {"
180       "\"type\": ["
181         "{ \"type\": \"object\", \"properties\": { \"file\": { \"type\": \"string\", \"description\": \"Path to a file (not a directory) to be added to the playlist\", \"required\": true } }, \"additionalProperties\": false },"
182         "{ \"type\": \"object\", \"properties\": { \"directory\": { \"type\": \"string\", \"required\": true }, \"recursive\": { \"type\": \"boolean\", \"default\": false }, \"media\": { \"$ref\": \"Files.Media\", \"default\": \"files\" } }, \"additionalProperties\": false },"
183         "{ \"type\": \"object\", \"properties\": { \"movieid\": { \"$ref\": \"Library.Id\", \"required\": true } }, \"additionalProperties\": false },"
184         "{ \"type\": \"object\", \"properties\": { \"episodeid\": { \"$ref\": \"Library.Id\", \"required\": true } }, \"additionalProperties\": false },"
185         "{ \"type\": \"object\", \"properties\": { \"musicvideoid\": { \"$ref\": \"Library.Id\", \"required\": true } }, \"additionalProperties\": false },"
186         "{ \"type\": \"object\", \"properties\": { \"artistid\": { \"$ref\": \"Library.Id\", \"required\": true } }, \"additionalProperties\": false },"
187         "{ \"type\": \"object\", \"properties\": { \"albumid\": { \"$ref\": \"Library.Id\", \"required\": true } }, \"additionalProperties\": false },"
188         "{ \"type\": \"object\", \"properties\": { \"songid\": { \"$ref\": \"Library.Id\", \"required\": true } }, \"additionalProperties\": false },"
189         "{ \"type\": \"object\", \"properties\": { \"genreid\": { \"$ref\": \"Library.Id\", \"required\": true, \"description\": \"Identification of a genre from the AudioLibrary\" } }, \"additionalProperties\": false }"
190       "]"
191     "}",
192     "\"Player.Id\": {"
193       "\"type\": \"integer\","
194       "\"minimum\": 0,"
195       "\"maximum\": 2,"
196       "\"default\": -1"
197     "}",
198     "\"Player.Type\": {"
199       "\"type\": \"string\","
200       "\"enum\": [ \"video\", \"audio\", \"picture\" ]"
201     "}",
202     "\"Player.Position.Percentage\": {"
203       "\"type\": \"number\","
204       "\"minimum\": 0.0,"
205       "\"maximum\": 100.0"
206     "}",
207     "\"Player.Position.Time\": {"
208       "\"type\": \"object\","
209       "\"additionalProperties\": false,"
210       "\"properties\": {"
211         "\"hours\": { \"type\": \"integer\", \"minimum\": 0, \"maximum\": 23, \"default\": 0 },"
212         "\"minutes\": { \"type\": \"integer\", \"minimum\": 0, \"maximum\": 59, \"default\": 0 },"
213         "\"seconds\": { \"type\": \"integer\", \"minimum\": 0, \"maximum\": 59, \"default\": 0 },"
214         "\"milliseconds\": { \"type\": \"integer\", \"minimum\": 0, \"maximum\": 999, \"default\": 0 }"
215       "}"
216     "}",
217     "\"Player.Speed\": {"
218       "\"type\": \"object\","
219       "\"required\": true,"
220       "\"properties\": {"
221         "\"speed\": { \"type\": \"integer\" }"
222       "}"
223     "}",
224     "\"Player.Repeat\": {"
225       "\"type\": \"string\","
226       "\"enum\": [ \"off\", \"one\", \"all\" ]"
227     "}",
228     "\"Player.Audio.Stream\": {"
229       "\"type\": \"object\","
230       "\"properties\": {"
231         "\"index\": { \"type\": \"integer\", \"minimum\": 0, \"required\": true },"
232         "\"name\": { \"type\": \"string\", \"required\": true },"
233         "\"language\": { \"type\": \"string\", \"required\": true },"
234         "\"codec\": { \"type\": \"string\", \"required\": true },"
235         "\"bitrate\": { \"type\": \"integer\", \"required\": true },"
236         "\"channels\": { \"type\": \"integer\", \"required\": true }"
237       "}"
238     "}",
239     "\"Player.Subtitle\": {"
240       "\"type\": \"object\","
241       "\"properties\": {"
242         "\"index\": { \"type\": \"integer\", \"minimum\": 0, \"required\": true },"
243         "\"name\": { \"type\": \"string\", \"required\": true },"
244         "\"language\": { \"type\": \"string\", \"required\": true }"
245       "}"
246     "}",
247     "\"Player.Property.Name\": {"
248       "\"type\": \"string\","
249       "\"enum\": [ \"type\", \"partymode\", \"speed\", \"time\", \"percentage\","
250                 "\"totaltime\", \"playlistid\", \"position\", \"repeat\", \"shuffled\","
251                 "\"canseek\", \"canchangespeed\", \"canmove\", \"canzoom\", \"canrotate\","
252                 "\"canshuffle\", \"canrepeat\", \"currentaudiostream\", \"audiostreams\","
253                 "\"subtitleenabled\", \"currentsubtitle\", \"subtitles\", \"live\" ]"
254     "}",
255     "\"Player.Property.Value\": {"
256       "\"type\": \"object\","
257       "\"properties\": {"
258         "\"type\": { \"$ref\": \"Player.Type\" },"
259         "\"partymode\": { \"type\": \"boolean\" },"
260         "\"speed\": { \"type\": \"integer\" },"
261         "\"time\": { \"$ref\": \"Global.Time\" },"
262         "\"percentage\": { \"$ref\": \"Player.Position.Percentage\" },"
263         "\"totaltime\": { \"$ref\": \"Global.Time\" },"
264         "\"playlistid\": { \"$ref\": \"Playlist.Id\" },"
265         "\"position\": { \"$ref\": \"Playlist.Position\" },"
266         "\"repeat\": { \"$ref\": \"Player.Repeat\" },"
267         "\"shuffled\": { \"type\": \"boolean\" },"
268         "\"canseek\": { \"type\": \"boolean\" },"
269         "\"canchangespeed\": { \"type\": \"boolean\" },"
270         "\"canmove\": { \"type\": \"boolean\" },"
271         "\"canzoom\": { \"type\": \"boolean\" },"
272         "\"canrotate\": { \"type\": \"boolean\" },"
273         "\"canshuffle\": { \"type\": \"boolean\" },"
274         "\"canrepeat\": { \"type\": \"boolean\" },"
275         "\"currentaudiostream\": { \"$ref\": \"Player.Audio.Stream\" },"
276         "\"audiostreams\": { \"type\": \"array\", \"items\": { \"$ref\": \"Player.Audio.Stream\" } },"
277         "\"subtitleenabled\": { \"type\": \"boolean\" },"
278         "\"currentsubtitle\": { \"$ref\": \"Player.Subtitle\" },"
279         "\"subtitles\": { \"type\": \"array\", \"items\": { \"$ref\": \"Player.Subtitle\" } },"
280         "\"live\": { \"type\": \"boolean\" }"
281       "}"
282     "}",
283     "\"Notifications.Item.Type\": {"
284       "\"type\": \"string\","
285       "\"enum\": [ \"unknown\", \"movie\", \"episode\", \"musicvideo\", \"song\", \"picture\", \"channel\" ]"
286     "}",
287     "\"Notifications.Item\": {"
288       "\"type\": ["
289         "{ \"type\": \"object\", \"description\": \"An unknown item does not have any additional information.\","
290           "\"properties\": {"
291             "\"type\": { \"$ref\": \"Notifications.Item.Type\", \"required\": true }"
292           "}"
293         "},"
294         "{ \"type\": \"object\", \"description\": \"An item known to the database has an identification.\","
295           "\"properties\": {"
296             "\"type\": { \"$ref\": \"Notifications.Item.Type\", \"required\": true },"
297             "\"id\": { \"$ref\": \"Library.Id\", \"required\": true  }"
298           "}"
299         "},"
300         "{ \"type\": \"object\", \"description\": \"A movie item has a title and may have a release year.\","
301           "\"properties\": {"
302             "\"type\": { \"$ref\": \"Notifications.Item.Type\", \"required\": true },"
303             "\"title\": { \"type\": \"string\", \"required\": true },"
304             "\"year\": { \"type\": \"integer\" }"
305           "}"
306         "},"
307         "{ \"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.\","
308           "\"properties\": {"
309             "\"type\": { \"$ref\": \"Notifications.Item.Type\", \"required\": true },"
310             "\"title\": { \"type\": \"string\", \"required\": true },"
311             "\"episode\": { \"type\": \"integer\" },"
312             "\"season\": { \"type\": \"integer\" },"
313             "\"showtitle\": { \"type\": \"string\" }"
314           "}"
315         "},"
316         "{ \"type\": \"object\", \"description\": \"A music video has a title and may have an album and an artist.\","
317           "\"properties\": {"
318             "\"type\": { \"$ref\": \"Notifications.Item.Type\", \"required\": true },"
319             "\"title\": { \"type\": \"string\", \"required\": true },"
320             "\"album\": { \"type\": \"string\" },"
321             "\"artist\": { \"type\": \"string\" }"
322           "}"
323         "},"
324         "{ \"type\": \"object\", \"description\": \"A song has a title and may have an album, an artist and a track number.\","
325           "\"properties\": {"
326             "\"type\": { \"$ref\": \"Notifications.Item.Type\", \"required\": true },"
327             "\"title\": { \"type\": \"string\", \"required\": true },"
328             "\"album\": { \"type\": \"string\" },"
329             "\"artist\": { \"type\": \"string\" },"
330             "\"track\": { \"type\": \"integer\" }"
331           "}"
332         "},"
333         "{ \"type\": \"object\", \"description\": \"A picture has a file path.\","
334           "\"properties\": {"
335             "\"type\": { \"$ref\": \"Notifications.Item.Type\", \"required\": true },"
336             "\"file\": { \"type\": \"string\", \"required\": true }"
337           "}"
338         "},"
339         "{ \"type\": \"object\", \"description\": \"A PVR channel is either a radio or tv channel and has a title.\","
340           "\"properties\": {"
341             "\"type\": { \"$ref\": \"Notifications.Item.Type\", \"required\": true },"
342             "\"id\": { \"$ref\": \"Library.Id\", \"required\": true  },"
343             "\"title\": { \"type\": \"string\", \"required\": true },"
344             "\"channeltype\": { \"$ref\": \"PVR.Channel.Type\", \"required\": true }"
345           "}"
346         "}"
347       "]"
348     "}",
349     "\"Player.Notifications.Player\": {"
350       "\"type\": \"object\","
351       "\"properties\": {"
352         "\"playerid\": { \"$ref\": \"Player.Id\", \"required\": true },"
353         "\"speed\": { \"type\": \"integer\" }"
354       "}"
355     "}",
356     "\"Player.Notifications.Player.Seek\": {"
357       "\"extends\": \"Player.Notifications.Player\","
358       "\"properties\": {"
359         "\"time\": { \"$ref\": \"Global.Time\" },"
360         "\"seekoffset\": { \"$ref\": \"Global.Time\" }"
361       "}"
362     "}",
363     "\"Player.Notifications.Data\": {"
364       "\"type\": \"object\","
365       "\"properties\": {"
366         "\"item\": { \"$ref\": \"Notifications.Item\", \"required\": true },"
367         "\"player\": { \"$ref\": \"Player.Notifications.Player\", \"required\": true }"
368       "}"
369     "}",
370     "\"Item.Fields.Base\": {"
371       "\"type\": \"array\","
372       "\"uniqueItems\": true,"
373       "\"items\": { \"type\": \"string\" }"
374     "}",
375     "\"Item.Details.Base\": {"
376       "\"type\": \"object\","
377       "\"properties\": {"
378         "\"label\": { \"type\": \"string\", \"required\": true }"
379       "}"
380     "}",
381     "\"Media.Details.Base\": {"
382       "\"extends\": \"Item.Details.Base\","
383       "\"properties\": {"
384         "\"fanart\": { \"type\": \"string\" },"
385         "\"thumbnail\": { \"type\": \"string\" }"
386       "}"
387     "}",
388     "\"Media.Artwork\": {"
389       "\"type\": \"object\","
390       "\"properties\": {"
391         "\"thumb\": { \"$ref\": \"Global.String.NotEmpty\" },"
392         "\"poster\": { \"$ref\": \"Global.String.NotEmpty\" },"
393         "\"banner\": { \"$ref\": \"Global.String.NotEmpty\" },"
394         "\"fanart\": { \"$ref\": \"Global.String.NotEmpty\" }"
395       "},"
396       "\"additionalProperties\": { \"$ref\": \"Global.String.NotEmpty\" }"
397     "}",
398     "\"Media.Artwork.Set\": {"
399       "\"type\": \"object\","
400       "\"properties\": {"
401         "\"thumb\": { \"type\": [ \"null\", { \"$ref\": \"Global.String.NotEmpty\", \"required\": true } ], \"default\": \"\" },"
402         "\"poster\": { \"type\": [ \"null\", { \"$ref\": \"Global.String.NotEmpty\", \"required\": true } ], \"default\": \"\" },"
403         "\"banner\": { \"type\": [ \"null\", { \"$ref\": \"Global.String.NotEmpty\", \"required\": true } ], \"default\": \"\" },"
404         "\"fanart\": { \"type\": [ \"null\", { \"$ref\": \"Global.String.NotEmpty\", \"required\": true } ], \"default\": \"\" }"
405       "},"
406       "\"additionalProperties\": { \"type\": [ \"null\", { \"$ref\": \"Global.String.NotEmpty\", \"required\": true } ] }"
407     "}",
408     "\"Library.Fields.Genre\": {"
409       "\"extends\": \"Item.Fields.Base\","
410       "\"items\": { \"type\": \"string\", \"enum\": [ \"title\", \"thumbnail\" ] }"
411     "}",
412     "\"Library.Details.Genre\": {"
413       "\"extends\": \"Item.Details.Base\","
414       "\"properties\": {"
415         "\"genreid\": { \"$ref\": \"Library.Id\", \"required\": true },"
416         "\"title\": { \"type\": \"string\" },"
417         "\"thumbnail\": { \"type\": \"string\" }"
418       "}"
419     "}",
420     "\"Audio.Fields.Artist\": {"
421       "\"extends\": \"Item.Fields.Base\","
422       "\"items\": { \"type\": \"string\","
423         "\"enum\": [ \"instrument\", \"style\", \"mood\", \"born\", \"formed\","
424                   "\"description\", \"genre\", \"died\", \"disbanded\","
425                   "\"yearsactive\", \"musicbrainzartistid\", \"fanart\","
426                   "\"thumbnail\", \"compilationartist\" ]"
427       "}"
428     "}",
429     "\"Audio.Fields.Album\": {"
430       "\"extends\": \"Item.Fields.Base\","
431       "\"items\": { \"type\": \"string\","
432         "\"description\": \"Requesting the genreid and/or artistid field will result in increased response times\","
433         "\"enum\": [ \"title\", \"description\", \"artist\", \"genre\","
434                   "\"theme\", \"mood\", \"style\", \"type\", \"albumlabel\","
435                   "\"rating\", \"year\", \"musicbrainzalbumid\","
436                   "\"musicbrainzalbumartistid\", \"fanart\", \"thumbnail\","
437                   "\"playcount\", \"genreid\", \"artistid\", \"displayartist\" ]"
438       "}"
439     "}",
440     "\"Audio.Fields.Song\": {"
441       "\"extends\": \"Item.Fields.Base\","
442       "\"items\": { \"type\": \"string\","
443         "\"description\": \"Requesting the genreid, artistid and/or albumartistid field will result in increased response times\","
444         "\"enum\": [ \"title\", \"artist\", \"albumartist\", \"genre\", \"year\","
445                   "\"rating\", \"album\", \"track\", \"duration\", \"comment\","
446                   "\"lyrics\", \"musicbrainztrackid\", \"musicbrainzartistid\","
447                   "\"musicbrainzalbumid\", \"musicbrainzalbumartistid\","
448                   "\"playcount\", \"fanart\", \"thumbnail\", \"file\", \"albumid\","
449                   "\"lastplayed\", \"disc\", \"genreid\", \"artistid\", \"displayartist\","
450                   "\"albumartistid\" ]"
451       "}"
452     "}",
453     "\"Audio.Details.Base\": {"
454       "\"extends\": \"Media.Details.Base\","
455       "\"properties\": {"
456         "\"genre\": { \"$ref\": \"Array.String\" }"
457       "}"
458     "}",
459     "\"Audio.Details.Media\": {"
460       "\"extends\": \"Audio.Details.Base\","
461       "\"properties\": {"
462         "\"title\": { \"type\": \"string\" },"
463         "\"artist\": { \"$ref\": \"Array.String\" },"
464         "\"year\": { \"type\": \"integer\" },"
465         "\"rating\": { \"type\": \"integer\" },"
466         "\"musicbrainzalbumid\": { \"type\": \"string\" },"
467         "\"musicbrainzalbumartistid\": { \"type\": \"string\" },"
468         "\"genreid\": { \"$ref\": \"Array.Integer\" },"
469         "\"artistid\": { \"$ref\": \"Array.Integer\" },"
470         "\"displayartist\": { \"type\" : \"string\" }"
471       "}"
472     "}",
473     "\"Audio.Details.Artist\": {"
474       "\"extends\": \"Audio.Details.Base\","
475       "\"properties\": {"
476         "\"artistid\": { \"$ref\": \"Library.Id\", \"required\": true },"
477         "\"artist\": { \"type\": \"string\", \"required\": true },"
478         "\"instrument\": { \"$ref\": \"Array.String\" },"
479         "\"style\": { \"$ref\": \"Array.String\" },"
480         "\"mood\": { \"$ref\": \"Array.String\" },"
481         "\"born\": { \"type\": \"string\" },"
482         "\"formed\": { \"type\": \"string\" },"
483         "\"description\": { \"type\": \"string\" },"
484         "\"died\": { \"type\": \"string\" },"
485         "\"disbanded\": { \"type\": \"string\" },"
486         "\"yearsactive\": { \"$ref\": \"Array.String\" },"
487         "\"compilationartist\": { \"type\": \"boolean\" },"
488         "\"musicbrainzartistid\": { \"type\": \"string\" }"
489       "}"
490     "}",
491     "\"Audio.Details.Album\": {"
492       "\"extends\": \"Audio.Details.Media\","
493       "\"properties\": {"
494         "\"albumid\": { \"$ref\": \"Library.Id\", \"required\": true },"
495         "\"description\": { \"type\": \"string\" },"
496         "\"theme\": { \"$ref\": \"Array.String\" },"
497         "\"mood\": { \"$ref\": \"Array.String\" },"
498         "\"style\": { \"$ref\": \"Array.String\" },"
499         "\"type\": { \"type\": \"string\" },"
500         "\"albumlabel\": { \"type\": \"string\" },"
501         "\"playcount\": { \"type\": \"integer\" }"
502       "}"
503     "}",
504     "\"Audio.Details.Song\": {"
505       "\"extends\": \"Audio.Details.Media\","
506       "\"properties\": {"
507         "\"songid\": { \"$ref\": \"Library.Id\", \"required\": true },"
508         "\"file\": { \"type\": \"string\" },"
509         "\"albumartist\": { \"$ref\": \"Array.String\" },"
510         "\"album\": { \"type\": \"string\" },"
511         "\"track\": { \"type\": \"integer\" },"
512         "\"duration\": { \"type\": \"integer\" },"
513         "\"comment\": { \"type\": \"string\" },"
514         "\"lyrics\": { \"type\": \"string\" },"
515         "\"playcount\": { \"type\": \"integer\" },"
516         "\"musicbrainztrackid\": { \"type\": \"string\" },"
517         "\"musicbrainzartistid\": { \"type\": \"string\" },"
518         "\"albumid\": { \"$ref\": \"Library.Id\" },"
519         "\"lastplayed\": { \"type\": \"string\" },"
520         "\"disc\": { \"type\": \"integer\" },"
521         "\"albumartistid\": { \"$ref\": \"Array.Integer\" }"
522       "}"
523     "}",
524     "\"Video.Fields.Movie\": {"
525       "\"extends\": \"Item.Fields.Base\","
526       "\"items\": { \"type\": \"string\","
527         "\"description\": \"Requesting the cast, showlink and/or tag field will result in increased response times\","
528         "\"enum\": [ \"title\", \"genre\", \"year\", \"rating\", \"director\", \"trailer\","
529                   "\"tagline\", \"plot\", \"plotoutline\", \"originaltitle\", \"lastplayed\","
530                   "\"playcount\", \"writer\", \"studio\", \"mpaa\", \"cast\", \"country\","
531                   "\"imdbnumber\", \"runtime\", \"set\", \"showlink\", \"streamdetails\","
532                   "\"top250\", \"votes\", \"fanart\", \"thumbnail\", \"file\", \"sorttitle\","
533                   "\"resume\", \"setid\", \"dateadded\", \"tag\", \"art\" ]"
534       "}"
535     "}",
536     "\"Video.Fields.MovieSet\": {"
537       "\"extends\": \"Item.Fields.Base\","
538       "\"items\": { \"type\": \"string\","
539         "\"enum\": [ \"title\", \"playcount\", \"fanart\", \"thumbnail\", \"art\" ]"
540       "}"
541     "}",
542     "\"Video.Fields.TVShow\": {"
543       "\"extends\": \"Item.Fields.Base\","
544       "\"items\": { \"type\": \"string\","
545         "\"description\": \"Requesting the cast field will result in increased response times\","
546         "\"enum\": [ \"title\", \"genre\", \"year\", \"rating\", \"plot\","
547                   "\"studio\", \"mpaa\", \"cast\", \"playcount\", \"episode\","
548                   "\"imdbnumber\", \"premiered\", \"votes\", \"lastplayed\","
549                   "\"fanart\", \"thumbnail\", \"file\", \"originaltitle\","
550                   "\"sorttitle\", \"episodeguide\", \"season\", \"watchedepisodes\","
551                   "\"dateadded\", \"tag\", \"lastplayed\", \"art\" ]"
552       "}"
553     "}",
554     "\"Video.Fields.Season\": {"
555       "\"extends\": \"Item.Fields.Base\","
556       "\"items\": { \"type\": \"string\","
557         "\"enum\": [ \"season\", \"showtitle\", \"playcount\", \"episode\", \"fanart\", \"thumbnail\", \"tvshowid\","
558                   "\"watchedepisodes\", \"art\" ]"
559       "}"
560     "}",
561     "\"Video.Fields.Episode\": {"
562       "\"extends\": \"Item.Fields.Base\","
563       "\"items\": { \"type\": \"string\","
564         "\"description\": \"Requesting the cast field will result in increased response times\","
565         "\"enum\": [ \"title\", \"plot\", \"votes\", \"rating\", \"writer\","
566                   "\"firstaired\", \"playcount\", \"runtime\", \"director\","
567                   "\"productioncode\", \"season\", \"episode\", \"originaltitle\","
568                   "\"showtitle\", \"cast\", \"streamdetails\", \"lastplayed\", \"fanart\","
569                   "\"thumbnail\", \"file\", \"resume\", \"tvshowid\", \"dateadded\","
570                   "\"uniqueid\", \"art\" ]"
571       "}"
572     "}",
573     "\"Video.Fields.MusicVideo\": {"
574       "\"extends\": \"Item.Fields.Base\","
575       "\"items\": { \"type\": \"string\","
576         "\"enum\": [ \"title\", \"playcount\", \"runtime\", \"director\","
577                   "\"studio\", \"year\", \"plot\", \"album\", \"artist\","
578                   "\"genre\", \"track\", \"streamdetails\", \"lastplayed\","
579                   "\"fanart\", \"thumbnail\", \"file\", \"resume\", \"dateadded\","
580                   "\"tag\", \"art\" ]"
581       "}"
582     "}",
583     "\"Video.Cast\": {"
584       "\"type\": \"array\","
585       "\"items\": { \"type\": \"object\","
586         "\"properties\": {"
587           "\"name\": { \"type\": \"string\", \"required\": true },"
588           "\"role\": { \"type\": \"string\", \"required\": true },"
589           "\"order\": { \"type\": \"integer\", \"required\": true },"
590           "\"thumbnail\": { \"type\": \"string\" }"
591         "},"
592         "\"additionalProperties\": false"
593       "}"
594     "}",
595     "\"Video.Streams\": {"
596       "\"type\": \"object\","
597       "\"properties\": {"
598         "\"audio\": { \"type\": \"array\", \"minItems\": 1,"
599           "\"items\": { \"type\": \"object\","
600             "\"properties\": {"
601               "\"codec\": { \"type\": \"string\" },"
602               "\"language\": { \"type\": \"string\" },"
603               "\"channels\": { \"type\": \"integer\" }"
604             "},"
605             "\"additionalProperties\": false"
606           "}"
607         "},"
608         "\"video\": { \"type\": \"array\", \"minItems\": 1,"
609           "\"items\": { \"type\": \"object\","
610             "\"properties\": {"
611               "\"codec\": { \"type\": \"string\" },"
612               "\"aspect\": { \"type\": \"number\" },"
613               "\"width\": { \"type\": \"integer\" },"
614               "\"height\": { \"type\": \"integer\" },"
615               "\"duration\": { \"type\": \"integer\" }"
616             "},"
617             "\"additionalProperties\": false"
618           "}"
619         "},"
620         "\"subtitle\": { \"type\": \"array\", \"minItems\": 1,"
621           "\"items\": { \"type\": \"object\","
622             "\"properties\": {"
623               "\"language\": { \"type\": \"string\" }"
624             "},"
625             "\"additionalProperties\": false"
626           "}"
627         "}"
628       "},"
629       "\"additionalProperties\": false"
630     "}",
631     "\"Video.Resume\": {"
632       "\"type\": \"object\","
633       "\"properties\": {"
634         "\"position\": { \"type\": \"number\", \"minimum\": 0 },"
635         "\"total\": { \"type\": \"number\", \"minimum\": 0 }"
636       "},"
637       "\"additionalProperties\": false"
638     "}",
639     "\"Video.Details.Base\": {"
640       "\"extends\": \"Media.Details.Base\","
641       "\"properties\": {"
642         "\"playcount\": { \"type\": \"integer\" },"
643         "\"art\": { \"$ref\": \"Media.Artwork\" }"
644       "}"
645     "}",
646     "\"Video.Details.Media\": {"
647       "\"extends\": \"Video.Details.Base\","
648       "\"properties\": {"
649         "\"title\": { \"type\": \"string\" }"
650       "}"
651     "}",
652     "\"Video.Details.Item\": {"
653       "\"extends\": \"Video.Details.Media\","
654       "\"properties\": {"
655         "\"file\": { \"type\": \"string\" },"
656         "\"plot\": { \"type\": \"string\" },"
657         "\"lastplayed\": { \"type\": \"string\" },"
658         "\"dateadded\": { \"type\": \"string\" }"
659       "}"
660     "}",
661     "\"Video.Details.File\": {"
662       "\"extends\": \"Video.Details.Item\","
663       "\"properties\": {"
664         "\"runtime\": { \"type\": \"integer\", \"description\": \"Runtime in seconds\" },"
665         "\"director\": { \"$ref\": \"Array.String\" },"
666         "\"streamdetails\": { \"$ref\": \"Video.Streams\" },"
667         "\"resume\": { \"$ref\": \"Video.Resume\" }"
668       "}"
669     "}",
670     "\"Video.Details.Movie\": {"
671       "\"extends\": \"Video.Details.File\","
672       "\"properties\": {"
673         "\"movieid\": { \"$ref\": \"Library.Id\", \"required\": true },"
674         "\"genre\": { \"$ref\": \"Array.String\" },"
675         "\"year\": { \"type\": \"integer\" },"
676         "\"rating\": { \"type\": \"number\" },"
677         "\"trailer\": { \"type\": \"string\" },"
678         "\"tagline\": { \"type\": \"string\" },"
679         "\"plotoutline\": { \"type\": \"string\" },"
680         "\"originaltitle\": { \"type\": \"string\" },"
681         "\"sorttitle\": { \"type\": \"string\" },"
682         "\"writer\": { \"$ref\": \"Array.String\" },"
683         "\"studio\": { \"$ref\": \"Array.String\" },"
684         "\"mpaa\": { \"type\": \"string\" },"
685         "\"cast\": { \"$ref\": \"Video.Cast\" },"
686         "\"country\": { \"$ref\": \"Array.String\" },"
687         "\"imdbnumber\": { \"type\": \"string\" },"
688         "\"set\": { \"type\": \"string\" },"
689         "\"showlink\": { \"$ref\": \"Array.String\" },"
690         "\"top250\": { \"type\": \"integer\" },"
691         "\"votes\": { \"type\": \"string\" },"
692         "\"setid\": { \"$ref\": \"Library.Id\" },"
693         "\"tag\": { \"$ref\": \"Array.String\" }"
694       "}"
695     "}",
696     "\"Video.Details.MovieSet\": {"
697       "\"extends\": \"Video.Details.Media\","
698       "\"properties\": {"
699         "\"setid\": { \"$ref\": \"Library.Id\", \"required\": true }"
700       "}"
701     "}",
702     "\"Video.Details.MovieSet.Extended\": {"
703       "\"extends\": \"Video.Details.MovieSet\","
704       "\"properties\": {"
705         "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
706         "\"movies\": { \"type\": \"array\","
707           "\"items\": { \"$ref\": \"Video.Details.Movie\" }"
708         "}"
709       "}"
710     "}",
711     "\"Video.Details.TVShow\": {"
712       "\"extends\": \"Video.Details.Item\","
713       "\"properties\": {"
714         "\"tvshowid\": { \"$ref\": \"Library.Id\", \"required\": true },"
715         "\"genre\": { \"$ref\": \"Array.String\" },"
716         "\"year\": { \"type\": \"integer\" },"
717         "\"rating\": { \"type\": \"number\" },"
718         "\"originaltitle\": { \"type\": \"string\" },"
719         "\"sorttitle\": { \"type\": \"string\" },"
720         "\"studio\": { \"$ref\": \"Array.String\" },"
721         "\"mpaa\": { \"type\": \"string\" },"
722         "\"cast\": { \"$ref\": \"Video.Cast\" },"
723         "\"episode\": { \"type\": \"integer\" },"
724         "\"watchedepisodes\": { \"type\": \"integer\" },"
725         "\"imdbnumber\": { \"type\": \"string\" },"
726         "\"premiered\": { \"type\": \"string\" },"
727         "\"votes\": { \"type\": \"string\" },"
728         "\"episodeguide\": { \"type\": \"string\" },"
729         "\"season\": { \"type\": \"integer\" },"
730         "\"tag\": { \"$ref\": \"Array.String\" }"
731       "}"
732     "}",
733     "\"Video.Details.Season\": {"
734       "\"extends\": \"Video.Details.Base\","
735       "\"properties\": {"
736         "\"seasonid\": { \"$ref\": \"Library.Id\", \"required\": true },"
737         "\"season\": { \"type\": \"integer\", \"required\": true },"
738         "\"showtitle\": { \"type\": \"string\" },"
739         "\"episode\": { \"type\": \"integer\" },"
740         "\"watchedepisodes\": { \"type\": \"integer\" },"
741         "\"tvshowid\": { \"$ref\": \"Library.Id\" }"
742       "}"
743     "}",
744     "\"Video.Details.Episode\": {"
745       "\"extends\": \"Video.Details.File\","
746       "\"properties\": {"
747         "\"episodeid\": { \"$ref\": \"Library.Id\", \"required\": true },"
748         "\"votes\": { \"type\": \"string\" },"
749         "\"rating\": { \"type\": \"number\" },"
750         "\"writer\": { \"$ref\": \"Array.String\" },"
751         "\"firstaired\": { \"type\": \"string\" },"
752         "\"productioncode\": { \"type\": \"string\" },"
753         "\"season\": { \"type\": \"integer\" },"
754         "\"episode\": { \"type\": \"integer\" },"
755         "\"uniqueid\": { \"type\": \"object\", \"additionalProperties\": { \"type\": \"string\", \"minLength\": 1 } },"
756         "\"originaltitle\": { \"type\": \"string\" },"
757         "\"showtitle\": { \"type\": \"string\" },"
758         "\"cast\": { \"$ref\": \"Video.Cast\" },"
759         "\"tvshowid\": { \"$ref\": \"Library.Id\" }"
760       "}"
761     "}",
762     "\"Video.Details.MusicVideo\": {"
763       "\"extends\": \"Video.Details.File\","
764       "\"properties\": {"
765         "\"musicvideoid\": { \"$ref\": \"Library.Id\", \"required\": true },"
766         "\"studio\": { \"$ref\": \"Array.String\" },"
767         "\"year\": { \"type\": \"integer\" },"
768         "\"album\": { \"type\": \"string\" },"
769         "\"artist\": { \"$ref\": \"Array.String\" },"
770         "\"genre\": { \"$ref\": \"Array.String\" },"
771         "\"track\": { \"type\": \"integer\" },"
772         "\"tag\": { \"$ref\": \"Array.String\" }"
773       "}"
774     "}",
775     "\"PVR.Property.Name\": {"
776       "\"type\": \"string\","
777       "\"enum\": [ \"available\", \"recording\", \"scanning\" ]"
778     "}",
779     "\"PVR.Property.Value\": {"
780       "\"type\": \"object\","
781       "\"properties\": {"
782         "\"available\": { \"type\": \"boolean\" },"
783         "\"recording\": { \"type\": \"boolean\" },"
784         "\"scanning\": { \"type\": \"boolean\" }"
785       "}"
786     "}",
787     "\"PVR.ChannelGroup.Id\": {"
788       "\"type\": ["
789         "{ \"$ref\": \"Library.Id\", \"required\": true },"
790         "{ \"type\": \"string\", \"enum\": [ \"alltv\", \"allradio\" ], \"required\": true }"
791       "]"
792     "}",
793     "\"PVR.Fields.Channel\": {"
794       "\"extends\": \"Item.Fields.Base\","
795       "\"items\": { \"type\": \"string\","
796         "\"enum\": [ \"thumbnail\", \"channeltype\", \"hidden\", \"locked\", \"channel\", \"lastplayed\" ]"
797       "}"
798     "}",
799     "\"PVR.Details.Channel\": {"
800       "\"extends\": \"Item.Details.Base\","
801       "\"properties\": {"
802         "\"channelid\": { \"$ref\": \"Library.Id\", \"required\": true },"
803         "\"channel\": { \"type\": \"string\" },"
804         "\"channeltype\": { \"$ref\": \"PVR.Channel.Type\" },"
805         "\"hidden\": { \"type\": \"boolean\" },"
806         "\"locked\": { \"type\": \"boolean\" },"
807         "\"thumbnail\": { \"type\": \"string\" },"
808         "\"lastplayed\": { \"type\": \"string\" }"
809       "}"
810     "}",
811     "\"PVR.Details.ChannelGroup\": {"
812       "\"extends\": \"Item.Details.Base\","
813       "\"properties\": {"
814         "\"channelgroupid\": { \"$ref\": \"Library.Id\", \"required\": true },"
815         "\"channeltype\": { \"$ref\": \"PVR.Channel.Type\", \"required\": true }"
816       "}"
817     "}",
818     "\"PVR.Details.ChannelGroup.Extended\": {"
819       "\"extends\": \"PVR.Details.ChannelGroup\","
820       "\"properties\": {"
821         "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
822         "\"channels\": { \"type\": \"array\","
823           "\"items\": { \"$ref\": \"PVR.Details.Channel\" }"
824         "}"
825       "}"
826     "}",
827     "\"PVR.Fields.Broadcast\": {"
828       "\"extends\": \"Item.Fields.Base\","
829       "\"items\": { \"type\": \"string\","
830         "\"enum\": [ \"title\", \"plot\", \"plotoutline\", \"starttime\","
831                   "\"endtime\", \"runtime\", \"progress\", \"progresspercentage\","
832                   "\"genre\", \"episodename\", \"episodenum\", \"episodepart\","
833                   "\"firstaired\", \"hastimer\", \"isactive\", \"parentalrating\","
834                   "\"wasactive\", \"thumbnail\", \"rating\" ]"
835       "}"
836     "}",
837     "\"PVR.Details.Broadcast\": {"
838       "\"extends\": \"Item.Details.Base\","
839       "\"properties\": {"
840         "\"broadcastid\": { \"$ref\": \"Library.Id\", \"required\": true },"
841         "\"title\": { \"type\": \"string\" },"
842         "\"plot\": { \"type\": \"string\" },"
843         "\"plotoutline\": { \"type\": \"string\" },"
844         "\"starttime\": { \"type\": \"string\" },"
845         "\"endtime\": { \"type\": \"string\" },"
846         "\"runtime\": { \"type\": \"integer\" },"
847         "\"progress\": { \"type\": \"integer\" },"
848         "\"progresspercentage\": { \"type\": \"number\" },"
849         "\"genre\": { \"type\": \"string\" },"
850         "\"episodename\": { \"type\": \"string\" },"
851         "\"episodenum\": { \"type\": \"integer\" },"
852         "\"episodepart\": { \"type\": \"integer\" },"
853         "\"firstaired\": { \"type\": \"string\" },"
854         "\"hastimer\": { \"type\": \"boolean\" },"
855         "\"isactive\": { \"type\": \"boolean\" },"
856         "\"parentalrating\": { \"type\": \"integer\" },"
857         "\"wasactive\": { \"type\": \"boolean\" },"
858         "\"thumbnail\": { \"type\": \"string\" },"
859         "\"rating\": { \"type\": \"integer\" }"
860       "}"
861     "}",
862     "\"PVR.TimerState\": {"
863       "\"type\": \"string\","
864       "\"enum\": [ \"unknown\", \"new\", \"scheduled\", \"recording\", \"completed\","
865                 "\"aborted\", \"cancelled\", \"conflict_ok\", \"conflict_notok\","
866                 "\"error\" ]"
867     "}",
868     "\"PVR.Fields.Timer\": {"
869       "\"extends\": \"Item.Fields.Base\","
870       "\"items\": { \"type\": \"string\","
871         "\"enum\": [ \"title\", \"summary\", \"channelid\", \"isradio\", \"repeating\","
872                   "\"starttime\", \"endtime\", \"runtime\", \"lifetime\", \"firstday\","
873                   "\"weekdays\", \"priority\", \"startmargin\", \"endmargin\", \"state\","
874                   "\"file\", \"directory\" ]"
875       "}"
876     "}",
877     "\"PVR.Details.Timer\": {"
878       "\"extends\": \"Item.Details.Base\","
879       "\"properties\": {"
880         "\"timerid\": { \"$ref\": \"Library.Id\", \"required\": true },"
881         "\"title\": { \"type\": \"string\" },"
882         "\"summary\": { \"type\": \"string\" },"
883         "\"channelid\": { \"$ref\": \"Library.Id\" },"
884         "\"isradio\": { \"type\": \"boolean\" },"
885         "\"repeating\": { \"type\": \"boolean\" },"
886         "\"starttime\": { \"type\": \"string\" },"
887         "\"endtime\": { \"type\": \"string\" },"
888         "\"runtime\": { \"type\": \"integer\" },"
889         "\"lifetime\": { \"type\": \"integer\" },"
890         "\"firstday\": { \"type\": \"string\" },"
891         "\"weekdays\": { \"type\": \"array\","
892           "\"items\": { \"$ref\": \"Global.Weekday\" },"
893           "\"uniqueItems\": true"
894         "},"
895         "\"priority\": { \"type\": \"integer\" },"
896         "\"startmargin\": { \"type\": \"integer\" },"
897         "\"endmargin\": { \"type\": \"integer\" },"
898         "\"state\": { \"$ref\": \"PVR.TimerState\" },"
899         "\"file\": { \"type\": \"string\" },"
900         "\"directory\": { \"type\": \"string\" }"
901       "}"
902     "}",
903     "\"PVR.Fields.Recording\": {"
904       "\"extends\": \"Item.Fields.Base\","
905       "\"items\": { \"type\": \"string\","
906         "\"enum\": [ \"title\", \"plot\", \"plotoutline\", \"genre\", \"playcount\","
907                   "\"resume\", \"channel\", \"starttime\",\"endtime\", \"runtime\","
908                   "\"lifetime\", \"icon\", \"art\", \"streamurl\", \"file\","
909                   "\"directory\" ]"
910       "}"
911     "}",
912     "\"PVR.Details.Recording\": {"
913       "\"extends\": \"Item.Details.Base\","
914       "\"properties\": {"
915         "\"recordingid\": { \"$ref\": \"Library.Id\", \"required\": true },"
916         "\"title\": { \"type\": \"string\" },"
917         "\"plot\": { \"type\": \"string\" },"
918         "\"plotoutline\": { \"type\": \"string\" },"
919         "\"genre\": { \"type\": \"string\" },"
920         "\"playcount\": { \"type\": \"integer\" },"
921         "\"resume\": { \"$ref\": \"Video.Resume\" },"
922         "\"channel\": { \"type\": \"string\" },"
923         "\"starttime\": { \"type\": \"string\" },"
924         "\"endtime\": { \"type\": \"string\" },"
925         "\"runtime\": { \"type\": \"integer\" },"
926         "\"lifetime\": { \"type\": \"integer\" },"
927         "\"icon\": { \"type\": \"string\" },"
928         "\"art\": { \"$ref\": \"Media.Artwork\" },"
929         "\"streamurl\": { \"type\": \"string\" },"
930         "\"file\": { \"type\": \"string\" },"
931         "\"directory\": { \"type\": \"string\" }"
932       "}"
933     "}",
934     "\"Textures.Details.Size\": {"
935       "\"type\": \"object\","
936       "\"properties\": {"
937         "\"size\": { \"type\": \"integer\", \"description\": \"Size of the texture (1 == largest)\" },"
938         "\"width\": { \"type\": \"integer\", \"description\": \"Width of texture\" },"
939         "\"height\": { \"type\": \"integer\", \"description\": \"Height of texture\" },"
940         "\"usecount\": { \"type\": \"integer\", \"description\": \"Number of uses\" },"
941         "\"lastused\": { \"type\": \"string\", \"description\": \"Date of last use\" }"
942       "}"
943     "}",
944     "\"Textures.Fields.Texture\": {"
945       "\"extends\": \"Item.Fields.Base\","
946       "\"items\": { \"type\": \"string\","
947         "\"enum\": [ \"url\", \"cachedurl\", \"lasthashcheck\", \"imagehash\", \"sizes\" ]"
948       "}"
949     "}",
950     "\"Textures.Details.Texture\": {"
951       "\"type\": \"object\","
952       "\"properties\": {"
953         "\"textureid\": { \"$ref\": \"Library.Id\", \"required\": \"true\" },"
954         "\"url\": { \"type\": \"string\", \"description\": \"Original source URL\" },"
955         "\"cachedurl\": { \"type\": \"string\", \"description\": \"Cached URL on disk\" },"
956         "\"lasthashcheck\": { \"type\": \"string\", \"description\": \"Last time source was checked for changes\" },"
957         "\"imagehash\": { \"type\": \"string\", \"description\": \"Hash of image\" },"
958         "\"sizes\": { \"type\": \"array\", \"items\": { \"$ref\": \"Textures.Details.Size\" } }"
959       "}"
960     "}",
961     "\"Profiles.Password\": {"
962       "\"type\": \"object\","
963       "\"properties\": {"
964         "\"value\": { \"type\": \"string\", \"required\": true, \"description\": \"Password\" },"
965         "\"encryption\": { \"type\": \"string\", \"description\": \"Password Encryption\", \"default\": \"md5\", \"enum\": [ \"none\", \"md5\" ] }"
966       "}"
967     "}",
968     "\"Profiles.Fields.Profile\": {"
969       "\"extends\": \"Item.Fields.Base\","
970       "\"items\": { \"type\": \"string\", \"enum\": [ \"thumbnail\", \"lockmode\" ] }"
971     "}",
972     "\"Profiles.Details.Profile\": {"
973       "\"extends\": \"Item.Details.Base\","
974       "\"properties\": {"
975         "\"thumbnail\": { \"type\": \"string\" },"
976         "\"lockmode\": { \"type\": \"integer\" }"
977       "}"
978     "}",
979     "\"List.Filter.Rule\": {"
980       "\"type\": \"object\","
981       "\"properties\": {"
982         "\"operator\": { \"$ref\": \"List.Filter.Operators\", \"required\": true },"
983         "\"value\": {"
984           "\"type\": ["
985             "{ \"type\": \"string\", \"required\": true },"
986             "{ \"type\": \"array\", \"items\": { \"type\": \"string\" }, \"required\": true }"
987           "], \"required\": true"
988         "}"
989       "}"
990     "}",
991     "\"List.Filter.Rule.Movies\": {"
992       "\"extends\": \"List.Filter.Rule\","
993       "\"properties\": {"
994         "\"field\": { \"$ref\": \"List.Filter.Fields.Movies\", \"required\": true }"
995       "}"
996     "}",
997     "\"List.Filter.Rule.TVShows\": {"
998       "\"extends\": \"List.Filter.Rule\","
999       "\"properties\": {"
1000         "\"field\": { \"$ref\": \"List.Filter.Fields.TVShows\", \"required\": true }"
1001       "}"
1002     "}",
1003     "\"List.Filter.Rule.Episodes\": {"
1004       "\"extends\": \"List.Filter.Rule\","
1005       "\"properties\": {"
1006         "\"field\": { \"$ref\": \"List.Filter.Fields.Episodes\", \"required\": true }"
1007       "}"
1008     "}",
1009     "\"List.Filter.Rule.MusicVideos\": {"
1010       "\"extends\": \"List.Filter.Rule\","
1011       "\"properties\": {"
1012         "\"field\": { \"$ref\": \"List.Filter.Fields.MusicVideos\", \"required\": true }"
1013       "}"
1014     "}",
1015     "\"List.Filter.Rule.Artists\": {"
1016       "\"extends\": \"List.Filter.Rule\","
1017       "\"properties\": {"
1018         "\"field\": { \"$ref\": \"List.Filter.Fields.Artists\", \"required\": true }"
1019       "}"
1020     "}",
1021     "\"List.Filter.Rule.Albums\": {"
1022       "\"extends\": \"List.Filter.Rule\","
1023       "\"properties\": {"
1024         "\"field\": { \"$ref\": \"List.Filter.Fields.Albums\", \"required\": true }"
1025       "}"
1026     "}",
1027     "\"List.Filter.Rule.Songs\": {"
1028       "\"extends\": \"List.Filter.Rule\","
1029       "\"properties\": {"
1030         "\"field\": { \"$ref\": \"List.Filter.Fields.Songs\", \"required\": true }"
1031       "}"
1032     "}",
1033     "\"List.Filter.Rule.Textures\": {"
1034       "\"extends\": \"List.Filter.Rule\","
1035       "\"properties\": {"
1036         "\"field\": { \"$ref\": \"List.Filter.Fields.Textures\", \"required\": true }"
1037       "}"
1038     "}",
1039     "\"List.Filter.Movies\": {"
1040       "\"type\": ["
1041         "{ \"type\": \"object\","
1042           "\"properties\": {"
1043             "\"and\": { \"type\": \"array\","
1044               "\"items\": { \"$ref\": \"List.Filter.Movies\" },"
1045               "\"minItems\": 1, \"required\": true"
1046             "}"
1047           "}"
1048         "},"
1049         "{ \"type\": \"object\","
1050           "\"properties\": {"
1051             "\"or\": { \"type\": \"array\","
1052               "\"items\": { \"$ref\": \"List.Filter.Movies\" },"
1053               "\"minItems\": 1, \"required\": true"
1054             "}"
1055           "}"
1056         "},"
1057         "{ \"$ref\": \"List.Filter.Rule.Movies\" }"
1058       "]"
1059     "}",
1060     "\"List.Filter.TVShows\": {"
1061       "\"type\": ["
1062         "{ \"type\": \"object\","
1063           "\"properties\": {"
1064             "\"and\": { \"type\": \"array\","
1065               "\"items\": { \"$ref\": \"List.Filter.TVShows\" },"
1066               "\"minItems\": 1, \"required\": true"
1067             "}"
1068           "}"
1069         "},"
1070         "{ \"type\": \"object\","
1071           "\"properties\": {"
1072             "\"or\": { \"type\": \"array\","
1073               "\"items\": { \"$ref\": \"List.Filter.TVShows\" },"
1074               "\"minItems\": 1, \"required\": true"
1075             "}"
1076           "}"
1077         "},"
1078         "{ \"$ref\": \"List.Filter.Rule.TVShows\" }"
1079       "]"
1080     "}",
1081     "\"List.Filter.Episodes\": {"
1082       "\"type\": ["
1083         "{ \"type\": \"object\","
1084           "\"properties\": {"
1085             "\"and\": { \"type\": \"array\","
1086               "\"items\": { \"$ref\": \"List.Filter.Episodes\" },"
1087               "\"minItems\": 1, \"required\": true"
1088             "}"
1089           "}"
1090         "},"
1091         "{ \"type\": \"object\","
1092           "\"properties\": {"
1093             "\"or\": { \"type\": \"array\","
1094               "\"items\": { \"$ref\": \"List.Filter.Episodes\" },"
1095               "\"minItems\": 1, \"required\": true"
1096             "}"
1097           "}"
1098         "},"
1099         "{ \"$ref\": \"List.Filter.Rule.Episodes\" }"
1100       "]"
1101     "}",
1102     "\"List.Filter.MusicVideos\": {"
1103       "\"type\": ["
1104         "{ \"type\": \"object\","
1105           "\"properties\": {"
1106             "\"and\": { \"type\": \"array\","
1107               "\"items\": { \"$ref\": \"List.Filter.MusicVideos\" },"
1108               "\"minItems\": 1, \"required\": true"
1109             "}"
1110           "}"
1111         "},"
1112         "{ \"type\": \"object\","
1113           "\"properties\": {"
1114             "\"or\": { \"type\": \"array\","
1115               "\"items\": { \"$ref\": \"List.Filter.MusicVideos\" },"
1116               "\"minItems\": 1, \"required\": true"
1117             "}"
1118           "}"
1119         "},"
1120         "{ \"$ref\": \"List.Filter.Rule.MusicVideos\" }"
1121       "]"
1122     "}",
1123     "\"List.Filter.Artists\": {"
1124       "\"type\": ["
1125         "{ \"type\": \"object\","
1126           "\"properties\": {"
1127             "\"and\": { \"type\": \"array\","
1128               "\"items\": { \"$ref\": \"List.Filter.Artists\" },"
1129               "\"minItems\": 1, \"required\": true"
1130             "}"
1131           "}"
1132         "},"
1133         "{ \"type\": \"object\","
1134           "\"properties\": {"
1135             "\"or\": { \"type\": \"array\","
1136               "\"items\": { \"$ref\": \"List.Filter.Artists\" },"
1137               "\"minItems\": 1, \"required\": true"
1138             "}"
1139           "}"
1140         "},"
1141         "{ \"$ref\": \"List.Filter.Rule.Artists\" }"
1142       "]"
1143     "}",
1144     "\"List.Filter.Albums\": {"
1145       "\"type\": ["
1146         "{ \"type\": \"object\","
1147           "\"properties\": {"
1148             "\"and\": { \"type\": \"array\","
1149               "\"items\": { \"$ref\": \"List.Filter.Albums\" },"
1150               "\"minItems\": 1, \"required\": true"
1151             "}"
1152           "}"
1153         "},"
1154         "{ \"type\": \"object\","
1155           "\"properties\": {"
1156             "\"or\": { \"type\": \"array\","
1157               "\"items\": { \"$ref\": \"List.Filter.Albums\" },"
1158               "\"minItems\": 1, \"required\": true"
1159             "}"
1160           "}"
1161         "},"
1162         "{ \"$ref\": \"List.Filter.Rule.Albums\" }"
1163       "]"
1164     "}",
1165     "\"List.Filter.Songs\": {"
1166       "\"type\": ["
1167         "{ \"type\": \"object\","
1168           "\"properties\": {"
1169             "\"and\": { \"type\": \"array\","
1170               "\"items\": { \"$ref\": \"List.Filter.Songs\" },"
1171               "\"minItems\": 1, \"required\": true"
1172             "}"
1173           "}"
1174         "},"
1175         "{ \"type\": \"object\","
1176           "\"properties\": {"
1177             "\"or\": { \"type\": \"array\","
1178               "\"items\": { \"$ref\": \"List.Filter.Songs\" },"
1179               "\"minItems\": 1, \"required\": true"
1180             "}"
1181           "}"
1182         "},"
1183         "{ \"$ref\": \"List.Filter.Rule.Songs\" }"
1184       "]"
1185     "}",
1186     "\"List.Filter.Textures\": {"
1187       "\"type\": ["
1188         "{ \"type\": \"object\","
1189           "\"properties\": {"
1190             "\"and\": { \"type\": \"array\","
1191               "\"items\": { \"$ref\": \"List.Filter.Textures\" },"
1192               "\"minItems\": 1, \"required\": true"
1193             "}"
1194           "}"
1195         "},"
1196         "{ \"type\": \"object\","
1197           "\"properties\": {"
1198             "\"or\": { \"type\": \"array\","
1199               "\"items\": { \"$ref\": \"List.Filter.Textures\" },"
1200               "\"minItems\": 1, \"required\": true"
1201             "}"
1202           "}"
1203         "},"
1204         "{ \"$ref\": \"List.Filter.Rule.Textures\" }"
1205       "]"
1206     "}",
1207     "\"List.Item.Base\": {"
1208       "\"extends\": [ \"Video.Details.File\", \"Audio.Details.Media\" ],"
1209       "\"properties\": {"
1210         "\"id\": { \"$ref\": \"Library.Id\" },"
1211         "\"type\": { \"type\": \"string\", \"enum\": [ \"unknown\", \"movie\", \"episode\", \"musicvideo\", \"song\", \"picture\", \"channel\" ] },"
1212         "\"albumartist\": { \"$ref\": \"Array.String\" },"
1213         "\"album\": { \"type\": \"string\" },"
1214         "\"track\": { \"type\": \"integer\" },"
1215         "\"duration\": { \"type\": \"integer\" },"
1216         "\"comment\": { \"type\": \"string\" },"
1217         "\"lyrics\": { \"type\": \"string\" },"
1218         "\"musicbrainztrackid\": { \"type\": \"string\" },"
1219         "\"musicbrainzartistid\": { \"type\": \"string\" },"
1220         "\"trailer\": { \"type\": \"string\" },"
1221         "\"tagline\": { \"type\": \"string\" },"
1222         "\"plotoutline\": { \"type\": \"string\" },"
1223         "\"originaltitle\": { \"type\": \"string\" },"
1224         "\"writer\": { \"$ref\": \"Array.String\" },"
1225         "\"studio\": { \"$ref\": \"Array.String\" },"
1226         "\"mpaa\": { \"type\": \"string\" },"
1227         "\"cast\": { \"$ref\": \"Video.Cast\" },"
1228         "\"country\": { \"$ref\": \"Array.String\" },"
1229         "\"imdbnumber\": { \"type\": \"string\" },"
1230         "\"premiered\": { \"type\": \"string\" },"
1231         "\"productioncode\": { \"type\": \"string\" },"
1232         "\"set\": { \"type\": \"string\" },"
1233         "\"showlink\": { \"$ref\": \"Array.String\" },"
1234         "\"top250\": { \"type\": \"integer\" },"
1235         "\"votes\": { \"type\": \"string\" },"
1236         "\"firstaired\": { \"type\": \"string\" },"
1237         "\"season\": { \"type\": \"integer\" },"
1238         "\"episode\": { \"type\": \"integer\" },"
1239         "\"showtitle\": { \"type\": \"string\" },"
1240         "\"albumid\": { \"$ref\": \"Library.Id\" },"
1241         "\"setid\": { \"$ref\": \"Library.Id\" },"
1242         "\"tvshowid\": { \"$ref\": \"Library.Id\" },"
1243         "\"watchedepisodes\": { \"type\": \"integer\" },"
1244         "\"disc\": { \"type\": \"integer\" },"
1245         "\"tag\": { \"$ref\": \"Array.String\" },"
1246         "\"albumartistid\": { \"$ref\": \"Array.Integer\" },"
1247         "\"uniqueid\": { \"type\": \"object\", \"additionalProperties\": { \"type\": \"string\", \"minLength\": 1 } },"
1248         "\"episodeguide\": { \"type\": \"string\" },"
1249         "\"sorttitle\": { \"type\": \"string\" },"
1250         "\"description\": { \"type\": \"string\" },"
1251         "\"theme\": { \"$ref\": \"Array.String\" },"
1252         "\"mood\": { \"$ref\": \"Array.String\" },"
1253         "\"style\": { \"$ref\": \"Array.String\" },"
1254         "\"albumlabel\": { \"type\": \"string\" }"
1255       "}"
1256     "}",
1257     "\"List.Fields.All\": {"
1258       "\"extends\": \"Item.Fields.Base\","
1259       "\"items\": { \"type\": \"string\","
1260         "\"enum\": [ \"title\", \"artist\", \"albumartist\", \"genre\", \"year\", \"rating\","
1261                   "\"album\", \"track\", \"duration\", \"comment\", \"lyrics\", \"musicbrainztrackid\","
1262                   "\"musicbrainzartistid\", \"musicbrainzalbumid\", \"musicbrainzalbumartistid\","
1263                   "\"playcount\", \"fanart\", \"director\", \"trailer\", \"tagline\", \"plot\","
1264                   "\"plotoutline\", \"originaltitle\", \"lastplayed\", \"writer\", \"studio\","
1265                   "\"mpaa\", \"cast\", \"country\", \"imdbnumber\", \"premiered\", \"productioncode\","
1266                   "\"runtime\", \"set\", \"showlink\", \"streamdetails\", \"top250\", \"votes\","
1267                   "\"firstaired\", \"season\", \"episode\", \"showtitle\", \"thumbnail\", \"file\","
1268                   "\"resume\", \"artistid\", \"albumid\", \"tvshowid\", \"setid\", \"watchedepisodes\","
1269                   "\"disc\", \"tag\", \"art\", \"genreid\", \"displayartist\", \"albumartistid\","
1270                   "\"description\", \"theme\", \"mood\", \"style\", \"albumlabel\", \"sorttitle\","
1271                   "\"episodeguide\", \"uniqueid\", \"dateadded\", \"channel\", \"channeltype\", \"hidden\","
1272                   "\"locked\", \"channelnumber\", \"starttime\", \"endtime\" ]"
1273       "}"
1274     "}",
1275     "\"List.Item.All\": {"
1276       "\"extends\": \"List.Item.Base\","
1277       "\"properties\": {"
1278         "\"channel\": { \"type\": \"string\" },"
1279         "\"channeltype\": { \"$ref\": \"PVR.Channel.Type\" },"
1280         "\"hidden\": { \"type\": \"boolean\" },"
1281         "\"locked\": { \"type\": \"boolean\" },"
1282         "\"channelnumber\": { \"type\": \"integer\" },"
1283         "\"starttime\": { \"type\": \"string\" },"
1284         "\"endtime\": { \"type\": \"string\" }"
1285       "}"
1286     "}",
1287     "\"List.Fields.Files\": {"
1288       "\"extends\": \"Item.Fields.Base\","
1289       "\"items\": { \"type\": \"string\","
1290         "\"enum\": [ \"title\", \"artist\", \"albumartist\", \"genre\", \"year\", \"rating\","
1291                   "\"album\", \"track\", \"duration\", \"comment\", \"lyrics\", \"musicbrainztrackid\","
1292                   "\"musicbrainzartistid\", \"musicbrainzalbumid\", \"musicbrainzalbumartistid\","
1293                   "\"playcount\", \"fanart\", \"director\", \"trailer\", \"tagline\", \"plot\","
1294                   "\"plotoutline\", \"originaltitle\", \"lastplayed\", \"writer\", \"studio\","
1295                   "\"mpaa\", \"cast\", \"country\", \"imdbnumber\", \"premiered\", \"productioncode\","
1296                   "\"runtime\", \"set\", \"showlink\", \"streamdetails\", \"top250\", \"votes\","
1297                   "\"firstaired\", \"season\", \"episode\", \"showtitle\", \"thumbnail\", \"file\","
1298                   "\"resume\", \"artistid\", \"albumid\", \"tvshowid\", \"setid\", \"watchedepisodes\","
1299                   "\"disc\", \"tag\", \"art\", \"genreid\", \"displayartist\", \"albumartistid\","
1300                   "\"description\", \"theme\", \"mood\", \"style\", \"albumlabel\", \"sorttitle\","
1301                   "\"episodeguide\", \"uniqueid\", \"dateadded\", \"size\", \"lastmodified\", \"mimetype\" ]"
1302       "}"
1303     "}",
1304     "\"List.Item.File\": {"
1305       "\"extends\": \"List.Item.Base\","
1306       "\"properties\": {"
1307         "\"file\": { \"type\": \"string\", \"required\": true },"
1308         "\"filetype\": { \"type\": \"string\", \"enum\": [ \"file\", \"directory\" ], \"required\": true },"
1309         "\"size\": { \"type\": \"integer\", \"description\": \"Size of the file in bytes\" },"
1310         "\"lastmodified\": { \"type\": \"string\" },"
1311         "\"mimetype\": { \"type\": \"string\" }"
1312       "}"
1313     "}",
1314     "\"List.Items.Sources\": {"
1315       "\"type\": \"array\","
1316       "\"items\": {"
1317         "\"extends\": \"Item.Details.Base\","
1318         "\"properties\": {"
1319           "\"file\": { \"type\": \"string\", \"required\": true }"
1320         "}"
1321       "}"
1322     "}",
1323     "\"Addon.Types\": {"
1324       "\"type\": \"string\","
1325       "\"enum\": [ \"unknown\", \"xbmc.metadata.scraper.albums\", \"xbmc.metadata.scraper.artists\", \"xbmc.metadata.scraper.movies\","
1326                 "\"xbmc.metadata.scraper.musicvideos\", \"xbmc.metadata.scraper.tvshows\", \"xbmc.ui.screensaver\","
1327                 "\"xbmc.player.musicviz\", \"xbmc.python.pluginsource\", \"xbmc.python.script\", \"xbmc.python.weather\","
1328                 "\"xbmc.python.subtitles\", \"xbmc.python.lyrics\", \"xbmc.gui.skin\", \"xbmc.gui.webinterface\","
1329                 "\"xbmc.pvrclient\", \"xbmc.addon.video\", \"xbmc.addon.audio\", \"xbmc.addon.image\", \"xbmc.addon.executable\","
1330                 "\"xbmc.service\" ],"
1331       "\"default\": \"unknown\""
1332     "}",
1333     "\"Addon.Content\": {"
1334       "\"type\": \"string\","
1335       "\"enum\": [ \"unknown\", \"video\", \"audio\", \"image\", \"executable\" ],"
1336       "\"default\": \"unknown\""
1337     "}",
1338     "\"Addon.Fields\": {"
1339       "\"extends\": \"Item.Fields.Base\","
1340       "\"items\": { \"type\": \"string\","
1341         "\"enum\": [ \"name\", \"version\", \"summary\", \"description\", \"path\", \"author\", \"thumbnail\", \"disclaimer\", \"fanart\","
1342                   "\"dependencies\", \"broken\", \"extrainfo\", \"rating\", \"enabled\" ]"
1343       "}"
1344     "}",
1345     "\"Addon.Details\": {"
1346       "\"extends\": \"Item.Details.Base\","
1347       "\"properties\": {"
1348         "\"addonid\": { \"type\": \"string\", \"required\": true },"
1349         "\"type\": { \"$ref\": \"Addon.Types\", \"required\": true },"
1350         "\"name\": { \"type\": \"string\" },"
1351         "\"version\": { \"type\": \"string\" },"
1352         "\"summary\": { \"type\": \"string\" },"
1353         "\"description\": { \"type\": \"string\" },"
1354         "\"path\": { \"type\": \"string\" },"
1355         "\"author\": { \"type\": \"string\" },"
1356         "\"thumbnail\": { \"type\": \"string\" },"
1357         "\"disclaimer\": { \"type\": \"string\" },"
1358         "\"fanart\": { \"type\": \"string\" },"
1359         "\"dependencies\": { \"type\": \"array\","
1360           "\"items\": { \"type\": \"object\","
1361             "\"properties\": {"
1362               "\"addonid\": { \"type\": \"string\", \"required\": true },"
1363               "\"version\": { \"type\": \"string\", \"required\": true },"
1364               "\"optional\": { \"type\": \"boolean\", \"required\": true }"
1365             "}"
1366           "}"
1367         "},"
1368         "\"broken\": { \"type\": [ \"boolean\", \"string\" ] },"
1369         "\"extrainfo\": { \"type\": \"array\","
1370           "\"items\": { \"type\": \"object\","
1371             "\"properties\": {"
1372               "\"key\": { \"type\": \"string\", \"required\": true },"
1373               "\"value\": { \"type\": \"string\", \"required\": true }"
1374             "}"
1375           "}"
1376         "},"
1377         "\"rating\": { \"type\": \"integer\" },"
1378         "\"enabled\": { \"type\": \"boolean\" }"
1379       "}"
1380     "}",
1381     "\"GUI.Property.Name\": {"
1382       "\"type\": \"string\","
1383       "\"enum\": [ \"currentwindow\", \"currentcontrol\", \"skin\", \"fullscreen\", \"stereoscopicmode\" ]"
1384     "}",
1385     "\"GUI.Property.Value\": {"
1386       "\"type\": \"object\","
1387       "\"properties\": {"
1388         "\"currentwindow\": { \"type\": \"object\","
1389           "\"properties\": {"
1390             "\"id\": { \"type\": \"integer\", \"required\": true },"
1391             "\"label\": { \"type\": \"string\", \"required\": true }"
1392           "}"
1393         "},"
1394         "\"currentcontrol\": { \"type\": \"object\","
1395           "\"properties\": {"
1396             "\"label\": { \"type\": \"string\", \"required\": true }"
1397           "}"
1398         "},"
1399         "\"skin\": { \"type\": \"object\","
1400           "\"properties\": {"
1401             "\"id\": { \"type\": \"string\", \"required\": true, \"minLength\": 1 },"
1402             "\"name\": { \"type\": \"string\" }"
1403           "}"
1404         "},"
1405         "\"fullscreen\": { \"type\": \"boolean\" },"
1406         "\"stereoscopicmode\": { \"$ref\": \"GUI.Stereoscopy.Mode\" }"
1407       "}"
1408     "}",
1409     "\"GUI.Stereoscopy.Mode\": {"
1410       "\"type\": \"object\","
1411       "\"properties\": {"
1412         "\"mode\": { \"type\": \"string\", \"required\": true, \"enum\": [ \"off\", \"split_vertical\", \"split_horizontal\", \"row_interleaved\", \"hardware_based\", \"anaglyph_cyan_red\", \"anaglyph_green_magenta\", \"monoscopic\" ] },"
1413         "\"label\": { \"type\": \"string\", \"required\": true }"
1414       "}"
1415     "}",
1416     "\"System.Property.Name\": {"
1417       "\"type\": \"string\","
1418       "\"enum\": [ \"canshutdown\", \"cansuspend\", \"canhibernate\", \"canreboot\" ]"
1419     "}",
1420     "\"System.Property.Value\": {"
1421       "\"type\": \"object\","
1422       "\"properties\": {"
1423         "\"canshutdown\": { \"type\": \"boolean\" },"
1424         "\"cansuspend\": { \"type\": \"boolean\" },"
1425         "\"canhibernate\": { \"type\": \"boolean\" },"
1426         "\"canreboot\": { \"type\": \"boolean\" }"
1427       "}"
1428     "}",
1429     "\"Application.Property.Name\": {"
1430       "\"type\": \"string\","
1431       "\"enum\": [ \"volume\", \"muted\", \"name\", \"version\" ]"
1432     "}",
1433     "\"Application.Property.Value\": {"
1434       "\"type\": \"object\","
1435       "\"properties\": {"
1436         "\"volume\": { \"type\": \"integer\", \"minimum\": 0, \"maximum\": 100 },"
1437         "\"muted\": { \"type\": \"boolean\" },"
1438         "\"name\": { \"type\": \"string\", \"minLength\": 1 },"
1439         "\"version\": { \"type\": \"object\","
1440           "\"properties\": {"
1441             "\"major\": { \"type\": \"integer\", \"minimum\": 0, \"required\": true },"
1442             "\"minor\": { \"type\": \"integer\", \"minimum\": 0, \"required\": true },"
1443             "\"revision\": { \"type\": [ \"string\", \"integer\" ] },"
1444             "\"tag\": { \"type\": \"string\", \"enum\": [ \"prealpha\", \"alpha\", \"beta\", \"releasecandidate\", \"stable\" ], \"required\": true }"
1445           "}"
1446         "}"
1447       "}"
1448     "}",
1449     "\"Favourite.Fields.Favourite\": {"
1450       "\"extends\": \"Item.Fields.Base\","
1451       "\"items\": { \"type\": \"string\","
1452         "\"enum\": [ \"window\", \"windowparameter\", \"thumbnail\", \"path\" ]"
1453       "}"
1454     "}",
1455     "\"Favourite.Type\": {"
1456       "\"type\": \"string\","
1457       "\"enum\": [ \"media\", \"window\", \"script\", \"unknown\" ]"
1458     "}",
1459     "\"Favourite.Details.Favourite\": {"
1460       "\"type\": \"object\","
1461       "\"properties\": {"
1462         "\"title\": { \"type\": \"string\", \"required\": true },"
1463         "\"type\": { \"$ref\": \"Favourite.Type\", \"required\": true },"
1464         "\"path\": { \"type\": \"string\" },"
1465         "\"window\": { \"type\": \"string\" },"
1466         "\"windowparameter\": { \"type\": \"string\" },"
1467         "\"thumbnail\": { \"type\": \"string\" }"
1468       "},"
1469       "\"additionalProperties\": false"
1470     "}",
1471     "\"Setting.Type\": {"
1472       "\"type\": \"string\","
1473       "\"enum\": ["
1474         "\"boolean\", \"integer\", \"number\", \"string\", \"action\", \"list\","
1475         "\"path\", \"addon\""
1476       "]"
1477     "}",
1478     "\"Setting.Level\": {"
1479       "\"type\": \"string\","
1480       "\"enum\": [ \"basic\", \"standard\", \"advanced\", \"expert\" ]"
1481     "}",
1482     "\"Setting.Value\": {"
1483       "\"type\": ["
1484         "{ \"type\": \"boolean\", \"required\": true },"
1485         "{ \"type\": \"integer\", \"required\": true },"
1486         "{ \"type\": \"number\", \"required\": true },"
1487         "{ \"type\": \"string\", \"required\": true }"
1488       "]"
1489     "}",
1490     "\"Setting.Value.List\": {"
1491       "\"type\": \"array\","
1492       "\"items\": { \"$ref\": \"Setting.Value\" }"
1493     "}",
1494     "\"Setting.Value.Extended\": {"
1495       "\"type\": ["
1496         "{ \"type\": \"boolean\", \"required\": true },"
1497         "{ \"type\": \"integer\", \"required\": true },"
1498         "{ \"type\": \"number\", \"required\": true },"
1499         "{ \"type\": \"string\", \"required\": true },"
1500         "{ \"$ref\": \"Setting.Value.List\", \"required\": true }"
1501       "]"
1502     "}",
1503     "\"Setting.Details.ControlBase\": {"
1504       "\"type\": \"object\","
1505       "\"properties\": {"
1506         "\"type\": { \"type\": \"string\", \"required\": true },"
1507         "\"format\": { \"type\": \"string\", \"required\": true },"
1508         "\"delayed\": { \"type\": \"boolean\", \"required\": true }"
1509       "}"
1510     "}",
1511     "\"Setting.Details.ControlCheckmark\": {"
1512       "\"extends\": \"Setting.Details.ControlBase\","
1513       "\"properties\": {"
1514         "\"type\": { \"type\": \"string\", \"required\": true, \"enum\": [ \"toggle\" ] },"
1515         "\"format\": { \"type\": \"string\", \"required\": true, \"enum\": [ \"boolean\" ] }"
1516       "}"
1517     "}",
1518     "\"Setting.Details.ControlSpinner\": {"
1519       "\"extends\": \"Setting.Details.ControlBase\","
1520       "\"properties\": {"
1521         "\"type\": { \"type\": \"string\", \"required\": true, \"enum\": [ \"spinner\" ] },"
1522         "\"formatlabel\": { \"type\": \"string\" },"
1523         "\"minimumlabel\": { \"type\": \"string\" }"
1524       "}"
1525     "}",
1526     "\"Setting.Details.ControlHeading\": {"
1527       "\"extends\": \"Setting.Details.ControlBase\","
1528       "\"properties\": {"
1529         "\"heading\": { \"type\": \"string\" }"
1530       "}"
1531     "}",
1532     "\"Setting.Details.ControlEdit\": {"
1533       "\"extends\": \"Setting.Details.ControlHeading\","
1534       "\"properties\": {"
1535         "\"type\": { \"type\": \"string\", \"required\": true, \"enum\": [ \"edit\" ] },"
1536         "\"hidden\": { \"type\": \"boolean\", \"required\": true },"
1537         "\"verifynewvalue\": { \"type\": \"boolean\", \"required\": true }"
1538       "}"
1539     "}",
1540     "\"Setting.Details.ControlButton\": {"
1541       "\"extends\": \"Setting.Details.ControlHeading\","
1542       "\"properties\": {"
1543         "\"type\": { \"type\": \"string\", \"required\": true, \"enum\": [ \"button\" ] }"
1544       "}"
1545     "}",
1546     "\"Setting.Details.ControlList\": {"
1547       "\"extends\": \"Setting.Details.ControlHeading\","
1548       "\"properties\": {"
1549         "\"type\": { \"type\": \"string\", \"required\": true, \"enum\": [ \"list\" ] },"
1550         "\"multiselect\": { \"type\": \"boolean\", \"required\": true }"
1551       "}"
1552     "}",
1553     "\"Setting.Details.Control\": {"
1554       "\"type\": ["
1555         "{ \"$ref\": \"Setting.Details.ControlCheckmark\", \"required\": true },"
1556         "{ \"$ref\": \"Setting.Details.ControlSpinner\", \"required\": true },"
1557         "{ \"$ref\": \"Setting.Details.ControlEdit\", \"required\": true },"
1558         "{ \"$ref\": \"Setting.Details.ControlButton\", \"required\": true },"
1559         "{ \"$ref\": \"Setting.Details.ControlList\", \"required\": true }"
1560       "]"
1561     "}",
1562     "\"Setting.Details.Base\": {"
1563       "\"type\": \"object\","
1564       "\"properties\": {"
1565         "\"id\": { \"type\": \"string\", \"required\": true, \"minLength\": 1 },"
1566         "\"label\": { \"type\": \"string\", \"required\": true },"
1567         "\"help\": { \"type\": \"string\" }"
1568       "}"
1569     "}",
1570     "\"Setting.Details.SettingBase\": {"
1571       "\"extends\": \"Setting.Details.Base\","
1572       "\"properties\": {"
1573         "\"type\": { \"$ref\": \"Setting.Type\", \"required\": true },"
1574         "\"enabled\": { \"type\": \"boolean\", \"required\": true },"
1575         "\"level\": { \"type\": \"integer\", \"required\": true },"
1576         "\"parent\": { \"type\": \"string\" },"
1577         "\"control\": { \"$ref\": \"Setting.Details.Control\" }"
1578       "},"
1579       "\"additionalProperties\": false"
1580     "}",
1581     "\"Setting.Details.SettingBool\": {"
1582       "\"extends\": \"Setting.Details.SettingBase\","
1583       "\"properties\": {"
1584         "\"value\": { \"type\": \"boolean\", \"required\": true },"
1585         "\"default\": { \"type\": \"boolean\", \"required\": true }"
1586       "},"
1587       "\"additionalProperties\": false"
1588     "}",
1589     "\"Setting.Details.SettingInt\": {"
1590       "\"extends\": \"Setting.Details.SettingBase\","
1591       "\"properties\": {"
1592         "\"value\": { \"type\": \"integer\", \"required\": true },"
1593         "\"default\": { \"type\": \"integer\", \"required\": true },"
1594         "\"minimum\": { \"type\": \"integer\" },"
1595         "\"step\": { \"type\": \"integer\" },"
1596         "\"maximum\": { \"type\": \"integer\" },"
1597         "\"options\": { \"type\": \"array\","
1598           "\"items\": { \"type\": \"object\","
1599             "\"properties\": {"
1600               "\"label\": { \"type\": \"string\", \"required\": true },"
1601               "\"value\": { \"type\": \"integer\", \"required\": true }"
1602             "}"
1603           "}"
1604         "}"
1605       "},"
1606       "\"additionalProperties\": false"
1607     "}",
1608     "\"Setting.Details.SettingNumber\": {"
1609       "\"extends\": \"Setting.Details.SettingBase\","
1610       "\"properties\": {"
1611         "\"value\": { \"type\": \"number\", \"required\": true },"
1612         "\"default\": { \"type\": \"number\", \"required\": true },"
1613         "\"minimum\": { \"type\": \"number\", \"required\": true },"
1614         "\"step\": { \"type\": \"number\", \"required\": true },"
1615         "\"maximum\": { \"type\": \"number\", \"required\": true }"
1616       "},"
1617       "\"additionalProperties\": false"
1618     "}",
1619     "\"Setting.Details.SettingString\": {"
1620       "\"extends\": \"Setting.Details.SettingBase\","
1621       "\"properties\": {"
1622         "\"value\": { \"type\": \"string\", \"required\": true },"
1623         "\"default\": { \"type\": \"string\", \"required\": true },"
1624         "\"allowempty\": { \"type\": \"boolean\", \"required\": true },"
1625         "\"options\": { \"type\": \"array\","
1626           "\"items\": { \"type\": \"object\","
1627             "\"properties\": {"
1628               "\"label\": { \"type\": \"string\", \"required\": true },"
1629               "\"value\": { \"type\": \"string\", \"required\": true }"
1630             "}"
1631           "}"
1632         "}"
1633       "}"
1634     "}",
1635     "\"Setting.Details.SettingAction\": {"
1636       "\"extends\": \"Setting.Details.SettingBase\","
1637       "\"additionalProperties\": false"
1638     "}",
1639     "\"Setting.Details.SettingList\": {"
1640       "\"extends\": \"Setting.Details.SettingBase\","
1641       "\"properties\": {"
1642         "\"value\": { \"$ref\": \"Setting.Value.List\", \"required\": true },"
1643         "\"default\": { \"$ref\": \"Setting.Value.List\", \"required\": true },"
1644         "\"elementtype\": { \"$ref\": \"Setting.Type\", \"required\": true },"
1645         "\"definition\": { \"$ref\": \"Setting.Details.Setting\", \"required\": true },"
1646         "\"delimiter\": { \"type\": \"string\", \"required\": true },"
1647         "\"minimumItems\": { \"type\": \"integer\" },"
1648         "\"maximumItems\": { \"type\": \"integer\" }"
1649       "},"
1650       "\"additionalProperties\": false"
1651     "}",
1652     "\"Setting.Details.SettingPath\": {"
1653       "\"extends\": \"Setting.Details.SettingString\","
1654       "\"properties\": {"
1655         "\"writable\": { \"type\": \"boolean\", \"required\": true },"
1656         "\"sources\": { \"type\": \"array\", \"items\": { \"type\": \"string\" } }"
1657       "},"
1658       "\"additionalProperties\": false"
1659     "}",
1660     "\"Setting.Details.SettingAddon\": {"
1661       "\"extends\": \"Setting.Details.SettingString\","
1662       "\"properties\": {"
1663         "\"addontype\": { \"$ref\": \"Addon.Types\", \"required\": true }"
1664       "},"
1665       "\"additionalProperties\": false"
1666     "}",
1667     "\"Setting.Details.Setting\": {"
1668       "\"type\": ["
1669         "{ \"$ref\": \"Setting.Details.SettingBool\", \"required\": true },"
1670         "{ \"$ref\": \"Setting.Details.SettingInt\", \"required\": true },"
1671         "{ \"$ref\": \"Setting.Details.SettingNumber\", \"required\": true },"
1672         "{ \"$ref\": \"Setting.Details.SettingString\", \"required\": true },"
1673         "{ \"$ref\": \"Setting.Details.SettingAction\", \"required\": true },"
1674         "{ \"$ref\": \"Setting.Details.SettingList\", \"required\": true },"
1675         "{ \"$ref\": \"Setting.Details.SettingPath\", \"required\": true },"
1676         "{ \"$ref\": \"Setting.Details.SettingAddon\", \"required\": true }"
1677       "]"
1678     "}",
1679     "\"Setting.Details.Group\": {"
1680       "\"type\": \"object\","
1681       "\"properties\": {"
1682         "\"id\": { \"type\": \"string\", \"required\": true, \"minLength\": 1 },"
1683         "\"settings\": {"
1684           "\"type\": \"array\","
1685           "\"items\": { \"$ref\": \"Setting.Details.Setting\" },"
1686           "\"minItems\": 1,"
1687           "\"uniqueItems\": true"
1688         "}"
1689       "},"
1690       "\"additionalProperties\": false"
1691     "}",
1692     "\"Setting.Details.Category\": {"
1693       "\"extends\": \"Setting.Details.Base\","
1694       "\"properties\": {"
1695         "\"groups\": {"
1696           "\"type\": \"array\","
1697           "\"items\": { \"$ref\": \"Setting.Details.Group\" },"
1698           "\"minItems\": 1,"
1699           "\"uniqueItems\": true"
1700         "}"
1701       "},"
1702       "\"additionalProperties\": false"
1703     "}",
1704     "\"Setting.Details.Section\": {"
1705       "\"extends\": \"Setting.Details.Base\","
1706       "\"properties\": {"
1707         "\"categories\": {"
1708           "\"type\": \"array\","
1709           "\"items\": { \"$ref\": \"Setting.Details.Category\" },"
1710           "\"minItems\": 1,"
1711           "\"uniqueItems\": true"
1712         "}"
1713       "},"
1714       "\"additionalProperties\": false"
1715     "}"
1716   };
1717
1718   const char* const JSONRPC_SERVICE_METHODS[] = {  
1719     "\"JSONRPC.Introspect\": {"
1720       "\"type\": \"method\","
1721       "\"description\": \"Enumerates all actions and descriptions\","
1722       "\"transport\": \"Response\","
1723       "\"permission\": \"ReadData\","
1724       "\"params\": ["
1725         "{ \"name\": \"getdescriptions\", \"type\": \"boolean\", \"default\": true },"
1726         "{ \"name\": \"getmetadata\", \"type\": \"boolean\", \"default\": false },"
1727         "{ \"name\": \"filterbytransport\", \"type\": \"boolean\", \"default\": true },"
1728         "{ \"name\": \"filter\", \"type\": \"object\","
1729           "\"properties\": {"
1730             "\"id\": { \"type\": \"string\", \"required\": true, \"description\": \"Name of a namespace, method or type\" },"
1731             "\"type\": { \"type\": \"string\", \"required\": true, \"enum\": [ \"method\", \"namespace\", \"type\", \"notification\" ], \"description\": \"Type of the given name\" },"
1732             "\"getreferences\": { \"type\": \"boolean\", \"default\": true, \"description\": \"Whether or not to print the schema for referenced types\" }"
1733           "}"
1734         "}"
1735       "],"
1736       "\"returns\": \"object\""
1737     "}",
1738     "\"JSONRPC.Version\": {"
1739       "\"type\": \"method\","
1740       "\"description\": \"Retrieve the JSON-RPC protocol version.\","
1741       "\"transport\": \"Response\","
1742       "\"permission\": \"ReadData\","
1743       "\"params\": [],"
1744       "\"returns\": {"
1745         "\"type\": \"object\","
1746         "\"properties\": {"
1747           "\"version\": { \"type\": \"object\", \"required\": true,"
1748             "\"properties\": {"
1749               "\"major\": { \"type\": \"integer\", \"minimum\": 0, \"required\": true, \"description\": \"Bumped on backwards incompatible changes to the API definition\" },"
1750               "\"minor\": { \"type\": \"integer\", \"minimum\": 0, \"required\": true, \"description\": \"Bumped on backwards compatible additions/changes to the API definition\" },"
1751               "\"patch\": { \"type\": \"integer\", \"minimum\": 0, \"required\": true, \"description\": \"Bumped on any changes to the internal implementation but not to the API definition\" }"
1752             "}"
1753           "}"
1754         "}"
1755       "}"
1756     "}",
1757     "\"JSONRPC.Permission\": {"
1758       "\"type\": \"method\","
1759       "\"description\": \"Retrieve the clients permissions\","
1760       "\"transport\": \"Response\","
1761       "\"permission\": \"ReadData\","
1762       "\"params\": [],"
1763       "\"returns\": {"
1764         "\"type\": \"object\","
1765         "\"properties\": {"
1766           "\"ReadData\": { \"type\": \"boolean\", \"required\": true },"
1767           "\"ControlPlayback\": { \"type\": \"boolean\", \"required\": true },"
1768           "\"ControlNotify\": { \"type\": \"boolean\", \"required\": true },"
1769           "\"ControlPower\": { \"type\": \"boolean\", \"required\": true },"
1770           "\"UpdateData\": { \"type\": \"boolean\", \"required\": true },"
1771           "\"RemoveData\": { \"type\": \"boolean\", \"required\": true },"
1772           "\"Navigate\": { \"type\": \"boolean\", \"required\": true },"
1773           "\"WriteFile\": { \"type\": \"boolean\", \"required\": true },"
1774           "\"ControlSystem\": { \"type\": \"boolean\", \"required\": true },"
1775           "\"ControlGUI\": { \"type\": \"boolean\", \"required\": true },"
1776           "\"ManageAddon\": { \"type\": \"boolean\", \"required\": true },"
1777           "\"ExecuteAddon\": { \"type\": \"boolean\", \"required\": true },"
1778           "\"ControlPVR\": { \"type\": \"boolean\", \"required\": true }"
1779         "}"
1780       "}"
1781     "}",
1782     "\"JSONRPC.Ping\": {"
1783       "\"type\": \"method\","
1784       "\"description\": \"Ping responder\","
1785       "\"transport\": \"Response\","
1786       "\"permission\": \"ReadData\","
1787       "\"params\": [],"
1788       "\"returns\": \"string\""
1789     "}",
1790     "\"JSONRPC.GetConfiguration\": {"
1791       "\"type\": \"method\","
1792       "\"description\": \"Get client-specific configurations\","
1793       "\"transport\": \"Announcing\","
1794       "\"permission\": \"ReadData\","
1795       "\"params\": [],"
1796       "\"returns\": { \"$ref\": \"Configuration\" }"
1797     "}",
1798     "\"JSONRPC.SetConfiguration\": {"
1799       "\"type\": \"method\","
1800       "\"description\": \"Change the client-specific configuration\","
1801       "\"transport\": \"Announcing\","
1802       "\"permission\": \"ControlNotify\","
1803       "\"params\": ["
1804         "{ \"name\": \"notifications\", \"type\": \"object\","
1805           "\"properties\": {"
1806             "\"Player\": { \"$ref\": \"Optional.Boolean\" },"
1807             "\"Playlist\": { \"$ref\": \"Optional.Boolean\" },"
1808             "\"GUI\": { \"$ref\": \"Optional.Boolean\" },"
1809             "\"System\": { \"$ref\": \"Optional.Boolean\" },"
1810             "\"AudioLibrary\": { \"$ref\": \"Optional.Boolean\" },"
1811             "\"VideoLibrary\": { \"$ref\": \"Optional.Boolean\" },"
1812             "\"Application\": { \"$ref\": \"Optional.Boolean\" },"
1813             "\"Input\": { \"$ref\": \"Optional.Boolean\" },"
1814             "\"Other\": { \"$ref\": \"Optional.Boolean\" }"
1815           "}"
1816         "}"
1817       "],"
1818       "\"returns\": { \"$ref\": \"Configuration\" }"
1819     "}",
1820     "\"JSONRPC.NotifyAll\": {"
1821       "\"type\": \"method\","
1822       "\"description\": \"Notify all other connected clients\","
1823       "\"transport\": \"Response\","
1824       "\"permission\": \"ReadData\","
1825       "\"params\": ["
1826         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
1827         "{ \"name\": \"message\", \"type\": \"string\", \"required\": true },"
1828         "{ \"name\": \"data\", \"type\": \"any\", \"default\": null }"
1829       "],"
1830       "\"returns\": \"any\""
1831     "}",
1832     "\"Player.Open\": {"
1833       "\"type\": \"method\","
1834       "\"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.\","
1835       "\"transport\": \"Response\","
1836       "\"permission\": \"ControlPlayback\","
1837       "\"params\": ["
1838         "{ \"name\": \"item\","
1839           "\"type\": ["
1840             "{ \"type\": \"object\", \"required\": true, \"additionalProperties\": false,"
1841               "\"properties\": {"
1842                 "\"playlistid\": { \"$ref\": \"Playlist.Id\", \"required\": true },"
1843                 "\"position\": { \"$ref\": \"Playlist.Position\", \"default\": 0 }"
1844               "}"
1845             "},"
1846             "{ \"$ref\": \"Playlist.Item\", \"required\": true },"
1847             "{ \"type\": \"object\", \"required\": true, \"additionalProperties\": false,"
1848               "\"properties\": {"
1849                 "\"path\": { \"type\": \"string\", \"required\": true },"
1850                 "\"random\": { \"type\": \"boolean\", \"default\": true, \"description\": \"Deprecated, use the shuffled property of the options parameter instead\" },"
1851                 "\"recursive\": { \"type\": \"boolean\", \"default\": true }"
1852               "}"
1853             "},"
1854             "{ \"type\": \"object\", \"required\": true, \"additionalProperties\": false,"
1855               "\"properties\": {"
1856                 "\"partymode\": { \"type\": ["
1857                     "{ \"type\": \"string\", \"required\": true, \"enum\": [ \"music\", \"video\" ] },"
1858                     "{ \"type\": \"string\", \"required\": true, \"minLength\": 5, \"description\": \"Path to a smartplaylist (*.xsp) file\" }"
1859                   "]"
1860                 "}"
1861               "}"
1862             "},"
1863             "{ \"type\": \"object\", \"required\": true, \"additionalProperties\": false,"
1864               "\"properties\": {"
1865                 "\"channelid\": { \"$ref\": \"Library.Id\", \"required\": true }"
1866               "}"
1867             "}"
1868           "]"
1869         "},"
1870         "{ \"name\": \"options\", \"type\": \"object\", \"additionalProperties\": false,"
1871           "\"properties\": {"
1872             "\"shuffled\": { \"$ref\": \"Optional.Boolean\" },"
1873             "\"repeat\": { \"type\": [ \"null\", { \"$ref\": \"Player.Repeat\", \"required\": true } ], \"default\": null },"
1874             "\"resume\": { \"type\": ["
1875                 "{ \"type\": \"boolean\", \"required\": true, \"description\": \"Whether to resume from the resume point or not\" },"
1876                 "{ \"$ref\": \"Player.Position.Percentage\", \"required\": true, \"description\": \"Percentage value to start from\" },"
1877                 "{ \"$ref\": \"Player.Position.Time\", \"required\": true, \"description\": \"Time to start from\" }"
1878               "],"
1879               "\"default\": false"
1880             "}"
1881           "}"
1882         "}"
1883       "],"
1884       "\"returns\": \"string\""
1885     "}",
1886     "\"Player.GetActivePlayers\": {"
1887       "\"type\": \"method\","
1888       "\"description\": \"Returns all active players\","
1889       "\"transport\": \"Response\","
1890       "\"permission\": \"ReadData\","
1891       "\"params\": [],"
1892       "\"returns\": {"
1893         "\"type\": \"array\","
1894         "\"uniqueItems\": true,"
1895         "\"items\": {"
1896           "\"type\": \"object\","
1897           "\"properties\": {"
1898             "\"playerid\": { \"$ref\": \"Player.Id\", \"required\": true },"
1899             "\"type\": { \"$ref\": \"Player.Type\", \"required\": true }"
1900           "}"
1901         "}"
1902       "}"
1903     "}",
1904     "\"Player.GetProperties\": {"
1905       "\"type\": \"method\","
1906       "\"description\": \"Retrieves the values of the given properties\","
1907       "\"transport\": \"Response\","
1908       "\"permission\": \"ReadData\","
1909       "\"params\": ["
1910         "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true },"
1911         "{ \"name\": \"properties\", \"type\": \"array\", \"uniqueItems\": true, \"required\": true, \"items\": { \"$ref\": \"Player.Property.Name\" } }"
1912       "],"
1913       "\"returns\":  { \"$ref\": \"Player.Property.Value\", \"required\": true }"
1914     "}",
1915     "\"Player.GetItem\": {"
1916       "\"type\": \"method\","
1917       "\"description\": \"Retrieves the currently played item\","
1918       "\"transport\": \"Response\","
1919       "\"permission\": \"ReadData\","
1920       "\"params\": ["
1921         "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true },"
1922         "{ \"name\": \"properties\", \"$ref\": \"List.Fields.All\" }"
1923       "],"
1924       "\"returns\": { \"type\": \"object\","
1925         "\"properties\": {"
1926           "\"item\": { \"$ref\": \"List.Item.All\", \"required\": true }"
1927         "}"
1928       "}"
1929     "}",
1930     "\"Player.PlayPause\": {"
1931       "\"type\": \"method\","
1932       "\"description\": \"Pauses or unpause playback and returns the new state\","
1933       "\"transport\": \"Response\","
1934       "\"permission\": \"ControlPlayback\","
1935       "\"params\": ["
1936         "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true },"
1937         "{ \"name\": \"play\", \"$ref\": \"Global.Toggle\", \"default\": \"toggle\" }"
1938       "],"
1939       "\"returns\": { \"$ref\": \"Player.Speed\" }"
1940     "}",
1941     "\"Player.Stop\": {"
1942       "\"type\": \"method\","
1943       "\"description\": \"Stops playback\","
1944       "\"transport\": \"Response\","
1945       "\"permission\": \"ControlPlayback\","
1946       "\"params\": ["
1947         "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true }"
1948       "],"
1949       "\"returns\": \"string\""
1950     "}",
1951     "\"Player.SetSpeed\": {"
1952       "\"type\": \"method\","
1953       "\"description\": \"Set the speed of the current playback\","
1954       "\"transport\": \"Response\","
1955       "\"permission\": \"ControlPlayback\","
1956       "\"params\": ["
1957         "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true },"
1958         "{ \"name\": \"speed\", \"type\": ["
1959             "{ \"type\": \"integer\", \"required\": true, \"enum\": [ -32, -16, -8, -4, -2, -1, 0, 1, 2, 4, 8, 16, 32 ] },"
1960             "{ \"$ref\": \"Global.IncrementDecrement\", \"required\": true }"
1961           "],"
1962           "\"required\": true"
1963         "}"
1964       "],"
1965       "\"returns\": { \"$ref\": \"Player.Speed\" }"
1966     "}",
1967     "\"Player.Seek\": {"
1968       "\"type\": \"method\","
1969       "\"description\": \"Seek through the playing item\","
1970       "\"transport\": \"Response\","
1971       "\"permission\": \"ControlPlayback\","
1972       "\"params\": ["
1973         "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true },"
1974         "{ \"name\": \"value\", \"required\": true, \"type\": ["
1975             "{ \"$ref\": \"Player.Position.Percentage\", \"required\": true, \"description\": \"Percentage value to seek to\" },"
1976             "{ \"$ref\": \"Player.Position.Time\", \"required\": true, \"description\": \"Time to seek to\" },"
1977             "{ \"type\": \"string\", \"enum\": [ \"smallforward\", \"smallbackward\", \"bigforward\", \"bigbackward\" ], \"required\": true, \"description\": \"Seek by predefined jumps\" }"
1978           "]"
1979         "}"
1980       "],"
1981       "\"returns\": {"
1982         "\"type\": \"object\","
1983         "\"properties\": {"
1984           "\"percentage\": { \"$ref\": \"Player.Position.Percentage\" },"
1985           "\"time\": { \"$ref\": \"Global.Time\" },"
1986           "\"totaltime\": { \"$ref\": \"Global.Time\" }"
1987         "}"
1988       "}"
1989     "}",
1990     "\"Player.Move\": {"
1991       "\"type\": \"method\","
1992       "\"description\": \"If picture is zoomed move viewport left/right/up/down otherwise skip previous/next\","
1993       "\"transport\": \"Response\","
1994       "\"permission\": \"ControlPlayback\","
1995       "\"params\": ["
1996         "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true },"
1997         "{ \"name\": \"direction\", \"type\": \"string\", \"enum\": [ \"left\", \"right\", \"up\", \"down\" ], \"required\": true }"
1998       "],"
1999       "\"returns\": \"string\""
2000     "}",
2001     "\"Player.Zoom\": {"
2002       "\"type\": \"method\","
2003       "\"description\": \"Zoom current picture\","
2004       "\"transport\": \"Response\","
2005       "\"permission\": \"ControlPlayback\","
2006       "\"params\": ["
2007         "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true },"
2008         "{ \"name\": \"zoom\", \"type\": ["
2009             "{ \"type\": \"string\", \"enum\": [ \"in\", \"out\" ], \"required\": true },"
2010             "{ \"type\": \"integer\", \"minimum\": 1, \"maximum\": 10, \"description\": \"zoom level\", \"required\": true }"
2011           "],"
2012         "\"required\": true }"
2013       "],"
2014       "\"returns\": \"string\""
2015     "}",
2016     "\"Player.Rotate\": {"
2017       "\"type\": \"method\","
2018       "\"description\": \"Rotates current picture\","
2019       "\"transport\": \"Response\","
2020       "\"permission\": \"ControlPlayback\","
2021       "\"params\": ["
2022         "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true },"
2023         "{ \"name\": \"value\", \"type\": \"string\", \"enum\": [ \"clockwise\", \"counterclockwise\" ], \"default\": \"clockwise\" }"
2024       "],"
2025       "\"returns\": \"string\""
2026     "}",
2027     "\"Player.GoTo\": {"
2028       "\"type\": \"method\","
2029       "\"description\": \"Go to previous/next/specific item in the playlist\","
2030       "\"transport\": \"Response\","
2031       "\"permission\": \"ControlPlayback\","
2032       "\"params\": ["
2033         "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true },"
2034         "{ \"name\": \"to\", \"type\": ["
2035             "{ \"type\": \"string\", \"enum\": [ \"previous\", \"next\" ], \"required\": true },"
2036             "{ \"$ref\": \"Playlist.Position\", \"description\": \"position in playlist\", \"required\": true }"
2037           "],"
2038         "\"required\": true }"
2039       "],"
2040       "\"returns\": \"string\""
2041     "}",
2042     "\"Player.SetShuffle\": {"
2043       "\"type\": \"method\","
2044       "\"description\": \"Shuffle/Unshuffle items in the player\","
2045       "\"transport\": \"Response\","
2046       "\"permission\": \"ControlPlayback\","
2047       "\"params\": ["
2048         "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true },"
2049     "{ \"name\": \"shuffle\", \"$ref\": \"Global.Toggle\", \"required\": true }"
2050       "],"
2051       "\"returns\": \"string\""
2052     "}",
2053     "\"Player.SetRepeat\": {"
2054       "\"type\": \"method\","
2055       "\"description\": \"Set the repeat mode of the player\","
2056       "\"transport\": \"Response\","
2057       "\"permission\": \"ControlPlayback\","
2058       "\"params\": ["
2059         "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true },"
2060         "{ \"name\": \"repeat\", \"type\": ["
2061             "{ \"$ref\": \"Player.Repeat\", \"required\": true },"
2062             "{ \"type\": \"string\", \"enum\": [ \"cycle\" ], \"required\": true }"
2063           "],"
2064           "\"required\": true"
2065         "}"
2066       "],"
2067       "\"returns\": \"string\""
2068     "}",
2069     "\"Player.SetPartymode\": {"
2070       "\"type\": \"method\","
2071       "\"description\": \"Turn partymode on or off\","
2072       "\"transport\": \"Response\","
2073       "\"permission\": \"ControlPlayback\","
2074       "\"params\": ["
2075         "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true },"
2076         "{ \"name\": \"partymode\", \"$ref\": \"Global.Toggle\", \"required\": true }"
2077       "],"
2078       "\"returns\": \"string\""
2079     "}",
2080     "\"Player.SetAudioStream\": {"
2081       "\"type\": \"method\","
2082       "\"description\": \"Set the audio stream played by the player\","
2083       "\"transport\": \"Response\","
2084       "\"permission\": \"ControlPlayback\","
2085       "\"params\": ["
2086         "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true },"
2087         "{ \"name\": \"stream\", \"required\": true, \"type\": ["
2088             "{ \"type\": \"string\", \"enum\": [ \"previous\", \"next\" ] },"
2089             "{ \"type\": \"integer\", \"minimum\": 0, \"description\": \"Index of the audio stream to play\" }"
2090           "]"
2091         "}"
2092       "],"
2093       "\"returns\": \"string\""
2094     "}",
2095     "\"Player.SetSubtitle\": {"
2096       "\"type\": \"method\","
2097       "\"description\": \"Set the subtitle displayed by the player\","
2098       "\"transport\": \"Response\","
2099       "\"permission\": \"ControlPlayback\","
2100       "\"params\": ["
2101         "{ \"name\": \"playerid\", \"$ref\": \"Player.Id\", \"required\": true },"
2102         "{ \"name\": \"subtitle\", \"required\": true, \"type\": ["
2103             "{ \"type\": \"string\", \"enum\": [ \"previous\", \"next\", \"off\", \"on\" ] },"
2104             "{ \"type\": \"integer\", \"minimum\": 0, \"description\": \"Index of the subtitle to display\" }"
2105           "]"
2106         "},"
2107         "{ \"name\": \"enable\", \"type\": \"boolean\", \"default\": false, \"description\": \"Whether to enable subtitles to be displayed after setting the new subtitle\" }"
2108       "],"
2109       "\"returns\": \"string\""
2110     "}",
2111     "\"Playlist.GetPlaylists\": {"
2112       "\"type\": \"method\","
2113       "\"description\": \"Returns all existing playlists\","
2114       "\"transport\": \"Response\","
2115       "\"permission\": \"ReadData\","
2116       "\"params\": [],"
2117       "\"returns\": {"
2118         "\"type\": \"array\","
2119         "\"uniqueItems\": true,"
2120         "\"items\": {"
2121           "\"type\": \"object\","
2122           "\"properties\": {"
2123             "\"playlistid\": { \"$ref\": \"Playlist.Id\", \"required\": true },"
2124             "\"type\": { \"$ref\": \"Playlist.Type\", \"required\": true }"
2125           "}"
2126         "}"
2127       "}"
2128     "}",
2129     "\"Playlist.GetProperties\": {"
2130       "\"type\": \"method\","
2131       "\"description\": \"Retrieves the values of the given properties\","
2132       "\"transport\": \"Response\","
2133       "\"permission\": \"ReadData\","
2134       "\"params\": ["
2135         "{ \"name\": \"playlistid\", \"$ref\": \"Playlist.Id\", \"required\": true },"
2136         "{ \"name\": \"properties\", \"type\": \"array\", \"uniqueItems\": true, \"required\": true, \"items\": { \"$ref\": \"Playlist.Property.Name\" } }"
2137       "],"
2138       "\"returns\":  { \"$ref\": \"Playlist.Property.Value\", \"required\": true }"
2139     "}",
2140     "\"Playlist.GetItems\": {"
2141       "\"type\": \"method\","
2142       "\"description\": \"Get all items from playlist\","
2143       "\"transport\": \"Response\","
2144       "\"permission\": \"ReadData\","
2145       "\"params\": ["
2146         "{ \"name\": \"playlistid\", \"$ref\": \"Playlist.Id\", \"required\": true },"
2147         "{ \"name\": \"properties\", \"$ref\": \"List.Fields.All\" },"
2148         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
2149         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" }"
2150       "],"
2151       "\"returns\": { \"type\": \"object\","
2152         "\"properties\": {"
2153           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
2154           "\"items\": { \"type\": \"array\", \"items\": { \"$ref\": \"List.Item.All\" }, \"required\": true }"
2155         "}"
2156       "}"
2157     "}",
2158     "\"Playlist.Add\": {"
2159       "\"type\": \"method\","
2160       "\"description\": \"Add item(s) to playlist\","
2161       "\"transport\": \"Response\","
2162       "\"permission\": \"ControlPlayback\","
2163       "\"params\": ["
2164         "{ \"name\": \"playlistid\", \"$ref\": \"Playlist.Id\", \"required\": true },"
2165         "{ \"name\": \"item\","
2166           "\"type\": ["
2167             "{ \"$ref\": \"Playlist.Item\", \"required\": true },"
2168             "{ \"type\": \"array\", \"items\": { \"$ref\": \"Playlist.Item\" }, \"required\": true }"
2169           "],"
2170           "\"required\": true }"
2171       "],"
2172       "\"returns\": \"string\""
2173     "}",
2174     "\"Playlist.Insert\": {"
2175       "\"type\": \"method\","
2176       "\"description\": \"Insert item(s) into playlist. Does not work for picture playlists (aka slideshows).\","
2177       "\"transport\": \"Response\","
2178       "\"permission\": \"ControlPlayback\","
2179       "\"params\": ["
2180         "{ \"name\": \"playlistid\", \"$ref\": \"Playlist.Id\", \"required\": true },"
2181         "{ \"name\": \"position\", \"$ref\": \"Playlist.Position\", \"required\": true },"
2182         "{ \"name\": \"item\","
2183           "\"type\": ["
2184             "{ \"$ref\": \"Playlist.Item\", \"required\": true },"
2185             "{ \"type\": \"array\", \"items\": { \"$ref\": \"Playlist.Item\" }, \"required\": true }"
2186           "],"
2187           "\"required\": true }"
2188       "],"
2189       "\"returns\": \"string\""
2190     "}",
2191     "\"Playlist.Remove\": {"
2192       "\"type\": \"method\","
2193       "\"description\": \"Remove item from playlist. Does not work for picture playlists (aka slideshows).\","
2194       "\"transport\": \"Response\","
2195       "\"permission\": \"ControlPlayback\","
2196       "\"params\": ["
2197         "{ \"name\": \"playlistid\", \"$ref\": \"Playlist.Id\", \"required\": true },"
2198         "{ \"name\": \"position\", \"$ref\": \"Playlist.Position\", \"required\": true }"
2199       "],"
2200       "\"returns\": \"string\""
2201     "}",
2202     "\"Playlist.Clear\": {"
2203       "\"type\": \"method\","
2204       "\"description\": \"Clear playlist\","
2205       "\"transport\": \"Response\","
2206       "\"permission\": \"ControlPlayback\","
2207       "\"params\": ["
2208         "{ \"name\": \"playlistid\", \"$ref\": \"Playlist.Id\", \"required\": true }"
2209       "],"
2210       "\"returns\": \"string\""
2211     "}",
2212     "\"Playlist.Swap\": {"
2213       "\"type\": \"method\","
2214       "\"description\": \"Swap items in the playlist. Does not work for picture playlists (aka slideshows).\","
2215       "\"transport\": \"Response\","
2216       "\"permission\": \"ControlPlayback\","
2217       "\"params\": ["
2218         "{ \"name\": \"playlistid\", \"$ref\": \"Playlist.Id\", \"required\": true },"
2219         "{ \"name\": \"position1\", \"$ref\": \"Playlist.Position\", \"required\": true },"
2220         "{ \"name\": \"position2\", \"$ref\": \"Playlist.Position\", \"required\": true }"
2221       "],"
2222       "\"returns\": \"string\""
2223     "}",
2224     "\"Files.GetSources\": {"
2225       "\"type\": \"method\","
2226       "\"description\": \"Get the sources of the media windows\","
2227       "\"transport\": \"Response\","
2228       "\"permission\": \"ReadData\","
2229       "\"params\": ["
2230         "{ \"name\": \"media\", \"$ref\": \"Files.Media\", \"required\": true },"
2231         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
2232         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" }"
2233       "],"
2234       "\"returns\": {"
2235         "\"type\": \"object\","
2236         "\"properties\": {"
2237           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
2238           "\"sources\": { \"$ref\": \"List.Items.Sources\", \"required\": true }"
2239         "}"
2240       "}"
2241     "}",
2242     "\"Files.PrepareDownload\": {"
2243       "\"type\": \"method\","
2244       "\"description\": \"Provides a way to download a given file (e.g. providing an URL to the real file location)\","
2245       "\"transport\": [ \"Response\", \"FileDownloadRedirect\" ],"
2246       "\"permission\": \"ReadData\","
2247       "\"params\": ["
2248         "{ \"name\": \"path\", \"type\": \"string\", \"required\": true }"
2249       "],"
2250       "\"returns\": {"
2251         "\"type\": \"object\","
2252         "\"properties\": {"
2253           "\"protocol\": { \"type\": \"string\", \"enum\": [ \"http\" ], \"required\": true },"
2254           "\"details\": { \"type\": \"any\", \"required\": true, \"description\": \"Transport specific details on how/from where to download the given file\" },"
2255           "\"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\" }"
2256         "}"
2257       "}"
2258     "}",
2259     "\"Files.Download\": {"
2260       "\"type\": \"method\","
2261       "\"description\": \"Downloads the given file\","
2262       "\"transport\": [ \"Response\", \"FileDownloadDirect\" ],"
2263       "\"permission\": \"ReadData\","
2264       "\"params\": ["
2265         "{ \"name\": \"path\", \"type\": \"string\", \"required\": true }"
2266       "],"
2267       "\"returns\": { \"type\": \"any\", \"required\": true }"
2268     "}",
2269     "\"Files.GetDirectory\": {"
2270       "\"type\": \"method\","
2271       "\"description\": \"Get the directories and files in the given directory\","
2272       "\"transport\": \"Response\","
2273       "\"permission\": \"ReadData\","
2274       "\"params\": ["
2275         "{ \"name\": \"directory\", \"type\": \"string\", \"required\": true },"
2276         "{ \"name\": \"media\", \"$ref\": \"Files.Media\", \"default\": \"files\" },"
2277         "{ \"name\": \"properties\", \"$ref\": \"List.Fields.Files\" },"
2278         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" },"
2279         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\", \"description\": \"Limits are applied after getting the directory content thus retrieval is not faster when they are applied.\" }"
2280       "],"
2281       "\"returns\": {"
2282         "\"type\": \"object\","
2283         "\"properties\": {"
2284           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
2285           "\"files\": { \"type\": \"array\", \"items\": { \"$ref\": \"List.Item.File\" }, \"required\": true }"
2286         "}"
2287       "}"
2288     "}",
2289     "\"Files.GetFileDetails\": {"
2290       "\"type\": \"method\","
2291       "\"description\": \"Get details for a specific file\","
2292       "\"transport\": \"Response\","
2293       "\"permission\": \"ReadData\","
2294       "\"params\": ["
2295         "{ \"name\": \"file\", \"type\": \"string\", \"required\": true, \"description\": \"Full path to the file\" },"
2296         "{ \"name\": \"media\", \"$ref\": \"Files.Media\", \"default\": \"files\" },"
2297         "{ \"name\": \"properties\", \"$ref\": \"List.Fields.Files\" }"
2298       "],"
2299       "\"returns\": {"
2300         "\"type\": \"object\","
2301         "\"properties\": {"
2302           "\"filedetails\": { \"$ref\": \"List.Item.File\", \"required\": true }"
2303         "}"
2304       "}"
2305     "}",
2306     "\"AudioLibrary.GetArtists\": {"
2307       "\"type\": \"method\","
2308       "\"description\": \"Retrieve all artists\","
2309       "\"transport\": \"Response\","
2310       "\"permission\": \"ReadData\","
2311       "\"params\": ["
2312         "{ \"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\" },"
2313         "{ \"name\": \"properties\", \"$ref\": \"Audio.Fields.Artist\" },"
2314         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
2315         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" },"
2316         "{ \"name\": \"filter\","
2317           "\"type\": ["
2318             "{ \"type\": \"object\", \"properties\": { \"genreid\": { \"$ref\": \"Library.Id\", \"required\": true } }, \"additionalProperties\": false },"
2319             "{ \"type\": \"object\", \"properties\": { \"genre\": { \"type\": \"string\", \"minLength\": 1, \"required\": true } }, \"additionalProperties\": false },"
2320             "{ \"type\": \"object\", \"properties\": { \"albumid\": { \"$ref\": \"Library.Id\", \"required\": true } }, \"additionalProperties\": false },"
2321             "{ \"type\": \"object\", \"properties\": { \"album\": { \"type\": \"string\", \"minLength\": 1, \"required\": true } }, \"additionalProperties\": false },"
2322             "{ \"type\": \"object\", \"properties\": { \"songid\": { \"$ref\": \"Library.Id\", \"required\": true } }, \"additionalProperties\": false },"
2323             "{ \"$ref\": \"List.Filter.Artists\" }"
2324           "]"
2325         "}"
2326       "],"
2327       "\"returns\": {"
2328         "\"type\": \"object\","
2329         "\"properties\": {"
2330           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
2331           "\"artists\": { \"type\": \"array\","
2332             "\"items\": { \"$ref\": \"Audio.Details.Artist\" }"
2333           "}"
2334         "}"
2335       "}"
2336     "}",
2337     "\"AudioLibrary.GetArtistDetails\": {"
2338       "\"type\": \"method\","
2339       "\"description\": \"Retrieve details about a specific artist\","
2340       "\"transport\": \"Response\","
2341       "\"permission\": \"ReadData\","
2342       "\"params\": ["
2343         "{ \"name\": \"artistid\", \"$ref\": \"Library.Id\", \"required\": true },"
2344         "{ \"name\": \"properties\", \"$ref\": \"Audio.Fields.Artist\" }"
2345       "],"
2346       "\"returns\": { \"type\": \"object\","
2347         "\"properties\": {"
2348           "\"artistdetails\": { \"$ref\": \"Audio.Details.Artist\" }"
2349         "}"
2350       "}"
2351     "}",
2352     "\"AudioLibrary.GetAlbums\": {"
2353       "\"type\": \"method\","
2354       "\"description\": \"Retrieve all albums from specified artist or genre\","
2355       "\"transport\": \"Response\","
2356       "\"permission\": \"ReadData\","
2357       "\"params\": ["
2358         "{ \"name\": \"properties\", \"$ref\": \"Audio.Fields.Album\" },"
2359         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
2360         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" },"
2361         "{ \"name\": \"filter\","
2362           "\"type\": ["
2363             "{ \"type\": \"object\", \"properties\": { \"genreid\": { \"$ref\": \"Library.Id\", \"required\": true } }, \"additionalProperties\": false },"
2364             "{ \"type\": \"object\", \"properties\": { \"genre\": { \"type\": \"string\", \"minLength\": 1, \"required\": true } }, \"additionalProperties\": false },"
2365             "{ \"type\": \"object\", \"properties\": { \"artistid\": { \"$ref\": \"Library.Id\", \"required\": true } }, \"additionalProperties\": false },"
2366             "{ \"type\": \"object\", \"properties\": { \"artist\": { \"type\": \"string\", \"minLength\": 1, \"required\": true } }, \"additionalProperties\": false },"
2367             "{ \"$ref\": \"List.Filter.Albums\" }"
2368           "]"
2369         "}"
2370       "],"
2371       "\"returns\": {"
2372         "\"type\": \"object\","
2373         "\"properties\": {"
2374           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
2375           "\"albums\": { \"type\": \"array\","
2376             "\"items\": { \"$ref\": \"Audio.Details.Album\" }"
2377           "}"
2378         "}"
2379       "}"
2380     "}",
2381     "\"AudioLibrary.GetAlbumDetails\": {"
2382       "\"type\": \"method\","
2383       "\"description\": \"Retrieve details about a specific album\","
2384       "\"transport\": \"Response\","
2385       "\"permission\": \"ReadData\","
2386       "\"params\": ["
2387         "{ \"name\": \"albumid\", \"$ref\": \"Library.Id\", \"required\": true },"
2388         "{ \"name\": \"properties\", \"$ref\": \"Audio.Fields.Album\" }"
2389       "],"
2390       "\"returns\": { \"type\": \"object\","
2391         "\"properties\": {"
2392           "\"albumdetails\": { \"$ref\": \"Audio.Details.Album\" }"
2393         "}"
2394       "}"
2395     "}",
2396     "\"AudioLibrary.GetSongs\": {"
2397       "\"type\": \"method\","
2398       "\"description\": \"Retrieve all songs from specified album, artist or genre\","
2399       "\"transport\": \"Response\","
2400       "\"permission\": \"ReadData\","
2401       "\"params\": ["
2402         "{ \"name\": \"properties\", \"$ref\": \"Audio.Fields.Song\" },"
2403         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
2404         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" },"
2405         "{ \"name\": \"filter\","
2406           "\"type\": ["
2407             "{ \"type\": \"object\", \"properties\": { \"genreid\": { \"$ref\": \"Library.Id\", \"required\": true } }, \"additionalProperties\": false },"
2408             "{ \"type\": \"object\", \"properties\": { \"genre\": { \"type\": \"string\", \"minLength\": 1, \"required\": true } }, \"additionalProperties\": false },"
2409             "{ \"type\": \"object\", \"properties\": { \"artistid\": { \"$ref\": \"Library.Id\", \"required\": true } }, \"additionalProperties\": false },"
2410             "{ \"type\": \"object\", \"properties\": { \"artist\": { \"type\": \"string\", \"minLength\": 1, \"required\": true } }, \"additionalProperties\": false },"
2411             "{ \"type\": \"object\", \"properties\": { \"albumid\": { \"$ref\": \"Library.Id\", \"required\": true } }, \"additionalProperties\": false },"
2412             "{ \"type\": \"object\", \"properties\": { \"album\": { \"type\": \"string\", \"minLength\": 1, \"required\": true } }, \"additionalProperties\": false },"
2413             "{ \"$ref\": \"List.Filter.Songs\" }"
2414           "]"
2415         "}"
2416       "],"
2417       "\"returns\": {"
2418         "\"type\": \"object\","
2419         "\"properties\": {"
2420           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
2421           "\"songs\": { \"type\": \"array\","
2422             "\"items\": { \"$ref\": \"Audio.Details.Song\" }"
2423           "}"
2424         "}"
2425       "}"
2426     "}",
2427     "\"AudioLibrary.GetSongDetails\": {"
2428       "\"type\": \"method\","
2429       "\"description\": \"Retrieve details about a specific song\","
2430       "\"transport\": \"Response\","
2431       "\"permission\": \"ReadData\","
2432       "\"params\": ["
2433         "{ \"name\": \"songid\", \"$ref\": \"Library.Id\", \"required\": true },"
2434         "{ \"name\": \"properties\", \"$ref\": \"Audio.Fields.Song\" }"
2435       "],"
2436       "\"returns\": { \"type\": \"object\","
2437         "\"properties\": {"
2438           "\"songdetails\": { \"$ref\": \"Audio.Details.Song\" }"
2439         "}"
2440       "}"
2441     "}",
2442     "\"AudioLibrary.GetRecentlyAddedAlbums\": {"
2443       "\"type\": \"method\","
2444       "\"description\": \"Retrieve recently added albums\","
2445       "\"transport\": \"Response\","
2446       "\"permission\": \"ReadData\","
2447       "\"params\": ["
2448         "{ \"name\": \"properties\", \"$ref\": \"Audio.Fields.Album\" },"
2449         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
2450         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" }"
2451       "],"
2452       "\"returns\": {"
2453         "\"type\": \"object\","
2454         "\"properties\": {"
2455           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
2456           "\"albums\": { \"type\": \"array\","
2457             "\"items\": { \"$ref\": \"Audio.Details.Album\" }"
2458           "}"
2459         "}"
2460       "}"
2461     "}",
2462     "\"AudioLibrary.GetRecentlyAddedSongs\": {"
2463       "\"type\": \"method\","
2464       "\"description\": \"Retrieve recently added songs\","
2465       "\"transport\": \"Response\","
2466       "\"permission\": \"ReadData\","
2467       "\"params\": ["
2468         "{ \"name\": \"albumlimit\", \"$ref\": \"List.Amount\", \"description\": \"The amount of recently added albums from which to return the songs\" },"
2469         "{ \"name\": \"properties\", \"$ref\": \"Audio.Fields.Song\" },"
2470         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
2471         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" }"
2472       "],"
2473       "\"returns\": {"
2474         "\"type\": \"object\","
2475         "\"properties\": {"
2476           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
2477           "\"songs\": { \"type\": \"array\","
2478             "\"items\": { \"$ref\": \"Audio.Details.Song\" }"
2479           "}"
2480         "}"
2481       "}"
2482     "}",
2483       "\"AudioLibrary.GetRecentlyPlayedAlbums\": {"
2484       "\"type\": \"method\","
2485       "\"description\": \"Retrieve recently played albums\","
2486       "\"transport\": \"Response\","
2487       "\"permission\": \"ReadData\","
2488       "\"params\": ["
2489         "{ \"name\": \"properties\", \"$ref\": \"Audio.Fields.Album\" },"
2490         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
2491         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" }"
2492       "],"
2493       "\"returns\": {"
2494         "\"type\": \"object\","
2495         "\"properties\": {"
2496           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
2497           "\"albums\": { \"type\": \"array\","
2498             "\"items\": { \"$ref\": \"Audio.Details.Album\" }"
2499           "}"
2500         "}"
2501       "}"
2502     "}",
2503     "\"AudioLibrary.GetRecentlyPlayedSongs\": {"
2504       "\"type\": \"method\","
2505       "\"description\": \"Retrieve recently played songs\","
2506       "\"transport\": \"Response\","
2507       "\"permission\": \"ReadData\","
2508       "\"params\": ["
2509         "{ \"name\": \"properties\", \"$ref\": \"Audio.Fields.Song\" },"
2510         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
2511         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" }"
2512       "],"
2513       "\"returns\": {"
2514         "\"type\": \"object\","
2515         "\"properties\": {"
2516           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
2517           "\"songs\": { \"type\": \"array\","
2518             "\"items\": { \"$ref\": \"Audio.Details.Song\" }"
2519           "}"
2520         "}"
2521       "}"
2522     "}",
2523     "\"AudioLibrary.GetGenres\": {"
2524       "\"type\": \"method\","
2525       "\"description\": \"Retrieve all genres\","
2526       "\"transport\": \"Response\","
2527       "\"permission\": \"ReadData\","
2528       "\"params\": ["
2529         "{ \"name\": \"properties\", \"$ref\": \"Library.Fields.Genre\" },"
2530         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
2531         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" }"
2532       "],"
2533       "\"returns\": {"
2534         "\"type\": \"object\","
2535         "\"properties\": {"
2536           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
2537           "\"genres\": { \"type\": \"array\", \"required\": true,"
2538             "\"items\": { \"$ref\": \"Library.Details.Genre\" }"
2539           "}"
2540         "}"
2541       "}"
2542     "}",
2543     "\"AudioLibrary.SetArtistDetails\": {"
2544       "\"type\": \"method\","
2545       "\"description\": \"Update the given artist with the given details\","
2546       "\"transport\": \"Response\","
2547       "\"permission\": \"UpdateData\","
2548       "\"params\": ["
2549         "{ \"name\": \"artistid\", \"$ref\": \"Library.Id\", \"required\": true },"
2550         "{ \"name\": \"artist\", \"$ref\": \"Optional.String\" },"
2551         "{ \"name\": \"instrument\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
2552         "{ \"name\": \"style\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
2553         "{ \"name\": \"mood\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
2554         "{ \"name\": \"born\", \"$ref\": \"Optional.String\" },"
2555         "{ \"name\": \"formed\", \"$ref\": \"Optional.String\" },"
2556         "{ \"name\": \"description\", \"$ref\": \"Optional.String\" },"
2557         "{ \"name\": \"genre\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
2558         "{ \"name\": \"died\", \"$ref\": \"Optional.String\" },"
2559         "{ \"name\": \"disbanded\", \"$ref\": \"Optional.String\" },"
2560         "{ \"name\": \"yearsactive\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null }"
2561       "],"
2562       "\"returns\": \"string\""
2563     "}",
2564     "\"AudioLibrary.SetAlbumDetails\": {"
2565       "\"type\": \"method\","
2566       "\"description\": \"Update the given album with the given details\","
2567       "\"transport\": \"Response\","
2568       "\"permission\": \"UpdateData\","
2569       "\"params\": ["
2570         "{ \"name\": \"albumid\", \"$ref\": \"Library.Id\", \"required\": true },"
2571         "{ \"name\": \"title\", \"$ref\": \"Optional.String\" },"
2572         "{ \"name\": \"artist\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
2573         "{ \"name\": \"description\", \"$ref\": \"Optional.String\" },"
2574         "{ \"name\": \"genre\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
2575         "{ \"name\": \"theme\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
2576         "{ \"name\": \"mood\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
2577         "{ \"name\": \"style\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
2578         "{ \"name\": \"type\", \"$ref\": \"Optional.String\" },"
2579         "{ \"name\": \"albumlabel\", \"$ref\": \"Optional.String\" },"
2580         "{ \"name\": \"rating\", \"$ref\": \"Optional.Integer\" },"
2581         "{ \"name\": \"year\", \"$ref\": \"Optional.Integer\" }"
2582       "],"
2583       "\"returns\": \"string\""
2584     "}",
2585     "\"AudioLibrary.SetSongDetails\": {"
2586       "\"type\": \"method\","
2587       "\"description\": \"Update the given song with the given details\","
2588       "\"transport\": \"Response\","
2589       "\"permission\": \"UpdateData\","
2590       "\"params\": ["
2591         "{ \"name\": \"songid\", \"$ref\": \"Library.Id\", \"required\": true },"
2592         "{ \"name\": \"title\", \"$ref\": \"Optional.String\" },"
2593         "{ \"name\": \"artist\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
2594         "{ \"name\": \"albumartist\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
2595         "{ \"name\": \"genre\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
2596         "{ \"name\": \"year\", \"$ref\": \"Optional.Integer\" },"
2597         "{ \"name\": \"rating\", \"$ref\": \"Optional.Integer\" },"
2598         "{ \"name\": \"album\", \"$ref\": \"Optional.String\" },"
2599         "{ \"name\": \"track\", \"$ref\": \"Optional.Integer\" },"
2600         "{ \"name\": \"disc\", \"$ref\": \"Optional.Integer\" },"
2601         "{ \"name\": \"duration\", \"$ref\": \"Optional.Integer\" },"
2602         "{ \"name\": \"comment\", \"$ref\": \"Optional.String\" },"
2603         "{ \"name\": \"musicbrainztrackid\", \"$ref\": \"Optional.String\" },"
2604         "{ \"name\": \"musicbrainzartistid\", \"$ref\": \"Optional.String\" },"
2605         "{ \"name\": \"musicbrainzalbumid\", \"$ref\": \"Optional.String\" },"
2606         "{ \"name\": \"musicbrainzalbumartistid\", \"$ref\": \"Optional.String\" }"
2607       "],"
2608       "\"returns\": \"string\""
2609     "}",
2610     "\"AudioLibrary.Scan\": {"
2611       "\"type\": \"method\","
2612       "\"description\": \"Scans the audio sources for new library items\","
2613       "\"transport\": \"Response\","
2614       "\"permission\": \"UpdateData\","
2615       "\"params\": ["
2616         "{ \"name\": \"directory\", \"type\": \"string\", \"default\": \"\" }"
2617       "],"
2618       "\"returns\": \"string\""
2619     "}",
2620     "\"AudioLibrary.Export\": {"
2621       "\"type\": \"method\","
2622       "\"description\": \"Exports all items from the audio library\","
2623       "\"transport\": \"Response\","
2624       "\"permission\": \"WriteFile\","
2625       "\"params\": ["
2626         "{ \"name\": \"options\", \"type\": ["
2627             "{ \"type\": \"object\", \"required\": true, \"additionalProperties\": false,"
2628               "\"properties\": {"
2629                 "\"path\": { \"type\": \"string\", \"required\": true, \"minLength\": 1, \"description\": \"Path to the directory to where the data should be exported\" }"
2630               "}"
2631             "},"
2632             "{ \"type\": \"object\", \"required\": true, \"additionalProperties\": false,"
2633               "\"properties\": {"
2634                 "\"overwrite\": { \"type\": \"boolean\", \"default\": false, \"description\": \"Whether to overwrite existing exported files\" },"
2635                 "\"images\": { \"type\": \"boolean\", \"default\": false, \"description\": \"Whether to export thumbnails and fanart images\" }"
2636               "}"
2637             "}"
2638           "]"
2639         "}"
2640       "],"
2641       "\"returns\": \"string\""
2642     "}",
2643     "\"AudioLibrary.Clean\": {"
2644       "\"type\": \"method\","
2645       "\"description\": \"Cleans the audio library from non-existent items\","
2646       "\"transport\": \"Response\","
2647       "\"permission\": \"RemoveData\","
2648       "\"params\": [ ],"
2649       "\"returns\": \"string\""
2650     "}",
2651     "\"VideoLibrary.GetMovies\": {"
2652       "\"type\": \"method\","
2653       "\"description\": \"Retrieve all movies\","
2654       "\"transport\": \"Response\","
2655       "\"permission\": \"ReadData\","
2656       "\"params\": ["
2657         "{ \"name\": \"properties\", \"$ref\": \"Video.Fields.Movie\" },"
2658         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
2659         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" },"
2660         "{ \"name\": \"filter\","
2661           "\"type\": ["
2662             "{ \"type\": \"object\", \"properties\": { \"genreid\": { \"$ref\": \"Library.Id\", \"required\": true } }, \"additionalProperties\": false },"
2663             "{ \"type\": \"object\", \"properties\": { \"genre\": { \"type\": \"string\", \"minLength\": 1, \"required\": true } }, \"additionalProperties\": false },"
2664             "{ \"type\": \"object\", \"properties\": { \"year\": { \"type\": \"integer\", \"minimum\": 0, \"required\": true } }, \"additionalProperties\": false },"
2665             "{ \"type\": \"object\", \"properties\": { \"actor\": { \"type\": \"string\", \"minLength\": 1, \"required\": true } }, \"additionalProperties\": false },"
2666             "{ \"type\": \"object\", \"properties\": { \"director\": { \"type\": \"string\", \"minLength\": 1, \"required\": true } }, \"additionalProperties\": false },"
2667             "{ \"type\": \"object\", \"properties\": { \"studio\": { \"type\": \"string\", \"minLength\": 1, \"required\": true } }, \"additionalProperties\": false },"
2668             "{ \"type\": \"object\", \"properties\": { \"country\": { \"type\": \"string\", \"minLength\": 1, \"required\": true } }, \"additionalProperties\": false },"
2669             "{ \"type\": \"object\", \"properties\": { \"setid\": { \"$ref\": \"Library.Id\", \"required\": true } }, \"additionalProperties\": false },"
2670             "{ \"type\": \"object\", \"properties\": { \"set\": { \"type\": \"string\", \"minLength\": 1, \"required\": true } }, \"additionalProperties\": false },"
2671             "{ \"type\": \"object\", \"properties\": { \"tag\": { \"type\": \"string\", \"minLength\": 1, \"required\": true } }, \"additionalProperties\": false },"
2672             "{ \"$ref\": \"List.Filter.Movies\" }"
2673           "]"
2674         "}"
2675       "],"
2676       "\"returns\": {"
2677         "\"type\": \"object\","
2678         "\"properties\": {"
2679           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
2680           "\"movies\": { \"type\": \"array\","
2681             "\"items\": { \"$ref\": \"Video.Details.Movie\" }"
2682           "}"
2683         "}"
2684       "}"
2685     "}",
2686     "\"VideoLibrary.GetMovieDetails\": {"
2687       "\"type\": \"method\","
2688       "\"description\": \"Retrieve details about a specific movie\","
2689       "\"transport\": \"Response\","
2690       "\"permission\": \"ReadData\","
2691       "\"params\": ["
2692         "{ \"name\": \"movieid\", \"$ref\": \"Library.Id\", \"required\": true },"
2693         "{ \"name\": \"properties\", \"$ref\": \"Video.Fields.Movie\" }"
2694       "],"
2695       "\"returns\": { \"type\": \"object\","
2696         "\"properties\": {"
2697           "\"moviedetails\": { \"$ref\": \"Video.Details.Movie\" }"
2698         "}"
2699       "}"
2700     "}",
2701     "\"VideoLibrary.GetMovieSets\": {"
2702       "\"type\": \"method\","
2703       "\"description\": \"Retrieve all movie sets\","
2704       "\"transport\": \"Response\","
2705       "\"permission\": \"ReadData\","
2706       "\"params\": ["
2707         "{ \"name\": \"properties\", \"$ref\": \"Video.Fields.MovieSet\" },"
2708         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
2709         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" }"
2710       "],"
2711       "\"returns\": { \"type\": \"object\","
2712         "\"properties\": {"
2713           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
2714           "\"sets\": { \"type\": \"array\","
2715             "\"items\": { \"$ref\": \"Video.Details.MovieSet\" }"
2716           "}"
2717         "}"
2718       "}"
2719     "}",
2720     "\"VideoLibrary.GetMovieSetDetails\": {"
2721       "\"type\": \"method\","
2722       "\"description\": \"Retrieve details about a specific movie set\","
2723       "\"transport\": \"Response\","
2724       "\"permission\": \"ReadData\","
2725       "\"params\": ["
2726         "{ \"name\": \"setid\", \"$ref\": \"Library.Id\", \"required\": true },"
2727         "{ \"name\": \"properties\", \"$ref\": \"Video.Fields.MovieSet\" },"
2728         "{ \"name\": \"movies\", \"type\": \"object\","
2729           "\"properties\": {"
2730             "\"properties\": { \"$ref\": \"Video.Fields.Movie\" },"
2731             "\"limits\": { \"$ref\": \"List.Limits\" },"
2732             "\"sort\": { \"$ref\": \"List.Sort\" }"
2733           "}"
2734         "}"
2735       "],"
2736       "\"returns\": { \"type\": \"object\","
2737         "\"properties\": {"
2738           "\"setdetails\": { \"$ref\": \"Video.Details.MovieSet.Extended\" }"
2739         "}"
2740       "}"
2741     "}",
2742     "\"VideoLibrary.GetTVShows\": {"
2743       "\"type\": \"method\","
2744       "\"description\": \"Retrieve all tv shows\","
2745       "\"transport\": \"Response\","
2746       "\"permission\": \"ReadData\","
2747       "\"params\": ["
2748         "{ \"name\": \"properties\", \"$ref\": \"Video.Fields.TVShow\" },"
2749         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
2750         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" },"
2751         "{ \"name\": \"filter\","
2752           "\"type\": ["
2753             "{ \"type\": \"object\", \"properties\": { \"genreid\": { \"$ref\": \"Library.Id\", \"required\": true } }, \"additionalProperties\": false },"
2754             "{ \"type\": \"object\", \"properties\": { \"genre\": { \"type\": \"string\", \"minLength\": 1, \"required\": true } }, \"additionalProperties\": false },"
2755             "{ \"type\": \"object\", \"properties\": { \"year\": { \"type\": \"integer\", \"minimum\": 0, \"required\": true } }, \"additionalProperties\": false },"
2756             "{ \"type\": \"object\", \"properties\": { \"actor\": { \"type\": \"string\", \"minLength\": 1, \"required\": true } }, \"additionalProperties\": false },"
2757             "{ \"type\": \"object\", \"properties\": { \"studio\": { \"type\": \"string\", \"minLength\": 1, \"required\": true } }, \"additionalProperties\": false },"
2758             "{ \"type\": \"object\", \"properties\": { \"tag\": { \"type\": \"string\", \"minLength\": 1, \"required\": true } }, \"additionalProperties\": false },"
2759             "{ \"$ref\": \"List.Filter.TVShows\" }"
2760           "]"
2761         "}"
2762       "],"
2763       "\"returns\": { \"type\": \"object\","
2764         "\"properties\": {"
2765           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
2766           "\"tvshows\": { \"type\": \"array\","
2767             "\"items\": { \"$ref\": \"Video.Details.TVShow\" }"
2768           "}"
2769         "}"
2770       "}"
2771     "}",
2772     "\"VideoLibrary.GetTVShowDetails\": {"
2773       "\"type\": \"method\","
2774       "\"description\": \"Retrieve details about a specific tv show\","
2775       "\"transport\": \"Response\","
2776       "\"permission\": \"ReadData\","
2777       "\"params\": ["
2778         "{ \"name\": \"tvshowid\", \"$ref\": \"Library.Id\", \"required\": true },"
2779         "{ \"name\": \"properties\", \"$ref\": \"Video.Fields.TVShow\" }"
2780       "],"
2781       "\"returns\": { \"type\": \"object\","
2782         "\"properties\": {"
2783           "\"tvshowdetails\": { \"$ref\": \"Video.Details.TVShow\" }"
2784         "}"
2785       "}"
2786     "}",
2787     "\"VideoLibrary.GetSeasons\": {"
2788       "\"type\": \"method\","
2789       "\"description\": \"Retrieve all tv seasons\","
2790       "\"transport\": \"Response\","
2791       "\"permission\": \"ReadData\","
2792       "\"params\": ["
2793         "{ \"name\": \"tvshowid\", \"$ref\": \"Library.Id\", \"required\": true },"
2794         "{ \"name\": \"properties\", \"$ref\": \"Video.Fields.Season\" },"
2795         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
2796         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" }"
2797       "],"
2798       "\"returns\": { \"type\": \"object\","
2799         "\"properties\": {"
2800           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
2801           "\"seasons\": { \"type\": \"array\","
2802             "\"items\": { \"$ref\": \"Video.Details.Season\" }"
2803           "}"
2804         "}"
2805       "}"
2806     "}",
2807     "\"VideoLibrary.GetSeasonDetails\": {"
2808       "\"type\": \"method\","
2809       "\"description\": \"Retrieve details about a specific tv show season\","
2810       "\"transport\": \"Response\","
2811       "\"permission\": \"ReadData\","
2812       "\"params\": ["
2813         "{ \"name\": \"seasonid\", \"$ref\": \"Library.Id\", \"required\": true },"
2814         "{ \"name\": \"properties\", \"$ref\": \"Video.Fields.Season\" }"
2815       "],"
2816       "\"returns\": { \"type\": \"object\","
2817         "\"properties\": {"
2818           "\"seasondetails\": { \"$ref\": \"Video.Details.Season\" }"
2819         "}"
2820       "}"
2821     "}",
2822     "\"VideoLibrary.GetEpisodes\": {"
2823       "\"type\": \"method\","
2824       "\"description\": \"Retrieve all tv show episodes\","
2825       "\"transport\": \"Response\","
2826       "\"permission\": \"ReadData\","
2827       "\"params\": ["
2828         "{ \"name\": \"tvshowid\", \"$ref\": \"Library.Id\" },"
2829         "{ \"name\": \"season\", \"type\": \"integer\", \"minimum\": 0, \"default\": -1 },"
2830         "{ \"name\": \"properties\", \"$ref\": \"Video.Fields.Episode\" },"
2831         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
2832         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" },"
2833         "{ \"name\": \"filter\","
2834           "\"type\": ["
2835             "{ \"type\": \"object\", \"properties\": { \"genreid\": { \"$ref\": \"Library.Id\", \"required\": true, \"description\": \"Requires tvshowid to be set\" } }, \"additionalProperties\": false },"
2836             "{ \"type\": \"object\", \"properties\": { \"genre\": { \"type\": \"string\", \"minLength\": 1, \"required\": true, \"description\": \"Requires tvshowid to be set\" } }, \"additionalProperties\": false },"
2837             "{ \"type\": \"object\", \"properties\": { \"year\": { \"type\": \"integer\", \"minimum\": 0, \"required\": true } }, \"additionalProperties\": false },"
2838             "{ \"type\": \"object\", \"properties\": { \"actor\": { \"type\": \"string\", \"minLength\": 1, \"required\": true, \"description\": \"Requires tvshowid to be set\" } }, \"additionalProperties\": false },"
2839             "{ \"type\": \"object\", \"properties\": { \"director\": { \"type\": \"string\", \"minLength\": 1, \"required\": true } }, \"additionalProperties\": false },"
2840             "{ \"$ref\": \"List.Filter.Episodes\" }"
2841           "]"
2842         "}"
2843       "],"
2844       "\"returns\": { \"type\": \"object\","
2845         "\"properties\": {"
2846           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
2847           "\"episodes\": { \"type\": \"array\","
2848             "\"items\": { \"$ref\": \"Video.Details.Episode\" }"
2849           "}"
2850         "}"
2851       "}"
2852     "}",
2853     "\"VideoLibrary.GetEpisodeDetails\": {"
2854       "\"type\": \"method\","
2855       "\"description\": \"Retrieve details about a specific tv show episode\","
2856       "\"transport\": \"Response\","
2857       "\"permission\": \"ReadData\","
2858       "\"params\": ["
2859         "{ \"name\": \"episodeid\", \"$ref\": \"Library.Id\", \"required\": true },"
2860         "{ \"name\": \"properties\", \"$ref\": \"Video.Fields.Episode\" }"
2861       "],"
2862       "\"returns\": { \"type\": \"object\","
2863         "\"properties\": {"
2864           "\"episodedetails\": { \"$ref\": \"Video.Details.Episode\" }"
2865         "}"
2866       "}"
2867     "}",
2868     "\"VideoLibrary.GetMusicVideos\": {"
2869       "\"type\": \"method\","
2870       "\"description\": \"Retrieve all music videos\","
2871       "\"transport\": \"Response\","
2872       "\"permission\": \"ReadData\","
2873       "\"params\": ["
2874         "{ \"name\": \"properties\", \"$ref\": \"Video.Fields.MusicVideo\" },"
2875         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
2876         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" },"
2877         "{ \"name\": \"filter\","
2878           "\"type\": ["
2879             "{ \"type\": \"object\", \"properties\": { \"artist\": { \"type\": \"string\", \"minLength\": 1, \"required\": true } }, \"additionalProperties\": false },"
2880             "{ \"type\": \"object\", \"properties\": { \"genreid\": { \"$ref\": \"Library.Id\", \"required\": true } }, \"additionalProperties\": false },"
2881             "{ \"type\": \"object\", \"properties\": { \"genre\": { \"type\": \"string\", \"minLength\": 1, \"required\": true } }, \"additionalProperties\": false },"
2882             "{ \"type\": \"object\", \"properties\": { \"year\": { \"type\": \"integer\", \"minimum\": 0, \"required\": true } }, \"additionalProperties\": false },"
2883             "{ \"type\": \"object\", \"properties\": { \"director\": { \"type\": \"string\", \"minLength\": 1, \"required\": true } }, \"additionalProperties\": false },"
2884             "{ \"type\": \"object\", \"properties\": { \"studio\": { \"type\": \"string\", \"minLength\": 1, \"required\": true } }, \"additionalProperties\": false },"
2885             "{ \"type\": \"object\", \"properties\": { \"tag\": { \"type\": \"string\", \"minLength\": 1, \"required\": true } }, \"additionalProperties\": false },"
2886             "{ \"$ref\": \"List.Filter.MusicVideos\" }"
2887           "]"
2888         "}"
2889       "],"
2890       "\"returns\": { \"type\": \"object\","
2891         "\"properties\": {"
2892           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
2893           "\"musicvideos\": { \"type\": \"array\","
2894             "\"items\": { \"$ref\": \"Video.Details.MusicVideo\" }"
2895           "}"
2896         "}"
2897       "}"
2898     "}",
2899     "\"VideoLibrary.GetMusicVideoDetails\": {"
2900       "\"type\": \"method\","
2901       "\"description\": \"Retrieve details about a specific music video\","
2902       "\"transport\": \"Response\","
2903       "\"permission\": \"ReadData\","
2904       "\"params\": ["
2905         "{ \"name\": \"musicvideoid\", \"$ref\": \"Library.Id\", \"required\": true },"
2906         "{ \"name\": \"properties\", \"$ref\": \"Video.Fields.MusicVideo\" }"
2907       "],"
2908       "\"returns\": { \"type\": \"object\","
2909         "\"properties\": {"
2910           "\"musicvideodetails\": { \"$ref\": \"Video.Details.MusicVideo\" }"
2911         "}"
2912       "}"
2913     "}",
2914     "\"VideoLibrary.GetRecentlyAddedMovies\": {"
2915       "\"type\": \"method\","
2916       "\"description\": \"Retrieve all recently added movies\","
2917       "\"transport\": \"Response\","
2918       "\"permission\": \"ReadData\","
2919       "\"params\": ["
2920         "{ \"name\": \"properties\", \"$ref\": \"Video.Fields.Movie\" },"
2921         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
2922         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" }"
2923       "],"
2924       "\"returns\": { \"type\": \"object\","
2925         "\"properties\": {"
2926           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
2927           "\"movies\": { \"type\": \"array\","
2928             "\"items\": { \"$ref\": \"Video.Details.Movie\" }"
2929           "}"
2930         "}"
2931       "}"
2932     "}",
2933     "\"VideoLibrary.GetRecentlyAddedEpisodes\": {"
2934       "\"type\": \"method\","
2935       "\"description\": \"Retrieve all recently added tv episodes\","
2936       "\"transport\": \"Response\","
2937       "\"permission\": \"ReadData\","
2938       "\"params\": ["
2939         "{ \"name\": \"properties\", \"$ref\": \"Video.Fields.Episode\" },"
2940         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
2941         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" }"
2942       "],"
2943       "\"returns\": { \"type\": \"object\","
2944         "\"properties\": {"
2945           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
2946           "\"episodes\": { \"type\": \"array\","
2947             "\"items\": { \"$ref\": \"Video.Details.Episode\" }"
2948           "}"
2949         "}"
2950       "}"
2951     "}",
2952     "\"VideoLibrary.GetRecentlyAddedMusicVideos\": {"
2953       "\"type\": \"method\","
2954       "\"description\": \"Retrieve all recently added music videos\","
2955       "\"transport\": \"Response\","
2956       "\"permission\": \"ReadData\","
2957       "\"params\": ["
2958         "{ \"name\": \"properties\", \"$ref\": \"Video.Fields.MusicVideo\" },"
2959         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
2960         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" }"
2961       "],"
2962       "\"returns\": { \"type\": \"object\","
2963         "\"properties\": {"
2964           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
2965           "\"musicvideos\": { \"type\": \"array\","
2966             "\"items\": { \"$ref\": \"Video.Details.MusicVideo\" }"
2967           "}"
2968         "}"
2969       "}"
2970     "}",
2971     "\"VideoLibrary.GetGenres\": {"
2972       "\"type\": \"method\","
2973       "\"description\": \"Retrieve all genres\","
2974       "\"transport\": \"Response\","
2975       "\"permission\": \"ReadData\","
2976       "\"params\": ["
2977         "{ \"name\": \"type\", \"type\": \"string\", \"required\": true, \"enum\": [ \"movie\", \"tvshow\", \"musicvideo\"] },"
2978         "{ \"name\": \"properties\", \"$ref\": \"Library.Fields.Genre\" },"
2979         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
2980         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" }"
2981       "],"
2982       "\"returns\": {"
2983         "\"type\": \"object\","
2984         "\"properties\": {"
2985           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
2986           "\"genres\": { \"type\": \"array\", \"required\": true,"
2987             "\"items\": { \"$ref\": \"Library.Details.Genre\" }"
2988           "}"
2989         "}"
2990       "}"
2991     "}",
2992     "\"VideoLibrary.SetMovieDetails\": {"
2993       "\"type\": \"method\","
2994       "\"description\": \"Update the given movie with the given details\","
2995       "\"transport\": \"Response\","
2996       "\"permission\": \"UpdateData\","
2997       "\"params\": ["
2998         "{ \"name\": \"movieid\", \"$ref\": \"Library.Id\", \"required\": true },"
2999         "{ \"name\": \"title\", \"$ref\": \"Optional.String\" },"
3000         "{ \"name\": \"playcount\", \"$ref\": \"Optional.Integer\" },"
3001         "{ \"name\": \"runtime\", \"$ref\": \"Optional.Integer\", \"description\": \"Runtime in seconds\" },"
3002         "{ \"name\": \"director\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
3003         "{ \"name\": \"studio\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
3004         "{ \"name\": \"year\", \"$ref\": \"Optional.Integer\" },"
3005         "{ \"name\": \"plot\", \"$ref\": \"Optional.String\" },"
3006         "{ \"name\": \"genre\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
3007         "{ \"name\": \"rating\", \"$ref\": \"Optional.Number\" },"
3008         "{ \"name\": \"mpaa\", \"$ref\": \"Optional.String\" },"
3009         "{ \"name\": \"imdbnumber\", \"$ref\": \"Optional.String\" },"
3010         "{ \"name\": \"votes\", \"$ref\": \"Optional.String\" },"
3011         "{ \"name\": \"lastplayed\", \"$ref\": \"Optional.String\" },"
3012         "{ \"name\": \"originaltitle\", \"$ref\": \"Optional.String\" },"
3013         "{ \"name\": \"trailer\", \"$ref\": \"Optional.String\" },"
3014         "{ \"name\": \"tagline\", \"$ref\": \"Optional.String\" },"
3015         "{ \"name\": \"plotoutline\", \"$ref\": \"Optional.String\" },"
3016         "{ \"name\": \"writer\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
3017         "{ \"name\": \"country\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
3018         "{ \"name\": \"top250\", \"$ref\": \"Optional.Integer\" },"
3019         "{ \"name\": \"sorttitle\", \"$ref\": \"Optional.String\" },"
3020         "{ \"name\": \"set\", \"$ref\": \"Optional.String\" },"
3021         "{ \"name\": \"showlink\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
3022         "{ \"name\": \"thumbnail\", \"$ref\": \"Optional.String\" },"
3023         "{ \"name\": \"fanart\", \"$ref\": \"Optional.String\" },"
3024         "{ \"name\": \"tag\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
3025         "{ \"name\": \"art\", \"type\": [ \"null\", { \"$ref\": \"Media.Artwork.Set\", \"required\": true } ], \"default\": null },"
3026         "{ \"name\": \"resume\", \"type\": [ \"null\", { \"$ref\": \"Video.Resume\", \"required\": true } ], \"default\": null }"
3027       "],"
3028       "\"returns\": \"string\""
3029     "}",
3030     "\"VideoLibrary.SetMovieSetDetails\": {"
3031       "\"type\": \"method\","
3032       "\"description\": \"Update the given movie set with the given details\","
3033       "\"transport\": \"Response\","
3034       "\"permission\": \"UpdateData\","
3035       "\"params\": ["
3036         "{ \"name\": \"setid\", \"$ref\": \"Library.Id\", \"required\": true },"
3037         "{ \"name\": \"title\", \"$ref\": \"Optional.String\" },"
3038         "{ \"name\": \"art\", \"type\": [ \"null\", { \"$ref\": \"Media.Artwork.Set\", \"required\": true } ], \"default\": null }"
3039       "],"
3040       "\"returns\": \"string\""
3041     "}",
3042     "\"VideoLibrary.SetTVShowDetails\": {"
3043       "\"type\": \"method\","
3044       "\"description\": \"Update the given tvshow with the given details\","
3045       "\"transport\": \"Response\","
3046       "\"permission\": \"UpdateData\","
3047       "\"params\": ["
3048         "{ \"name\": \"tvshowid\", \"$ref\": \"Library.Id\", \"required\": true },"
3049         "{ \"name\": \"title\", \"$ref\": \"Optional.String\" },"
3050         "{ \"name\": \"playcount\", \"$ref\": \"Optional.Integer\" },"
3051         "{ \"name\": \"studio\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
3052         "{ \"name\": \"plot\", \"$ref\": \"Optional.String\" },"
3053         "{ \"name\": \"genre\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
3054         "{ \"name\": \"rating\", \"$ref\": \"Optional.Number\" },"
3055         "{ \"name\": \"mpaa\", \"$ref\": \"Optional.String\" },"
3056         "{ \"name\": \"imdbnumber\", \"$ref\": \"Optional.String\" },"
3057         "{ \"name\": \"premiered\", \"$ref\": \"Optional.String\" },"
3058         "{ \"name\": \"votes\", \"$ref\": \"Optional.String\" },"
3059         "{ \"name\": \"lastplayed\", \"$ref\": \"Optional.String\" },"
3060         "{ \"name\": \"originaltitle\", \"$ref\": \"Optional.String\" },"
3061         "{ \"name\": \"sorttitle\", \"$ref\": \"Optional.String\" },"
3062         "{ \"name\": \"episodeguide\", \"$ref\": \"Optional.String\" },"
3063         "{ \"name\": \"thumbnail\", \"$ref\": \"Optional.String\" },"
3064         "{ \"name\": \"fanart\", \"$ref\": \"Optional.String\" },"
3065         "{ \"name\": \"tag\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
3066         "{ \"name\": \"art\", \"type\": [ \"null\", { \"$ref\": \"Media.Artwork.Set\", \"required\": true } ], \"default\": null }"
3067       "],"
3068       "\"returns\": \"string\""
3069     "}",
3070     "\"VideoLibrary.SetSeasonDetails\": {"
3071       "\"type\": \"method\","
3072       "\"description\": \"Update the given season with the given details\","
3073       "\"transport\": \"Response\","
3074       "\"permission\": \"UpdateData\","
3075       "\"params\": ["
3076         "{ \"name\": \"seasonid\", \"$ref\": \"Library.Id\", \"required\": true },"
3077         "{ \"name\": \"art\", \"type\": [ \"null\", { \"$ref\": \"Media.Artwork.Set\", \"required\": true } ], \"default\": null }"
3078       "],"
3079       "\"returns\": \"string\""
3080     "}",
3081     "\"VideoLibrary.SetEpisodeDetails\": {"
3082       "\"type\": \"method\","
3083       "\"description\": \"Update the given episode with the given details\","
3084       "\"transport\": \"Response\","
3085       "\"permission\": \"UpdateData\","
3086       "\"params\": ["
3087         "{ \"name\": \"episodeid\", \"$ref\": \"Library.Id\", \"required\": true },"
3088         "{ \"name\": \"title\", \"$ref\": \"Optional.String\" },"
3089         "{ \"name\": \"playcount\", \"$ref\": \"Optional.Integer\" },"
3090         "{ \"name\": \"runtime\", \"$ref\": \"Optional.Integer\", \"description\": \"Runtime in seconds\" },"
3091         "{ \"name\": \"director\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
3092         "{ \"name\": \"plot\", \"$ref\": \"Optional.String\" },"
3093         "{ \"name\": \"rating\", \"$ref\": \"Optional.Number\" },"
3094         "{ \"name\": \"votes\", \"$ref\": \"Optional.String\" },"
3095         "{ \"name\": \"lastplayed\", \"$ref\": \"Optional.String\" },"
3096         "{ \"name\": \"writer\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
3097         "{ \"name\": \"firstaired\", \"$ref\": \"Optional.String\" },"
3098         "{ \"name\": \"productioncode\", \"$ref\": \"Optional.String\" },"
3099         "{ \"name\": \"season\", \"$ref\": \"Optional.Integer\" },"
3100         "{ \"name\": \"episode\", \"$ref\": \"Optional.Integer\" },"
3101         "{ \"name\": \"originaltitle\", \"$ref\": \"Optional.String\" },"
3102         "{ \"name\": \"thumbnail\", \"$ref\": \"Optional.String\" },"
3103         "{ \"name\": \"fanart\", \"$ref\": \"Optional.String\" },"
3104         "{ \"name\": \"art\", \"type\": [ \"null\", { \"$ref\": \"Media.Artwork.Set\", \"required\": true } ], \"default\": null },"
3105         "{ \"name\": \"resume\", \"type\": [ \"null\", { \"$ref\": \"Video.Resume\", \"required\": true } ], \"default\": null }"
3106       "],"
3107       "\"returns\": \"string\""
3108     "}",
3109     "\"VideoLibrary.SetMusicVideoDetails\": {"
3110       "\"type\": \"method\","
3111       "\"description\": \"Update the given music video with the given details\","
3112       "\"transport\": \"Response\","
3113       "\"permission\": \"UpdateData\","
3114       "\"params\": ["
3115         "{ \"name\": \"musicvideoid\", \"$ref\": \"Library.Id\", \"required\": true },"
3116         "{ \"name\": \"title\", \"$ref\": \"Optional.String\" },"
3117         "{ \"name\": \"playcount\", \"$ref\": \"Optional.Integer\" },"
3118         "{ \"name\": \"runtime\", \"$ref\": \"Optional.Integer\", \"description\": \"Runtime in seconds\" },"
3119         "{ \"name\": \"director\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
3120         "{ \"name\": \"studio\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
3121         "{ \"name\": \"year\", \"$ref\": \"Optional.Integer\" },"
3122         "{ \"name\": \"plot\", \"$ref\": \"Optional.String\" },"
3123         "{ \"name\": \"album\", \"$ref\": \"Optional.String\" },"
3124         "{ \"name\": \"artist\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ] },"
3125         "{ \"name\": \"genre\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
3126         "{ \"name\": \"track\", \"$ref\": \"Optional.Integer\" },"
3127         "{ \"name\": \"lastplayed\", \"$ref\": \"Optional.String\" },"
3128         "{ \"name\": \"thumbnail\", \"$ref\": \"Optional.String\" },"
3129         "{ \"name\": \"fanart\", \"$ref\": \"Optional.String\" },"
3130         "{ \"name\": \"tag\", \"type\": [ \"null\", { \"$ref\": \"Array.String\", \"required\": true } ], \"default\": null },"
3131         "{ \"name\": \"art\", \"type\": [ \"null\", { \"$ref\": \"Media.Artwork.Set\", \"required\": true } ], \"default\": null },"
3132         "{ \"name\": \"resume\", \"type\": [ \"null\", { \"$ref\": \"Video.Resume\", \"required\": true } ], \"default\": null }"
3133       "],"
3134       "\"returns\": \"string\""
3135     "}",
3136     "\"VideoLibrary.RemoveMovie\": {"
3137       "\"type\": \"method\","
3138       "\"description\": \"Removes the given movie from the library\","
3139       "\"transport\": \"Response\","
3140       "\"permission\": \"RemoveData\","
3141       "\"params\": ["
3142         "{ \"name\": \"movieid\", \"$ref\": \"Library.Id\", \"required\": true }"
3143       "],"
3144       "\"returns\": \"string\""
3145     "}",
3146     "\"VideoLibrary.RemoveTVShow\": {"
3147       "\"type\": \"method\","
3148       "\"description\": \"Removes the given tv show from the library\","
3149       "\"transport\": \"Response\","
3150       "\"permission\": \"RemoveData\","
3151       "\"params\": ["
3152         "{ \"name\": \"tvshowid\", \"$ref\": \"Library.Id\", \"required\": true }"
3153       "],"
3154       "\"returns\": \"string\""
3155     "}",
3156     "\"VideoLibrary.RemoveEpisode\": {"
3157       "\"type\": \"method\","
3158       "\"description\": \"Removes the given episode from the library\","
3159       "\"transport\": \"Response\","
3160       "\"permission\": \"RemoveData\","
3161       "\"params\": ["
3162         "{ \"name\": \"episodeid\", \"$ref\": \"Library.Id\", \"required\": true }"
3163       "],"
3164       "\"returns\": \"string\""
3165     "}",
3166     "\"VideoLibrary.RemoveMusicVideo\": {"
3167       "\"type\": \"method\","
3168       "\"description\": \"Removes the given music video from the library\","
3169       "\"transport\": \"Response\","
3170       "\"permission\": \"RemoveData\","
3171       "\"params\": ["
3172         "{ \"name\": \"musicvideoid\", \"$ref\": \"Library.Id\", \"required\": true }"
3173       "],"
3174       "\"returns\": \"string\""
3175     "}",
3176     "\"VideoLibrary.Scan\": {"
3177       "\"type\": \"method\","
3178       "\"description\": \"Scans the video sources for new library items\","
3179       "\"transport\": \"Response\","
3180       "\"permission\": \"UpdateData\","
3181       "\"params\": ["
3182         "{ \"name\": \"directory\", \"type\": \"string\", \"default\": \"\" }"
3183       "],"
3184       "\"returns\": \"string\""
3185     "}",
3186     "\"VideoLibrary.Export\": {"
3187       "\"type\": \"method\","
3188       "\"description\": \"Exports all items from the video library\","
3189       "\"transport\": \"Response\","
3190       "\"permission\": \"WriteFile\","
3191       "\"params\": ["
3192         "{ \"name\": \"options\", \"type\": ["
3193             "{ \"type\": \"object\", \"required\": true, \"additionalProperties\": false,"
3194               "\"properties\": {"
3195                 "\"path\": { \"type\": \"string\", \"required\": true, \"minLength\": 1, \"description\": \"Path to the directory to where the data should be exported\" }"
3196               "}"
3197             "},"
3198             "{ \"type\": \"object\", \"required\": true, \"additionalProperties\": false,"
3199               "\"properties\": {"
3200                 "\"overwrite\": { \"type\": \"boolean\", \"default\": false, \"description\": \"Whether to overwrite existing exported files\" },"
3201                 "\"images\": { \"type\": \"boolean\", \"default\": false, \"description\": \"Whether to export thumbnails and fanart images\" },"
3202                 "\"actorthumbs\": { \"type\": \"boolean\", \"default\": false, \"description\": \"Whether to export actor thumbnails\" }"
3203               "}"
3204             "}"
3205           "]"
3206         "}"
3207       "],"
3208       "\"returns\": \"string\""
3209     "}",
3210     "\"VideoLibrary.Clean\": {"
3211       "\"type\": \"method\","
3212       "\"description\": \"Cleans the video library from non-existent items\","
3213       "\"transport\": \"Response\","
3214       "\"permission\": \"RemoveData\","
3215       "\"params\": [ ],"
3216       "\"returns\": \"string\""
3217     "}",
3218     "\"GUI.ActivateWindow\": {"
3219       "\"type\": \"method\","
3220       "\"description\": \"Activates the given window\","
3221       "\"transport\": \"Response\","
3222       "\"permission\": \"ControlGUI\","
3223       "\"params\": ["
3224         "{ \"name\": \"window\", \"$ref\": \"GUI.Window\", \"required\": true },"
3225         "{ \"name\": \"parameters\", \"type\": \"array\", \"items\": { \"type\": \"string\", \"minLength\": 1, \"required\": true }, \"minItems\": 1 }"
3226       "],"
3227       "\"returns\": \"string\""
3228     "}",
3229     "\"GUI.ShowNotification\": {"
3230       "\"type\": \"method\","
3231       "\"description\": \"Shows a GUI notification\","
3232       "\"transport\": \"Response\","
3233       "\"permission\": \"ControlGUI\","
3234       "\"params\": ["
3235         "{ \"name\": \"title\", \"type\": \"string\", \"required\": true },"
3236         "{ \"name\": \"message\", \"type\": \"string\", \"required\": true },"
3237         "{ \"name\": \"image\", \"type\": ["
3238             "{ \"type\": \"string\", \"required\": true, \"enum\": [ \"info\", \"warning\", \"error\" ] },"
3239             "{ \"type\": \"string\", \"required\": true }"
3240           "], \"default\": \"\""
3241         "},"
3242         "{ \"name\": \"displaytime\", \"type\": \"integer\", \"minimum\": 1500, \"default\": 5000, \"description\": \"The time in milliseconds the notification will be visible\" }"
3243       "],"
3244       "\"returns\": \"string\""
3245     "}",
3246     "\"GUI.GetProperties\": {"
3247       "\"type\": \"method\","
3248       "\"description\": \"Retrieves the values of the given properties\","
3249       "\"transport\": \"Response\","
3250       "\"permission\": \"ReadData\","
3251       "\"params\": ["
3252         "{ \"name\": \"properties\", \"type\": \"array\", \"uniqueItems\": true, \"required\": true, \"items\": { \"$ref\": \"GUI.Property.Name\" } }"
3253       "],"
3254       "\"returns\":  { \"$ref\": \"GUI.Property.Value\", \"required\": true }"
3255     "}",
3256     "\"GUI.SetFullscreen\": {"
3257       "\"type\": \"method\","
3258       "\"description\": \"Toggle fullscreen/GUI\","
3259       "\"transport\": \"Response\","
3260       "\"permission\": \"ControlGUI\","
3261       "\"params\": ["
3262         "{ \"name\": \"fullscreen\", \"required\": true, \"$ref\": \"Global.Toggle\" }"
3263       "],"
3264       "\"returns\": { \"type\": \"boolean\", \"description\": \"Fullscreen state\" }"
3265     "}",
3266     "\"GUI.SetStereoscopicMode\": {"
3267       "\"type\": \"method\","
3268       "\"description\": \"Sets the stereoscopic mode of the GUI to the given mode\","
3269       "\"transport\": \"Response\","
3270       "\"permission\": \"ControlGUI\","
3271       "\"params\": ["
3272         "{ \"name\": \"mode\", \"type\": \"string\", \"enum\": [ \"toggle\", \"tomono\", \"next\", \"previous\", \"select\", \"off\", \"split_vertical\", \"split_horizontal\", \"row_interleaved\", \"hardware_based\", \"anaglyph_cyan_red\", \"anaglyph_green_magenta\", \"monoscopic\" ], \"required\": true }"
3273       "],"
3274       "\"returns\": \"string\""
3275     "}",
3276     "\"GUI.GetStereoscopicModes\": {"
3277       "\"type\": \"method\","
3278       "\"description\": \"Returns the supported stereoscopic modes of the GUI\","
3279       "\"transport\": \"Response\","
3280       "\"permission\": \"ReadData\","
3281       "\"params\": [],"
3282       "\"returns\": {"
3283         "\"type\": \"object\","
3284         "\"properties\": {"
3285           "\"stereoscopicmodes\" : {"
3286             "\"type\": \"array\","
3287             "\"uniqueItems\": true,"
3288             "\"items\": { \"$ref\": \"GUI.Stereoscopy.Mode\" }"
3289           "}"
3290         "}"
3291       "}"
3292     "}",
3293     "\"Addons.GetAddons\": {"
3294       "\"type\": \"method\","
3295       "\"description\": \"Gets all available addons\","
3296       "\"transport\": \"Response\","
3297       "\"permission\": \"ReadData\","
3298       "\"params\": ["
3299         "{ \"name\": \"type\", \"$ref\": \"Addon.Types\" },"
3300         "{ \"name\": \"content\", \"$ref\": \"Addon.Content\", \"description\": \"Content provided by the addon. Only considered for plugins and scripts.\" },"
3301         "{ \"name\": \"enabled\", \"type\": [ { \"type\": \"boolean\" }, { \"type\": \"string\", \"enum\": [ \"all\" ] } ], \"default\": \"all\" },"
3302         "{ \"name\": \"properties\", \"$ref\": \"Addon.Fields\" },"
3303         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" }"
3304       "],"
3305       "\"returns\": { \"type\": \"object\","
3306         "\"properties\": {"
3307           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
3308           "\"addons\": { \"type\": \"array\","
3309             "\"items\": { \"$ref\": \"Addon.Details\" }"
3310           "}"
3311         "}"
3312       "}"
3313     "}",
3314     "\"Addons.GetAddonDetails\": {"
3315       "\"type\": \"method\","
3316       "\"description\": \"Gets the details of a specific addon\","
3317       "\"transport\": \"Response\","
3318       "\"permission\": \"ReadData\","
3319       "\"params\": ["
3320         "{ \"name\": \"addonid\", \"type\": \"string\", \"required\": true },"
3321         "{ \"name\": \"properties\", \"$ref\": \"Addon.Fields\" }"
3322       "],"
3323       "\"returns\": { \"type\": \"object\","
3324         "\"properties\": {"
3325           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
3326           "\"addon\": { \"$ref\": \"Addon.Details\", \"required\": true }"
3327         "}"
3328       "}"
3329     "}",
3330     "\"Addons.SetAddonEnabled\": {"
3331       "\"type\": \"method\","
3332       "\"description\": \"Enables/Disables a specific addon\","
3333       "\"transport\": \"Response\","
3334       "\"permission\": \"ManageAddon\","
3335       "\"params\": ["
3336         "{ \"name\": \"addonid\", \"type\": \"string\", \"required\": true },"
3337         "{ \"name\": \"enabled\", \"$ref\": \"Global.Toggle\", \"required\": true }"
3338       "],"
3339       "\"returns\": \"string\""
3340     "}",
3341     "\"Addons.ExecuteAddon\": {"
3342       "\"type\": \"method\","
3343       "\"description\": \"Executes the given addon with the given parameters (if possible)\","
3344       "\"transport\": \"Response\","
3345       "\"permission\": \"ExecuteAddon\","
3346       "\"params\": ["
3347         "{ \"name\": \"addonid\", \"type\": \"string\", \"required\": true },"
3348         "{ \"name\": \"params\", \"type\": ["
3349             "{ \"type\": \"object\", \"additionalProperties\": { \"type\": \"string\" } },"
3350             "{ \"type\": \"array\", \"items\": { \"type\": \"string\" } },"
3351             "{ \"type\": \"string\", \"description\": \"URL path (must start with / or ?\" }"
3352           "],"
3353           "\"default\": \"\""
3354         "},"
3355         "{ \"name\": \"wait\", \"type\": \"boolean\", \"default\": false }"
3356       "],"
3357       "\"returns\": \"string\""
3358     "}",
3359     "\"PVR.GetProperties\": {"
3360       "\"type\": \"method\","
3361       "\"description\": \"Retrieves the values of the given properties\","
3362       "\"transport\": \"Response\","
3363       "\"permission\": \"ReadData\","
3364       "\"params\": ["
3365         "{ \"name\": \"properties\", \"type\": \"array\", \"uniqueItems\": true, \"required\": true, \"items\": { \"$ref\": \"PVR.Property.Name\" } }"
3366       "],"
3367       "\"returns\":  { \"$ref\": \"PVR.Property.Value\", \"required\": true }"
3368     "}",
3369     "\"PVR.GetChannelGroups\": {"
3370       "\"type\": \"method\","
3371       "\"description\": \"Retrieves the channel groups for the specified type\","
3372       "\"transport\": \"Response\","
3373       "\"permission\": \"ReadData\","
3374       "\"params\": ["
3375         "{ \"name\": \"channeltype\", \"$ref\": \"PVR.Channel.Type\", \"required\": true },"
3376         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" }"
3377       "],"
3378       "\"returns\": { \"type\": \"object\","
3379         "\"properties\": {"
3380           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
3381           "\"channelgroups\": { \"type\": \"array\", \"required\": true,"
3382             "\"items\": { \"$ref\": \"PVR.Details.ChannelGroup\" }"
3383           "}"
3384         "}"
3385       "}"
3386     "}",
3387     "\"PVR.GetChannelGroupDetails\": {"
3388       "\"type\": \"method\","
3389       "\"description\": \"Retrieves the details of a specific channel group\","
3390       "\"transport\": \"Response\","
3391       "\"permission\": \"ReadData\","
3392       "\"params\": ["
3393         "{ \"name\": \"channelgroupid\", \"$ref\": \"PVR.ChannelGroup.Id\", \"required\": true },"
3394         "{ \"name\": \"channels\", \"type\": \"object\","
3395           "\"properties\": {"
3396             "\"properties\": { \"$ref\": \"PVR.Fields.Channel\" },"
3397             "\"limits\": { \"$ref\": \"List.Limits\" }"
3398           "}"
3399         "}"
3400       "],"
3401       "\"returns\": { \"type\": \"object\","
3402         "\"properties\": {"
3403           "\"channelgroupdetails\": { \"$ref\": \"PVR.Details.ChannelGroup.Extended\" }"
3404         "}"
3405       "}"
3406     "}",
3407     "\"PVR.GetChannels\": {"
3408       "\"type\": \"method\","
3409       "\"description\": \"Retrieves the channel list\","
3410       "\"transport\": \"Response\","
3411       "\"permission\": \"ReadData\","
3412       "\"params\": ["
3413         "{ \"name\": \"channelgroupid\", \"$ref\": \"PVR.ChannelGroup.Id\", \"required\": true },"
3414         "{ \"name\": \"properties\", \"$ref\": \"PVR.Fields.Channel\" },"
3415         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" }"
3416       "],"
3417       "\"returns\": { \"type\": \"object\","
3418         "\"properties\": {"
3419           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
3420           "\"channels\": { \"type\": \"array\", \"required\": true,"
3421             "\"items\": { \"$ref\": \"PVR.Details.Channel\" }"
3422           "}"
3423         "}"
3424       "}"
3425     "}",
3426     "\"PVR.GetChannelDetails\": {"
3427       "\"type\": \"method\","
3428       "\"description\": \"Retrieves the details of a specific channel\","
3429       "\"transport\": \"Response\","
3430       "\"permission\": \"ReadData\","
3431       "\"params\": ["
3432         "{ \"name\": \"channelid\", \"$ref\": \"Library.Id\", \"required\": true },"
3433         "{ \"name\": \"properties\", \"$ref\": \"PVR.Fields.Channel\" }"
3434       "],"
3435       "\"returns\": { \"type\": \"object\","
3436         "\"properties\": {"
3437           "\"channeldetails\": { \"$ref\": \"PVR.Details.Channel\" }"
3438         "}"
3439       "}"
3440     "}",
3441     "\"PVR.GetBroadcasts\": {"
3442       "\"type\": \"method\","
3443       "\"description\": \"Retrieves the program of a specific channel\","
3444       "\"transport\": \"Response\","
3445       "\"permission\": \"ReadData\","
3446       "\"params\": ["
3447         "{ \"name\": \"channelid\", \"$ref\": \"Library.Id\", \"required\": true },"
3448         "{ \"name\": \"properties\", \"$ref\": \"PVR.Fields.Broadcast\" },"
3449         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" }"
3450       "],"
3451       "\"returns\": { \"type\": \"object\","
3452         "\"properties\": {"
3453           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
3454           "\"broadcasts\": { \"type\": \"array\", \"required\": true,"
3455             "\"items\": { \"$ref\": \"PVR.Details.Broadcast\" }"
3456           "}"
3457         "}"
3458       "}"
3459     "}",
3460     "\"PVR.GetBroadcastDetails\": {"
3461       "\"type\": \"method\","
3462       "\"description\": \"Retrieves the details of a specific broadcast\","
3463       "\"transport\": \"Response\","
3464       "\"permission\": \"ReadData\","
3465       "\"params\": ["
3466         "{ \"name\": \"broadcastid\", \"$ref\": \"Library.Id\", \"required\": true },"
3467         "{ \"name\": \"properties\", \"$ref\": \"PVR.Fields.Broadcast\" }"
3468       "],"
3469       "\"returns\": { \"type\": \"object\","
3470         "\"properties\": {"
3471           "\"broadcastdetails\": { \"$ref\": \"PVR.Details.Broadcast\" }"
3472         "}"
3473       "}"
3474     "}",
3475     "\"PVR.GetTimers\": {"
3476       "\"type\": \"method\","
3477       "\"description\": \"Retrieves the timers\","
3478       "\"transport\": \"Response\","
3479       "\"permission\": \"ReadData\","
3480       "\"params\": ["
3481         "{ \"name\": \"properties\", \"$ref\": \"PVR.Fields.Timer\" },"
3482         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" }"
3483       "],"
3484       "\"returns\": { \"type\": \"object\","
3485         "\"properties\": {"
3486           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
3487           "\"timers\": { \"type\": \"array\", \"required\": true,"
3488             "\"items\": { \"$ref\": \"PVR.Details.Timer\" }"
3489           "}"
3490         "}"
3491       "}"
3492     "}",
3493     "\"PVR.GetTimerDetails\": {"
3494       "\"type\": \"method\","
3495       "\"description\": \"Retrieves the details of a specific timer\","
3496       "\"transport\": \"Response\","
3497       "\"permission\": \"ReadData\","
3498       "\"params\": ["
3499         "{ \"name\": \"timerid\", \"$ref\": \"Library.Id\", \"required\": true },"
3500         "{ \"name\": \"properties\", \"$ref\": \"PVR.Fields.Timer\" }"
3501       "],"
3502       "\"returns\": { \"type\": \"object\","
3503         "\"properties\": {"
3504           "\"timerdetails\": { \"$ref\": \"PVR.Details.Timer\" }"
3505         "}"
3506       "}"
3507     "}",
3508     "\"PVR.GetRecordings\": {"
3509       "\"type\": \"method\","
3510       "\"description\": \"Retrieves the recordings\","
3511       "\"transport\": \"Response\","
3512       "\"permission\": \"ReadData\","
3513       "\"params\": ["
3514         "{ \"name\": \"properties\", \"$ref\": \"PVR.Fields.Recording\" },"
3515         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" }"
3516       "],"
3517       "\"returns\": { \"type\": \"object\","
3518         "\"properties\": {"
3519           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
3520           "\"recordings\": { \"type\": \"array\", \"required\": true,"
3521             "\"items\": { \"$ref\": \"PVR.Details.Recording\" }"
3522           "}"
3523         "}"
3524       "}"
3525     "}",
3526     "\"PVR.GetRecordingDetails\": {"
3527       "\"type\": \"method\","
3528       "\"description\": \"Retrieves the details of a specific recording\","
3529       "\"transport\": \"Response\","
3530       "\"permission\": \"ReadData\","
3531       "\"params\": ["
3532         "{ \"name\": \"recordingid\", \"$ref\": \"Library.Id\", \"required\": true },"
3533         "{ \"name\": \"properties\", \"$ref\": \"PVR.Fields.Recording\" }"
3534       "],"
3535       "\"returns\": { \"type\": \"object\","
3536         "\"properties\": {"
3537           "\"recordingdetails\": { \"$ref\": \"PVR.Details.Recording\" }"
3538         "}"
3539       "}"
3540     "}",
3541     "\"PVR.Record\": {"
3542       "\"type\": \"method\","
3543       "\"description\": \"Toggle recording of a channel\","
3544       "\"transport\": \"Response\","
3545       "\"permission\": \"ControlPVR\","
3546       "\"params\": ["
3547         "{ \"name\": \"record\", \"$ref\": \"Global.Toggle\", \"default\": \"toggle\" },"
3548         "{ \"name\": \"channel\", \"type\": ["
3549             "{ \"type\": \"string\", \"enum\": [ \"current\" ], \"required\": true },"
3550             "{ \"$ref\": \"Library.Id\", \"required\": true }"
3551           "],"
3552           "\"default\": \"current\""
3553         "}"
3554       "],"
3555       "\"returns\":  \"string\""
3556     "}",
3557     "\"PVR.Scan\": {"
3558       "\"type\": \"method\","
3559       "\"description\": \"Starts a channel scan\","
3560       "\"transport\": \"Response\","
3561       "\"permission\": \"ControlPVR\","
3562       "\"params\": [ ],"
3563       "\"returns\":  \"string\""
3564     "}",
3565     "\"Textures.GetTextures\": {"
3566       "\"type\": \"method\","
3567       "\"description\": \"Retrieve all textures\","
3568       "\"transport\": \"Response\","
3569       "\"permission\": \"ReadData\","
3570       "\"params\": ["
3571         "{ \"name\": \"properties\", \"$ref\": \"Textures.Fields.Texture\" },"
3572         "{ \"name\": \"filter\", \"$ref\": \"List.Filter.Textures\" }"
3573       "],"
3574       "\"returns\": {"
3575         "\"type\": \"object\","
3576         "\"properties\": {"
3577           "\"textures\": { \"type\": \"array\", \"required\": true,"
3578             "\"items\": { \"$ref\": \"Textures.Details.Texture\" }"
3579           "}"
3580         "}"
3581       "}"
3582     "}",
3583     "\"Textures.RemoveTexture\": {"
3584       "\"type\": \"method\","
3585       "\"description\": \"Remove the specified texture\","
3586       "\"transport\": \"Response\","
3587       "\"permission\": \"RemoveData\","
3588       "\"params\": ["
3589         "{ \"name\": \"textureid\", \"$ref\": \"Library.Id\", \"required\": true, \"description\": \"Texture database identifier\" }"
3590       "],"
3591       "\"returns\": \"string\""
3592     "}",
3593     "\"Profiles.GetProfiles\": {"
3594       "\"type\": \"method\","
3595       "\"description\": \"Retrieve all profiles\","
3596       "\"transport\": \"Response\","
3597       "\"permission\": \"ReadData\","
3598       "\"params\": ["
3599         "{ \"name\": \"properties\", \"$ref\": \"Profiles.Fields.Profile\" },"
3600         "{ \"name\": \"limits\", \"$ref\": \"List.Limits\" },"
3601         "{ \"name\": \"sort\", \"$ref\": \"List.Sort\" }"
3602       "],"
3603       "\"returns\": {"
3604         "\"type\": \"object\","
3605         "\"properties\": {"
3606           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
3607           "\"profiles\": { \"type\": \"array\", \"required\": true,"
3608             "\"items\": { \"$ref\": \"Profiles.Details.Profile\" }"
3609           "}"
3610         "}"
3611       "}"
3612     "}",
3613     "\"Profiles.GetCurrentProfile\": {"
3614       "\"type\": \"method\","
3615       "\"description\": \"Retrieve the current profile\","
3616       "\"transport\": \"Response\","
3617       "\"permission\": \"ReadData\","
3618       "\"params\": ["
3619         "{ \"name\": \"properties\", \"$ref\": \"Profiles.Fields.Profile\" }"
3620       "],"
3621       "\"returns\":  { \"$ref\": \"Profiles.Details.Profile\", \"required\": true }"
3622     "}",
3623     "\"Profiles.LoadProfile\": {"
3624       "\"type\": \"method\","
3625       "\"description\": \"Load the specified profile\","
3626       "\"transport\": \"Response\","
3627       "\"permission\": \"Navigate\","
3628       "\"params\": ["
3629         "{ \"name\": \"profile\", \"type\": \"string\", \"required\": true, \"description\": \"Profile name\" },"
3630         "{ \"name\": \"prompt\", \"type\": \"boolean\", \"description\": \"Prompt for password\" },"
3631         "{ \"name\": \"password\", \"$ref\": \"Profiles.Password\" }"
3632       "],"
3633       "\"returns\": \"string\""
3634     "}",
3635     "\"System.GetProperties\": {"
3636       "\"type\": \"method\","
3637       "\"description\": \"Retrieves the values of the given properties\","
3638       "\"transport\": \"Response\","
3639       "\"permission\": \"ReadData\","
3640       "\"params\": ["
3641         "{ \"name\": \"properties\", \"type\": \"array\", \"uniqueItems\": true, \"required\": true, \"items\": { \"$ref\": \"System.Property.Name\" } }"
3642       "],"
3643       "\"returns\":  { \"$ref\": \"System.Property.Value\", \"required\": true }"
3644     "}",
3645     "\"System.EjectOpticalDrive\": {"
3646       "\"type\": \"method\","
3647       "\"description\": \"Ejects or closes the optical disc drive (if available)\","
3648       "\"transport\": \"Response\","
3649       "\"permission\": \"ControlSystem\","
3650       "\"params\": [ ],"
3651       "\"returns\":  \"string\""
3652     "}",
3653     "\"System.Shutdown\": {"
3654       "\"type\": \"method\","
3655       "\"description\": \"Shuts the system running XBMC down\","
3656       "\"transport\": \"Response\","
3657       "\"permission\": \"ControlPower\","
3658       "\"params\": [],"
3659       "\"returns\": \"string\""
3660     "}",
3661     "\"System.Suspend\": {"
3662       "\"type\": \"method\","
3663       "\"description\": \"Suspends the system running XBMC\","
3664       "\"transport\": \"Response\","
3665       "\"permission\": \"ControlPower\","
3666       "\"params\": [],"
3667       "\"returns\": \"string\""
3668     "}",
3669     "\"System.Hibernate\": {"
3670       "\"type\": \"method\","
3671       "\"description\": \"Puts the system running XBMC into hibernate mode\","
3672       "\"transport\": \"Response\","
3673       "\"permission\": \"ControlPower\","
3674       "\"params\": [],"
3675       "\"returns\": \"string\""
3676     "}",
3677     "\"System.Reboot\": {"
3678       "\"type\": \"method\","
3679       "\"description\": \"Reboots the system running XBMC\","
3680       "\"transport\": \"Response\","
3681       "\"permission\": \"ControlPower\","
3682       "\"params\": [],"
3683       "\"returns\": \"string\""
3684     "}",
3685     "\"Input.SendText\": {"
3686       "\"type\": \"method\","
3687       "\"description\": \"Send a generic (unicode) text\","
3688       "\"transport\": \"Response\","
3689       "\"permission\": \"Navigate\","
3690       "\"params\": ["
3691         "{ \"name\": \"text\", \"type\": \"string\", \"required\": true, \"description\": \"Unicode text\" },"
3692         "{ \"name\": \"done\", \"type\": \"boolean\", \"default\": true, \"description\": \"Whether this is the whole input or not (closes an open input dialog if true).\" }"
3693       "],"
3694       "\"returns\": \"string\""
3695     "}",
3696     "\"Input.ExecuteAction\": {"
3697       "\"type\": \"method\","
3698       "\"description\": \"Execute a specific action\","
3699       "\"transport\": \"Response\","
3700       "\"permission\": \"Navigate\","
3701       "\"params\": ["
3702         "{ \"name\": \"action\", \"$ref\": \"Input.Action\", \"required\": true }"
3703       "],"
3704       "\"returns\": \"string\""
3705     "}",
3706     "\"Input.Left\": {"
3707       "\"type\": \"method\","
3708       "\"description\": \"Navigate left in GUI\","
3709       "\"transport\": \"Response\","
3710       "\"permission\": \"Navigate\","
3711       "\"params\": [],"
3712       "\"returns\": \"string\""
3713     "}",
3714     "\"Input.Right\": {"
3715       "\"type\": \"method\","
3716       "\"description\": \"Navigate right in GUI\","
3717       "\"transport\": \"Response\","
3718       "\"permission\": \"Navigate\","
3719       "\"params\": [],"
3720       "\"returns\": \"string\""
3721     "}",
3722     "\"Input.Down\": {"
3723       "\"type\": \"method\","
3724       "\"description\": \"Navigate down in GUI\","
3725       "\"transport\": \"Response\","
3726       "\"permission\": \"Navigate\","
3727       "\"params\": [],"
3728       "\"returns\": \"string\""
3729     "}",
3730     "\"Input.Up\": {"
3731       "\"type\": \"method\","
3732       "\"description\": \"Navigate up in GUI\","
3733       "\"transport\": \"Response\","
3734       "\"permission\": \"Navigate\","
3735       "\"params\": [],"
3736       "\"returns\": \"string\""
3737     "}",
3738     "\"Input.Select\": {"
3739       "\"type\": \"method\","
3740       "\"description\": \"Select current item in GUI\","
3741       "\"transport\": \"Response\","
3742       "\"permission\": \"Navigate\","
3743       "\"params\": [],"
3744       "\"returns\": \"string\""
3745     "}",
3746     "\"Input.Back\": {"
3747       "\"type\": \"method\","
3748       "\"description\": \"Goes back in GUI\","
3749       "\"transport\": \"Response\","
3750       "\"permission\": \"Navigate\","
3751       "\"params\": [],"
3752       "\"returns\": \"string\""
3753     "}",
3754     "\"Input.ContextMenu\": {"
3755       "\"type\": \"method\","
3756       "\"description\": \"Shows the context menu\","
3757       "\"transport\": \"Response\","
3758       "\"permission\": \"Navigate\","
3759       "\"params\": [],"
3760       "\"returns\": \"string\""
3761     "}",
3762     "\"Input.Info\": {"
3763       "\"type\": \"method\","
3764       "\"description\": \"Shows the information dialog\","
3765       "\"transport\": \"Response\","
3766       "\"permission\": \"Navigate\","
3767       "\"params\": [],"
3768       "\"returns\": \"string\""
3769     "}",
3770     "\"Input.Home\": {"
3771       "\"type\": \"method\","
3772       "\"description\": \"Goes to home window in GUI\","
3773       "\"transport\": \"Response\","
3774       "\"permission\": \"Navigate\","
3775       "\"params\": [],"
3776       "\"returns\": \"string\""
3777     "}",
3778     "\"Input.ShowCodec\": {"
3779       "\"type\": \"method\","
3780       "\"description\": \"Show codec information of the playing item\","
3781       "\"transport\": \"Response\","
3782       "\"permission\": \"Navigate\","
3783       "\"params\": [],"
3784       "\"returns\": \"string\""
3785     "}",
3786     "\"Input.ShowOSD\": {"
3787       "\"type\": \"method\","
3788       "\"description\": \"Show the on-screen display for the current player\","
3789       "\"transport\": \"Response\","
3790       "\"permission\": \"Navigate\","
3791       "\"params\": [],"
3792       "\"returns\": \"string\""
3793     "}",
3794     "\"Application.GetProperties\": {"
3795       "\"type\": \"method\","
3796       "\"description\": \"Retrieves the values of the given properties\","
3797       "\"transport\": \"Response\","
3798       "\"permission\": \"ReadData\","
3799       "\"params\": ["
3800         "{ \"name\": \"properties\", \"type\": \"array\", \"uniqueItems\": true, \"required\": true, \"items\": { \"$ref\": \"Application.Property.Name\" } }"
3801       "],"
3802       "\"returns\":  { \"$ref\": \"Application.Property.Value\", \"required\": true }"
3803     "}",
3804     "\"Application.SetVolume\": {"
3805       "\"type\": \"method\","
3806       "\"description\": \"Set the current volume\","
3807       "\"transport\": \"Response\","
3808       "\"permission\": \"ControlPlayback\","
3809       "\"params\": ["
3810         "{ \"name\": \"volume\", \"type\": ["
3811             "{ \"type\": \"integer\", \"minimum\": 0, \"maximum\": 100, \"required\": true },"
3812             "{ \"$ref\": \"Global.IncrementDecrement\", \"required\": true }"
3813           "],"
3814           "\"required\": true"
3815         "}"
3816       "],"
3817       "\"returns\": \"integer\""
3818     "}",
3819     "\"Application.SetMute\": {"
3820       "\"type\": \"method\","
3821       "\"description\": \"Toggle mute/unmute\","
3822       "\"transport\": \"Response\","
3823       "\"permission\": \"ControlPlayback\","
3824       "\"params\": ["
3825         "{ \"name\": \"mute\", \"required\": true, \"$ref\": \"Global.Toggle\" }"
3826       "],"
3827       "\"returns\": { \"type\": \"boolean\", \"description\": \"Mute state\" }"
3828     "}",
3829     "\"Application.Quit\": {"
3830       "\"type\": \"method\","
3831       "\"description\": \"Quit application\","
3832       "\"transport\": \"Response\","
3833       "\"permission\": \"ControlPower\","
3834       "\"params\": [],"
3835       "\"returns\": \"string\""
3836     "}",
3837     "\"XBMC.GetInfoLabels\": {"
3838       "\"type\": \"method\","
3839       "\"description\": \"Retrieve info labels about XBMC and the system\","
3840       "\"transport\": \"Response\","
3841       "\"permission\": \"ReadData\","
3842       "\"params\": ["
3843         "{ \"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\" }"
3844       "],"
3845       "\"returns\": {"
3846         "\"type\": \"object\","
3847         "\"description\": \"Object containing key-value pairs of the retrieved info labels\","
3848         "\"additionalProperties\": { \"type\": \"string\" }"
3849       "}"
3850     "}",
3851     "\"XBMC.GetInfoBooleans\": {"
3852       "\"type\": \"method\","
3853       "\"description\": \"Retrieve info booleans about XBMC and the system\","
3854       "\"transport\": \"Response\","
3855       "\"permission\": \"ReadData\","
3856       "\"params\": ["
3857         "{ \"name\": \"booleans\", \"type\": \"array\", \"required\": true, \"items\": { \"type\": \"string\" }, \"minItems\": 1 }"
3858       "],"
3859       "\"returns\": {"
3860         "\"type\": \"object\","
3861         "\"description\": \"Object containing key-value pairs of the retrieved info booleans\","
3862         "\"additionalProperties\": { \"type\": \"string\" }"
3863       "}"
3864     "}",
3865     "\"Favourites.GetFavourites\": {"
3866       "\"type\": \"method\","
3867       "\"description\": \"Retrieve all favourites\","
3868       "\"transport\": \"Response\","
3869       "\"permission\": \"ReadData\","
3870       "\"params\": ["
3871         "{ \"name\": \"type\", \"type\": [ \"null\", { \"$ref\": \"Favourite.Type\" } ], \"default\": null },"
3872         "{ \"name\": \"properties\", \"$ref\": \"Favourite.Fields.Favourite\" }"
3873       "],"
3874       "\"returns\": {"
3875         "\"type\": \"object\","
3876         "\"properties\": {"
3877           "\"limits\": { \"$ref\": \"List.LimitsReturned\", \"required\": true },"
3878           "\"favourites\": { \"type\": \"array\","
3879             "\"items\": { \"$ref\": \"Favourite.Details.Favourite\" }"
3880           "}"
3881         "}"
3882       "}"
3883     "}",
3884     "\"Favourites.AddFavourite\": {"
3885       "\"type\": \"method\","
3886       "\"description\": \"Add a favourite with the given details\","
3887       "\"transport\": \"Response\","
3888       "\"permission\": \"UpdateData\","
3889       "\"params\": ["
3890         "{ \"name\": \"title\", \"type\": \"string\", \"required\": true },"
3891         "{ \"name\": \"type\", \"$ref\": \"Favourite.Type\", \"required\": true },"
3892         "{ \"name\": \"path\", \"$ref\": \"Optional.String\", \"description\": \"Required for media and script favourites types\" },"
3893         "{ \"name\": \"window\", \"$ref\": \"Optional.String\", \"description\": \"Required for window favourite type\" },"
3894         "{ \"name\": \"windowparameter\", \"$ref\": \"Optional.String\" },"
3895         "{ \"name\": \"thumbnail\", \"$ref\": \"Optional.String\" }"
3896       "],"
3897       "\"returns\": \"string\""
3898     "}",
3899     "\"Settings.GetSections\": {"
3900       "\"type\": \"method\","
3901       "\"description\": \"Retrieves all setting sections\","
3902       "\"transport\": \"Response\","
3903       "\"permission\": \"ReadData\","
3904       "\"params\": ["
3905         "{ \"name\": \"level\", \"$ref\": \"Setting.Level\", \"default\": \"standard\" },"
3906         "{ \"name\": \"properties\", \"extends\": \"Item.Fields.Base\","
3907           "\"items\": { \"type\": \"string\","
3908             "\"enum\": [ \"categories\" ]"
3909           "}"
3910         "}"
3911       "],"
3912       "\"returns\": {"
3913         "\"type\": \"object\","
3914         "\"properties\": {"
3915           "\"sections\": { \"type\": \"array\","
3916             "\"items\": { \"$ref\": \"Setting.Details.Section\" }"
3917           "}"
3918         "}"
3919       "}"
3920     "}",
3921     "\"Settings.GetCategories\": {"
3922       "\"type\": \"method\","
3923       "\"description\": \"Retrieves all setting categories\","
3924       "\"transport\": \"Response\","
3925       "\"permission\": \"ReadData\","
3926       "\"params\": ["
3927         "{ \"name\": \"level\", \"$ref\": \"Setting.Level\", \"default\": \"standard\" },"
3928         "{ \"name\": \"section\", \"type\": \"string\", \"default\": \"\" },"
3929         "{ \"name\": \"properties\", \"extends\": \"Item.Fields.Base\","
3930           "\"items\": { \"type\": \"string\","
3931             "\"enum\": [ \"settings\" ]"
3932           "}"
3933         "}"
3934       "],"
3935       "\"returns\": {"
3936         "\"type\": \"object\","
3937         "\"properties\": {"
3938           "\"categories\": { \"type\": \"array\","
3939             "\"items\": { \"$ref\": \"Setting.Details.Category\" }"
3940           "}"
3941         "}"
3942       "}"
3943     "}",
3944     "\"Settings.GetSettings\": {"
3945       "\"type\": \"method\","
3946       "\"description\": \"Retrieves all settings\","
3947       "\"transport\": \"Response\","
3948       "\"permission\": \"ReadData\","
3949       "\"params\": ["
3950         "{ \"name\": \"level\", \"$ref\": \"Setting.Level\", \"default\": \"standard\" },"
3951         "{ \"name\": \"filter\", \"type\": ["
3952             "{ \"type\": \"object\","
3953               "\"properties\": {"
3954                 "\"section\": { \"type\": \"string\", \"required\": true, \"minLength\": 1 },"
3955                 "\"category\": { \"type\": \"string\", \"required\": true, \"minLength\": 1 }"
3956               "},"
3957               "\"additionalProperties\": false,"
3958               "\"required\": true"
3959             "}"
3960           "],"
3961           "\"default\": null"
3962         "}"
3963       "],"
3964       "\"returns\": {"
3965         "\"type\": \"object\","
3966         "\"properties\": {"
3967           "\"settings\": { \"type\": \"array\","
3968             "\"items\": { \"$ref\": \"Setting.Details.Setting\" }"
3969           "}"
3970         "}"
3971       "}"
3972     "}",
3973     "\"Settings.GetSettingValue\": {"
3974       "\"type\": \"method\","
3975       "\"description\": \"Retrieves the value of a setting\","
3976       "\"transport\": \"Response\","
3977       "\"permission\": \"ReadData\","
3978       "\"params\": ["
3979         "{ \"name\": \"setting\", \"type\": \"string\", \"required\": true, \"minLength\": 1 }"
3980       "],"
3981       "\"returns\": {"
3982         "\"type\": \"object\","
3983         "\"properties\": {"
3984           "\"value\": { \"$ref\": \"Setting.Value.Extended\", \"required\": true }"
3985         "}"
3986       "}"
3987     "}",
3988     "\"Settings.SetSettingValue\": {"
3989       "\"type\": \"method\","
3990       "\"description\": \"Changes the value of a setting\","
3991       "\"transport\": \"Response\","
3992       "\"permission\": \"WriteSetting\","
3993       "\"params\": ["
3994         "{ \"name\": \"setting\", \"type\": \"string\", \"required\": true, \"minLength\": 1 },"
3995         "{ \"name\": \"value\", \"$ref\": \"Setting.Value.Extended\", \"required\": true }"
3996       "],"
3997       "\"returns\": \"boolean\""
3998     "}",
3999     "\"Settings.ResetSettingValue\": {"
4000       "\"type\": \"method\","
4001       "\"description\": \"Resets the value of a setting\","
4002       "\"transport\": \"Response\","
4003       "\"permission\": \"WriteSetting\","
4004       "\"params\": ["
4005         "{ \"name\": \"setting\", \"type\": \"string\", \"required\": true, \"minLength\": 1 }"
4006       "],"
4007       "\"returns\": \"string\""
4008     "}"
4009   };
4010
4011   const char* const JSONRPC_SERVICE_NOTIFICATIONS[] = {  
4012     "\"Player.OnPlay\": {"
4013       "\"type\": \"notification\","
4014       "\"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.\","
4015       "\"params\": ["
4016         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
4017         "{ \"name\": \"data\", \"$ref\": \"Player.Notifications.Data\", \"required\": true }"
4018       "],"
4019       "\"returns\": null"
4020     "}",
4021     "\"Player.OnPause\": {"
4022       "\"type\": \"notification\","
4023       "\"description\": \"Playback of a media item has been paused. If there is no ID available extra information will be provided.\","
4024       "\"params\": ["
4025         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
4026         "{ \"name\": \"data\", \"$ref\": \"Player.Notifications.Data\", \"required\": true }"
4027       "],"
4028       "\"returns\": null"
4029     "}",
4030     "\"Player.OnStop\": {"
4031       "\"type\": \"notification\","
4032       "\"description\": \"Playback of a media item has been stopped. If there is no ID available extra information will be provided.\","
4033       "\"params\": ["
4034         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
4035         "{ \"name\": \"data\", \"type\": \"object\", \"required\": true,"
4036           "\"properties\": {"
4037             "\"item\": { \"$ref\": \"Notifications.Item\" },"
4038             "\"end\": { \"type\": \"boolean\", \"required\": true, \"description\": \"Whether the player has reached the end of the playable item(s) or not\" }"
4039           "}"
4040         "}"
4041       "],"
4042       "\"returns\": null"
4043     "}",
4044     "\"Player.OnSpeedChanged\": {"
4045       "\"type\": \"notification\","
4046       "\"description\": \"Speed of the playback of a media item has been changed. If there is no ID available extra information will be provided.\","
4047       "\"params\": ["
4048         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
4049         "{ \"name\": \"data\", \"$ref\": \"Player.Notifications.Data\", \"required\": true }"
4050       "],"
4051       "\"returns\": null"
4052     "}",
4053     "\"Player.OnSeek\": {"
4054       "\"type\": \"notification\","
4055       "\"description\": \"The playback position has been changed. If there is no ID available extra information will be provided.\","
4056       "\"params\": ["
4057         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
4058         "{ \"name\": \"data\", \"type\": \"object\", \"required\": true,"
4059           "\"properties\": {"
4060             "\"item\": { \"$ref\": \"Notifications.Item\" },"
4061             "\"player\": { \"$ref\": \"Player.Notifications.Player.Seek\", \"required\": true }"
4062           "}"
4063         "}"
4064       "],"
4065       "\"returns\": null"
4066     "}",
4067     "\"Player.OnPropertyChanged\": {"
4068       "\"type\": \"notification\","
4069       "\"description\": \"A property of the playing items has changed.\","
4070       "\"params\": ["
4071         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
4072         "{ \"name\": \"data\", \"type\": \"object\", \"required\": true,"
4073           "\"properties\": {"
4074             "\"property\": { \"$ref\": \"Player.Property.Value\" },"
4075             "\"player\": { \"$ref\": \"Player.Notifications.Player\", \"required\": true }"
4076           "}"
4077         "}"
4078       "],"
4079       "\"returns\": null"
4080     "}",
4081     "\"Playlist.OnAdd\": {"
4082       "\"type\": \"notification\","
4083       "\"description\": \"A playlist item has been added.\","
4084       "\"params\": ["
4085         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
4086         "{ \"name\": \"data\", \"type\": \"object\", \"required\": true,"
4087           "\"properties\": {"
4088             "\"playlistid\": { \"$ref\": \"Playlist.Id\", \"required\": true },"
4089             "\"item\": { \"$ref\": \"Notifications.Item\" },"
4090             "\"position\": { \"$ref\": \"Playlist.Position\" }"
4091           "}"
4092         "}"
4093       "],"
4094       "\"returns\": null"
4095     "}",
4096     "\"Playlist.OnRemove\": {"
4097       "\"type\": \"notification\","
4098       "\"description\": \"A playlist item has been removed.\","
4099       "\"params\": ["
4100         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
4101         "{ \"name\": \"data\", \"type\": \"object\", \"required\": true,"
4102           "\"properties\": {"
4103             "\"playlistid\": { \"$ref\": \"Playlist.Id\", \"required\": true },"
4104             "\"position\": { \"$ref\": \"Playlist.Position\" }"
4105           "}"
4106         "}"
4107       "],"
4108       "\"returns\": null"
4109     "}",
4110     "\"Playlist.OnClear\": {"
4111       "\"type\": \"notification\","
4112       "\"description\": \"A playlist item has been cleared.\","
4113       "\"params\": ["
4114         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
4115         "{ \"name\": \"data\", \"type\": \"object\", \"required\": true,"
4116           "\"properties\": {"
4117             "\"playlistid\": { \"$ref\": \"Playlist.Id\", \"required\": true }"
4118           "}"
4119         "}"
4120       "],"
4121       "\"returns\": null"
4122     "}",
4123     "\"AudioLibrary.OnUpdate\": {"
4124       "\"type\": \"notification\","
4125       "\"description\": \"An audio item has been updated.\","
4126       "\"params\": ["
4127         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
4128         "{ \"name\": \"data\", \"type\": \"object\", \"required\": true,"
4129           "\"properties\": {"
4130             "\"id\": { \"$ref\": \"Library.Id\", \"required\": true },"
4131             "\"type\": { \"type\": \"string\", \"id\": \"Notifications.Library.Audio.Type\", \"enum\": [ \"song\" ], \"required\": true }"
4132           "}"
4133         "}"
4134       "],"
4135       "\"returns\": null"
4136     "}",
4137     "\"AudioLibrary.OnRemove\": {"
4138       "\"type\": \"notification\","
4139       "\"description\": \"An audio item has been removed.\","
4140       "\"params\": ["
4141         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
4142         "{ \"name\": \"data\", \"type\": \"object\", \"required\": true,"
4143           "\"properties\": {"
4144             "\"id\": { \"$ref\": \"Library.Id\", \"required\": true },"
4145             "\"type\": { \"$ref\": \"Notifications.Library.Audio.Type\", \"required\": true }"
4146           "}"
4147         "}"
4148       "],"
4149       "\"returns\": null"
4150     "}",
4151     "\"AudioLibrary.OnScanStarted\": {"
4152       "\"type\": \"notification\","
4153       "\"description\": \"An audio library scan has started.\","
4154       "\"params\": ["
4155         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
4156         "{ \"name\": \"data\", \"type\": \"null\", \"required\": true }"
4157       "],"
4158       "\"returns\": null"
4159     "}",
4160     "\"AudioLibrary.OnScanFinished\": {"
4161       "\"type\": \"notification\","
4162       "\"description\": \"Scanning the audio library has been finished.\","
4163       "\"params\": ["
4164         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
4165         "{ \"name\": \"data\", \"type\": \"null\", \"required\": true }"
4166       "],"
4167       "\"returns\": null"
4168     "}",
4169     "\"AudioLibrary.OnCleanStarted\": {"
4170       "\"type\": \"notification\","
4171       "\"description\": \"An audio library clean operation has started.\","
4172       "\"params\": ["
4173         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
4174         "{ \"name\": \"data\", \"type\": \"null\", \"required\": true }"
4175       "],"
4176       "\"returns\": null"
4177     "}",
4178     "\"AudioLibrary.OnCleanFinished\": {"
4179       "\"type\": \"notification\","
4180       "\"description\": \"The audio library has been cleaned.\","
4181       "\"params\": ["
4182         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
4183         "{ \"name\": \"data\", \"type\": \"null\", \"required\": true }"
4184       "],"
4185       "\"returns\": null"
4186     "}",
4187     "\"VideoLibrary.OnUpdate\": {"
4188       "\"type\": \"notification\","
4189       "\"description\": \"A video item has been updated.\","
4190       "\"params\": ["
4191         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
4192         "{ \"name\": \"data\", \"type\": \"object\", \"required\": true,"
4193           "\"properties\": {"
4194             "\"id\": { \"$ref\": \"Library.Id\", \"required\": true },"
4195             "\"type\": { \"type\": \"string\", \"id\": \"Notifications.Library.Video.Type\", \"enum\": [ \"movie\", \"tvshow\", \"episode\", \"musicvideo\" ], \"required\": true },"
4196             "\"playcount\": { \"type\": \"integer\", \"minimum\": 0, \"default\": -1 }"
4197           "}"
4198         "}"
4199       "],"
4200       "\"returns\": null"
4201     "}",
4202     "\"VideoLibrary.OnRemove\": {"
4203       "\"type\": \"notification\","
4204       "\"description\": \"A video item has been removed.\","
4205       "\"params\": ["
4206         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
4207         "{ \"name\": \"data\", \"type\": \"object\", \"required\": true,"
4208           "\"properties\": {"
4209             "\"id\": { \"$ref\": \"Library.Id\", \"required\": true },"
4210             "\"type\": { \"$ref\": \"Notifications.Library.Video.Type\", \"required\": true }"
4211           "}"
4212         "}"
4213       "],"
4214       "\"returns\": null"
4215     "}",
4216     "\"VideoLibrary.OnScanStarted\": {"
4217       "\"type\": \"notification\","
4218       "\"description\": \"A video library scan has started.\","
4219       "\"params\": ["
4220         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
4221         "{ \"name\": \"data\", \"type\": \"null\", \"required\": true }"
4222       "],"
4223       "\"returns\": null"
4224     "}",
4225     "\"VideoLibrary.OnScanFinished\": {"
4226       "\"type\": \"notification\","
4227       "\"description\": \"Scanning the video library has been finished.\","
4228       "\"params\": ["
4229         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
4230         "{ \"name\": \"data\", \"type\": \"null\", \"required\": true }"
4231       "],"
4232       "\"returns\": null"
4233     "}",
4234     "\"VideoLibrary.OnCleanStarted\": {"
4235       "\"type\": \"notification\","
4236       "\"description\": \"A video library clean operation has started.\","
4237       "\"params\": ["
4238         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
4239         "{ \"name\": \"data\", \"type\": \"null\", \"required\": true }"
4240       "],"
4241       "\"returns\": null"
4242     "}",
4243     "\"VideoLibrary.OnCleanFinished\": {"
4244       "\"type\": \"notification\","
4245       "\"description\": \"The video library has been cleaned.\","
4246       "\"params\": ["
4247         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
4248         "{ \"name\": \"data\", \"type\": \"null\", \"required\": true }"
4249       "],"
4250       "\"returns\": null"
4251     "}",
4252     "\"System.OnQuit\": {"
4253       "\"type\": \"notification\","
4254       "\"description\": \"XBMC will be closed.\","
4255       "\"params\": ["
4256         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
4257         "{ \"name\": \"data\", \"type\": \"null\", \"required\": true }"
4258       "],"
4259       "\"returns\": null"
4260     "}",
4261     "\"System.OnRestart\": {"
4262       "\"type\": \"notification\","
4263       "\"description\": \"The system will be restarted.\","
4264       "\"params\": ["
4265         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
4266         "{ \"name\": \"data\", \"type\": \"null\", \"required\": true }"
4267       "],"
4268       "\"returns\": null"
4269     "}",
4270     "\"System.OnSleep\": {"
4271       "\"type\": \"notification\","
4272       "\"description\": \"The system will be suspended.\","
4273       "\"params\": ["
4274         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
4275         "{ \"name\": \"data\", \"type\": \"null\", \"required\": true }"
4276       "],"
4277       "\"returns\": null"
4278     "}",
4279     "\"System.OnWake\": {"
4280       "\"type\": \"notification\","
4281       "\"description\": \"The system woke up from suspension.\","
4282       "\"params\": ["
4283         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
4284         "{ \"name\": \"data\", \"type\": \"null\", \"required\": true }"
4285       "],"
4286       "\"returns\": null"
4287     "}",
4288     "\"System.OnLowBattery\": {"
4289       "\"type\": \"notification\","
4290       "\"description\": \"The system is on low battery.\","
4291       "\"params\": ["
4292         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
4293         "{ \"name\": \"data\", \"type\": \"null\", \"required\": true }"
4294       "],"
4295       "\"returns\": null"
4296     "}",
4297     "\"Application.OnVolumeChanged\": {"
4298       "\"type\": \"notification\","
4299       "\"description\": \"The volume of the application has changed.\","
4300       "\"params\": ["
4301         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
4302         "{ \"name\": \"data\", \"type\": \"object\", \"required\": true,"
4303           "\"properties\": {"
4304             "\"volume\": { \"type\": \"integer\", \"minimum\": 0, \"maximum\": 100, \"required\": true },"
4305             "\"muted\": { \"type\": \"boolean\", \"required\": true }"
4306           "}"
4307         "}"
4308       "],"
4309       "\"returns\": null"
4310     "}",
4311     "\"Input.OnInputRequested\": {"
4312       "\"type\": \"notification\","
4313       "\"description\": \"The user is requested to provide some information.\","
4314       "\"params\": ["
4315         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
4316         "{ \"name\": \"data\", \"type\": \"object\", \"required\": true,"
4317           "\"properties\": {"
4318             "\"type\": { \"type\": \"string\", \"enum\": [ \"keyboard\", \"time\", \"date\", \"ip\", \"password\", \"numericpassword\", \"number\", \"seconds\" ], \"required\": true },"
4319             "\"value\": { \"type\": \"string\", \"required\": true },"
4320             "\"title\": { \"type\": \"string\" }"
4321           "}"
4322         "}"
4323       "],"
4324       "\"returns\": null"
4325     "}",
4326     "\"Input.OnInputFinished\": {"
4327       "\"type\": \"notification\","
4328       "\"description\": \"The user has provided the requested input.\","
4329       "\"params\": ["
4330         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
4331         "{ \"name\": \"data\", \"type\": \"null\", \"required\": true }"
4332       "],"
4333       "\"returns\": null"
4334     "}",
4335     "\"GUI.OnScreensaverActivated\": {"
4336       "\"type\": \"notification\","
4337       "\"description\": \"The screensaver has been activated.\","
4338       "\"params\": ["
4339         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
4340         "{ \"name\": \"data\", \"type\": \"null\", \"required\": true }"
4341       "],"
4342       "\"returns\": null"
4343     "}",
4344     "\"GUI.OnScreensaverDeactivated\": {"
4345       "\"type\": \"notification\","
4346       "\"description\": \"The screensaver has been deactivated.\","
4347       "\"params\": ["
4348         "{ \"name\": \"sender\", \"type\": \"string\", \"required\": true },"
4349         "{ \"name\": \"data\", \"type\": \"null\", \"required\": true }"
4350       "],"
4351       "\"returns\": null"
4352     "}"
4353   };
4354 }