Merge pull request #473 from Montellese/onplaybackspeedchanged
[vuplus_xbmc] / xbmc / interfaces / json-rpc / types.json
1 {
2   "Optional.Boolean": {
3     "type": [ "null", "boolean" ],
4     "default": null
5   },
6   "Array.String": {
7     "type": "array",
8     "items": { "type": "string", "minLength": 1 }
9   },
10   "Array.Integer": {
11     "type": "array",
12     "items": { "type": "integer" }
13   },
14   "Global.Time": {
15     "type": "object",
16     "properties": {
17       "hours": { "type": "integer", "required": true, "minimum": 0, "maximum": 23 },
18       "minutes": { "type": "integer", "required": true, "minimum": 0, "maximum": 59 },
19       "seconds": { "type": "integer", "required": true, "minimum": 0, "maximum": 59 },
20       "milliseconds": { "type": "integer", "required": true, "minimum": 0, "maximum": 999 }
21     },
22     "additionalProperties": false
23   },
24   "Configuration.Notifications": {
25     "type": "object",
26     "properties": {
27       "Player": { "type": "boolean", "required": true },
28       "GUI": { "type": "boolean", "required": true },
29       "System": { "type": "boolean", "required": true },
30       "VideoLibrary": { "type": "boolean", "required": true },
31       "AudioLibrary": { "type": "boolean", "required": true },
32       "Other": { "type": "boolean", "required": true }
33     },
34     "additionalProperties": false
35   },
36   "Configuration": {
37     "type": "object", "required": true,
38     "properties": {
39       "notifications": { "$ref": "Configuration.Notifications", "required": true }
40     }
41   },
42   "Library.Id": {
43     "type": "integer",
44     "default": -1,
45     "minimum": 1
46   },  
47   "Playlist.Id": {
48     "type": "integer",
49     "minimum": 0,
50     "maximum": 2,
51     "default": -1
52   },
53   "Playlist.Type": {
54     "type": "string",
55     "enum": [ "unknown", "video", "audio", "picture", "mixed" ]
56   },
57   "Playlist.Property.Name": {
58     "type": "string",
59     "enum": [ "type", "size" ]
60   },
61   "Playlist.Property.Value": {
62     "type": "object",
63     "properties": {
64       "type": { "$ref": "Playlist.Type" },
65       "size": { "type": "integer", "minimum": 0 }
66     }
67   },
68   "Playlist.Position": {
69     "type": "integer",
70     "minimum": 0,
71     "default": -1
72   },
73   "Playlist.Item": {
74     "type": [
75       { "type": "object", "properties": { "file": { "type": "string", "description": "Path to a file (not a directory) to be added to the playlist", "required": true } }, "additionalProperties": false },
76       { "type": "object", "properties": { "directory": { "type": "string", "required": true } }, "additionalProperties": false },
77       { "type": "object", "properties": { "movieid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
78       { "type": "object", "properties": { "episodeid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
79       { "type": "object", "properties": { "musicvideoid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
80       { "type": "object", "properties": { "artistid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
81       { "type": "object", "properties": { "albumid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
82       { "type": "object", "properties": { "songid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
83       { "type": "object", "properties": { "genreid": { "$ref": "Library.Id", "required": true, "description": "Identification of a genre from the AudioLibrary" } }, "additionalProperties": false }
84     ]
85   },
86   "Player.Id": {
87     "type": "integer",
88     "minimum": 0,
89     "maximum": 2,
90     "default": -1
91   },
92   "Player.Type": {
93     "type": "string",
94     "enum": [ "video", "audio", "picture" ]
95   },
96   "Player.Position.Percentage": {
97     "type": "number",
98     "minimum": 0.0,
99     "maximum": 100.0
100   },
101   "Player.Speed": {
102     "type": "object",
103     "required": true,
104     "properties": {
105       "speed": { "type": "integer" }
106     }
107   },
108   "Player.Repeat": {
109     "type": "string",
110     "enum": [ "off", "one", "all" ]
111   },
112   "Player.Audio.Stream": {
113     "type": "object",
114     "properties": {
115       "index": { "type": "integer", "minimum": 0, "required": true },
116       "name": { "type": "string", "required": true },
117       "language": { "type": "string", "required": true }
118     }
119   },
120   "Player.Audio.Stream.Extended": {
121     "extends": "Player.Audio.Stream",
122     "properties": {
123       "codec": { "type": "string", "required": true },
124       "bitrate": { "type": "integer", "required": true },
125       "channels": { "type": "integer", "required": true }
126     }
127   },
128   "Player.Subtitle": {
129     "type": "object",
130     "properties": {
131       "index": { "type": "integer", "minimum": 0, "required": true },
132       "name": { "type": "string", "required": true },
133       "language": { "type": "string", "required": true }
134     }
135   },
136   "Player.Property.Name": {
137     "type": "string",
138     "enum": [ "type", "partymode", "speed", "time", "percentage",
139               "totaltime", "playlistid", "position", "repeat", "shuffled",
140               "canseek", "canchangespeed", "canmove", "canzoom", "canrotate",
141               "canshuffle", "canrepeat", "currentaudiostream", "audiostreams",
142               "subtitleenabled", "currentsubtitle", "subtitles" ]
143   },
144   "Player.Property.Value": {
145     "type": "object",
146     "properties": {
147       "type": { "$ref": "Player.Type" },
148       "partymode": { "type": "boolean" },
149       "speed": { "type": "integer" },
150       "time": { "$ref": "Global.Time" },
151       "percentage": { "$ref": "Player.Position.Percentage" },
152       "totaltime": { "$ref": "Global.Time" },
153       "playlistid": { "$ref": "Playlist.Id" },
154       "position": { "$ref": "Playlist.Position" },
155       "repeat": { "$ref": "Player.Repeat" },
156       "shuffled": { "type": "boolean" },
157       "canseek": { "type": "boolean" },
158       "canchangespeed": { "type": "boolean" },
159       "canmove": { "type": "boolean" },
160       "canzoom": { "type": "boolean" },
161       "canrotate": { "type": "boolean" },
162       "canshuffle": { "type": "boolean" },
163       "canrepeat": { "type": "boolean" },
164       "currentaudiostream": { "$ref": "Player.Audio.Stream.Extended" },
165       "audiostreams": { "type": "array", "items": { "$ref": "Player.Audio.Stream.Extended" } },
166       "subtitleenabled": { "type": "boolean" },
167       "currentsubtitle": { "$ref": "Player.Subtitle" },
168       "subtitles": { "type": "array", "items": { "$ref": "Player.Subtitle" } }
169     }
170   },
171   "Player.Notifications.Item.Type": {
172     "type": "string",
173     "enum": [ "unknown", "movie", "episode", "musicvideo", "song" ]
174   },
175   "Player.Notifications.Item": {
176     "type": [
177       { "type": "object", "description": "An unknown item does not have any additional information.",
178         "properties": {
179           "type": { "$ref": "Player.Notifications.Item.Type", "required": true }
180         }
181       },
182       { "type": "object", "description": "An item known to the database has an identification.",
183         "properties": {
184           "type": { "$ref": "Player.Notifications.Item.Type", "required": true },
185           "id": { "$ref": "Library.Id", "required": true  }
186         }
187       },
188       { "type": "object", "description": "A movie item has a title and may have a release year.",
189         "properties": {
190           "type": { "$ref": "Player.Notifications.Item.Type", "required": true },
191           "title": { "type": "string", "required": true },
192           "year": { "type": "integer" }
193         }
194       },
195       { "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.",
196         "properties": {
197           "type": { "$ref": "Player.Notifications.Item.Type", "required": true },
198           "title": { "type": "string", "required": true },
199           "episode": { "type": "integer" },
200           "season": { "type": "integer" },
201           "showtitle": { "type": "string" }
202         }
203       },
204       { "type": "object", "description": "A music video has a title and may have an album and an artist.",
205         "properties": {
206           "type": { "$ref": "Player.Notifications.Item.Type", "required": true },
207           "title": { "type": "string", "required": true },
208           "album": { "type": "string" },
209           "artist": { "type": "string" }
210         }
211       },
212       { "type": "object", "description": "A song has a title and may have an album, an artist and a track number.",
213         "properties": {
214           "type": { "$ref": "Player.Notifications.Item.Type", "required": true },
215           "title": { "type": "string", "required": true },
216           "album": { "type": "string" },
217           "artist": { "type": "string" },
218           "track": { "type": "integer" }
219         }
220       }
221     ]
222   },
223   "Player.Notifications.Player": {
224     "type": "object",
225     "properties": {
226       "playerid": { "$ref": "Player.Id", "required": true },
227       "speed": { "type": "integer" }
228     }
229   },
230   "Player.Notifications.Player.Seek": {
231     "extends": "Player.Notifications.Player",
232     "properties": {
233       "time": { "$ref": "Global.Time" },
234       "seekoffset": { "$ref": "Global.Time" }
235     }
236   },
237   "Player.Notifications.Data": {
238     "type": "object",
239     "properties": {
240       "item": { "$ref": "Player.Notifications.Item", "required": true },
241       "player": { "$ref": "Player.Notifications.Player", "required": true }
242     }
243   },
244   "Item.Fields.Base": {
245     "type": "array",
246     "uniqueItems": true,
247     "items": { "type": "string" }
248   },
249   "Item.Details.Base": {
250     "type": "object",
251     "properties": {
252       "label": { "type": "string", "required": true }
253     }
254   },
255   "Media.Details.Base": {
256     "extends": "Item.Details.Base",
257     "properties": {
258       "fanart": { "type": "string" },
259       "thumbnail": { "type": "string" }
260     }
261   },
262   "Library.Fields.Genre": {
263     "extends": "Item.Fields.Base",
264     "items": { "type": "string", "enum": [ "title", "thumbnail" ] }
265   },
266   "Library.Details.Genre": {
267     "extends": "Item.Details.Base",
268     "properties": {
269       "genreid": { "$ref": "Library.Id", "required": true },
270       "title": { "type": "string" },
271       "thumbnail": { "type": "string" }
272     }
273   },
274   "Audio.Fields.Artist": {
275     "extends": "Item.Fields.Base",
276     "items": { "type": "string",
277       "enum": [ "instrument", "style", "mood", "born", "formed",
278                 "description", "genre", "died", "disbanded",
279                 "yearsactive", "musicbrainzartistid", "fanart",
280                 "thumbnail" ]
281     }
282   },
283   "Audio.Fields.Album": {
284     "extends": "Item.Fields.Base",
285     "items": { "type": "string",
286       "enum": [ "title", "description", "artist", "genre",
287                 "theme", "mood", "style", "type", "albumlabel",
288                 "rating", "year", "musicbrainzalbumid",
289                 "musicbrainzalbumartistid", "fanart", "thumbnail",
290                 "artistid" ]
291     }
292   },
293   "Audio.Fields.Song": {
294     "extends": "Item.Fields.Base",
295     "items": { "type": "string",
296       "enum": [ "title", "artist", "albumartist", "genre", "year",
297                 "rating", "album", "track", "duration", "comment",
298                 "lyrics", "musicbrainztrackid", "musicbrainzartistid",
299                 "musicbrainzalbumid", "musicbrainzalbumartistid",
300                 "playcount", "fanart", "thumbnail", "file", "artistid",
301                 "albumid" ]
302     }
303   },
304   "Audio.Details.Base": {
305     "extends": "Media.Details.Base",
306     "properties": {
307       "genre": { "type": "string" }
308     }
309   },
310   "Audio.Details.Media": {
311     "extends": "Audio.Details.Base",
312     "properties": {
313       "title": { "type": "string" },
314       "artist": { "type": "string" },
315       "year": { "type": "integer" },
316       "rating": { "type": "integer" },
317       "musicbrainzalbumid": { "type": "string" },
318       "musicbrainzalbumartistid": { "type": "string" }
319     }
320   },
321   "Audio.Details.Artist": {
322     "extends": "Audio.Details.Base",
323     "properties": {
324       "artistid": { "$ref": "Library.Id", "required": true },
325       "artist": { "type": "string", "required": true },
326       "instrument": { "type": "string" },
327       "style": { "type": "string" },
328       "mood": { "type": "string" },
329       "born": { "type": "string" },
330       "formed": { "type": "string" },
331       "description": { "type": "string" },
332       "died": { "type": "string" },
333       "disbanded": { "type": "string" },
334       "yearsactive": { "type": "string" },
335       "musicbrainzartistid": { "type": "string" }
336     }
337   },
338   "Audio.Details.Album": {
339     "extends": "Audio.Details.Media",
340     "properties": {
341       "albumid": { "$ref": "Library.Id", "required": true },
342       "description": { "type": "string" },
343       "theme": { "type": "string" },
344       "mood": { "type": "string" },
345       "style": { "type": "string" },
346       "type": { "type": "string" },
347       "albumlabel": { "type": "string" },
348       "artistid": { "$ref": "Library.Id" }
349     }
350   },
351   "Audio.Details.Song": {
352     "extends": "Audio.Details.Media",
353     "properties": {
354       "songid": { "$ref": "Library.Id", "required": true },
355       "file": { "type": "string" },
356       "albumartist": { "type": "string" },
357       "album": { "type": "string" },
358       "track": { "type": "integer" },
359       "duration": { "type": "integer" },
360       "comment": { "type": "string" },
361       "lyrics": { "type": "string" },
362       "playcount": { "type": "integer" },
363       "musicbrainztrackid": { "type": "string" },
364       "musicbrainzartistid": { "type": "string" },
365       "artistid": { "$ref": "Library.Id" },
366       "albumid": { "$ref": "Library.Id" }
367     }
368   },
369   "Video.Fields.Movie": {
370     "extends": "Item.Fields.Base",
371     "items": { "type": "string",
372       "description": "Requesting the cast, set, showling and/or resume field will result in increased response times",
373       "enum": [ "title", "genre", "year", "rating", "director", "trailer",
374                 "tagline", "plot", "plotoutline", "originaltitle", "lastplayed",
375                 "playcount", "writer", "studio", "mpaa", "cast", "country",
376                 "imdbnumber", "premiered", "productioncode", "runtime", "set",
377                 "showlink", "streamdetails", "top250", "votes", "fanart",
378                 "thumbnail", "file", "sorttitle", "resume", "setid" ]
379     }
380   },
381   "Video.Fields.MovieSet": {
382     "extends": "Item.Fields.Base",
383     "items": { "type": "string",
384       "enum": [ "title", "playcount", "fanart", "thumbnail" ]
385     }
386   },
387   "Video.Fields.TVShow": {
388     "extends": "Item.Fields.Base",
389     "items": { "type": "string",
390       "description": "Requesting the cast field will result in increased response times",
391       "enum": [ "title", "genre", "year", "rating", "plot",
392                 "studio", "mpaa", "cast", "playcount", "episode",
393                 "imdbnumber", "premiered", "votes", "lastplayed",
394                 "fanart", "thumbnail", "file", "originaltitle",
395                 "sorttitle", "episodeguide" ]
396     }
397   },
398   "Video.Fields.Season": {
399     "extends": "Item.Fields.Base",
400     "items": { "type": "string",
401       "enum": [ "season", "showtitle", "playcount", "episode", "fanart", "thumbnail", "tvshowid" ]
402     }
403   },
404   "Video.Fields.Episode": {
405     "extends": "Item.Fields.Base",
406     "items": { "type": "string",
407       "description": "Requesting the cast and/or resume field will result in increased response times",
408       "enum": [ "title", "plot", "votes", "rating", "writer",
409                 "firstaired", "playcount", "runtime", "director",
410                 "productioncode", "season", "episode", "originaltitle",
411                 "showtitle", "cast", "streamdetails", "lastplayed", "fanart",
412                 "thumbnail", "file", "resume", "tvshowid" ]
413     }
414   },
415   "Video.Fields.MusicVideo": {
416     "extends": "Item.Fields.Base",
417     "items": { "type": "string",
418       "description": "Requesting the resume field will result in increased response times",
419       "enum": [ "title", "playcount", "runtime", "director",
420                 "studio", "year", "plot", "album", "artist",
421                 "genre", "track", "streamdetails", "lastplayed",
422                 "fanart", "thumbnail", "file", "resume" ]
423     }
424   },
425   "Video.Cast": {
426     "type": "array",
427     "items": { "type": "object",
428       "properties": {
429         "name": { "type": "string", "required": true },
430         "role": { "type": "string", "required": true },
431         "thumbnail": { "type": "string" }
432       },
433       "additionalProperties": false
434     }
435   },
436   "Video.Streams": {
437     "type": "object",
438     "properties": {
439       "audio": { "type": "array", "minItems": 1,
440         "items": { "type": "object",
441           "properties": {
442             "codec": { "type": "string" },
443             "language": { "type": "string" },
444             "channels": { "type": "integer" }
445           },
446           "additionalProperties": false
447         }
448       },
449       "video": { "type": "array", "minItems": 1,
450         "items": { "type": "object",
451           "properties": {
452             "codec": { "type": "string" },
453             "aspect": { "type": "number" },
454             "width": { "type": "integer" },
455             "height": { "type": "integer" },
456             "duration": { "type": "integer" }
457           },
458           "additionalProperties": false
459         }
460       },
461       "subtitle": { "type": "array", "minItems": 1,
462         "items": { "type": "object",
463           "properties": {
464             "language": { "type": "string" }
465           },
466           "additionalProperties": false
467         }
468       }
469     },
470     "additionalProperties": false
471   },
472   "Video.Resume": {
473     "type": "object",
474     "properties": {
475       "position": { "type": "number", "minimum": 0 },
476       "total": { "type": "number", "minimum": 0 }
477     },
478     "additionalProperties": false
479   },
480   "Video.Details.Base": {
481     "extends": "Media.Details.Base",
482     "properties": {
483       "playcount": { "type": "integer" }
484     }
485   },
486   "Video.Details.Media": {
487     "extends": "Video.Details.Base",
488     "properties": {
489       "title": { "type": "string" }
490     }
491   },
492   "Video.Details.Item": {
493     "extends": "Video.Details.Media",
494     "properties": {
495       "file": { "type": "string" },
496       "plot": { "type": "string" },
497       "lastplayed": { "type": "string" }
498     }
499   },
500   "Video.Details.File": {
501     "extends": "Video.Details.Item",
502     "properties": {
503       "runtime": { "type": "string" },
504       "director": { "type": "string" },
505       "streamdetails": { "$ref": "Video.Streams" },
506       "resume": { "$ref": "Video.Resume" }
507     }
508   },
509   "Video.Details.Movie": {
510     "extends": "Video.Details.File",
511     "properties": {
512       "movieid": { "$ref": "Library.Id", "required": true },
513       "genre": { "type": "string" },
514       "year": { "type": "integer" },
515       "rating": { "type": "number" },
516       "trailer": { "type": "string" },
517       "tagline": { "type": "string" },
518       "plotoutline": { "type": "string" },
519       "originaltitle": { "type": "string" },
520       "sorttitle": { "type": "string" },
521       "writer": { "type": "string" },
522       "studio": { "type": "string" },
523       "mpaa": { "type": "string" },
524       "cast": { "$ref": "Video.Cast" },
525       "country": { "type": "string" },
526       "imdbnumber": { "type": "string" },
527       "premiered": { "type": "string" },
528       "productioncode": { "type": "string" },
529       "set": { "$ref": "Array.String" },
530       "showlink": { "type": "string" },
531       "top250": { "type": "integer" },
532       "votes": { "type": "string" },
533       "setid": { "$ref": "Array.Integer" }
534     }
535   },
536   "Video.Details.MovieSet": {
537     "extends": "Video.Details.Media",
538     "properties": {
539       "setid": { "$ref": "Library.Id", "required": true }
540     }
541   },
542   "Video.Details.MovieSet.Extended": {
543     "extends": "Video.Details.MovieSet",
544     "properties": {
545       "movies": { "type": "array",
546         "items": { "$ref": "Video.Details.Movie" }
547       }
548     }
549   },
550   "Video.Details.TVShow": {
551     "extends": "Video.Details.Item",
552     "properties": {
553       "tvshowid": { "$ref": "Library.Id", "required": true },
554       "genre": { "type": "string" },
555       "year": { "type": "integer" },
556       "rating": { "type": "number" },
557       "originaltitle": { "type": "string" },
558       "sorttitle": { "type": "string" },
559       "studio": { "type": "string" },
560       "mpaa": { "type": "string" },
561       "cast": { "$ref": "Video.Cast" },
562       "episode": { "type": "integer" },
563       "imdbnumber": { "type": "string" },
564       "premiered": { "type": "string" },
565       "votes": { "type": "string" },
566       "episodeguide": { "type": "string" }
567     }
568   },
569   "Video.Details.Season": {
570     "extends": "Video.Details.Base",
571     "properties": {
572       "season": { "type": "integer", "required": true },
573       "showtitle": { "type": "string" },
574       "episode": { "type": "integer" },
575       "tvshowid": { "$ref": "Library.Id" }
576     }
577   },
578   "Video.Details.Episode": {
579     "extends": "Video.Details.File",
580     "properties": {
581       "episodeid": { "$ref": "Library.Id", "required": true },
582       "votes": { "type": "string" },
583       "rating": { "type": "number" },
584       "writer": { "type": "string" },
585       "firstaired": { "type": "string" },
586       "productioncode": { "type": "string" },
587       "season": { "type": "integer" },
588       "episode": { "type": "integer" },
589       "originaltitle": { "type": "string" },
590       "showtitle": { "type": "string" },
591       "cast": { "$ref": "Video.Cast" },
592       "tvshowid": { "$ref": "Library.Id" }
593     }
594   },
595   "Video.Details.MusicVideo": {
596     "extends": "Video.Details.File",
597     "properties": {
598       "musicvideoid": { "$ref": "Library.Id", "required": true },
599       "studio": { "type": "string" },
600       "year": { "type": "integer" },
601       "album": { "type": "string" },
602       "artist": { "type": "string" },
603       "genre": { "type": "string" },
604       "track": { "type": "integer" }
605     }
606   },
607   "Files.Media": {
608     "type": "string",
609     "enum": [ "video", "music", "pictures", "files", "programs" ]
610   },
611   "List.Amount": {
612     "type": "integer",
613     "default": -1,
614     "minimum": 0
615   },
616   "List.Limits": {
617     "type": "object",
618     "properties": {
619       "start": { "type": "integer", "minimum": 0, "default": 0 },
620       "end": { "type": "integer", "minimum": 0, "default": -1 }
621     },
622     "additionalProperties": false
623   },
624   "List.Sort": {
625     "type": "object",
626     "properties": {
627       "method": { "type": "string", "default": "none",
628         "enum": [ "none", "label", "date", "size", "file", "drivetype", "track", "duration", "title", "artist",
629                   "album", "genre", "year", "videorating", "programcount", "playlist", "episode", "videotitle",
630                   "sorttitle", "productioncode", "songrating", "mpaarating", "videoruntime", "studio", "fullpath",
631                   "lastplayed", "unsorted", "max" ]
632       },
633       "order": { "type": "string", "default": "ascending", "enum": [ "ascending", "descending" ] },
634       "ignorearticle": { "type": "boolean", "default": false }
635     }
636   },
637   "List.LimitsReturned": {
638     "type": "object",
639     "properties": {
640       "start": { "type": "integer", "minimum": 0, "default": 0 },
641       "end": { "type": "integer", "minimum": 0, "default": -1 },
642       "total": { "type": "integer", "minimum": 0, "required": true }
643     },
644     "additionalProperties": false
645   },
646   "List.Fields.All": {
647     "extends": "Item.Fields.Base",
648     "items": { "type": "string",
649       "enum": [ "title", "artist", "albumartist", "genre", "year", "rating",
650                 "album", "track", "duration", "comment", "lyrics", "musicbrainztrackid",
651                 "musicbrainzartistid", "musicbrainzalbumid", "musicbrainzalbumartistid",
652                 "playcount", "fanart", "director", "trailer", "tagline", "plot",
653                 "plotoutline", "originaltitle", "lastplayed", "writer", "studio",
654                 "mpaa", "cast", "country", "imdbnumber", "premiered", "productioncode",
655                 "runtime", "set", "showlink", "streamdetails", "top250", "votes",
656                 "firstaired", "season", "episode", "showtitle", "thumbnail", "file",
657                 "resume", "artistid", "albumid", "tvshowid", "setid" ]
658     }
659   },
660   "List.Item.All": {
661     "extends": [ "Video.Details.File", "Audio.Details.Media" ],
662                 "properties": {
663                         "id": { "$ref": "Library.Id" },
664                         "type": { "type": "string", "enum": [ "unknown", "movie", "episode", "musicvideo", "song", "picture" ] },
665                         "albumartist": { "type": "string" },
666                         "album": { "type": "string" },
667                         "track": { "type": "integer" },
668                         "duration": { "type": "integer" },
669                         "comment": { "type": "string" },
670                         "lyrics": { "type": "string" },
671                         "musicbrainztrackid": { "type": "string" },
672                         "musicbrainzartistid": { "type": "string" },
673                         "trailer": { "type": "string" },
674                         "tagline": { "type": "string" },
675                         "plotoutline": { "type": "string" },
676                         "originaltitle": { "type": "string" },
677                         "writer": { "type": "string" },
678                         "studio": { "type": "string" },
679                         "mpaa": { "type": "string" },
680                         "cast": { "$ref": "Video.Cast" },
681                         "country": { "type": "string" },
682                         "imdbnumber": { "type": "string" },
683                         "premiered": { "type": "string" },
684                         "productioncode": { "type": "string" },
685                         "set": { "$ref": "Array.String" },
686                         "showlink": { "type": "string" },
687                         "top250": { "type": "integer" },
688                         "votes": { "type": "string" },
689                         "firstaired": { "type": "string" },
690                         "season": { "type": "integer" },
691                         "episode": { "type": "integer" },
692                         "showtitle": { "type": "string" },
693                         "artistid": { "$ref": "Library.Id" },
694                         "albumid": { "$ref": "Library.Id" },
695                         "setid": { "$ref": "Array.Integer" },
696                         "tvshowid": { "$ref": "Library.Id" }
697                 }
698   },
699         "List.Item.File": {
700     "extends": "List.Item.All",
701     "properties": {
702                         "file": { "type": "string", "required": true },
703                         "filetype": { "type": "string", "enum": [ "file", "directory" ], "required": true }
704                 }
705   },
706   "List.Items.Sources": {
707     "type": "array",
708     "items": {
709       "extends": "Item.Details.Base",
710       "properties": {
711         "file": { "type": "string", "required": true }
712       }
713     }
714   },
715   "System.Property.Name": {
716     "type": "string",
717     "enum": [ "canshutdown", "cansuspend", "canhibernate", "canreboot" ]
718   },
719   "System.Property.Value": {
720     "type": "object",
721     "properties": {
722       "canshutdown": { "type": "boolean" },
723       "cansuspend": { "type": "boolean" },
724       "canhibernate": { "type": "boolean" },
725       "canreboot": { "type": "boolean" }
726     }
727   },
728   "Application.Property.Name": {
729     "type": "string",
730     "enum": [ "volume", "muted", "name", "version" ]
731   },
732   "Application.Property.Value": {
733     "type": "object",
734     "properties": {
735       "volume": { "type": "integer" },
736       "muted": { "type": "boolean" },
737       "name": { "type": "string", "minLength": 1 },
738       "version": { "type": "object",
739         "properties": {
740           "major": { "type": "integer", "minimum": 0, "required": true },
741           "minor": { "type": "integer", "minimum": 0, "required": true },
742           "revision": { "type": [ "string", "integer" ] },
743           "tag": { "type": "string", "enum": [ "prealpha", "alpha", "beta", "releasecandidate", "stable" ], "required": true }
744         }
745       }
746     }
747   }
748 }