DVDCodecs: Amlogic: Handle conditions in which amcodec should be opened during Open()
[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.Weekday": {
37     "type": "string",
38     "enum": [ "monday", "tuesday", "wednesday", "thursday",
39               "friday", "saturday", "sunday" ]
40   },
41   "Global.IncrementDecrement": {
42     "type": "string",
43     "enum": [ "increment", "decrement" ]
44   },
45   "Global.Toggle": {
46     "type": [
47       { "type": "boolean", "required": true },
48       { "type": "string", "enum": [ "toggle" ], "required": true }
49     ]
50   },
51   "Global.String.NotEmpty": {
52     "type": "string",
53     "minLength": 1
54   },
55   "Configuration.Notifications": {
56     "type": "object",
57     "properties": {
58       "Player": { "type": "boolean", "required": true },
59       "Playlist": { "type": "boolean", "required": true },
60       "GUI": { "type": "boolean", "required": true },
61       "System": { "type": "boolean", "required": true },
62       "VideoLibrary": { "type": "boolean", "required": true },
63       "AudioLibrary": { "type": "boolean", "required": true },
64       "Application": { "type": "boolean", "required": true },
65       "Input": { "type": "boolean", "required": true },
66       "PVR": { "type": "boolean", "required": true },
67       "Other": { "type": "boolean", "required": true }
68     },
69     "additionalProperties": false
70   },
71   "Configuration": {
72     "type": "object", "required": true,
73     "properties": {
74       "notifications": { "$ref": "Configuration.Notifications", "required": true }
75     }
76   },
77   "Files.Media": {
78     "type": "string",
79     "enum": [ "video", "music", "pictures", "files", "programs" ]
80   },
81   "List.Amount": {
82     "type": "integer",
83     "default": -1,
84     "minimum": 0
85   },
86   "List.Limits": {
87     "type": "object",
88     "properties": {
89       "start": { "type": "integer", "minimum": 0, "default": 0, "description": "Index of the first item to return" },
90       "end": { "$ref": "List.Amount", "description": "Index of the last item to return" }
91     },
92     "additionalProperties": false
93   },
94   "List.LimitsReturned": {
95     "type": "object",
96     "properties": {
97       "start": { "type": "integer", "minimum": 0, "default": 0 },
98       "end": { "$ref": "List.Amount" },
99       "total": { "type": "integer", "minimum": 0, "required": true }
100     },
101     "additionalProperties": false
102   },
103   "List.Sort": {
104     "type": "object",
105     "properties": {
106       "method": { "type": "string", "default": "none",
107         "enum": [ "none", "label", "date", "size", "file", "path", "drivetype", "title", "track", "time", "artist",
108                   "album", "albumtype", "genre", "country", "year", "rating", "votes", "top250", "programcount",
109                   "playlist", "episode", "season", "totalepisodes", "watchedepisodes", "tvshowstatus", "tvshowtitle",
110                   "sorttitle", "productioncode", "mpaa", "studio", "dateadded", "lastplayed", "playcount", "listeners",
111                   "bitrate", "random" ]
112       },
113       "order": { "type": "string", "default": "ascending", "enum": [ "ascending", "descending" ] },
114       "ignorearticle": { "type": "boolean", "default": false }
115     }
116   },
117   "Library.Id": {
118     "type": "integer",
119     "default": -1,
120     "minimum": 1
121   },
122   "PVR.Channel.Type": {
123     "type": "string",
124     "enum": [ "tv", "radio" ]
125   },
126   "Playlist.Id": {
127     "type": "integer",
128     "minimum": 0,
129     "maximum": 2,
130     "default": -1
131   },
132   "Playlist.Type": {
133     "type": "string",
134     "enum": [ "unknown", "video", "audio", "picture", "mixed" ]
135   },
136   "Playlist.Property.Name": {
137     "type": "string",
138     "enum": [ "type", "size" ]
139   },
140   "Playlist.Property.Value": {
141     "type": "object",
142     "properties": {
143       "type": { "$ref": "Playlist.Type" },
144       "size": { "type": "integer", "minimum": 0 }
145     }
146   },
147   "Playlist.Position": {
148     "type": "integer",
149     "minimum": 0,
150     "default": -1
151   },
152   "Playlist.Item": {
153     "type": [
154       { "type": "object", "properties": { "file": { "type": "string", "description": "Path to a file (not a directory) to be added to the playlist", "required": true } }, "additionalProperties": false },
155       { "type": "object", "properties": { "directory": { "type": "string", "required": true }, "recursive": { "type": "boolean", "default": false }, "media": { "$ref": "Files.Media", "default": "files" } }, "additionalProperties": false },
156       { "type": "object", "properties": { "movieid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
157       { "type": "object", "properties": { "episodeid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
158       { "type": "object", "properties": { "musicvideoid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
159       { "type": "object", "properties": { "artistid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
160       { "type": "object", "properties": { "albumid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
161       { "type": "object", "properties": { "songid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
162       { "type": "object", "properties": { "genreid": { "$ref": "Library.Id", "required": true, "description": "Identification of a genre from the AudioLibrary" } }, "additionalProperties": false }
163     ]
164   },
165   "Player.Id": {
166     "type": "integer",
167     "minimum": 0,
168     "maximum": 2,
169     "default": -1
170   },
171   "Player.Type": {
172     "type": "string",
173     "enum": [ "video", "audio", "picture" ]
174   },
175   "Player.Position.Percentage": {
176     "type": "number",
177     "minimum": 0.0,
178     "maximum": 100.0
179   },
180   "Player.Position.Time": {
181     "type": "object",
182     "additionalProperties": false,
183     "properties": {
184       "hours": { "type": "integer", "minimum": 0, "maximum": 23, "default": 0 },
185       "minutes": { "type": "integer", "minimum": 0, "maximum": 59, "default": 0 },
186       "seconds": { "type": "integer", "minimum": 0, "maximum": 59, "default": 0 },
187       "milliseconds": { "type": "integer", "minimum": 0, "maximum": 999, "default": 0 }
188     }
189   },
190   "Player.Speed": {
191     "type": "object",
192     "required": true,
193     "properties": {
194       "speed": { "type": "integer" }
195     }
196   },
197   "Player.Repeat": {
198     "type": "string",
199     "enum": [ "off", "one", "all" ]
200   },
201   "Player.Audio.Stream": {
202     "type": "object",
203     "properties": {
204       "index": { "type": "integer", "minimum": 0, "required": true },
205       "name": { "type": "string", "required": true },
206       "language": { "type": "string", "required": true },
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" },
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   "Media.Artwork.Set": {
372     "type": "object",
373     "properties": {
374       "thumb": { "type": [ "null", { "$ref": "Global.String.NotEmpty", "required": true } ], "default": "" },
375       "poster": { "type": [ "null", { "$ref": "Global.String.NotEmpty", "required": true } ], "default": "" },
376       "banner": { "type": [ "null", { "$ref": "Global.String.NotEmpty", "required": true } ], "default": "" },
377       "fanart": { "type": [ "null", { "$ref": "Global.String.NotEmpty", "required": true } ], "default": "" }
378     },
379     "additionalProperties": { "type": [ "null", { "$ref": "Global.String.NotEmpty", "required": true } ] }
380   },
381   "Library.Fields.Genre": {
382     "extends": "Item.Fields.Base",
383     "items": { "type": "string", "enum": [ "title", "thumbnail" ] }
384   },
385   "Library.Details.Genre": {
386     "extends": "Item.Details.Base",
387     "properties": {
388       "genreid": { "$ref": "Library.Id", "required": true },
389       "title": { "type": "string" },
390       "thumbnail": { "type": "string" }
391     }
392   },
393   "Audio.Fields.Artist": {
394     "extends": "Item.Fields.Base",
395     "items": { "type": "string",
396       "enum": [ "instrument", "style", "mood", "born", "formed",
397                 "description", "genre", "died", "disbanded",
398                 "yearsactive", "musicbrainzartistid", "fanart",
399                 "thumbnail", "compilationartist" ]
400     }
401   },
402   "Audio.Fields.Album": {
403     "extends": "Item.Fields.Base",
404     "items": { "type": "string",
405       "description": "Requesting the genreid and/or artistid field will result in increased response times",
406       "enum": [ "title", "description", "artist", "genre",
407                 "theme", "mood", "style", "type", "albumlabel",
408                 "rating", "year", "musicbrainzalbumid",
409                 "musicbrainzalbumartistid", "fanart", "thumbnail",
410                 "playcount", "genreid", "artistid", "displayartist" ]
411     }
412   },
413   "Audio.Fields.Song": {
414     "extends": "Item.Fields.Base",
415     "items": { "type": "string",
416       "description": "Requesting the genreid, artistid and/or albumartistid field will result in increased response times",
417       "enum": [ "title", "artist", "albumartist", "genre", "year",
418                 "rating", "album", "track", "duration", "comment",
419                 "lyrics", "musicbrainztrackid", "musicbrainzartistid",
420                 "musicbrainzalbumid", "musicbrainzalbumartistid",
421                 "playcount", "fanart", "thumbnail", "file", "albumid",
422                 "lastplayed", "disc", "genreid", "artistid", "displayartist",
423                 "albumartistid" ]
424     }
425   },
426   "Audio.Details.Base": {
427     "extends": "Media.Details.Base",
428     "properties": {
429       "genre": { "$ref": "Array.String" }
430     }
431   },
432   "Audio.Details.Media": {
433     "extends": "Audio.Details.Base",
434     "properties": {
435       "title": { "type": "string" },
436       "artist": { "$ref": "Array.String" },
437       "year": { "type": "integer" },
438       "rating": { "type": "integer" },
439       "musicbrainzalbumid": { "type": "string" },
440       "musicbrainzalbumartistid": { "type": "string" },
441       "genreid": { "$ref": "Array.Integer" },
442       "artistid": { "$ref": "Array.Integer" },
443       "displayartist": { "type" : "string" }
444     }
445   },
446   "Audio.Details.Artist": {
447     "extends": "Audio.Details.Base",
448     "properties": {
449       "artistid": { "$ref": "Library.Id", "required": true },
450       "artist": { "type": "string", "required": true },
451       "instrument": { "$ref": "Array.String" },
452       "style": { "$ref": "Array.String" },
453       "mood": { "$ref": "Array.String" },
454       "born": { "type": "string" },
455       "formed": { "type": "string" },
456       "description": { "type": "string" },
457       "died": { "type": "string" },
458       "disbanded": { "type": "string" },
459       "yearsactive": { "$ref": "Array.String" },
460       "compilationartist": { "type": "boolean" },
461       "musicbrainzartistid": { "type": "string" }
462     }
463   },
464   "Audio.Details.Album": {
465     "extends": "Audio.Details.Media",
466     "properties": {
467       "albumid": { "$ref": "Library.Id", "required": true },
468       "description": { "type": "string" },
469       "theme": { "$ref": "Array.String" },
470       "mood": { "$ref": "Array.String" },
471       "style": { "$ref": "Array.String" },
472       "type": { "type": "string" },
473       "albumlabel": { "type": "string" },
474       "playcount": { "type": "integer" }
475     }
476   },
477   "Audio.Details.Song": {
478     "extends": "Audio.Details.Media",
479     "properties": {
480       "songid": { "$ref": "Library.Id", "required": true },
481       "file": { "type": "string" },
482       "albumartist": { "$ref": "Array.String" },
483       "album": { "type": "string" },
484       "track": { "type": "integer" },
485       "duration": { "type": "integer" },
486       "comment": { "type": "string" },
487       "lyrics": { "type": "string" },
488       "playcount": { "type": "integer" },
489       "musicbrainztrackid": { "type": "string" },
490       "musicbrainzartistid": { "type": "string" },
491       "albumid": { "$ref": "Library.Id" },
492       "lastplayed": { "type": "string" },
493       "disc": { "type": "integer" },
494       "albumartistid": { "$ref": "Array.Integer" }
495     }
496   },
497   "Video.Fields.Movie": {
498     "extends": "Item.Fields.Base",
499     "items": { "type": "string",
500       "description": "Requesting the cast, showlink and/or tag field will result in increased response times",
501       "enum": [ "title", "genre", "year", "rating", "director", "trailer",
502                 "tagline", "plot", "plotoutline", "originaltitle", "lastplayed",
503                 "playcount", "writer", "studio", "mpaa", "cast", "country",
504                 "imdbnumber", "runtime", "set", "showlink", "streamdetails",
505                 "top250", "votes", "fanart", "thumbnail", "file", "sorttitle",
506                 "resume", "setid", "dateadded", "tag", "art" ]
507     }
508   },
509   "Video.Fields.MovieSet": {
510     "extends": "Item.Fields.Base",
511     "items": { "type": "string",
512       "enum": [ "title", "playcount", "fanart", "thumbnail", "art" ]
513     }
514   },
515   "Video.Fields.TVShow": {
516     "extends": "Item.Fields.Base",
517     "items": { "type": "string",
518       "description": "Requesting the cast field will result in increased response times",
519       "enum": [ "title", "genre", "year", "rating", "plot",
520                 "studio", "mpaa", "cast", "playcount", "episode",
521                 "imdbnumber", "premiered", "votes", "lastplayed",
522                 "fanart", "thumbnail", "file", "originaltitle",
523                 "sorttitle", "episodeguide", "season", "watchedepisodes",
524                 "dateadded", "tag", "lastplayed", "art" ]
525     }
526   },
527   "Video.Fields.Season": {
528     "extends": "Item.Fields.Base",
529     "items": { "type": "string",
530       "enum": [ "season", "showtitle", "playcount", "episode", "fanart", "thumbnail", "tvshowid",
531                 "watchedepisodes", "art" ]
532     }
533   },
534   "Video.Fields.Episode": {
535     "extends": "Item.Fields.Base",
536     "items": { "type": "string",
537       "description": "Requesting the cast field will result in increased response times",
538       "enum": [ "title", "plot", "votes", "rating", "writer",
539                 "firstaired", "playcount", "runtime", "director",
540                 "productioncode", "season", "episode", "originaltitle",
541                 "showtitle", "cast", "streamdetails", "lastplayed", "fanart",
542                 "thumbnail", "file", "resume", "tvshowid", "dateadded",
543                 "uniqueid", "art" ]
544     }
545   },
546   "Video.Fields.MusicVideo": {
547     "extends": "Item.Fields.Base",
548     "items": { "type": "string",
549       "enum": [ "title", "playcount", "runtime", "director",
550                 "studio", "year", "plot", "album", "artist",
551                 "genre", "track", "streamdetails", "lastplayed",
552                 "fanart", "thumbnail", "file", "resume", "dateadded",
553                 "tag", "art" ]
554     }
555   },
556   "Video.Cast": {
557     "type": "array",
558     "items": { "type": "object",
559       "properties": {
560         "name": { "type": "string", "required": true },
561         "role": { "type": "string", "required": true },
562         "order": { "type": "integer", "required": true },
563         "thumbnail": { "type": "string" }
564       },
565       "additionalProperties": false
566     }
567   },
568   "Video.Streams": {
569     "type": "object",
570     "properties": {
571       "audio": { "type": "array", "minItems": 1,
572         "items": { "type": "object",
573           "properties": {
574             "codec": { "type": "string" },
575             "language": { "type": "string" },
576             "channels": { "type": "integer" }
577           },
578           "additionalProperties": false
579         }
580       },
581       "video": { "type": "array", "minItems": 1,
582         "items": { "type": "object",
583           "properties": {
584             "codec": { "type": "string" },
585             "aspect": { "type": "number" },
586             "width": { "type": "integer" },
587             "height": { "type": "integer" },
588             "duration": { "type": "integer" }
589           },
590           "additionalProperties": false
591         }
592       },
593       "subtitle": { "type": "array", "minItems": 1,
594         "items": { "type": "object",
595           "properties": {
596             "language": { "type": "string" }
597           },
598           "additionalProperties": false
599         }
600       }
601     },
602     "additionalProperties": false
603   },
604   "Video.Resume": {
605     "type": "object",
606     "properties": {
607       "position": { "type": "number", "minimum": 0 },
608       "total": { "type": "number", "minimum": 0 }
609     },
610     "additionalProperties": false
611   },
612   "Video.Details.Base": {
613     "extends": "Media.Details.Base",
614     "properties": {
615       "playcount": { "type": "integer" },
616       "art": { "$ref": "Media.Artwork" }
617     }
618   },
619   "Video.Details.Media": {
620     "extends": "Video.Details.Base",
621     "properties": {
622       "title": { "type": "string" }
623     }
624   },
625   "Video.Details.Item": {
626     "extends": "Video.Details.Media",
627     "properties": {
628       "file": { "type": "string" },
629       "plot": { "type": "string" },
630       "lastplayed": { "type": "string" },
631       "dateadded": { "type": "string" }
632     }
633   },
634   "Video.Details.File": {
635     "extends": "Video.Details.Item",
636     "properties": {
637       "runtime": { "type": "integer", "description": "Runtime in seconds" },
638       "director": { "$ref": "Array.String" },
639       "streamdetails": { "$ref": "Video.Streams" },
640       "resume": { "$ref": "Video.Resume" }
641     }
642   },
643   "Video.Details.Movie": {
644     "extends": "Video.Details.File",
645     "properties": {
646       "movieid": { "$ref": "Library.Id", "required": true },
647       "genre": { "$ref": "Array.String" },
648       "year": { "type": "integer" },
649       "rating": { "type": "number" },
650       "trailer": { "type": "string" },
651       "tagline": { "type": "string" },
652       "plotoutline": { "type": "string" },
653       "originaltitle": { "type": "string" },
654       "sorttitle": { "type": "string" },
655       "writer": { "$ref": "Array.String" },
656       "studio": { "$ref": "Array.String" },
657       "mpaa": { "type": "string" },
658       "cast": { "$ref": "Video.Cast" },
659       "country": { "$ref": "Array.String" },
660       "imdbnumber": { "type": "string" },
661       "set": { "type": "string" },
662       "showlink": { "$ref": "Array.String" },
663       "top250": { "type": "integer" },
664       "votes": { "type": "string" },
665       "setid": { "$ref": "Library.Id" },
666       "tag": { "$ref": "Array.String" }
667     }
668   },
669   "Video.Details.MovieSet": {
670     "extends": "Video.Details.Media",
671     "properties": {
672       "setid": { "$ref": "Library.Id", "required": true }
673     }
674   },
675   "Video.Details.MovieSet.Extended": {
676     "extends": "Video.Details.MovieSet",
677     "properties": {
678       "limits": { "$ref": "List.LimitsReturned", "required": true },
679       "movies": { "type": "array",
680         "items": { "$ref": "Video.Details.Movie" }
681       }
682     }
683   },
684   "Video.Details.TVShow": {
685     "extends": "Video.Details.Item",
686     "properties": {
687       "tvshowid": { "$ref": "Library.Id", "required": true },
688       "genre": { "$ref": "Array.String" },
689       "year": { "type": "integer" },
690       "rating": { "type": "number" },
691       "originaltitle": { "type": "string" },
692       "sorttitle": { "type": "string" },
693       "studio": { "$ref": "Array.String" },
694       "mpaa": { "type": "string" },
695       "cast": { "$ref": "Video.Cast" },
696       "episode": { "type": "integer" },
697       "watchedepisodes": { "type": "integer" },
698       "imdbnumber": { "type": "string" },
699       "premiered": { "type": "string" },
700       "votes": { "type": "string" },
701       "episodeguide": { "type": "string" },
702       "season": { "type": "integer" },
703       "tag": { "$ref": "Array.String" }
704     }
705   },
706   "Video.Details.Season": {
707     "extends": "Video.Details.Base",
708     "properties": {
709       "seasonid": { "$ref": "Library.Id", "required": true },
710       "season": { "type": "integer", "required": true },
711       "showtitle": { "type": "string" },
712       "episode": { "type": "integer" },
713       "watchedepisodes": { "type": "integer" },
714       "tvshowid": { "$ref": "Library.Id" }
715     }
716   },
717   "Video.Details.Episode": {
718     "extends": "Video.Details.File",
719     "properties": {
720       "episodeid": { "$ref": "Library.Id", "required": true },
721       "votes": { "type": "string" },
722       "rating": { "type": "number" },
723       "writer": { "$ref": "Array.String" },
724       "firstaired": { "type": "string" },
725       "productioncode": { "type": "string" },
726       "season": { "type": "integer" },
727       "episode": { "type": "integer" },
728       "uniqueid": { "type": "object", "additionalProperties": { "type": "string", "minLength": 1 } },
729       "originaltitle": { "type": "string" },
730       "showtitle": { "type": "string" },
731       "cast": { "$ref": "Video.Cast" },
732       "tvshowid": { "$ref": "Library.Id" }
733     }
734   },
735   "Video.Details.MusicVideo": {
736     "extends": "Video.Details.File",
737     "properties": {
738       "musicvideoid": { "$ref": "Library.Id", "required": true },
739       "studio": { "$ref": "Array.String" },
740       "year": { "type": "integer" },
741       "album": { "type": "string" },
742       "artist": { "$ref": "Array.String" },
743       "genre": { "$ref": "Array.String" },
744       "track": { "type": "integer" },
745       "tag": { "$ref": "Array.String" }
746     }
747   },
748   "PVR.Property.Name": {
749     "type": "string",
750     "enum": [ "available", "recording", "scanning" ]
751   },
752   "PVR.Property.Value": {
753     "type": "object",
754     "properties": {
755       "available": { "type": "boolean" },
756       "recording": { "type": "boolean" },
757       "scanning": { "type": "boolean" }
758     }
759   },
760   "PVR.ChannelGroup.Id": {
761     "type": [
762       { "$ref": "Library.Id", "required": true },
763       { "type": "string", "enum": [ "alltv", "allradio" ], "required": true }
764     ]
765   },
766   "PVR.Fields.Channel": {
767     "extends": "Item.Fields.Base",
768     "items": { "type": "string",
769       "enum": [ "thumbnail", "channeltype", "hidden", "locked", "channel", "lastplayed" ]
770     }
771   },
772   "PVR.Details.Channel": {
773     "extends": "Item.Details.Base",
774     "properties": {
775       "channelid": { "$ref": "Library.Id", "required": true },
776       "channel": { "type": "string" },
777       "channeltype": { "$ref": "PVR.Channel.Type" },
778       "hidden": { "type": "boolean" },
779       "locked": { "type": "boolean" },
780       "thumbnail": { "type": "string" },
781       "lastplayed": { "type": "string" }
782     }
783   },
784   "PVR.Details.ChannelGroup": {
785     "extends": "Item.Details.Base",
786     "properties": {
787       "channelgroupid": { "$ref": "Library.Id", "required": true },
788       "channeltype": { "$ref": "PVR.Channel.Type", "required": true }
789     }
790   },
791   "PVR.Details.ChannelGroup.Extended": {
792     "extends": "PVR.Details.ChannelGroup",
793     "properties": {
794       "limits": { "$ref": "List.LimitsReturned", "required": true },
795       "channels": { "type": "array",
796         "items": { "$ref": "PVR.Details.Channel" }
797       }
798     }
799   },
800   "PVR.Fields.Broadcast": {
801     "extends": "Item.Fields.Base",
802     "items": { "type": "string",
803       "enum": [ "title", "plot", "plotoutline", "starttime",
804                 "endtime", "runtime", "progress", "progresspercentage",
805                 "genre", "episodename", "episodenum", "episodepart",
806                 "firstaired", "hastimer", "isactive", "parentalrating",
807                 "wasactive", "thumbnail", "rating" ]
808     }
809   },
810   "PVR.Details.Broadcast": {
811     "extends": "Item.Details.Base",
812     "properties": {
813       "broadcastid": { "$ref": "Library.Id", "required": true },
814       "title": { "type": "string" },
815       "plot": { "type": "string" },
816       "plotoutline": { "type": "string" },
817       "starttime": { "type": "string" },
818       "endtime": { "type": "string" },
819       "runtime": { "type": "integer" },
820       "progress": { "type": "integer" },
821       "progresspercentage": { "type": "number" },
822       "genre": { "type": "string" },
823       "episodename": { "type": "string" },
824       "episodenum": { "type": "integer" },
825       "episodepart": { "type": "integer" },
826       "firstaired": { "type": "string" },
827       "hastimer": { "type": "boolean" },
828       "isactive": { "type": "boolean" },
829       "parentalrating": { "type": "integer" },
830       "wasactive": { "type": "boolean" },
831       "thumbnail": { "type": "string" },
832       "rating": { "type": "integer" }
833     }
834   },
835   "PVR.TimerState": {
836     "type": "string",
837     "enum": [ "unknown", "new", "scheduled", "recording", "completed",
838               "aborted", "cancelled", "conflict_ok", "conflict_notok",
839               "error" ]
840   },
841   "PVR.Fields.Timer": {
842     "extends": "Item.Fields.Base",
843     "items": { "type": "string",
844       "enum": [ "title", "summary", "channelid", "isradio", "repeating",
845                 "starttime", "endtime", "runtime", "lifetime", "firstday",
846                 "weekdays", "priority", "startmargin", "endmargin", "state",
847                 "file", "directory" ]
848     }
849   },
850   "PVR.Details.Timer": {
851     "extends": "Item.Details.Base",
852     "properties": {
853       "timerid": { "$ref": "Library.Id", "required": true },
854       "title": { "type": "string" },
855       "summary": { "type": "string" },
856       "channelid": { "$ref": "Library.Id" },
857       "isradio": { "type": "boolean" },
858       "repeating": { "type": "boolean" },
859       "starttime": { "type": "string" },
860       "endtime": { "type": "string" },
861       "runtime": { "type": "integer" },
862       "lifetime": { "type": "integer" },
863       "firstday": { "type": "string" },
864       "weekdays": { "type": "array",
865         "items": { "$ref": "Global.Weekday" },
866         "uniqueItems": true
867       },
868       "priority": { "type": "integer" },
869       "startmargin": { "type": "integer" },
870       "endmargin": { "type": "integer" },
871       "state": { "$ref": "PVR.TimerState" },
872       "file": { "type": "string" },
873       "directory": { "type": "string" }
874     }
875   },
876   "PVR.Fields.Recording": {
877     "extends": "Item.Fields.Base",
878     "items": { "type": "string",
879       "enum": [ "title", "plot", "plotoutline", "genre", "playcount",
880                 "resume", "channel", "starttime","endtime", "runtime",
881                 "lifetime", "icon", "art", "streamurl", "file",
882                 "directory" ]
883     }
884   },
885   "PVR.Details.Recording": {
886     "extends": "Item.Details.Base",
887     "properties": {
888       "recordingid": { "$ref": "Library.Id", "required": true },
889       "title": { "type": "string" },
890       "plot": { "type": "string" },
891       "plotoutline": { "type": "string" },
892       "genre": { "type": "string" },
893       "playcount": { "type": "integer" },
894       "resume": { "$ref": "Video.Resume" },
895       "channel": { "type": "string" },
896       "starttime": { "type": "string" },
897       "endtime": { "type": "string" },
898       "runtime": { "type": "integer" },
899       "lifetime": { "type": "integer" },
900       "icon": { "type": "string" },
901       "art": { "$ref": "Media.Artwork" },
902       "streamurl": { "type": "string" },
903       "file": { "type": "string" },
904       "directory": { "type": "string" }
905     }
906   },
907   "Textures.Details.Size": {
908     "type": "object",
909     "properties": {
910       "size": { "type": "integer", "description": "Size of the texture (1 == largest)" },
911       "width": { "type": "integer", "description": "Width of texture" },
912       "height": { "type": "integer", "description": "Height of texture" },
913       "usecount": { "type": "integer", "description": "Number of uses" },
914       "lastused": { "type": "string", "description": "Date of last use" }
915     }
916   },
917   "Textures.Fields.Texture": {
918     "extends": "Item.Fields.Base",
919     "items": { "type": "string",
920       "enum": [ "url", "cachedurl", "lasthashcheck", "imagehash", "sizes" ]
921     }
922   },
923   "Textures.Details.Texture": {
924     "type": "object",
925     "properties": {
926       "textureid": { "$ref": "Library.Id", "required": "true" },
927       "url": { "type": "string", "description": "Original source URL" },
928       "cachedurl": { "type": "string", "description": "Cached URL on disk" },
929       "lasthashcheck": { "type": "string", "description": "Last time source was checked for changes" },
930       "imagehash": { "type": "string", "description": "Hash of image" },
931       "sizes": { "type": "array", "items": { "$ref": "Textures.Details.Size" } }
932     }
933   },
934   "Profiles.Password": {
935     "type": "object",
936     "properties": {
937       "value": { "type": "string", "required": true, "description": "Password" },
938       "encryption": { "type": "string", "description": "Password Encryption", "default": "md5", "enum": [ "none", "md5" ] }
939     }
940   },
941   "Profiles.Fields.Profile": {
942     "extends": "Item.Fields.Base",
943     "items": { "type": "string", "enum": [ "thumbnail", "lockmode" ] }
944   },
945   "Profiles.Details.Profile": {
946     "extends": "Item.Details.Base",
947     "properties": {
948       "thumbnail": { "type": "string" },
949       "lockmode": { "type": "integer" }
950     }
951   },
952   "List.Filter.Rule": {
953     "type": "object",
954     "properties": {
955       "operator": { "$ref": "List.Filter.Operators", "required": true },
956       "value": {
957         "type": [
958           { "type": "string", "required": true },
959           { "type": "array", "items": { "type": "string" }, "required": true }
960         ], "required": true
961       }
962     }
963   },
964   "List.Filter.Rule.Movies": {
965     "extends": "List.Filter.Rule",
966     "properties": {
967       "field": { "$ref": "List.Filter.Fields.Movies", "required": true }
968     }
969   },
970   "List.Filter.Rule.TVShows": {
971     "extends": "List.Filter.Rule",
972     "properties": {
973       "field": { "$ref": "List.Filter.Fields.TVShows", "required": true }
974     }
975   },
976   "List.Filter.Rule.Episodes": {
977     "extends": "List.Filter.Rule",
978     "properties": {
979       "field": { "$ref": "List.Filter.Fields.Episodes", "required": true }
980     }
981   },
982   "List.Filter.Rule.MusicVideos": {
983     "extends": "List.Filter.Rule",
984     "properties": {
985       "field": { "$ref": "List.Filter.Fields.MusicVideos", "required": true }
986     }
987   },
988   "List.Filter.Rule.Artists": {
989     "extends": "List.Filter.Rule",
990     "properties": {
991       "field": { "$ref": "List.Filter.Fields.Artists", "required": true }
992     }
993   },
994   "List.Filter.Rule.Albums": {
995     "extends": "List.Filter.Rule",
996     "properties": {
997       "field": { "$ref": "List.Filter.Fields.Albums", "required": true }
998     }
999   },
1000   "List.Filter.Rule.Songs": {
1001     "extends": "List.Filter.Rule",
1002     "properties": {
1003       "field": { "$ref": "List.Filter.Fields.Songs", "required": true }
1004     }
1005   },
1006   "List.Filter.Rule.Textures": {
1007     "extends": "List.Filter.Rule",
1008     "properties": {
1009       "field": { "$ref": "List.Filter.Fields.Textures", "required": true }
1010     }
1011   },
1012   "List.Filter.Movies": {
1013     "type": [
1014       { "type": "object",
1015         "properties": {
1016           "and": { "type": "array",
1017             "items": { "$ref": "List.Filter.Movies" },
1018             "minItems": 1, "required": true
1019           }
1020         }
1021       },
1022       { "type": "object",
1023         "properties": {
1024           "or": { "type": "array",
1025             "items": { "$ref": "List.Filter.Movies" },
1026             "minItems": 1, "required": true
1027           }
1028         }
1029       },
1030       { "$ref": "List.Filter.Rule.Movies" }
1031     ]
1032   },
1033   "List.Filter.TVShows": {
1034     "type": [
1035       { "type": "object",
1036         "properties": {
1037           "and": { "type": "array",
1038             "items": { "$ref": "List.Filter.TVShows" },
1039             "minItems": 1, "required": true
1040           }
1041         }
1042       },
1043       { "type": "object",
1044         "properties": {
1045           "or": { "type": "array",
1046             "items": { "$ref": "List.Filter.TVShows" },
1047             "minItems": 1, "required": true
1048           }
1049         }
1050       },
1051       { "$ref": "List.Filter.Rule.TVShows" }
1052     ]
1053   },
1054   "List.Filter.Episodes": {
1055     "type": [
1056       { "type": "object",
1057         "properties": {
1058           "and": { "type": "array",
1059             "items": { "$ref": "List.Filter.Episodes" },
1060             "minItems": 1, "required": true
1061           }
1062         }
1063       },
1064       { "type": "object",
1065         "properties": {
1066           "or": { "type": "array",
1067             "items": { "$ref": "List.Filter.Episodes" },
1068             "minItems": 1, "required": true
1069           }
1070         }
1071       },
1072       { "$ref": "List.Filter.Rule.Episodes" }
1073     ]
1074   },
1075   "List.Filter.MusicVideos": {
1076     "type": [
1077       { "type": "object",
1078         "properties": {
1079           "and": { "type": "array",
1080             "items": { "$ref": "List.Filter.MusicVideos" },
1081             "minItems": 1, "required": true
1082           }
1083         }
1084       },
1085       { "type": "object",
1086         "properties": {
1087           "or": { "type": "array",
1088             "items": { "$ref": "List.Filter.MusicVideos" },
1089             "minItems": 1, "required": true
1090           }
1091         }
1092       },
1093       { "$ref": "List.Filter.Rule.MusicVideos" }
1094     ]
1095   },
1096   "List.Filter.Artists": {
1097     "type": [
1098       { "type": "object",
1099         "properties": {
1100           "and": { "type": "array",
1101             "items": { "$ref": "List.Filter.Artists" },
1102             "minItems": 1, "required": true
1103           }
1104         }
1105       },
1106       { "type": "object",
1107         "properties": {
1108           "or": { "type": "array",
1109             "items": { "$ref": "List.Filter.Artists" },
1110             "minItems": 1, "required": true
1111           }
1112         }
1113       },
1114       { "$ref": "List.Filter.Rule.Artists" }
1115     ]
1116   },
1117   "List.Filter.Albums": {
1118     "type": [
1119       { "type": "object",
1120         "properties": {
1121           "and": { "type": "array",
1122             "items": { "$ref": "List.Filter.Albums" },
1123             "minItems": 1, "required": true
1124           }
1125         }
1126       },
1127       { "type": "object",
1128         "properties": {
1129           "or": { "type": "array",
1130             "items": { "$ref": "List.Filter.Albums" },
1131             "minItems": 1, "required": true
1132           }
1133         }
1134       },
1135       { "$ref": "List.Filter.Rule.Albums" }
1136     ]
1137   },
1138   "List.Filter.Songs": {
1139     "type": [
1140       { "type": "object",
1141         "properties": {
1142           "and": { "type": "array",
1143             "items": { "$ref": "List.Filter.Songs" },
1144             "minItems": 1, "required": true
1145           }
1146         }
1147       },
1148       { "type": "object",
1149         "properties": {
1150           "or": { "type": "array",
1151             "items": { "$ref": "List.Filter.Songs" },
1152             "minItems": 1, "required": true
1153           }
1154         }
1155       },
1156       { "$ref": "List.Filter.Rule.Songs" }
1157     ]
1158   },
1159   "List.Filter.Textures": {
1160     "type": [
1161       { "type": "object",
1162         "properties": {
1163           "and": { "type": "array",
1164             "items": { "$ref": "List.Filter.Textures" },
1165             "minItems": 1, "required": true
1166           }
1167         }
1168       },
1169       { "type": "object",
1170         "properties": {
1171           "or": { "type": "array",
1172             "items": { "$ref": "List.Filter.Textures" },
1173             "minItems": 1, "required": true
1174           }
1175         }
1176       },
1177       { "$ref": "List.Filter.Rule.Textures" }
1178     ]
1179   },
1180   "List.Item.Base": {
1181     "extends": [ "Video.Details.File", "Audio.Details.Media" ],
1182     "properties": {
1183       "id": { "$ref": "Library.Id" },
1184       "type": { "type": "string", "enum": [ "unknown", "movie", "episode", "musicvideo", "song", "picture", "channel" ] },
1185       "albumartist": { "$ref": "Array.String" },
1186       "album": { "type": "string" },
1187       "track": { "type": "integer" },
1188       "duration": { "type": "integer" },
1189       "comment": { "type": "string" },
1190       "lyrics": { "type": "string" },
1191       "musicbrainztrackid": { "type": "string" },
1192       "musicbrainzartistid": { "type": "string" },
1193       "trailer": { "type": "string" },
1194       "tagline": { "type": "string" },
1195       "plotoutline": { "type": "string" },
1196       "originaltitle": { "type": "string" },
1197       "writer": { "$ref": "Array.String" },
1198       "studio": { "$ref": "Array.String" },
1199       "mpaa": { "type": "string" },
1200       "cast": { "$ref": "Video.Cast" },
1201       "country": { "$ref": "Array.String" },
1202       "imdbnumber": { "type": "string" },
1203       "premiered": { "type": "string" },
1204       "productioncode": { "type": "string" },
1205       "set": { "type": "string" },
1206       "showlink": { "$ref": "Array.String" },
1207       "top250": { "type": "integer" },
1208       "votes": { "type": "string" },
1209       "firstaired": { "type": "string" },
1210       "season": { "type": "integer" },
1211       "episode": { "type": "integer" },
1212       "showtitle": { "type": "string" },
1213       "albumid": { "$ref": "Library.Id" },
1214       "setid": { "$ref": "Library.Id" },
1215       "tvshowid": { "$ref": "Library.Id" },
1216       "watchedepisodes": { "type": "integer" },
1217       "disc": { "type": "integer" },
1218       "tag": { "$ref": "Array.String" },
1219       "albumartistid": { "$ref": "Array.Integer" },
1220       "uniqueid": { "type": "object", "additionalProperties": { "type": "string", "minLength": 1 } },
1221       "episodeguide": { "type": "string" },
1222       "sorttitle": { "type": "string" },
1223       "description": { "type": "string" },
1224       "theme": { "$ref": "Array.String" },
1225       "mood": { "$ref": "Array.String" },
1226       "style": { "$ref": "Array.String" },
1227       "albumlabel": { "type": "string" }
1228     }
1229   },
1230   "List.Fields.All": {
1231     "extends": "Item.Fields.Base",
1232     "items": { "type": "string",
1233       "enum": [ "title", "artist", "albumartist", "genre", "year", "rating",
1234                 "album", "track", "duration", "comment", "lyrics", "musicbrainztrackid",
1235                 "musicbrainzartistid", "musicbrainzalbumid", "musicbrainzalbumartistid",
1236                 "playcount", "fanart", "director", "trailer", "tagline", "plot",
1237                 "plotoutline", "originaltitle", "lastplayed", "writer", "studio",
1238                 "mpaa", "cast", "country", "imdbnumber", "premiered", "productioncode",
1239                 "runtime", "set", "showlink", "streamdetails", "top250", "votes",
1240                 "firstaired", "season", "episode", "showtitle", "thumbnail", "file",
1241                 "resume", "artistid", "albumid", "tvshowid", "setid", "watchedepisodes",
1242                 "disc", "tag", "art", "genreid", "displayartist", "albumartistid",
1243                 "description", "theme", "mood", "style", "albumlabel", "sorttitle",
1244                 "episodeguide", "uniqueid", "dateadded", "channel", "channeltype", "hidden",
1245                 "locked", "channelnumber", "starttime", "endtime" ]
1246     }
1247   },
1248   "List.Item.All": {
1249     "extends": "List.Item.Base",
1250     "properties": {
1251       "channel": { "type": "string" },
1252       "channeltype": { "$ref": "PVR.Channel.Type" },
1253       "hidden": { "type": "boolean" },
1254       "locked": { "type": "boolean" },
1255       "channelnumber": { "type": "integer" },
1256       "starttime": { "type": "string" },
1257       "endtime": { "type": "string" }
1258     }
1259   },
1260   "List.Fields.Files": {
1261     "extends": "Item.Fields.Base",
1262     "items": { "type": "string",
1263       "enum": [ "title", "artist", "albumartist", "genre", "year", "rating",
1264                 "album", "track", "duration", "comment", "lyrics", "musicbrainztrackid",
1265                 "musicbrainzartistid", "musicbrainzalbumid", "musicbrainzalbumartistid",
1266                 "playcount", "fanart", "director", "trailer", "tagline", "plot",
1267                 "plotoutline", "originaltitle", "lastplayed", "writer", "studio",
1268                 "mpaa", "cast", "country", "imdbnumber", "premiered", "productioncode",
1269                 "runtime", "set", "showlink", "streamdetails", "top250", "votes",
1270                 "firstaired", "season", "episode", "showtitle", "thumbnail", "file",
1271                 "resume", "artistid", "albumid", "tvshowid", "setid", "watchedepisodes",
1272                 "disc", "tag", "art", "genreid", "displayartist", "albumartistid",
1273                 "description", "theme", "mood", "style", "albumlabel", "sorttitle",
1274                 "episodeguide", "uniqueid", "dateadded", "size", "lastmodified", "mimetype" ]
1275     }
1276   },
1277   "List.Item.File": {
1278     "extends": "List.Item.Base",
1279     "properties": {
1280       "file": { "type": "string", "required": true },
1281       "filetype": { "type": "string", "enum": [ "file", "directory" ], "required": true },
1282       "size": { "type": "integer", "description": "Size of the file in bytes" },
1283       "lastmodified": { "type": "string" },
1284       "mimetype": { "type": "string" }
1285     }
1286   },
1287   "List.Items.Sources": {
1288     "type": "array",
1289     "items": {
1290       "extends": "Item.Details.Base",
1291       "properties": {
1292         "file": { "type": "string", "required": true }
1293       }
1294     }
1295   },
1296   "Addon.Types": {
1297     "type": "string",
1298     "enum": [ "unknown", "xbmc.metadata.scraper.albums", "xbmc.metadata.scraper.artists", "xbmc.metadata.scraper.movies",
1299               "xbmc.metadata.scraper.musicvideos", "xbmc.metadata.scraper.tvshows", "xbmc.ui.screensaver",
1300               "xbmc.player.musicviz", "xbmc.python.pluginsource", "xbmc.python.script", "xbmc.python.weather",
1301               "xbmc.python.subtitles", "xbmc.python.lyrics", "xbmc.gui.skin", "xbmc.gui.webinterface",
1302               "xbmc.pvrclient", "xbmc.addon.video", "xbmc.addon.audio", "xbmc.addon.image", "xbmc.addon.executable",
1303               "xbmc.service" ],
1304     "default": "unknown"
1305   },
1306   "Addon.Content": {
1307     "type": "string",
1308     "enum": [ "unknown", "video", "audio", "image", "executable" ],
1309     "default": "unknown"
1310   },
1311   "Addon.Fields": {
1312     "extends": "Item.Fields.Base",
1313     "items": { "type": "string",
1314       "enum": [ "name", "version", "summary", "description", "path", "author", "thumbnail", "disclaimer", "fanart",
1315                 "dependencies", "broken", "extrainfo", "rating", "enabled" ]
1316     }
1317   },
1318   "Addon.Details": {
1319     "extends": "Item.Details.Base",
1320     "properties": {
1321       "addonid": { "type": "string", "required": true },
1322       "type": { "$ref": "Addon.Types", "required": true },
1323       "name": { "type": "string" },
1324       "version": { "type": "string" },
1325       "summary": { "type": "string" },
1326       "description": { "type": "string" },
1327       "path": { "type": "string" },
1328       "author": { "type": "string" },
1329       "thumbnail": { "type": "string" },
1330       "disclaimer": { "type": "string" },
1331       "fanart": { "type": "string" },
1332       "dependencies": { "type": "array",
1333         "items": { "type": "object",
1334           "properties": {
1335             "addonid": { "type": "string", "required": true },
1336             "version": { "type": "string", "required": true },
1337             "optional": { "type": "boolean", "required": true }
1338           }
1339         }
1340       },
1341       "broken": { "type": [ "boolean", "string" ] },
1342       "extrainfo": { "type": "array",
1343         "items": { "type": "object",
1344           "properties": {
1345             "key": { "type": "string", "required": true },
1346             "value": { "type": "string", "required": true }
1347           }
1348         }
1349       },
1350       "rating": { "type": "integer" },
1351       "enabled": { "type": "boolean" }
1352     }
1353   },
1354   "GUI.Property.Name": {
1355     "type": "string",
1356     "enum": [ "currentwindow", "currentcontrol", "skin", "fullscreen", "stereoscopicmode" ]
1357   },
1358   "GUI.Property.Value": {
1359     "type": "object",
1360     "properties": {
1361       "currentwindow": { "type": "object",
1362         "properties": {
1363           "id": { "type": "integer", "required": true },
1364           "label": { "type": "string", "required": true }
1365         }
1366       },
1367       "currentcontrol": { "type": "object",
1368         "properties": {
1369           "label": { "type": "string", "required": true }
1370         }
1371       },
1372       "skin": { "type": "object",
1373         "properties": {
1374           "id": { "type": "string", "required": true, "minLength": 1 },
1375           "name": { "type": "string" }
1376         }
1377       },
1378       "fullscreen": { "type": "boolean" },
1379       "stereoscopicmode": { "$ref": "GUI.Stereoscopy.Mode" }
1380     }
1381   },
1382   "GUI.Stereoscopy.Mode": {
1383     "type": "object",
1384     "properties": {
1385       "mode": { "type": "string", "required": true, "enum": [ "off", "split_vertical", "split_horizontal", "row_interleaved", "hardware_based", "anaglyph_cyan_red", "anaglyph_green_magenta", "monoscopic" ] },
1386       "label": { "type": "string", "required": true }
1387     }
1388   },
1389   "System.Property.Name": {
1390     "type": "string",
1391     "enum": [ "canshutdown", "cansuspend", "canhibernate", "canreboot" ]
1392   },
1393   "System.Property.Value": {
1394     "type": "object",
1395     "properties": {
1396       "canshutdown": { "type": "boolean" },
1397       "cansuspend": { "type": "boolean" },
1398       "canhibernate": { "type": "boolean" },
1399       "canreboot": { "type": "boolean" }
1400     }
1401   },
1402   "Application.Property.Name": {
1403     "type": "string",
1404     "enum": [ "volume", "muted", "name", "version" ]
1405   },
1406   "Application.Property.Value": {
1407     "type": "object",
1408     "properties": {
1409       "volume": { "type": "integer", "minimum": 0, "maximum": 100 },
1410       "muted": { "type": "boolean" },
1411       "name": { "type": "string", "minLength": 1 },
1412       "version": { "type": "object",
1413         "properties": {
1414           "major": { "type": "integer", "minimum": 0, "required": true },
1415           "minor": { "type": "integer", "minimum": 0, "required": true },
1416           "revision": { "type": [ "string", "integer" ] },
1417           "tag": { "type": "string", "enum": [ "prealpha", "alpha", "beta", "releasecandidate", "stable" ], "required": true }
1418         }
1419       }
1420     }
1421   },
1422   "Favourite.Fields.Favourite": {
1423     "extends": "Item.Fields.Base",
1424     "items": { "type": "string",
1425       "enum": [ "window", "windowparameter", "thumbnail", "path" ]
1426     }
1427   },
1428   "Favourite.Type": {
1429     "type": "string",
1430     "enum": [ "media", "window", "script", "unknown" ]
1431   },
1432   "Favourite.Details.Favourite": {
1433     "type": "object",
1434     "properties": {
1435       "title": { "type": "string", "required": true },
1436       "type": { "$ref": "Favourite.Type", "required": true },
1437       "path": { "type": "string" },
1438       "window": { "type": "string" },
1439       "windowparameter": { "type": "string" },
1440       "thumbnail": { "type": "string" }
1441     },
1442     "additionalProperties": false
1443   },
1444   "Setting.Type": {
1445     "type": "string",
1446     "enum": [
1447       "boolean", "integer", "number", "string", "action", "list",
1448       "path", "addon"
1449     ]
1450   },
1451   "Setting.Level": {
1452     "type": "string",
1453     "enum": [ "basic", "standard", "advanced", "expert" ]
1454   },
1455   "Setting.Value": {
1456     "type": [
1457       { "type": "boolean", "required": true },
1458       { "type": "integer", "required": true },
1459       { "type": "number", "required": true },
1460       { "type": "string", "required": true }
1461     ]
1462   },
1463   "Setting.Value.List": {
1464     "type": "array",
1465     "items": { "$ref": "Setting.Value" }
1466   },
1467   "Setting.Value.Extended": {
1468     "type": [
1469       { "type": "boolean", "required": true },
1470       { "type": "integer", "required": true },
1471       { "type": "number", "required": true },
1472       { "type": "string", "required": true },
1473       { "$ref": "Setting.Value.List", "required": true }
1474     ]
1475   },
1476   "Setting.Details.ControlBase": {
1477     "type": "object",
1478     "properties": {
1479       "type": { "type": "string", "required": true },
1480       "format": { "type": "string", "required": true },
1481       "delayed": { "type": "boolean", "required": true }
1482     }
1483   },
1484   "Setting.Details.ControlCheckmark": {
1485     "extends": "Setting.Details.ControlBase",
1486     "properties": {
1487       "type": { "type": "string", "required": true, "enum": [ "toggle" ] },
1488       "format": { "type": "string", "required": true, "enum": [ "boolean" ] }
1489     }
1490   },
1491   "Setting.Details.ControlSpinner": {
1492     "extends": "Setting.Details.ControlBase",
1493     "properties": {
1494       "type": { "type": "string", "required": true, "enum": [ "spinner" ] },
1495       "formatlabel": { "type": "string" },
1496       "minimumlabel": { "type": "string" }
1497     }
1498   },
1499   "Setting.Details.ControlHeading": {
1500     "extends": "Setting.Details.ControlBase",
1501     "properties": {
1502       "heading": { "type": "string" }
1503     }
1504   },
1505   "Setting.Details.ControlEdit": {
1506     "extends": "Setting.Details.ControlHeading",
1507     "properties": {
1508       "type": { "type": "string", "required": true, "enum": [ "edit" ] },
1509       "hidden": { "type": "boolean", "required": true },
1510       "verifynewvalue": { "type": "boolean", "required": true }
1511     }
1512   },
1513   "Setting.Details.ControlButton": {
1514     "extends": "Setting.Details.ControlHeading",
1515     "properties": {
1516       "type": { "type": "string", "required": true, "enum": [ "button" ] }
1517     }
1518   },
1519   "Setting.Details.ControlList": {
1520     "extends": "Setting.Details.ControlHeading",
1521     "properties": {
1522       "type": { "type": "string", "required": true, "enum": [ "list" ] },
1523       "multiselect": { "type": "boolean", "required": true }
1524     }
1525   },
1526   "Setting.Details.Control": {
1527     "type": [
1528       { "$ref": "Setting.Details.ControlCheckmark", "required": true },
1529       { "$ref": "Setting.Details.ControlSpinner", "required": true },
1530       { "$ref": "Setting.Details.ControlEdit", "required": true },
1531       { "$ref": "Setting.Details.ControlButton", "required": true },
1532       { "$ref": "Setting.Details.ControlList", "required": true }
1533     ]
1534   },
1535   "Setting.Details.Base": {
1536     "type": "object",
1537     "properties": {
1538       "id": { "type": "string", "required": true, "minLength": 1 },
1539       "label": { "type": "string", "required": true },
1540       "help": { "type": "string" }
1541     }
1542   },
1543   "Setting.Details.SettingBase": {
1544     "extends": "Setting.Details.Base",
1545     "properties": {
1546       "type": { "$ref": "Setting.Type", "required": true },
1547       "enabled": { "type": "boolean", "required": true },
1548       "level": { "type": "integer", "required": true },
1549       "parent": { "type": "string" },
1550       "control": { "$ref": "Setting.Details.Control" }
1551     },
1552     "additionalProperties": false
1553   },
1554   "Setting.Details.SettingBool": {
1555     "extends": "Setting.Details.SettingBase",
1556     "properties": {
1557       "value": { "type": "boolean", "required": true },
1558       "default": { "type": "boolean", "required": true }
1559     },
1560     "additionalProperties": false
1561   },
1562   "Setting.Details.SettingInt": {
1563     "extends": "Setting.Details.SettingBase",
1564     "properties": {
1565       "value": { "type": "integer", "required": true },
1566       "default": { "type": "integer", "required": true },
1567       "minimum": { "type": "integer" },
1568       "step": { "type": "integer" },
1569       "maximum": { "type": "integer" },
1570       "options": { "type": "array",
1571         "items": { "type": "object",
1572           "properties": {
1573             "label": { "type": "string", "required": true },
1574             "value": { "type": "integer", "required": true }
1575           }
1576         }
1577       }
1578     },
1579     "additionalProperties": false
1580   },
1581   "Setting.Details.SettingNumber": {
1582     "extends": "Setting.Details.SettingBase",
1583     "properties": {
1584       "value": { "type": "number", "required": true },
1585       "default": { "type": "number", "required": true },
1586       "minimum": { "type": "number", "required": true },
1587       "step": { "type": "number", "required": true },
1588       "maximum": { "type": "number", "required": true }
1589     },
1590     "additionalProperties": false
1591   },
1592   "Setting.Details.SettingString": {
1593     "extends": "Setting.Details.SettingBase",
1594     "properties": {
1595       "value": { "type": "string", "required": true },
1596       "default": { "type": "string", "required": true },
1597       "allowempty": { "type": "boolean", "required": true },
1598       "options": { "type": "array",
1599         "items": { "type": "object",
1600           "properties": {
1601             "label": { "type": "string", "required": true },
1602             "value": { "type": "string", "required": true }
1603           }
1604         }
1605       }
1606     }
1607   },
1608   "Setting.Details.SettingAction": {
1609     "extends": "Setting.Details.SettingBase",
1610     "additionalProperties": false
1611   },
1612   "Setting.Details.SettingList": {
1613     "extends": "Setting.Details.SettingBase",
1614     "properties": {
1615       "value": { "$ref": "Setting.Value.List", "required": true },
1616       "default": { "$ref": "Setting.Value.List", "required": true },
1617       "elementtype": { "$ref": "Setting.Type", "required": true },
1618       "definition": { "$ref": "Setting.Details.Setting", "required": true },
1619       "delimiter": { "type": "string", "required": true },
1620       "minimumItems": { "type": "integer" },
1621       "maximumItems": { "type": "integer" }
1622     },
1623     "additionalProperties": false
1624   },
1625   "Setting.Details.SettingPath": {
1626     "extends": "Setting.Details.SettingString",
1627     "properties": {
1628       "writable": { "type": "boolean", "required": true },
1629       "sources": { "type": "array", "items": { "type": "string" } }
1630     },
1631     "additionalProperties": false
1632   },
1633   "Setting.Details.SettingAddon": {
1634     "extends": "Setting.Details.SettingString",
1635     "properties": {
1636       "addontype": { "$ref": "Addon.Types", "required": true }
1637     },
1638     "additionalProperties": false
1639   },
1640   "Setting.Details.Setting": {
1641     "type": [
1642       { "$ref": "Setting.Details.SettingBool", "required": true },
1643       { "$ref": "Setting.Details.SettingInt", "required": true },
1644       { "$ref": "Setting.Details.SettingNumber", "required": true },
1645       { "$ref": "Setting.Details.SettingString", "required": true },
1646       { "$ref": "Setting.Details.SettingAction", "required": true },
1647       { "$ref": "Setting.Details.SettingList", "required": true },
1648       { "$ref": "Setting.Details.SettingPath", "required": true },
1649       { "$ref": "Setting.Details.SettingAddon", "required": true }
1650     ]
1651   },
1652   "Setting.Details.Group": {
1653     "type": "object",
1654     "properties": {
1655       "id": { "type": "string", "required": true, "minLength": 1 },
1656       "settings": {
1657         "type": "array",
1658         "items": { "$ref": "Setting.Details.Setting" },
1659         "minItems": 1,
1660         "uniqueItems": true
1661       }
1662     },
1663     "additionalProperties": false
1664   },
1665   "Setting.Details.Category": {
1666     "extends": "Setting.Details.Base",
1667     "properties": {
1668       "groups": {
1669         "type": "array",
1670         "items": { "$ref": "Setting.Details.Group" },
1671         "minItems": 1,
1672         "uniqueItems": true
1673       }
1674     },
1675     "additionalProperties": false
1676   },
1677   "Setting.Details.Section": {
1678     "extends": "Setting.Details.Base",
1679     "properties": {
1680       "categories": {
1681         "type": "array",
1682         "items": { "$ref": "Setting.Details.Category" },
1683         "minItems": 1,
1684         "uniqueItems": true
1685       }
1686     },
1687     "additionalProperties": false
1688   }
1689 }