Merge pull request #2248 from Tolriq/compilationartist
[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 } }, "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     }
203   },
204   "Player.Audio.Stream.Extended": {
205     "extends": "Player.Audio.Stream",
206     "properties": {
207       "codec": { "type": "string", "required": true },
208       "bitrate": { "type": "integer", "required": true },
209       "channels": { "type": "integer", "required": true }
210     }
211   },
212   "Player.Subtitle": {
213     "type": "object",
214     "properties": {
215       "index": { "type": "integer", "minimum": 0, "required": true },
216       "name": { "type": "string", "required": true },
217       "language": { "type": "string", "required": true }
218     }
219   },
220   "Player.Property.Name": {
221     "type": "string",
222     "enum": [ "type", "partymode", "speed", "time", "percentage",
223               "totaltime", "playlistid", "position", "repeat", "shuffled",
224               "canseek", "canchangespeed", "canmove", "canzoom", "canrotate",
225               "canshuffle", "canrepeat", "currentaudiostream", "audiostreams",
226               "subtitleenabled", "currentsubtitle", "subtitles", "live" ]
227   },
228   "Player.Property.Value": {
229     "type": "object",
230     "properties": {
231       "type": { "$ref": "Player.Type" },
232       "partymode": { "type": "boolean" },
233       "speed": { "type": "integer" },
234       "time": { "$ref": "Global.Time" },
235       "percentage": { "$ref": "Player.Position.Percentage" },
236       "totaltime": { "$ref": "Global.Time" },
237       "playlistid": { "$ref": "Playlist.Id" },
238       "position": { "$ref": "Playlist.Position" },
239       "repeat": { "$ref": "Player.Repeat" },
240       "shuffled": { "type": "boolean" },
241       "canseek": { "type": "boolean" },
242       "canchangespeed": { "type": "boolean" },
243       "canmove": { "type": "boolean" },
244       "canzoom": { "type": "boolean" },
245       "canrotate": { "type": "boolean" },
246       "canshuffle": { "type": "boolean" },
247       "canrepeat": { "type": "boolean" },
248       "currentaudiostream": { "$ref": "Player.Audio.Stream.Extended" },
249       "audiostreams": { "type": "array", "items": { "$ref": "Player.Audio.Stream" } },
250       "subtitleenabled": { "type": "boolean" },
251       "currentsubtitle": { "$ref": "Player.Subtitle" },
252       "subtitles": { "type": "array", "items": { "$ref": "Player.Subtitle" } },
253       "live": { "type": "boolean" }
254     }
255   },
256   "Notifications.Item.Type": {
257     "type": "string",
258     "enum": [ "unknown", "movie", "episode", "musicvideo", "song", "picture", "channel" ]
259   },
260   "Notifications.Item": {
261     "type": [
262       { "type": "object", "description": "An unknown item does not have any additional information.",
263         "properties": {
264           "type": { "$ref": "Notifications.Item.Type", "required": true }
265         }
266       },
267       { "type": "object", "description": "An item known to the database has an identification.",
268         "properties": {
269           "type": { "$ref": "Notifications.Item.Type", "required": true },
270           "id": { "$ref": "Library.Id", "required": true  }
271         }
272       },
273       { "type": "object", "description": "A movie item has a title and may have a release year.",
274         "properties": {
275           "type": { "$ref": "Notifications.Item.Type", "required": true },
276           "title": { "type": "string", "required": true },
277           "year": { "type": "integer" }
278         }
279       },
280       { "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.",
281         "properties": {
282           "type": { "$ref": "Notifications.Item.Type", "required": true },
283           "title": { "type": "string", "required": true },
284           "episode": { "type": "integer" },
285           "season": { "type": "integer" },
286           "showtitle": { "type": "string" }
287         }
288       },
289       { "type": "object", "description": "A music video has a title and may have an album and an artist.",
290         "properties": {
291           "type": { "$ref": "Notifications.Item.Type", "required": true },
292           "title": { "type": "string", "required": true },
293           "album": { "type": "string" },
294           "artist": { "type": "string" }
295         }
296       },
297       { "type": "object", "description": "A song has a title and may have an album, an artist and a track number.",
298         "properties": {
299           "type": { "$ref": "Notifications.Item.Type", "required": true },
300           "title": { "type": "string", "required": true },
301           "album": { "type": "string" },
302           "artist": { "type": "string" },
303           "track": { "type": "integer" }
304         }
305       },
306       { "type": "object", "description": "A picture has a file path.",
307         "properties": {
308           "type": { "$ref": "Notifications.Item.Type", "required": true },
309           "file": { "type": "string", "required": true }
310         }
311       },
312       { "type": "object", "description": "A PVR channel is either a radio or tv channel and has a title.",
313         "properties": {
314           "type": { "$ref": "Notifications.Item.Type", "required": true },
315           "id": { "$ref": "Library.Id", "required": true  },
316           "title": { "type": "string", "required": true },
317           "channeltype": { "$ref": "PVR.Channel.Type", "required": true }
318         }
319       }
320     ]
321   },
322   "Player.Notifications.Player": {
323     "type": "object",
324     "properties": {
325       "playerid": { "$ref": "Player.Id", "required": true },
326       "speed": { "type": "integer" }
327     }
328   },
329   "Player.Notifications.Player.Seek": {
330     "extends": "Player.Notifications.Player",
331     "properties": {
332       "time": { "$ref": "Global.Time" },
333       "seekoffset": { "$ref": "Global.Time" }
334     }
335   },
336   "Player.Notifications.Data": {
337     "type": "object",
338     "properties": {
339       "item": { "$ref": "Notifications.Item", "required": true },
340       "player": { "$ref": "Player.Notifications.Player", "required": true }
341     }
342   },
343   "Item.Fields.Base": {
344     "type": "array",
345     "uniqueItems": true,
346     "items": { "type": "string" }
347   },
348   "Item.Details.Base": {
349     "type": "object",
350     "properties": {
351       "label": { "type": "string", "required": true }
352     }
353   },
354   "Media.Details.Base": {
355     "extends": "Item.Details.Base",
356     "properties": {
357       "fanart": { "type": "string" },
358       "thumbnail": { "type": "string" }
359     }
360   },
361   "Media.Artwork": {
362     "type": "object",
363     "properties": {
364       "thumb": { "$ref": "Global.String.NotEmpty" },
365       "poster": { "$ref": "Global.String.NotEmpty" },
366       "banner": { "$ref": "Global.String.NotEmpty" },
367       "fanart": { "$ref": "Global.String.NotEmpty" }
368     },
369     "additionalProperties": { "$ref": "Global.String.NotEmpty" }
370   },
371   "Library.Fields.Genre": {
372     "extends": "Item.Fields.Base",
373     "items": { "type": "string", "enum": [ "title", "thumbnail" ] }
374   },
375   "Library.Details.Genre": {
376     "extends": "Item.Details.Base",
377     "properties": {
378       "genreid": { "$ref": "Library.Id", "required": true },
379       "title": { "type": "string" },
380       "thumbnail": { "type": "string" }
381     }
382   },
383   "Audio.Fields.Artist": {
384     "extends": "Item.Fields.Base",
385     "items": { "type": "string",
386       "enum": [ "instrument", "style", "mood", "born", "formed",
387                 "description", "genre", "died", "disbanded",
388                 "yearsactive", "musicbrainzartistid", "fanart",
389                 "thumbnail", "compilationartist" ]
390     }
391   },
392   "Audio.Fields.Album": {
393     "extends": "Item.Fields.Base",
394     "items": { "type": "string",
395       "description": "Requesting the genreid and/or artistid field will result in increased response times",
396       "enum": [ "title", "description", "artist", "genre",
397                 "theme", "mood", "style", "type", "albumlabel",
398                 "rating", "year", "musicbrainzalbumid",
399                 "musicbrainzalbumartistid", "fanart", "thumbnail",
400                 "playcount", "genreid", "artistid", "displayartist" ]
401     }
402   },
403   "Audio.Fields.Song": {
404     "extends": "Item.Fields.Base",
405     "items": { "type": "string",
406       "description": "Requesting the genreid, artistid and/or albumartistid field will result in increased response times",
407       "enum": [ "title", "artist", "albumartist", "genre", "year",
408                 "rating", "album", "track", "duration", "comment",
409                 "lyrics", "musicbrainztrackid", "musicbrainzartistid",
410                 "musicbrainzalbumid", "musicbrainzalbumartistid",
411                 "playcount", "fanart", "thumbnail", "file", "albumid",
412                 "lastplayed", "disc", "genreid", "artistid", "displayartist",
413                 "albumartistid" ]
414     }
415   },
416   "Audio.Details.Base": {
417     "extends": "Media.Details.Base",
418     "properties": {
419       "genre": { "$ref": "Array.String" }
420     }
421   },
422   "Audio.Details.Media": {
423     "extends": "Audio.Details.Base",
424     "properties": {
425       "title": { "type": "string" },
426       "artist": { "$ref": "Array.String" },
427       "year": { "type": "integer" },
428       "rating": { "type": "integer" },
429       "musicbrainzalbumid": { "type": "string" },
430       "musicbrainzalbumartistid": { "type": "string" },
431       "genreid": { "$ref": "Array.Integer" },
432       "artistid": { "$ref": "Array.Integer" },
433       "displayartist": { "type" : "string" }
434     }
435   },
436   "Audio.Details.Artist": {
437     "extends": "Audio.Details.Base",
438     "properties": {
439       "artistid": { "$ref": "Library.Id", "required": true },
440       "artist": { "type": "string", "required": true },
441       "instrument": { "$ref": "Array.String" },
442       "style": { "$ref": "Array.String" },
443       "mood": { "$ref": "Array.String" },
444       "born": { "type": "string" },
445       "formed": { "type": "string" },
446       "description": { "type": "string" },
447       "died": { "type": "string" },
448       "disbanded": { "type": "string" },
449       "yearsactive": { "$ref": "Array.String" },
450       "compilationartist": { "type": "boolean" },
451       "musicbrainzartistid": { "type": "string" }
452     }
453   },
454   "Audio.Details.Album": {
455     "extends": "Audio.Details.Media",
456     "properties": {
457       "albumid": { "$ref": "Library.Id", "required": true },
458       "description": { "type": "string" },
459       "theme": { "$ref": "Array.String" },
460       "mood": { "$ref": "Array.String" },
461       "style": { "$ref": "Array.String" },
462       "type": { "type": "string" },
463       "albumlabel": { "type": "string" },
464       "playcount": { "type": "integer" }
465     }
466   },
467   "Audio.Details.Song": {
468     "extends": "Audio.Details.Media",
469     "properties": {
470       "songid": { "$ref": "Library.Id", "required": true },
471       "file": { "type": "string" },
472       "albumartist": { "$ref": "Array.String" },
473       "album": { "type": "string" },
474       "track": { "type": "integer" },
475       "duration": { "type": "integer" },
476       "comment": { "type": "string" },
477       "lyrics": { "type": "string" },
478       "playcount": { "type": "integer" },
479       "musicbrainztrackid": { "type": "string" },
480       "musicbrainzartistid": { "type": "string" },
481       "albumid": { "$ref": "Library.Id" },
482       "lastplayed": { "type": "string" },
483       "disc": { "type": "integer" },
484       "albumartistid": { "$ref": "Array.Integer" }
485     }
486   },
487   "Video.Fields.Movie": {
488     "extends": "Item.Fields.Base",
489     "items": { "type": "string",
490       "description": "Requesting the cast, showlink and/or tag field will result in increased response times",
491       "enum": [ "title", "genre", "year", "rating", "director", "trailer",
492                 "tagline", "plot", "plotoutline", "originaltitle", "lastplayed",
493                 "playcount", "writer", "studio", "mpaa", "cast", "country",
494                 "imdbnumber", "runtime", "set", "showlink", "streamdetails",
495                 "top250", "votes", "fanart", "thumbnail", "file", "sorttitle",
496                 "resume", "setid", "dateadded", "tag", "art" ]
497     }
498   },
499   "Video.Fields.MovieSet": {
500     "extends": "Item.Fields.Base",
501     "items": { "type": "string",
502       "enum": [ "title", "playcount", "fanart", "thumbnail", "art" ]
503     }
504   },
505   "Video.Fields.TVShow": {
506     "extends": "Item.Fields.Base",
507     "items": { "type": "string",
508       "description": "Requesting the cast field will result in increased response times",
509       "enum": [ "title", "genre", "year", "rating", "plot",
510                 "studio", "mpaa", "cast", "playcount", "episode",
511                 "imdbnumber", "premiered", "votes", "lastplayed",
512                 "fanart", "thumbnail", "file", "originaltitle",
513                 "sorttitle", "episodeguide", "season", "watchedepisodes",
514                 "dateadded", "tag", "lastplayed", "art" ]
515     }
516   },
517   "Video.Fields.Season": {
518     "extends": "Item.Fields.Base",
519     "items": { "type": "string",
520       "enum": [ "season", "showtitle", "playcount", "episode", "fanart", "thumbnail", "tvshowid",
521                 "watchedepisodes", "art" ]
522     }
523   },
524   "Video.Fields.Episode": {
525     "extends": "Item.Fields.Base",
526     "items": { "type": "string",
527       "description": "Requesting the cast field will result in increased response times",
528       "enum": [ "title", "plot", "votes", "rating", "writer",
529                 "firstaired", "playcount", "runtime", "director",
530                 "productioncode", "season", "episode", "originaltitle",
531                 "showtitle", "cast", "streamdetails", "lastplayed", "fanart",
532                 "thumbnail", "file", "resume", "tvshowid", "dateadded",
533                 "uniqueid", "art" ]
534     }
535   },
536   "Video.Fields.MusicVideo": {
537     "extends": "Item.Fields.Base",
538     "items": { "type": "string",
539       "enum": [ "title", "playcount", "runtime", "director",
540                 "studio", "year", "plot", "album", "artist",
541                 "genre", "track", "streamdetails", "lastplayed",
542                 "fanart", "thumbnail", "file", "resume", "dateadded",
543                 "tag", "art" ]
544     }
545   },
546   "Video.Cast": {
547     "type": "array",
548     "items": { "type": "object",
549       "properties": {
550         "name": { "type": "string", "required": true },
551         "role": { "type": "string", "required": true },
552         "thumbnail": { "type": "string" }
553       },
554       "additionalProperties": false
555     }
556   },
557   "Video.Streams": {
558     "type": "object",
559     "properties": {
560       "audio": { "type": "array", "minItems": 1,
561         "items": { "type": "object",
562           "properties": {
563             "codec": { "type": "string" },
564             "language": { "type": "string" },
565             "channels": { "type": "integer" }
566           },
567           "additionalProperties": false
568         }
569       },
570       "video": { "type": "array", "minItems": 1,
571         "items": { "type": "object",
572           "properties": {
573             "codec": { "type": "string" },
574             "aspect": { "type": "number" },
575             "width": { "type": "integer" },
576             "height": { "type": "integer" },
577             "duration": { "type": "integer" }
578           },
579           "additionalProperties": false
580         }
581       },
582       "subtitle": { "type": "array", "minItems": 1,
583         "items": { "type": "object",
584           "properties": {
585             "language": { "type": "string" }
586           },
587           "additionalProperties": false
588         }
589       }
590     },
591     "additionalProperties": false
592   },
593   "Video.Resume": {
594     "type": "object",
595     "properties": {
596       "position": { "type": "number", "minimum": 0 },
597       "total": { "type": "number", "minimum": 0 }
598     },
599     "additionalProperties": false
600   },
601   "Video.Details.Base": {
602     "extends": "Media.Details.Base",
603     "properties": {
604       "playcount": { "type": "integer" },
605       "art": { "$ref": "Media.Artwork" }
606     }
607   },
608   "Video.Details.Media": {
609     "extends": "Video.Details.Base",
610     "properties": {
611       "title": { "type": "string" }
612     }
613   },
614   "Video.Details.Item": {
615     "extends": "Video.Details.Media",
616     "properties": {
617       "file": { "type": "string" },
618       "plot": { "type": "string" },
619       "lastplayed": { "type": "string" },
620       "dateadded": { "type": "string" }
621     }
622   },
623   "Video.Details.File": {
624     "extends": "Video.Details.Item",
625     "properties": {
626       "runtime": { "type": "integer", "description": "Runtime in seconds" },
627       "director": { "$ref": "Array.String" },
628       "streamdetails": { "$ref": "Video.Streams" },
629       "resume": { "$ref": "Video.Resume" }
630     }
631   },
632   "Video.Details.Movie": {
633     "extends": "Video.Details.File",
634     "properties": {
635       "movieid": { "$ref": "Library.Id", "required": true },
636       "genre": { "$ref": "Array.String" },
637       "year": { "type": "integer" },
638       "rating": { "type": "number" },
639       "trailer": { "type": "string" },
640       "tagline": { "type": "string" },
641       "plotoutline": { "type": "string" },
642       "originaltitle": { "type": "string" },
643       "sorttitle": { "type": "string" },
644       "writer": { "$ref": "Array.String" },
645       "studio": { "$ref": "Array.String" },
646       "mpaa": { "type": "string" },
647       "cast": { "$ref": "Video.Cast" },
648       "country": { "$ref": "Array.String" },
649       "imdbnumber": { "type": "string" },
650       "set": { "type": "string" },
651       "showlink": { "$ref": "Array.String" },
652       "top250": { "type": "integer" },
653       "votes": { "type": "string" },
654       "setid": { "$ref": "Library.Id" },
655       "tag": { "$ref": "Array.String" }
656     }
657   },
658   "Video.Details.MovieSet": {
659     "extends": "Video.Details.Media",
660     "properties": {
661       "setid": { "$ref": "Library.Id", "required": true }
662     }
663   },
664   "Video.Details.MovieSet.Extended": {
665     "extends": "Video.Details.MovieSet",
666     "properties": {
667       "limits": { "$ref": "List.LimitsReturned", "required": true },
668       "movies": { "type": "array",
669         "items": { "$ref": "Video.Details.Movie" }
670       }
671     }
672   },
673   "Video.Details.TVShow": {
674     "extends": "Video.Details.Item",
675     "properties": {
676       "tvshowid": { "$ref": "Library.Id", "required": true },
677       "genre": { "$ref": "Array.String" },
678       "year": { "type": "integer" },
679       "rating": { "type": "number" },
680       "originaltitle": { "type": "string" },
681       "sorttitle": { "type": "string" },
682       "studio": { "$ref": "Array.String" },
683       "mpaa": { "type": "string" },
684       "cast": { "$ref": "Video.Cast" },
685       "episode": { "type": "integer" },
686       "watchedepisodes": { "type": "integer" },
687       "imdbnumber": { "type": "string" },
688       "premiered": { "type": "string" },
689       "votes": { "type": "string" },
690       "episodeguide": { "type": "string" },
691       "season": { "type": "integer" },
692       "tag": { "$ref": "Array.String" }
693     }
694   },
695   "Video.Details.Season": {
696     "extends": "Video.Details.Base",
697     "properties": {
698       "season": { "type": "integer", "required": true },
699       "showtitle": { "type": "string" },
700       "episode": { "type": "integer" },
701       "watchedepisodes": { "type": "integer" },
702       "tvshowid": { "$ref": "Library.Id" }
703     }
704   },
705   "Video.Details.Episode": {
706     "extends": "Video.Details.File",
707     "properties": {
708       "episodeid": { "$ref": "Library.Id", "required": true },
709       "votes": { "type": "string" },
710       "rating": { "type": "number" },
711       "writer": { "$ref": "Array.String" },
712       "firstaired": { "type": "string" },
713       "productioncode": { "type": "string" },
714       "season": { "type": "integer" },
715       "episode": { "type": "integer" },
716       "uniqueid": { "type": "object", "additionalProperties": { "type": "string", "minLength": 1 } },
717       "originaltitle": { "type": "string" },
718       "showtitle": { "type": "string" },
719       "cast": { "$ref": "Video.Cast" },
720       "tvshowid": { "$ref": "Library.Id" }
721     }
722   },
723   "Video.Details.MusicVideo": {
724     "extends": "Video.Details.File",
725     "properties": {
726       "musicvideoid": { "$ref": "Library.Id", "required": true },
727       "studio": { "$ref": "Array.String" },
728       "year": { "type": "integer" },
729       "album": { "type": "string" },
730       "artist": { "$ref": "Array.String" },
731       "genre": { "$ref": "Array.String" },
732       "track": { "type": "integer" },
733       "tag": { "$ref": "Array.String" }
734     }
735   },
736   "PVR.Property.Name": {
737     "type": "string",
738     "enum": [ "available", "recording", "scanning" ]
739   },
740   "PVR.Property.Value": {
741     "type": "object",
742     "properties": {
743       "available": { "type": "boolean" },
744       "recording": { "type": "boolean" },
745       "scanning": { "type": "boolean" }
746     }
747   },
748   "PVR.ChannelGroup.Id": {
749     "type": [
750       { "$ref": "Library.Id", "required": true },
751       { "type": "string", "enum": [ "alltv", "allradio" ], "required": true }
752     ]
753   },
754   "PVR.Fields.Channel": {
755     "extends": "Item.Fields.Base",
756     "items": { "type": "string",
757       "enum": [ "thumbnail", "channeltype", "hidden", "locked", "channel", "lastplayed" ]
758     }
759   },
760   "PVR.Details.Channel": {
761     "extends": "Item.Details.Base",
762     "properties": {
763       "channelid": { "$ref": "Library.Id", "required": true },
764       "channel": { "type": "string" },
765       "channeltype": { "$ref": "PVR.Channel.Type" },
766       "hidden": { "type": "boolean" },
767       "locked": { "type": "boolean" },
768       "thumbnail": { "type": "string" },
769       "lastplayed": { "type": "string" }
770     }
771   },
772   "PVR.Details.ChannelGroup": {
773     "extends": "Item.Details.Base",
774     "properties": {
775       "channelgroupid": { "$ref": "Library.Id", "required": true },
776       "channeltype": { "$ref": "PVR.Channel.Type", "required": true }
777     }
778   },
779   "PVR.Details.ChannelGroup.Extended": {
780     "extends": "PVR.Details.ChannelGroup",
781     "properties": {
782       "limits": { "$ref": "List.LimitsReturned", "required": true },
783       "channels": { "type": "array",
784         "items": { "$ref": "PVR.Details.Channel" }
785       }
786     }
787   },
788   "List.Filter.Rule": {
789     "type": "object",
790     "properties": {
791       "operator": { "$ref": "List.Filter.Operators", "required": true },
792       "value": {
793         "type": [
794           { "type": "string", "required": true },
795           { "type": "array", "items": { "type": "string" }, "required": true }
796         ], "required": true
797       }
798     }
799   },
800   "List.Filter.Rule.Movies": {
801     "extends": "List.Filter.Rule",
802     "properties": {
803       "field": { "$ref": "List.Filter.Fields.Movies", "required": true }
804     }
805   },
806   "List.Filter.Rule.TVShows": {
807     "extends": "List.Filter.Rule",
808     "properties": {
809       "field": { "$ref": "List.Filter.Fields.TVShows", "required": true }
810     }
811   },
812   "List.Filter.Rule.Episodes": {
813     "extends": "List.Filter.Rule",
814     "properties": {
815       "field": { "$ref": "List.Filter.Fields.Episodes", "required": true }
816     }
817   },
818   "List.Filter.Rule.MusicVideos": {
819     "extends": "List.Filter.Rule",
820     "properties": {
821       "field": { "$ref": "List.Filter.Fields.MusicVideos", "required": true }
822     }
823   },
824   "List.Filter.Rule.Artists": {
825     "extends": "List.Filter.Rule",
826     "properties": {
827       "field": { "$ref": "List.Filter.Fields.Artists", "required": true }
828     }
829   },
830   "List.Filter.Rule.Albums": {
831     "extends": "List.Filter.Rule",
832     "properties": {
833       "field": { "$ref": "List.Filter.Fields.Albums", "required": true }
834     }
835   },
836   "List.Filter.Rule.Songs": {
837     "extends": "List.Filter.Rule",
838     "properties": {
839       "field": { "$ref": "List.Filter.Fields.Songs", "required": true }
840     }
841   },
842   "List.Filter.Movies": {
843     "type": [
844       { "type": "object",
845         "properties": {
846           "and": { "type": "array",
847             "items": { "$ref": "List.Filter.Movies" },
848             "minItems": 1, "required": true
849           }
850         }
851       },
852       { "type": "object",
853         "properties": {
854           "or": { "type": "array",
855             "items": { "$ref": "List.Filter.Movies" },
856             "minItems": 1, "required": true
857           }
858         }
859       },
860       { "$ref": "List.Filter.Rule.Movies" }
861     ]
862   },
863   "List.Filter.TVShows": {
864     "type": [
865       { "type": "object",
866         "properties": {
867           "and": { "type": "array",
868             "items": { "$ref": "List.Filter.TVShows" },
869             "minItems": 1, "required": true
870           }
871         }
872       },
873       { "type": "object",
874         "properties": {
875           "or": { "type": "array",
876             "items": { "$ref": "List.Filter.TVShows" },
877             "minItems": 1, "required": true
878           }
879         }
880       },
881       { "$ref": "List.Filter.Rule.TVShows" }
882     ]
883   },
884   "List.Filter.Episodes": {
885     "type": [
886       { "type": "object",
887         "properties": {
888           "and": { "type": "array",
889             "items": { "$ref": "List.Filter.Episodes" },
890             "minItems": 1, "required": true
891           }
892         }
893       },
894       { "type": "object",
895         "properties": {
896           "or": { "type": "array",
897             "items": { "$ref": "List.Filter.Episodes" },
898             "minItems": 1, "required": true
899           }
900         }
901       },
902       { "$ref": "List.Filter.Rule.Episodes" }
903     ]
904   },
905   "List.Filter.MusicVideos": {
906     "type": [
907       { "type": "object",
908         "properties": {
909           "and": { "type": "array",
910             "items": { "$ref": "List.Filter.MusicVideos" },
911             "minItems": 1, "required": true
912           }
913         }
914       },
915       { "type": "object",
916         "properties": {
917           "or": { "type": "array",
918             "items": { "$ref": "List.Filter.MusicVideos" },
919             "minItems": 1, "required": true
920           }
921         }
922       },
923       { "$ref": "List.Filter.Rule.MusicVideos" }
924     ]
925   },
926   "List.Filter.Artists": {
927     "type": [
928       { "type": "object",
929         "properties": {
930           "and": { "type": "array",
931             "items": { "$ref": "List.Filter.Artists" },
932             "minItems": 1, "required": true
933           }
934         }
935       },
936       { "type": "object",
937         "properties": {
938           "or": { "type": "array",
939             "items": { "$ref": "List.Filter.Artists" },
940             "minItems": 1, "required": true
941           }
942         }
943       },
944       { "$ref": "List.Filter.Rule.Artists" }
945     ]
946   },
947   "List.Filter.Albums": {
948     "type": [
949       { "type": "object",
950         "properties": {
951           "and": { "type": "array",
952             "items": { "$ref": "List.Filter.Albums" },
953             "minItems": 1, "required": true
954           }
955         }
956       },
957       { "type": "object",
958         "properties": {
959           "or": { "type": "array",
960             "items": { "$ref": "List.Filter.Albums" },
961             "minItems": 1, "required": true
962           }
963         }
964       },
965       { "$ref": "List.Filter.Rule.Albums" }
966     ]
967   },
968   "List.Filter.Songs": {
969     "type": [
970       { "type": "object",
971         "properties": {
972           "and": { "type": "array",
973             "items": { "$ref": "List.Filter.Songs" },
974             "minItems": 1, "required": true
975           }
976         }
977       },
978       { "type": "object",
979         "properties": {
980           "or": { "type": "array",
981             "items": { "$ref": "List.Filter.Songs" },
982             "minItems": 1, "required": true
983           }
984         }
985       },
986       { "$ref": "List.Filter.Rule.Songs" }
987     ]
988   },
989   "List.Item.Base": {
990     "extends": [ "Video.Details.File", "Audio.Details.Media" ],
991     "properties": {
992       "id": { "$ref": "Library.Id" },
993       "type": { "type": "string", "enum": [ "unknown", "movie", "episode", "musicvideo", "song", "picture", "channel" ] },
994       "albumartist": { "$ref": "Array.String" },
995       "album": { "type": "string" },
996       "track": { "type": "integer" },
997       "duration": { "type": "integer" },
998       "comment": { "type": "string" },
999       "lyrics": { "type": "string" },
1000       "musicbrainztrackid": { "type": "string" },
1001       "musicbrainzartistid": { "type": "string" },
1002       "trailer": { "type": "string" },
1003       "tagline": { "type": "string" },
1004       "plotoutline": { "type": "string" },
1005       "originaltitle": { "type": "string" },
1006       "writer": { "$ref": "Array.String" },
1007       "studio": { "$ref": "Array.String" },
1008       "mpaa": { "type": "string" },
1009       "cast": { "$ref": "Video.Cast" },
1010       "country": { "$ref": "Array.String" },
1011       "imdbnumber": { "type": "string" },
1012       "premiered": { "type": "string" },
1013       "productioncode": { "type": "string" },
1014       "set": { "type": "string" },
1015       "showlink": { "$ref": "Array.String" },
1016       "top250": { "type": "integer" },
1017       "votes": { "type": "string" },
1018       "firstaired": { "type": "string" },
1019       "season": { "type": "integer" },
1020       "episode": { "type": "integer" },
1021       "showtitle": { "type": "string" },
1022       "albumid": { "$ref": "Library.Id" },
1023       "setid": { "$ref": "Library.Id" },
1024       "tvshowid": { "$ref": "Library.Id" },
1025       "watchedepisodes": { "type": "integer" },
1026       "disc": { "type": "integer" },
1027       "tag": { "$ref": "Array.String" },
1028       "albumartistid": { "$ref": "Array.Integer" },
1029       "uniqueid": { "type": "object", "additionalProperties": { "type": "string", "minLength": 1 } },
1030       "episodeguide": { "type": "string" },
1031       "sorttitle": { "type": "string" },
1032       "description": { "type": "string" },
1033       "theme": { "$ref": "Array.String" },
1034       "mood": { "$ref": "Array.String" },
1035       "style": { "$ref": "Array.String" },
1036       "albumlabel": { "type": "string" }
1037     }
1038   },
1039   "List.Fields.All": {
1040     "extends": "Item.Fields.Base",
1041     "items": { "type": "string",
1042       "enum": [ "title", "artist", "albumartist", "genre", "year", "rating",
1043                 "album", "track", "duration", "comment", "lyrics", "musicbrainztrackid",
1044                 "musicbrainzartistid", "musicbrainzalbumid", "musicbrainzalbumartistid",
1045                 "playcount", "fanart", "director", "trailer", "tagline", "plot",
1046                 "plotoutline", "originaltitle", "lastplayed", "writer", "studio",
1047                 "mpaa", "cast", "country", "imdbnumber", "premiered", "productioncode",
1048                 "runtime", "set", "showlink", "streamdetails", "top250", "votes",
1049                 "firstaired", "season", "episode", "showtitle", "thumbnail", "file",
1050                 "resume", "artistid", "albumid", "tvshowid", "setid", "watchedepisodes",
1051                 "disc", "tag", "art", "genreid", "displayartist", "albumartistid",
1052                 "description", "theme", "mood", "style", "albumlabel", "sorttitle",
1053                 "episodeguide", "uniqueid", "dateadded", "channel", "channeltype", "hidden",
1054                 "locked", "channelnumber", "starttime", "endtime" ]
1055     }
1056   },
1057   "List.Item.All": {
1058     "extends": "List.Item.Base",
1059     "properties": {
1060       "channel": { "type": "string" },
1061       "channeltype": { "$ref": "PVR.Channel.Type" },
1062       "hidden": { "type": "boolean" },
1063       "locked": { "type": "boolean" },
1064       "channelnumber": { "type": "integer" },
1065       "starttime": { "type": "string" },
1066       "endtime": { "type": "string" }
1067     }
1068   },
1069   "List.Fields.Files": {
1070     "extends": "Item.Fields.Base",
1071     "items": { "type": "string",
1072       "enum": [ "title", "artist", "albumartist", "genre", "year", "rating",
1073                 "album", "track", "duration", "comment", "lyrics", "musicbrainztrackid",
1074                 "musicbrainzartistid", "musicbrainzalbumid", "musicbrainzalbumartistid",
1075                 "playcount", "fanart", "director", "trailer", "tagline", "plot",
1076                 "plotoutline", "originaltitle", "lastplayed", "writer", "studio",
1077                 "mpaa", "cast", "country", "imdbnumber", "premiered", "productioncode",
1078                 "runtime", "set", "showlink", "streamdetails", "top250", "votes",
1079                 "firstaired", "season", "episode", "showtitle", "thumbnail", "file",
1080                 "resume", "artistid", "albumid", "tvshowid", "setid", "watchedepisodes",
1081                 "disc", "tag", "art", "genreid", "displayartist", "albumartistid",
1082                 "description", "theme", "mood", "style", "albumlabel", "sorttitle",
1083                 "episodeguide", "uniqueid", "dateadded", "size", "lastmodified", "mimetype" ]
1084     }
1085   },
1086   "List.Item.File": {
1087     "extends": "List.Item.Base",
1088     "properties": {
1089       "file": { "type": "string", "required": true },
1090       "filetype": { "type": "string", "enum": [ "file", "directory" ], "required": true },
1091       "size": { "type": "integer", "description": "Size of the file in kB (1000 Byte)" },
1092       "lastmodified": { "type": "string" },
1093       "mimetype": { "type": "string" }
1094     }
1095   },
1096   "List.Items.Sources": {
1097     "type": "array",
1098     "items": {
1099       "extends": "Item.Details.Base",
1100       "properties": {
1101         "file": { "type": "string", "required": true }
1102       }
1103     }
1104   },
1105   "Addon.Types": {
1106     "type": "string",
1107     "enum": [ "unknown", "xbmc.metadata.scraper.albums", "xbmc.metadata.scraper.artists", "xbmc.metadata.scraper.movies",
1108               "xbmc.metadata.scraper.musicvideos", "xbmc.metadata.scraper.tvshows", "xbmc.ui.screensaver",
1109               "xbmc.player.musicviz", "xbmc.python.pluginsource", "xbmc.python.script", "xbmc.python.weather",
1110               "xbmc.python.subtitles", "xbmc.python.lyrics", "xbmc.gui.skin", "xbmc.gui.webinterface",
1111               "xbmc.pvrclient", "xbmc.addon.video", "xbmc.addon.audio", "xbmc.addon.image", "xbmc.addon.executable",
1112               "xbmc.service" ],
1113     "default": "unknown"
1114   },
1115   "Addon.Content": {
1116     "type": "string",
1117     "enum": [ "unknown", "video", "audio", "image", "executable" ],
1118     "default": "unknown"
1119   },
1120   "Addon.Fields": {
1121     "extends": "Item.Fields.Base",
1122     "items": { "type": "string",
1123       "enum": [ "name", "version", "summary", "description", "path", "author", "thumbnail", "disclaimer", "fanart",
1124                 "dependencies", "broken", "extrainfo", "rating", "enabled" ]
1125     }
1126   },
1127   "Addon.Details": {
1128     "extends": "Item.Details.Base",
1129     "properties": {
1130       "addonid": { "type": "string", "required": true },
1131       "type": { "$ref": "Addon.Types", "required": true },
1132       "name": { "type": "string" },
1133       "version": { "type": "string" },
1134       "summary": { "type": "string" },
1135       "description": { "type": "string" },
1136       "path": { "type": "string" },
1137       "author": { "type": "string" },
1138       "thumbnail": { "type": "string" },
1139       "disclaimer": { "type": "string" },
1140       "fanart": { "type": "string" },
1141       "dependencies": { "type": "array",
1142         "items": { "type": "object",
1143           "properties": {
1144             "addonid": { "type": "string", "required": true },
1145             "version": { "type": "string", "required": true },
1146             "optional": { "type": "boolean", "required": true }
1147           }
1148         }
1149       },
1150       "broken": { "type": [ "boolean", "string" ] },
1151       "extrainfo": { "type": "array",
1152         "items": { "type": "object",
1153           "properties": {
1154             "key": { "type": "string", "required": true },
1155             "value": { "type": "string", "required": true }
1156           }
1157         }
1158       },
1159       "rating": { "type": "integer" },
1160       "enabled": { "type": "boolean" }
1161     }
1162   },
1163   "GUI.Property.Name": {
1164     "type": "string",
1165     "enum": [ "currentwindow", "currentcontrol", "skin", "fullscreen" ]
1166   },
1167   "GUI.Property.Value": {
1168     "type": "object",
1169     "properties": {
1170       "currentwindow": { "type": "object",
1171         "properties": {
1172           "id": { "type": "integer", "required": true },
1173           "label": { "type": "string", "required": true }
1174         }
1175       },
1176       "currentcontrol": { "type": "object",
1177         "properties": {
1178           "label": { "type": "string", "required": true }
1179         }
1180       },
1181       "skin": { "type": "object",
1182         "properties": {
1183           "id": { "type": "string", "required": true, "minLength": 1 },
1184           "name": { "type": "string" }
1185         }
1186       },
1187       "fullscreen": { "type": "boolean" }
1188     }
1189   },
1190   "System.Property.Name": {
1191     "type": "string",
1192     "enum": [ "canshutdown", "cansuspend", "canhibernate", "canreboot" ]
1193   },
1194   "System.Property.Value": {
1195     "type": "object",
1196     "properties": {
1197       "canshutdown": { "type": "boolean" },
1198       "cansuspend": { "type": "boolean" },
1199       "canhibernate": { "type": "boolean" },
1200       "canreboot": { "type": "boolean" }
1201     }
1202   },
1203   "Application.Property.Name": {
1204     "type": "string",
1205     "enum": [ "volume", "muted", "name", "version" ]
1206   },
1207   "Application.Property.Value": {
1208     "type": "object",
1209     "properties": {
1210       "volume": { "type": "integer", "minimum": 0, "maximum": 100 },
1211       "muted": { "type": "boolean" },
1212       "name": { "type": "string", "minLength": 1 },
1213       "version": { "type": "object",
1214         "properties": {
1215           "major": { "type": "integer", "minimum": 0, "required": true },
1216           "minor": { "type": "integer", "minimum": 0, "required": true },
1217           "revision": { "type": [ "string", "integer" ] },
1218           "tag": { "type": "string", "enum": [ "prealpha", "alpha", "beta", "releasecandidate", "stable" ], "required": true }
1219         }
1220       }
1221     }
1222   }
1223 }