72134a6fbf097746f0c7e37e6377e220a0017c72
[vuplus_xbmc] / xbmc / interfaces / json-rpc / types.json
1 {
2   "Optional.Boolean": {
3     "type": [ "null", "boolean" ],
4     "default": null
5   },
6   "Optional.String": {
7     "type": [ "null", "string" ],
8     "default": null
9   },
10   "Optional.Integer": {
11     "type": [ "null", "integer" ],
12     "default": null
13   },
14   "Optional.Number": {
15     "type": [ "null", "number" ],
16     "default": null
17   },
18   "Array.String": {
19     "type": "array",
20     "items": { "type": "string", "minLength": 1 }
21   },
22   "Array.Integer": {
23     "type": "array",
24     "items": { "type": "integer" }
25   },
26   "Global.Time": {
27     "type": "object",
28     "properties": {
29       "hours": { "type": "integer", "required": true, "minimum": 0, "maximum": 23 },
30       "minutes": { "type": "integer", "required": true, "minimum": 0, "maximum": 59 },
31       "seconds": { "type": "integer", "required": true, "minimum": 0, "maximum": 59 },
32       "milliseconds": { "type": "integer", "required": true, "minimum": 0, "maximum": 999 }
33     },
34     "additionalProperties": false
35   },
36   "Global.IncrementDecrement": {
37     "type": "string",
38     "enum": [ "increment", "decrement" ]
39   },
40   "Global.Toggle": {
41     "type": [
42       { "type": "boolean", "required": true },
43       { "type": "string", "enum": [ "toggle" ], "required": true }
44     ]
45   },
46   "Global.String.NotEmpty": {
47     "type": "string",
48     "minLength": 1
49   },
50   "Configuration.Notifications": {
51     "type": "object",
52     "properties": {
53       "Player": { "type": "boolean", "required": true },
54       "Playlist": { "type": "boolean", "required": true },
55       "GUI": { "type": "boolean", "required": true },
56       "System": { "type": "boolean", "required": true },
57       "VideoLibrary": { "type": "boolean", "required": true },
58       "AudioLibrary": { "type": "boolean", "required": true },
59       "Application": { "type": "boolean", "required": true },
60       "Input": { "type": "boolean", "required": true },
61       "PVR": { "type": "boolean", "required": true },
62       "Other": { "type": "boolean", "required": true }
63     },
64     "additionalProperties": false
65   },
66   "Configuration": {
67     "type": "object", "required": true,
68     "properties": {
69       "notifications": { "$ref": "Configuration.Notifications", "required": true }
70     }
71   },
72   "Files.Media": {
73     "type": "string",
74     "enum": [ "video", "music", "pictures", "files", "programs" ]
75   },
76   "List.Amount": {
77     "type": "integer",
78     "default": -1,
79     "minimum": 0
80   },
81   "List.Limits": {
82     "type": "object",
83     "properties": {
84       "start": { "type": "integer", "minimum": 0, "default": 0, "description": "Index of the first item to return" },
85       "end": { "$ref": "List.Amount", "description": "Index of the last item to return" }
86     },
87     "additionalProperties": false
88   },
89   "List.LimitsReturned": {
90     "type": "object",
91     "properties": {
92       "start": { "type": "integer", "minimum": 0, "default": 0 },
93       "end": { "$ref": "List.Amount" },
94       "total": { "type": "integer", "minimum": 0, "required": true }
95     },
96     "additionalProperties": false
97   },
98   "List.Sort": {
99     "type": "object",
100     "properties": {
101       "method": { "type": "string", "default": "none",
102         "enum": [ "none", "label", "date", "size", "file", "path", "drivetype", "title", "track", "time", "artist",
103                   "album", "albumtype", "genre", "country", "year", "rating", "votes", "top250", "programcount",
104                   "playlist", "episode", "season", "totalepisodes", "watchedepisodes", "tvshowstatus", "tvshowtitle",
105                   "sorttitle", "productioncode", "mpaa", "studio", "dateadded", "lastplayed", "playcount", "listeners",
106                   "bitrate", "random" ]
107       },
108       "order": { "type": "string", "default": "ascending", "enum": [ "ascending", "descending" ] },
109       "ignorearticle": { "type": "boolean", "default": false }
110     }
111   },
112   "Library.Id": {
113     "type": "integer",
114     "default": -1,
115     "minimum": 1
116   },
117   "PVR.Channel.Type": {
118     "type": "string",
119     "enum": [ "tv", "radio" ]
120   },
121   "Playlist.Id": {
122     "type": "integer",
123     "minimum": 0,
124     "maximum": 2,
125     "default": -1
126   },
127   "Playlist.Type": {
128     "type": "string",
129     "enum": [ "unknown", "video", "audio", "picture", "mixed" ]
130   },
131   "Playlist.Property.Name": {
132     "type": "string",
133     "enum": [ "type", "size" ]
134   },
135   "Playlist.Property.Value": {
136     "type": "object",
137     "properties": {
138       "type": { "$ref": "Playlist.Type" },
139       "size": { "type": "integer", "minimum": 0 }
140     }
141   },
142   "Playlist.Position": {
143     "type": "integer",
144     "minimum": 0,
145     "default": -1
146   },
147   "Playlist.Item": {
148     "type": [
149       { "type": "object", "properties": { "file": { "type": "string", "description": "Path to a file (not a directory) to be added to the playlist", "required": true } }, "additionalProperties": false },
150       { "type": "object", "properties": { "directory": { "type": "string", "required": true }, "recursive": { "type": "boolean", "default": false }, "media": { "$ref": "Files.Media", "default": "files" } }, "additionalProperties": false },
151       { "type": "object", "properties": { "movieid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
152       { "type": "object", "properties": { "episodeid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
153       { "type": "object", "properties": { "musicvideoid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
154       { "type": "object", "properties": { "artistid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
155       { "type": "object", "properties": { "albumid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
156       { "type": "object", "properties": { "songid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
157       { "type": "object", "properties": { "genreid": { "$ref": "Library.Id", "required": true, "description": "Identification of a genre from the AudioLibrary" } }, "additionalProperties": false }
158     ]
159   },
160   "Player.Id": {
161     "type": "integer",
162     "minimum": 0,
163     "maximum": 2,
164     "default": -1
165   },
166   "Player.Type": {
167     "type": "string",
168     "enum": [ "video", "audio", "picture" ]
169   },
170   "Player.Position.Percentage": {
171     "type": "number",
172     "minimum": 0.0,
173     "maximum": 100.0
174   },
175   "Player.Position.Time": {
176     "type": "object",
177     "additionalProperties": false,
178     "properties": {
179       "hours": { "type": "integer", "minimum": 0, "maximum": 23, "default": 0 },
180       "minutes": { "type": "integer", "minimum": 0, "maximum": 59, "default": 0 },
181       "seconds": { "type": "integer", "minimum": 0, "maximum": 59, "default": 0 },
182       "milliseconds": { "type": "integer", "minimum": 0, "maximum": 999, "default": 0 }
183     }
184   },
185   "Player.Speed": {
186     "type": "object",
187     "required": true,
188     "properties": {
189       "speed": { "type": "integer" }
190     }
191   },
192   "Player.Repeat": {
193     "type": "string",
194     "enum": [ "off", "one", "all" ]
195   },
196   "Player.Audio.Stream": {
197     "type": "object",
198     "properties": {
199       "index": { "type": "integer", "minimum": 0, "required": true },
200       "name": { "type": "string", "required": true },
201       "language": { "type": "string", "required": true },
202       "codec": { "type": "string", "required": true },
203       "bitrate": { "type": "integer", "required": true },
204       "channels": { "type": "integer", "required": true }
205     }
206   },
207   "Player.Subtitle": {
208     "type": "object",
209     "properties": {
210       "index": { "type": "integer", "minimum": 0, "required": true },
211       "name": { "type": "string", "required": true },
212       "language": { "type": "string", "required": true }
213     }
214   },
215   "Player.Property.Name": {
216     "type": "string",
217     "enum": [ "type", "partymode", "speed", "time", "percentage",
218               "totaltime", "playlistid", "position", "repeat", "shuffled",
219               "canseek", "canchangespeed", "canmove", "canzoom", "canrotate",
220               "canshuffle", "canrepeat", "currentaudiostream", "audiostreams",
221               "subtitleenabled", "currentsubtitle", "subtitles", "live" ]
222   },
223   "Player.Property.Value": {
224     "type": "object",
225     "properties": {
226       "type": { "$ref": "Player.Type" },
227       "partymode": { "type": "boolean" },
228       "speed": { "type": "integer" },
229       "time": { "$ref": "Global.Time" },
230       "percentage": { "$ref": "Player.Position.Percentage" },
231       "totaltime": { "$ref": "Global.Time" },
232       "playlistid": { "$ref": "Playlist.Id" },
233       "position": { "$ref": "Playlist.Position" },
234       "repeat": { "$ref": "Player.Repeat" },
235       "shuffled": { "type": "boolean" },
236       "canseek": { "type": "boolean" },
237       "canchangespeed": { "type": "boolean" },
238       "canmove": { "type": "boolean" },
239       "canzoom": { "type": "boolean" },
240       "canrotate": { "type": "boolean" },
241       "canshuffle": { "type": "boolean" },
242       "canrepeat": { "type": "boolean" },
243       "currentaudiostream": { "$ref": "Player.Audio.Stream" },
244       "audiostreams": { "type": "array", "items": { "$ref": "Player.Audio.Stream" } },
245       "subtitleenabled": { "type": "boolean" },
246       "currentsubtitle": { "$ref": "Player.Subtitle" },
247       "subtitles": { "type": "array", "items": { "$ref": "Player.Subtitle" } },
248       "live": { "type": "boolean" }
249     }
250   },
251   "Notifications.Item.Type": {
252     "type": "string",
253     "enum": [ "unknown", "movie", "episode", "musicvideo", "song", "picture", "channel" ]
254   },
255   "Notifications.Item": {
256     "type": [
257       { "type": "object", "description": "An unknown item does not have any additional information.",
258         "properties": {
259           "type": { "$ref": "Notifications.Item.Type", "required": true }
260         }
261       },
262       { "type": "object", "description": "An item known to the database has an identification.",
263         "properties": {
264           "type": { "$ref": "Notifications.Item.Type", "required": true },
265           "id": { "$ref": "Library.Id", "required": true  }
266         }
267       },
268       { "type": "object", "description": "A movie item has a title and may have a release year.",
269         "properties": {
270           "type": { "$ref": "Notifications.Item.Type", "required": true },
271           "title": { "type": "string", "required": true },
272           "year": { "type": "integer" }
273         }
274       },
275       { "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.",
276         "properties": {
277           "type": { "$ref": "Notifications.Item.Type", "required": true },
278           "title": { "type": "string", "required": true },
279           "episode": { "type": "integer" },
280           "season": { "type": "integer" },
281           "showtitle": { "type": "string" }
282         }
283       },
284       { "type": "object", "description": "A music video has a title and may have an album and an artist.",
285         "properties": {
286           "type": { "$ref": "Notifications.Item.Type", "required": true },
287           "title": { "type": "string", "required": true },
288           "album": { "type": "string" },
289           "artist": { "type": "string" }
290         }
291       },
292       { "type": "object", "description": "A song has a title and may have an album, an artist and a track number.",
293         "properties": {
294           "type": { "$ref": "Notifications.Item.Type", "required": true },
295           "title": { "type": "string", "required": true },
296           "album": { "type": "string" },
297           "artist": { "type": "string" },
298           "track": { "type": "integer" }
299         }
300       },
301       { "type": "object", "description": "A picture has a file path.",
302         "properties": {
303           "type": { "$ref": "Notifications.Item.Type", "required": true },
304           "file": { "type": "string", "required": true }
305         }
306       },
307       { "type": "object", "description": "A PVR channel is either a radio or tv channel and has a title.",
308         "properties": {
309           "type": { "$ref": "Notifications.Item.Type", "required": true },
310           "id": { "$ref": "Library.Id", "required": true  },
311           "title": { "type": "string", "required": true },
312           "channeltype": { "$ref": "PVR.Channel.Type", "required": true }
313         }
314       }
315     ]
316   },
317   "Player.Notifications.Player": {
318     "type": "object",
319     "properties": {
320       "playerid": { "$ref": "Player.Id", "required": true },
321       "speed": { "type": "integer" }
322     }
323   },
324   "Player.Notifications.Player.Seek": {
325     "extends": "Player.Notifications.Player",
326     "properties": {
327       "time": { "$ref": "Global.Time" },
328       "seekoffset": { "$ref": "Global.Time" }
329     }
330   },
331   "Player.Notifications.Data": {
332     "type": "object",
333     "properties": {
334       "item": { "$ref": "Notifications.Item", "required": true },
335       "player": { "$ref": "Player.Notifications.Player", "required": true }
336     }
337   },
338   "Item.Fields.Base": {
339     "type": "array",
340     "uniqueItems": true,
341     "items": { "type": "string" }
342   },
343   "Item.Details.Base": {
344     "type": "object",
345     "properties": {
346       "label": { "type": "string", "required": true }
347     }
348   },
349   "Media.Details.Base": {
350     "extends": "Item.Details.Base",
351     "properties": {
352       "fanart": { "type": "string" },
353       "thumbnail": { "type": "string" }
354     }
355   },
356   "Media.Artwork": {
357     "type": "object",
358     "properties": {
359       "thumb": { "$ref": "Global.String.NotEmpty" },
360       "poster": { "$ref": "Global.String.NotEmpty" },
361       "banner": { "$ref": "Global.String.NotEmpty" },
362       "fanart": { "$ref": "Global.String.NotEmpty" }
363     },
364     "additionalProperties": { "$ref": "Global.String.NotEmpty" }
365   },
366   "Library.Fields.Genre": {
367     "extends": "Item.Fields.Base",
368     "items": { "type": "string", "enum": [ "title", "thumbnail" ] }
369   },
370   "Library.Details.Genre": {
371     "extends": "Item.Details.Base",
372     "properties": {
373       "genreid": { "$ref": "Library.Id", "required": true },
374       "title": { "type": "string" },
375       "thumbnail": { "type": "string" }
376     }
377   },
378   "Audio.Fields.Artist": {
379     "extends": "Item.Fields.Base",
380     "items": { "type": "string",
381       "enum": [ "instrument", "style", "mood", "born", "formed",
382                 "description", "genre", "died", "disbanded",
383                 "yearsactive", "musicbrainzartistid", "fanart",
384                 "thumbnail", "compilationartist" ]
385     }
386   },
387   "Audio.Fields.Album": {
388     "extends": "Item.Fields.Base",
389     "items": { "type": "string",
390       "description": "Requesting the genreid and/or artistid field will result in increased response times",
391       "enum": [ "title", "description", "artist", "genre",
392                 "theme", "mood", "style", "type", "albumlabel",
393                 "rating", "year", "musicbrainzalbumid",
394                 "musicbrainzalbumartistid", "fanart", "thumbnail",
395                 "playcount", "genreid", "artistid", "displayartist" ]
396     }
397   },
398   "Audio.Fields.Song": {
399     "extends": "Item.Fields.Base",
400     "items": { "type": "string",
401       "description": "Requesting the genreid, artistid and/or albumartistid field will result in increased response times",
402       "enum": [ "title", "artist", "albumartist", "genre", "year",
403                 "rating", "album", "track", "duration", "comment",
404                 "lyrics", "musicbrainztrackid", "musicbrainzartistid",
405                 "musicbrainzalbumid", "musicbrainzalbumartistid",
406                 "playcount", "fanart", "thumbnail", "file", "albumid",
407                 "lastplayed", "disc", "genreid", "artistid", "displayartist",
408                 "albumartistid" ]
409     }
410   },
411   "Audio.Details.Base": {
412     "extends": "Media.Details.Base",
413     "properties": {
414       "genre": { "$ref": "Array.String" }
415     }
416   },
417   "Audio.Details.Media": {
418     "extends": "Audio.Details.Base",
419     "properties": {
420       "title": { "type": "string" },
421       "artist": { "$ref": "Array.String" },
422       "year": { "type": "integer" },
423       "rating": { "type": "integer" },
424       "musicbrainzalbumid": { "type": "string" },
425       "musicbrainzalbumartistid": { "type": "string" },
426       "genreid": { "$ref": "Array.Integer" },
427       "artistid": { "$ref": "Array.Integer" },
428       "displayartist": { "type" : "string" }
429     }
430   },
431   "Audio.Details.Artist": {
432     "extends": "Audio.Details.Base",
433     "properties": {
434       "artistid": { "$ref": "Library.Id", "required": true },
435       "artist": { "type": "string", "required": true },
436       "instrument": { "$ref": "Array.String" },
437       "style": { "$ref": "Array.String" },
438       "mood": { "$ref": "Array.String" },
439       "born": { "type": "string" },
440       "formed": { "type": "string" },
441       "description": { "type": "string" },
442       "died": { "type": "string" },
443       "disbanded": { "type": "string" },
444       "yearsactive": { "$ref": "Array.String" },
445       "compilationartist": { "type": "boolean" },
446       "musicbrainzartistid": { "type": "string" }
447     }
448   },
449   "Audio.Details.Album": {
450     "extends": "Audio.Details.Media",
451     "properties": {
452       "albumid": { "$ref": "Library.Id", "required": true },
453       "description": { "type": "string" },
454       "theme": { "$ref": "Array.String" },
455       "mood": { "$ref": "Array.String" },
456       "style": { "$ref": "Array.String" },
457       "type": { "type": "string" },
458       "albumlabel": { "type": "string" },
459       "playcount": { "type": "integer" }
460     }
461   },
462   "Audio.Details.Song": {
463     "extends": "Audio.Details.Media",
464     "properties": {
465       "songid": { "$ref": "Library.Id", "required": true },
466       "file": { "type": "string" },
467       "albumartist": { "$ref": "Array.String" },
468       "album": { "type": "string" },
469       "track": { "type": "integer" },
470       "duration": { "type": "integer" },
471       "comment": { "type": "string" },
472       "lyrics": { "type": "string" },
473       "playcount": { "type": "integer" },
474       "musicbrainztrackid": { "type": "string" },
475       "musicbrainzartistid": { "type": "string" },
476       "albumid": { "$ref": "Library.Id" },
477       "lastplayed": { "type": "string" },
478       "disc": { "type": "integer" },
479       "albumartistid": { "$ref": "Array.Integer" }
480     }
481   },
482   "Video.Fields.Movie": {
483     "extends": "Item.Fields.Base",
484     "items": { "type": "string",
485       "description": "Requesting the cast, showlink and/or tag field will result in increased response times",
486       "enum": [ "title", "genre", "year", "rating", "director", "trailer",
487                 "tagline", "plot", "plotoutline", "originaltitle", "lastplayed",
488                 "playcount", "writer", "studio", "mpaa", "cast", "country",
489                 "imdbnumber", "runtime", "set", "showlink", "streamdetails",
490                 "top250", "votes", "fanart", "thumbnail", "file", "sorttitle",
491                 "resume", "setid", "dateadded", "tag", "art" ]
492     }
493   },
494   "Video.Fields.MovieSet": {
495     "extends": "Item.Fields.Base",
496     "items": { "type": "string",
497       "enum": [ "title", "playcount", "fanart", "thumbnail", "art" ]
498     }
499   },
500   "Video.Fields.TVShow": {
501     "extends": "Item.Fields.Base",
502     "items": { "type": "string",
503       "description": "Requesting the cast field will result in increased response times",
504       "enum": [ "title", "genre", "year", "rating", "plot",
505                 "studio", "mpaa", "cast", "playcount", "episode",
506                 "imdbnumber", "premiered", "votes", "lastplayed",
507                 "fanart", "thumbnail", "file", "originaltitle",
508                 "sorttitle", "episodeguide", "season", "watchedepisodes",
509                 "dateadded", "tag", "lastplayed", "art" ]
510     }
511   },
512   "Video.Fields.Season": {
513     "extends": "Item.Fields.Base",
514     "items": { "type": "string",
515       "enum": [ "season", "showtitle", "playcount", "episode", "fanart", "thumbnail", "tvshowid",
516                 "watchedepisodes", "art" ]
517     }
518   },
519   "Video.Fields.Episode": {
520     "extends": "Item.Fields.Base",
521     "items": { "type": "string",
522       "description": "Requesting the cast field will result in increased response times",
523       "enum": [ "title", "plot", "votes", "rating", "writer",
524                 "firstaired", "playcount", "runtime", "director",
525                 "productioncode", "season", "episode", "originaltitle",
526                 "showtitle", "cast", "streamdetails", "lastplayed", "fanart",
527                 "thumbnail", "file", "resume", "tvshowid", "dateadded",
528                 "uniqueid", "art" ]
529     }
530   },
531   "Video.Fields.MusicVideo": {
532     "extends": "Item.Fields.Base",
533     "items": { "type": "string",
534       "enum": [ "title", "playcount", "runtime", "director",
535                 "studio", "year", "plot", "album", "artist",
536                 "genre", "track", "streamdetails", "lastplayed",
537                 "fanart", "thumbnail", "file", "resume", "dateadded",
538                 "tag", "art" ]
539     }
540   },
541   "Video.Cast": {
542     "type": "array",
543     "items": { "type": "object",
544       "properties": {
545         "name": { "type": "string", "required": true },
546         "role": { "type": "string", "required": true },
547         "thumbnail": { "type": "string" }
548       },
549       "additionalProperties": false
550     }
551   },
552   "Video.Streams": {
553     "type": "object",
554     "properties": {
555       "audio": { "type": "array", "minItems": 1,
556         "items": { "type": "object",
557           "properties": {
558             "codec": { "type": "string" },
559             "language": { "type": "string" },
560             "channels": { "type": "integer" }
561           },
562           "additionalProperties": false
563         }
564       },
565       "video": { "type": "array", "minItems": 1,
566         "items": { "type": "object",
567           "properties": {
568             "codec": { "type": "string" },
569             "aspect": { "type": "number" },
570             "width": { "type": "integer" },
571             "height": { "type": "integer" },
572             "duration": { "type": "integer" }
573           },
574           "additionalProperties": false
575         }
576       },
577       "subtitle": { "type": "array", "minItems": 1,
578         "items": { "type": "object",
579           "properties": {
580             "language": { "type": "string" }
581           },
582           "additionalProperties": false
583         }
584       }
585     },
586     "additionalProperties": false
587   },
588   "Video.Resume": {
589     "type": "object",
590     "properties": {
591       "position": { "type": "number", "minimum": 0 },
592       "total": { "type": "number", "minimum": 0 }
593     },
594     "additionalProperties": false
595   },
596   "Video.Details.Base": {
597     "extends": "Media.Details.Base",
598     "properties": {
599       "playcount": { "type": "integer" },
600       "art": { "$ref": "Media.Artwork" }
601     }
602   },
603   "Video.Details.Media": {
604     "extends": "Video.Details.Base",
605     "properties": {
606       "title": { "type": "string" }
607     }
608   },
609   "Video.Details.Item": {
610     "extends": "Video.Details.Media",
611     "properties": {
612       "file": { "type": "string" },
613       "plot": { "type": "string" },
614       "lastplayed": { "type": "string" },
615       "dateadded": { "type": "string" }
616     }
617   },
618   "Video.Details.File": {
619     "extends": "Video.Details.Item",
620     "properties": {
621       "runtime": { "type": "integer", "description": "Runtime in seconds" },
622       "director": { "$ref": "Array.String" },
623       "streamdetails": { "$ref": "Video.Streams" },
624       "resume": { "$ref": "Video.Resume" }
625     }
626   },
627   "Video.Details.Movie": {
628     "extends": "Video.Details.File",
629     "properties": {
630       "movieid": { "$ref": "Library.Id", "required": true },
631       "genre": { "$ref": "Array.String" },
632       "year": { "type": "integer" },
633       "rating": { "type": "number" },
634       "trailer": { "type": "string" },
635       "tagline": { "type": "string" },
636       "plotoutline": { "type": "string" },
637       "originaltitle": { "type": "string" },
638       "sorttitle": { "type": "string" },
639       "writer": { "$ref": "Array.String" },
640       "studio": { "$ref": "Array.String" },
641       "mpaa": { "type": "string" },
642       "cast": { "$ref": "Video.Cast" },
643       "country": { "$ref": "Array.String" },
644       "imdbnumber": { "type": "string" },
645       "set": { "type": "string" },
646       "showlink": { "$ref": "Array.String" },
647       "top250": { "type": "integer" },
648       "votes": { "type": "string" },
649       "setid": { "$ref": "Library.Id" },
650       "tag": { "$ref": "Array.String" }
651     }
652   },
653   "Video.Details.MovieSet": {
654     "extends": "Video.Details.Media",
655     "properties": {
656       "setid": { "$ref": "Library.Id", "required": true }
657     }
658   },
659   "Video.Details.MovieSet.Extended": {
660     "extends": "Video.Details.MovieSet",
661     "properties": {
662       "limits": { "$ref": "List.LimitsReturned", "required": true },
663       "movies": { "type": "array",
664         "items": { "$ref": "Video.Details.Movie" }
665       }
666     }
667   },
668   "Video.Details.TVShow": {
669     "extends": "Video.Details.Item",
670     "properties": {
671       "tvshowid": { "$ref": "Library.Id", "required": true },
672       "genre": { "$ref": "Array.String" },
673       "year": { "type": "integer" },
674       "rating": { "type": "number" },
675       "originaltitle": { "type": "string" },
676       "sorttitle": { "type": "string" },
677       "studio": { "$ref": "Array.String" },
678       "mpaa": { "type": "string" },
679       "cast": { "$ref": "Video.Cast" },
680       "episode": { "type": "integer" },
681       "watchedepisodes": { "type": "integer" },
682       "imdbnumber": { "type": "string" },
683       "premiered": { "type": "string" },
684       "votes": { "type": "string" },
685       "episodeguide": { "type": "string" },
686       "season": { "type": "integer" },
687       "tag": { "$ref": "Array.String" }
688     }
689   },
690   "Video.Details.Season": {
691     "extends": "Video.Details.Base",
692     "properties": {
693       "season": { "type": "integer", "required": true },
694       "showtitle": { "type": "string" },
695       "episode": { "type": "integer" },
696       "watchedepisodes": { "type": "integer" },
697       "tvshowid": { "$ref": "Library.Id" }
698     }
699   },
700   "Video.Details.Episode": {
701     "extends": "Video.Details.File",
702     "properties": {
703       "episodeid": { "$ref": "Library.Id", "required": true },
704       "votes": { "type": "string" },
705       "rating": { "type": "number" },
706       "writer": { "$ref": "Array.String" },
707       "firstaired": { "type": "string" },
708       "productioncode": { "type": "string" },
709       "season": { "type": "integer" },
710       "episode": { "type": "integer" },
711       "uniqueid": { "type": "object", "additionalProperties": { "type": "string", "minLength": 1 } },
712       "originaltitle": { "type": "string" },
713       "showtitle": { "type": "string" },
714       "cast": { "$ref": "Video.Cast" },
715       "tvshowid": { "$ref": "Library.Id" }
716     }
717   },
718   "Video.Details.MusicVideo": {
719     "extends": "Video.Details.File",
720     "properties": {
721       "musicvideoid": { "$ref": "Library.Id", "required": true },
722       "studio": { "$ref": "Array.String" },
723       "year": { "type": "integer" },
724       "album": { "type": "string" },
725       "artist": { "$ref": "Array.String" },
726       "genre": { "$ref": "Array.String" },
727       "track": { "type": "integer" },
728       "tag": { "$ref": "Array.String" }
729     }
730   },
731   "PVR.Property.Name": {
732     "type": "string",
733     "enum": [ "available", "recording", "scanning" ]
734   },
735   "PVR.Property.Value": {
736     "type": "object",
737     "properties": {
738       "available": { "type": "boolean" },
739       "recording": { "type": "boolean" },
740       "scanning": { "type": "boolean" }
741     }
742   },
743   "PVR.ChannelGroup.Id": {
744     "type": [
745       { "$ref": "Library.Id", "required": true },
746       { "type": "string", "enum": [ "alltv", "allradio" ], "required": true }
747     ]
748   },
749   "PVR.Fields.Channel": {
750     "extends": "Item.Fields.Base",
751     "items": { "type": "string",
752       "enum": [ "thumbnail", "channeltype", "hidden", "locked", "channel", "lastplayed" ]
753     }
754   },
755   "PVR.Details.Channel": {
756     "extends": "Item.Details.Base",
757     "properties": {
758       "channelid": { "$ref": "Library.Id", "required": true },
759       "channel": { "type": "string" },
760       "channeltype": { "$ref": "PVR.Channel.Type" },
761       "hidden": { "type": "boolean" },
762       "locked": { "type": "boolean" },
763       "thumbnail": { "type": "string" },
764       "lastplayed": { "type": "string" }
765     }
766   },
767   "PVR.Details.ChannelGroup": {
768     "extends": "Item.Details.Base",
769     "properties": {
770       "channelgroupid": { "$ref": "Library.Id", "required": true },
771       "channeltype": { "$ref": "PVR.Channel.Type", "required": true }
772     }
773   },
774   "PVR.Details.ChannelGroup.Extended": {
775     "extends": "PVR.Details.ChannelGroup",
776     "properties": {
777       "limits": { "$ref": "List.LimitsReturned", "required": true },
778       "channels": { "type": "array",
779         "items": { "$ref": "PVR.Details.Channel" }
780       }
781     }
782   },
783   "PVR.Fields.Broadcast": {
784     "extends": "Item.Fields.Base",
785     "items": { "type": "string",
786       "enum": [ "title", "plot", "plotoutline", "starttime",
787                 "endtime", "runtime", "progress", "progresspercentage",
788                 "genre", "episodename", "episodenum", "episodepart",
789                 "firstaired", "hastimer", "isactive", "parentalrating",
790                 "wasactive", "thumbnail" ]
791     }
792   },
793   "PVR.Details.Broadcast": {"
794     "extends": "Item.Details.Base",
795     "properties": {"
796       "broadcastid": { "$ref": "Library.Id", "required": true },
797       "title": { "type": "string" },
798       "plot": { "type": "string" },
799       "plotoutline": { "type": "string" },
800       "starttime": { "type": "string" },
801       "endtime": { "type": "string" },
802       "runtime": { "type": "integer" },
803       "progress": { "type": "integer" },
804       "progresspercentage": { "type": "number" },
805       "genre": { "type": "string" },
806       "episodename": { "type": "string" },
807       "episodenum": { "type": "integer" },
808       "episodepart": { "type": "integer" },
809       "firstaired": { "type": "string" },
810       "hastimer": { "type": "boolean" },
811       "isactive": { "type": "boolean" },
812       "rating": { "type": "integer" },
813       "wasactive": { "type": "boolean" },
814       "thumbnail": { "type": "string" }
815     }
816   },
817   "Profiles.Password": {
818     "type": "object",
819     "properties": {
820       "value": { "type": "string", "required": true, "description": "Password" },
821       "encryption": { "type": "string", "description": "Password Encryption", "default": "md5", "enum": [ "none", "md5" ] }
822     }
823   },
824   "Profiles.Fields.Profile": {
825     "extends": "Item.Fields.Base",
826     "items": { "type": "string", "enum": [ "thumbnail", "lockmode" ] }
827   },
828   "Profiles.Details.Profile": {
829     "extends": "Item.Details.Base",
830     "properties": {
831       "thumbnail": { "type": "string" },
832       "lockmode": { "type": "integer" }
833     }
834   },
835   "List.Filter.Rule": {
836     "type": "object",
837     "properties": {
838       "operator": { "$ref": "List.Filter.Operators", "required": true },
839       "value": {
840         "type": [
841           { "type": "string", "required": true },
842           { "type": "array", "items": { "type": "string" }, "required": true }
843         ], "required": true
844       }
845     }
846   },
847   "List.Filter.Rule.Movies": {
848     "extends": "List.Filter.Rule",
849     "properties": {
850       "field": { "$ref": "List.Filter.Fields.Movies", "required": true }
851     }
852   },
853   "List.Filter.Rule.TVShows": {
854     "extends": "List.Filter.Rule",
855     "properties": {
856       "field": { "$ref": "List.Filter.Fields.TVShows", "required": true }
857     }
858   },
859   "List.Filter.Rule.Episodes": {
860     "extends": "List.Filter.Rule",
861     "properties": {
862       "field": { "$ref": "List.Filter.Fields.Episodes", "required": true }
863     }
864   },
865   "List.Filter.Rule.MusicVideos": {
866     "extends": "List.Filter.Rule",
867     "properties": {
868       "field": { "$ref": "List.Filter.Fields.MusicVideos", "required": true }
869     }
870   },
871   "List.Filter.Rule.Artists": {
872     "extends": "List.Filter.Rule",
873     "properties": {
874       "field": { "$ref": "List.Filter.Fields.Artists", "required": true }
875     }
876   },
877   "List.Filter.Rule.Albums": {
878     "extends": "List.Filter.Rule",
879     "properties": {
880       "field": { "$ref": "List.Filter.Fields.Albums", "required": true }
881     }
882   },
883   "List.Filter.Rule.Songs": {
884     "extends": "List.Filter.Rule",
885     "properties": {
886       "field": { "$ref": "List.Filter.Fields.Songs", "required": true }
887     }
888   },
889   "List.Filter.Movies": {
890     "type": [
891       { "type": "object",
892         "properties": {
893           "and": { "type": "array",
894             "items": { "$ref": "List.Filter.Movies" },
895             "minItems": 1, "required": true
896           }
897         }
898       },
899       { "type": "object",
900         "properties": {
901           "or": { "type": "array",
902             "items": { "$ref": "List.Filter.Movies" },
903             "minItems": 1, "required": true
904           }
905         }
906       },
907       { "$ref": "List.Filter.Rule.Movies" }
908     ]
909   },
910   "List.Filter.TVShows": {
911     "type": [
912       { "type": "object",
913         "properties": {
914           "and": { "type": "array",
915             "items": { "$ref": "List.Filter.TVShows" },
916             "minItems": 1, "required": true
917           }
918         }
919       },
920       { "type": "object",
921         "properties": {
922           "or": { "type": "array",
923             "items": { "$ref": "List.Filter.TVShows" },
924             "minItems": 1, "required": true
925           }
926         }
927       },
928       { "$ref": "List.Filter.Rule.TVShows" }
929     ]
930   },
931   "List.Filter.Episodes": {
932     "type": [
933       { "type": "object",
934         "properties": {
935           "and": { "type": "array",
936             "items": { "$ref": "List.Filter.Episodes" },
937             "minItems": 1, "required": true
938           }
939         }
940       },
941       { "type": "object",
942         "properties": {
943           "or": { "type": "array",
944             "items": { "$ref": "List.Filter.Episodes" },
945             "minItems": 1, "required": true
946           }
947         }
948       },
949       { "$ref": "List.Filter.Rule.Episodes" }
950     ]
951   },
952   "List.Filter.MusicVideos": {
953     "type": [
954       { "type": "object",
955         "properties": {
956           "and": { "type": "array",
957             "items": { "$ref": "List.Filter.MusicVideos" },
958             "minItems": 1, "required": true
959           }
960         }
961       },
962       { "type": "object",
963         "properties": {
964           "or": { "type": "array",
965             "items": { "$ref": "List.Filter.MusicVideos" },
966             "minItems": 1, "required": true
967           }
968         }
969       },
970       { "$ref": "List.Filter.Rule.MusicVideos" }
971     ]
972   },
973   "List.Filter.Artists": {
974     "type": [
975       { "type": "object",
976         "properties": {
977           "and": { "type": "array",
978             "items": { "$ref": "List.Filter.Artists" },
979             "minItems": 1, "required": true
980           }
981         }
982       },
983       { "type": "object",
984         "properties": {
985           "or": { "type": "array",
986             "items": { "$ref": "List.Filter.Artists" },
987             "minItems": 1, "required": true
988           }
989         }
990       },
991       { "$ref": "List.Filter.Rule.Artists" }
992     ]
993   },
994   "List.Filter.Albums": {
995     "type": [
996       { "type": "object",
997         "properties": {
998           "and": { "type": "array",
999             "items": { "$ref": "List.Filter.Albums" },
1000             "minItems": 1, "required": true
1001           }
1002         }
1003       },
1004       { "type": "object",
1005         "properties": {
1006           "or": { "type": "array",
1007             "items": { "$ref": "List.Filter.Albums" },
1008             "minItems": 1, "required": true
1009           }
1010         }
1011       },
1012       { "$ref": "List.Filter.Rule.Albums" }
1013     ]
1014   },
1015   "List.Filter.Songs": {
1016     "type": [
1017       { "type": "object",
1018         "properties": {
1019           "and": { "type": "array",
1020             "items": { "$ref": "List.Filter.Songs" },
1021             "minItems": 1, "required": true
1022           }
1023         }
1024       },
1025       { "type": "object",
1026         "properties": {
1027           "or": { "type": "array",
1028             "items": { "$ref": "List.Filter.Songs" },
1029             "minItems": 1, "required": true
1030           }
1031         }
1032       },
1033       { "$ref": "List.Filter.Rule.Songs" }
1034     ]
1035   },
1036   "List.Item.Base": {
1037     "extends": [ "Video.Details.File", "Audio.Details.Media" ],
1038     "properties": {
1039       "id": { "$ref": "Library.Id" },
1040       "type": { "type": "string", "enum": [ "unknown", "movie", "episode", "musicvideo", "song", "picture", "channel" ] },
1041       "albumartist": { "$ref": "Array.String" },
1042       "album": { "type": "string" },
1043       "track": { "type": "integer" },
1044       "duration": { "type": "integer" },
1045       "comment": { "type": "string" },
1046       "lyrics": { "type": "string" },
1047       "musicbrainztrackid": { "type": "string" },
1048       "musicbrainzartistid": { "type": "string" },
1049       "trailer": { "type": "string" },
1050       "tagline": { "type": "string" },
1051       "plotoutline": { "type": "string" },
1052       "originaltitle": { "type": "string" },
1053       "writer": { "$ref": "Array.String" },
1054       "studio": { "$ref": "Array.String" },
1055       "mpaa": { "type": "string" },
1056       "cast": { "$ref": "Video.Cast" },
1057       "country": { "$ref": "Array.String" },
1058       "imdbnumber": { "type": "string" },
1059       "premiered": { "type": "string" },
1060       "productioncode": { "type": "string" },
1061       "set": { "type": "string" },
1062       "showlink": { "$ref": "Array.String" },
1063       "top250": { "type": "integer" },
1064       "votes": { "type": "string" },
1065       "firstaired": { "type": "string" },
1066       "season": { "type": "integer" },
1067       "episode": { "type": "integer" },
1068       "showtitle": { "type": "string" },
1069       "albumid": { "$ref": "Library.Id" },
1070       "setid": { "$ref": "Library.Id" },
1071       "tvshowid": { "$ref": "Library.Id" },
1072       "watchedepisodes": { "type": "integer" },
1073       "disc": { "type": "integer" },
1074       "tag": { "$ref": "Array.String" },
1075       "albumartistid": { "$ref": "Array.Integer" },
1076       "uniqueid": { "type": "object", "additionalProperties": { "type": "string", "minLength": 1 } },
1077       "episodeguide": { "type": "string" },
1078       "sorttitle": { "type": "string" },
1079       "description": { "type": "string" },
1080       "theme": { "$ref": "Array.String" },
1081       "mood": { "$ref": "Array.String" },
1082       "style": { "$ref": "Array.String" },
1083       "albumlabel": { "type": "string" }
1084     }
1085   },
1086   "List.Fields.All": {
1087     "extends": "Item.Fields.Base",
1088     "items": { "type": "string",
1089       "enum": [ "title", "artist", "albumartist", "genre", "year", "rating",
1090                 "album", "track", "duration", "comment", "lyrics", "musicbrainztrackid",
1091                 "musicbrainzartistid", "musicbrainzalbumid", "musicbrainzalbumartistid",
1092                 "playcount", "fanart", "director", "trailer", "tagline", "plot",
1093                 "plotoutline", "originaltitle", "lastplayed", "writer", "studio",
1094                 "mpaa", "cast", "country", "imdbnumber", "premiered", "productioncode",
1095                 "runtime", "set", "showlink", "streamdetails", "top250", "votes",
1096                 "firstaired", "season", "episode", "showtitle", "thumbnail", "file",
1097                 "resume", "artistid", "albumid", "tvshowid", "setid", "watchedepisodes",
1098                 "disc", "tag", "art", "genreid", "displayartist", "albumartistid",
1099                 "description", "theme", "mood", "style", "albumlabel", "sorttitle",
1100                 "episodeguide", "uniqueid", "dateadded", "channel", "channeltype", "hidden",
1101                 "locked", "channelnumber", "starttime", "endtime" ]
1102     }
1103   },
1104   "List.Item.All": {
1105     "extends": "List.Item.Base",
1106     "properties": {
1107       "channel": { "type": "string" },
1108       "channeltype": { "$ref": "PVR.Channel.Type" },
1109       "hidden": { "type": "boolean" },
1110       "locked": { "type": "boolean" },
1111       "channelnumber": { "type": "integer" },
1112       "starttime": { "type": "string" },
1113       "endtime": { "type": "string" }
1114     }
1115   },
1116   "List.Fields.Files": {
1117     "extends": "Item.Fields.Base",
1118     "items": { "type": "string",
1119       "enum": [ "title", "artist", "albumartist", "genre", "year", "rating",
1120                 "album", "track", "duration", "comment", "lyrics", "musicbrainztrackid",
1121                 "musicbrainzartistid", "musicbrainzalbumid", "musicbrainzalbumartistid",
1122                 "playcount", "fanart", "director", "trailer", "tagline", "plot",
1123                 "plotoutline", "originaltitle", "lastplayed", "writer", "studio",
1124                 "mpaa", "cast", "country", "imdbnumber", "premiered", "productioncode",
1125                 "runtime", "set", "showlink", "streamdetails", "top250", "votes",
1126                 "firstaired", "season", "episode", "showtitle", "thumbnail", "file",
1127                 "resume", "artistid", "albumid", "tvshowid", "setid", "watchedepisodes",
1128                 "disc", "tag", "art", "genreid", "displayartist", "albumartistid",
1129                 "description", "theme", "mood", "style", "albumlabel", "sorttitle",
1130                 "episodeguide", "uniqueid", "dateadded", "size", "lastmodified", "mimetype" ]
1131     }
1132   },
1133   "List.Item.File": {
1134     "extends": "List.Item.Base",
1135     "properties": {
1136       "file": { "type": "string", "required": true },
1137       "filetype": { "type": "string", "enum": [ "file", "directory" ], "required": true },
1138       "size": { "type": "integer", "description": "Size of the file in bytes" },
1139       "lastmodified": { "type": "string" },
1140       "mimetype": { "type": "string" }
1141     }
1142   },
1143   "List.Items.Sources": {
1144     "type": "array",
1145     "items": {
1146       "extends": "Item.Details.Base",
1147       "properties": {
1148         "file": { "type": "string", "required": true }
1149       }
1150     }
1151   },
1152   "Addon.Types": {
1153     "type": "string",
1154     "enum": [ "unknown", "xbmc.metadata.scraper.albums", "xbmc.metadata.scraper.artists", "xbmc.metadata.scraper.movies",
1155               "xbmc.metadata.scraper.musicvideos", "xbmc.metadata.scraper.tvshows", "xbmc.ui.screensaver",
1156               "xbmc.player.musicviz", "xbmc.python.pluginsource", "xbmc.python.script", "xbmc.python.weather",
1157               "xbmc.python.subtitles", "xbmc.python.lyrics", "xbmc.gui.skin", "xbmc.gui.webinterface",
1158               "xbmc.pvrclient", "xbmc.addon.video", "xbmc.addon.audio", "xbmc.addon.image", "xbmc.addon.executable",
1159               "xbmc.service" ],
1160     "default": "unknown"
1161   },
1162   "Addon.Content": {
1163     "type": "string",
1164     "enum": [ "unknown", "video", "audio", "image", "executable" ],
1165     "default": "unknown"
1166   },
1167   "Addon.Fields": {
1168     "extends": "Item.Fields.Base",
1169     "items": { "type": "string",
1170       "enum": [ "name", "version", "summary", "description", "path", "author", "thumbnail", "disclaimer", "fanart",
1171                 "dependencies", "broken", "extrainfo", "rating", "enabled" ]
1172     }
1173   },
1174   "Addon.Details": {
1175     "extends": "Item.Details.Base",
1176     "properties": {
1177       "addonid": { "type": "string", "required": true },
1178       "type": { "$ref": "Addon.Types", "required": true },
1179       "name": { "type": "string" },
1180       "version": { "type": "string" },
1181       "summary": { "type": "string" },
1182       "description": { "type": "string" },
1183       "path": { "type": "string" },
1184       "author": { "type": "string" },
1185       "thumbnail": { "type": "string" },
1186       "disclaimer": { "type": "string" },
1187       "fanart": { "type": "string" },
1188       "dependencies": { "type": "array",
1189         "items": { "type": "object",
1190           "properties": {
1191             "addonid": { "type": "string", "required": true },
1192             "version": { "type": "string", "required": true },
1193             "optional": { "type": "boolean", "required": true }
1194           }
1195         }
1196       },
1197       "broken": { "type": [ "boolean", "string" ] },
1198       "extrainfo": { "type": "array",
1199         "items": { "type": "object",
1200           "properties": {
1201             "key": { "type": "string", "required": true },
1202             "value": { "type": "string", "required": true }
1203           }
1204         }
1205       },
1206       "rating": { "type": "integer" },
1207       "enabled": { "type": "boolean" }
1208     }
1209   },
1210   "GUI.Property.Name": {
1211     "type": "string",
1212     "enum": [ "currentwindow", "currentcontrol", "skin", "fullscreen", "stereoscopicmode" ]
1213   },
1214   "GUI.Property.Value": {
1215     "type": "object",
1216     "properties": {
1217       "currentwindow": { "type": "object",
1218         "properties": {
1219           "id": { "type": "integer", "required": true },
1220           "label": { "type": "string", "required": true }
1221         }
1222       },
1223       "currentcontrol": { "type": "object",
1224         "properties": {
1225           "label": { "type": "string", "required": true }
1226         }
1227       },
1228       "skin": { "type": "object",
1229         "properties": {
1230           "id": { "type": "string", "required": true, "minLength": 1 },
1231           "name": { "type": "string" }
1232         }
1233       },
1234       "fullscreen": { "type": "boolean" },
1235       "stereoscopicmode": { "$ref": "GUI.Stereoscopy.Mode" }
1236     }
1237   },
1238   "GUI.Stereoscopy.Mode": {
1239     "type": "object",
1240     "properties": {
1241       "mode": { "type": "string", "required": true, "enum": [ "off", "split_vertical", "split_horizontal", "row_interleaved", "hardware_based", "anaglyph_cyan_red", "anaglyph_green_magenta", "monoscopic" ] },
1242       "label": { "type": "string", "required": true }
1243     }
1244   },
1245   "System.Property.Name": {
1246     "type": "string",
1247     "enum": [ "canshutdown", "cansuspend", "canhibernate", "canreboot" ]
1248   },
1249   "System.Property.Value": {
1250     "type": "object",
1251     "properties": {
1252       "canshutdown": { "type": "boolean" },
1253       "cansuspend": { "type": "boolean" },
1254       "canhibernate": { "type": "boolean" },
1255       "canreboot": { "type": "boolean" }
1256     }
1257   },
1258   "Application.Property.Name": {
1259     "type": "string",
1260     "enum": [ "volume", "muted", "name", "version" ]
1261   },
1262   "Application.Property.Value": {
1263     "type": "object",
1264     "properties": {
1265       "volume": { "type": "integer", "minimum": 0, "maximum": 100 },
1266       "muted": { "type": "boolean" },
1267       "name": { "type": "string", "minLength": 1 },
1268       "version": { "type": "object",
1269         "properties": {
1270           "major": { "type": "integer", "minimum": 0, "required": true },
1271           "minor": { "type": "integer", "minimum": 0, "required": true },
1272           "revision": { "type": [ "string", "integer" ] },
1273           "tag": { "type": "string", "enum": [ "prealpha", "alpha", "beta", "releasecandidate", "stable" ], "required": true }
1274         }
1275       }
1276     }
1277   },
1278   "Favourite.Fields.Favourite": {
1279     "extends": "Item.Fields.Base",
1280     "items": { "type": "string",
1281       "enum": [ "window", "windowparameter", "thumbnail", "path" ]
1282     }
1283   },
1284   "Favourite.Type": {
1285     "type": "string",
1286     "enum": [ "media", "window", "script", "unknown" ]
1287   },
1288   "Favourite.Details.Favourite": {
1289     "type": "object",
1290     "properties": {
1291       "title": { "type": "string", "required": true },
1292       "type": { "$ref": "Favourite.Type", "required": true },
1293       "path": { "type": "string" },
1294       "window": { "type": "string" },
1295       "windowparameter": { "type": "string" },
1296       "thumbnail": { "type": "string" }
1297     },
1298     "additionalProperties": false
1299   }
1300 }