PageRenderTime 67ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/xbmc/interfaces/json-rpc/schema/types.json

http://github.com/xbmc/xbmc
JSON | 2018 lines | 2018 code | 0 blank | 0 comment | 0 complexity | 1b9681b696d79ffe8b4d4c4fc3fcc6e9 MD5 | raw file
Possible License(s): GPL-3.0, CC-BY-SA-3.0, LGPL-2.0, 0BSD, Unlicense, GPL-2.0, AGPL-1.0, BSD-3-Clause, LGPL-2.1, LGPL-3.0
  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", "userrating", "votes", "top250", "programcount",
  109. "playlist", "episode", "season", "totalepisodes", "watchedepisodes", "tvshowstatus", "tvshowtitle",
  110. "sorttitle", "productioncode", "mpaa", "studio", "dateadded", "lastplayed", "playcount", "listeners",
  111. "bitrate", "random", "totaldiscs", "originaldate", "bpm" ]
  112. },
  113. "order": { "type": "string", "default": "ascending", "enum": [ "ascending", "descending" ] },
  114. "ignorearticle": { "type": "boolean", "default": false },
  115. "useartistsortname": { "type": "boolean", "default": false }
  116. }
  117. },
  118. "Library.Id": {
  119. "type": "integer",
  120. "default": -1,
  121. "minimum": 1
  122. },
  123. "PVR.Channel.Type": {
  124. "type": "string",
  125. "enum": [ "tv", "radio" ]
  126. },
  127. "Playlist.Id": {
  128. "type": "integer",
  129. "minimum": 0,
  130. "maximum": 2,
  131. "default": -1
  132. },
  133. "Playlist.Type": {
  134. "type": "string",
  135. "enum": [ "unknown", "video", "audio", "picture", "mixed" ]
  136. },
  137. "Playlist.Property.Name": {
  138. "type": "string",
  139. "enum": [ "type", "size" ]
  140. },
  141. "Playlist.Property.Value": {
  142. "type": "object",
  143. "properties": {
  144. "type": { "$ref": "Playlist.Type" },
  145. "size": { "type": "integer", "minimum": 0 }
  146. }
  147. },
  148. "Playlist.Position": {
  149. "type": "integer",
  150. "minimum": 0,
  151. "default": -1
  152. },
  153. "Playlist.Item": {
  154. "type": [
  155. { "type": "object", "properties": { "file": { "type": "string", "description": "Path to a file (not a directory) to be added to the playlist", "required": true } }, "additionalProperties": false },
  156. { "type": "object", "properties": { "directory": { "type": "string", "required": true }, "recursive": { "type": "boolean", "default": false }, "media": { "$ref": "Files.Media", "default": "files" } }, "additionalProperties": false },
  157. { "type": "object", "properties": { "movieid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
  158. { "type": "object", "properties": { "episodeid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
  159. { "type": "object", "properties": { "musicvideoid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
  160. { "type": "object", "properties": { "artistid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
  161. { "type": "object", "properties": { "albumid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
  162. { "type": "object", "properties": { "songid": { "$ref": "Library.Id", "required": true } }, "additionalProperties": false },
  163. { "type": "object", "properties": { "genreid": { "$ref": "Library.Id", "required": true, "description": "Identification of a genre from the AudioLibrary" } }, "additionalProperties": false }
  164. ]
  165. },
  166. "Player.Id": {
  167. "type": "integer",
  168. "minimum": 0,
  169. "maximum": 2,
  170. "default": -1
  171. },
  172. "Player.Type": {
  173. "type": "string",
  174. "enum": [ "video", "audio", "picture" ]
  175. },
  176. "Player.Position.Percentage": {
  177. "type": "number",
  178. "minimum": 0.0,
  179. "maximum": 100.0
  180. },
  181. "Player.Position.Time": {
  182. "type": "object",
  183. "additionalProperties": false,
  184. "properties": {
  185. "hours": { "type": "integer", "minimum": 0, "maximum": 23, "default": 0 },
  186. "minutes": { "type": "integer", "minimum": 0, "maximum": 59, "default": 0 },
  187. "seconds": { "type": "integer", "minimum": 0, "maximum": 59, "default": 0 },
  188. "milliseconds": { "type": "integer", "minimum": 0, "maximum": 999, "default": 0 }
  189. }
  190. },
  191. "Player.Speed": {
  192. "type": "object",
  193. "required": true,
  194. "properties": {
  195. "speed": { "type": "integer" }
  196. }
  197. },
  198. "Player.ViewMode": {
  199. "type": "string",
  200. "enum": [ "normal", "zoom", "stretch4x3", "widezoom", "stretch16x9", "original",
  201. "stretch16x9nonlin", "zoom120width", "zoom110width" ]
  202. },
  203. "Player.CustomViewMode": {
  204. "type": "object",
  205. "required": true,
  206. "properties": {
  207. "zoom": { "type": [
  208. { "type": "string", "enum": [ "increase", "decrease" ], "required": true },
  209. { "$ref": "Optional.Number", "minimum":0.5, "maximum": 2.0, "description": "Zoom where 1.0 means 100%", "required": true } ] },
  210. "pixelratio": { "type": [
  211. { "type": "string", "enum": [ "increase", "decrease" ], "required": true },
  212. { "$ref": "Optional.Number", "minimum":0.5, "maximum": 2.0, "description": "Pixel aspect ratio where 1.0 means square pixel", "required": true } ] },
  213. "verticalshift": { "type": [
  214. { "type": "string", "enum": [ "increase", "decrease" ], "required": true },
  215. { "$ref": "Optional.Number", "minimum": -2.0, "maximum": 2.0, "description": "Vertical shift 1.0 means shift to bottom", "required": true } ] },
  216. "nonlinearstretch": { "type": [
  217. { "type": "string", "enum": [ "increase", "decrease" ], "required": true },
  218. { "$ref": "Optional.Boolean", "description": "Flag to enable nonlinear stretch", "required": true } ] }
  219. }
  220. },
  221. "Player.Repeat": {
  222. "type": "string",
  223. "enum": [ "off", "one", "all" ]
  224. },
  225. "Player.Audio.Stream": {
  226. "type": "object",
  227. "properties": {
  228. "index": { "type": "integer", "minimum": 0, "required": true },
  229. "name": { "type": "string", "required": true },
  230. "language": { "type": "string", "required": true },
  231. "codec": { "type": "string", "required": true },
  232. "bitrate": { "type": "integer", "required": true },
  233. "channels": { "type": "integer", "required": true },
  234. "isdefault": { "type": "boolean", "required": true },
  235. "isoriginal": { "type": "boolean", "required": true },
  236. "isimpaired": { "type": "boolean", "required": true },
  237. "samplerate": { "type": "integer", "required": true }
  238. }
  239. },
  240. "Player.Video.Stream": {
  241. "type": "object",
  242. "properties": {
  243. "index": { "type": "integer", "minimum": 0, "required": true },
  244. "name": { "type": "string", "required": true },
  245. "language": { "type": "string", "required": true },
  246. "codec": { "type": "string", "required": true },
  247. "width": { "type": "integer", "required": true },
  248. "height": { "type": "integer", "required": true }
  249. }
  250. },
  251. "Player.Subtitle": {
  252. "type": "object",
  253. "properties": {
  254. "index": { "type": "integer", "minimum": 0, "required": true },
  255. "name": { "type": "string", "required": true },
  256. "language": { "type": "string", "required": true },
  257. "isdefault": { "type": "boolean", "required": true },
  258. "isforced": { "type": "boolean", "required": true },
  259. "isimpaired": { "type": "boolean", "required": true }
  260. }
  261. },
  262. "Player.Property.Name": {
  263. "type": "string",
  264. "enum": [ "type", "partymode", "speed", "time", "percentage",
  265. "totaltime", "playlistid", "position", "repeat", "shuffled",
  266. "canseek", "canchangespeed", "canmove", "canzoom", "canrotate",
  267. "canshuffle", "canrepeat", "currentaudiostream", "audiostreams",
  268. "subtitleenabled", "currentsubtitle", "subtitles", "live",
  269. "currentvideostream", "videostreams" ]
  270. },
  271. "Player.Property.Value": {
  272. "type": "object",
  273. "properties": {
  274. "type": { "$ref": "Player.Type" },
  275. "partymode": { "type": "boolean" },
  276. "speed": { "type": "integer" },
  277. "time": { "$ref": "Global.Time" },
  278. "percentage": { "$ref": "Player.Position.Percentage" },
  279. "totaltime": { "$ref": "Global.Time" },
  280. "playlistid": { "$ref": "Playlist.Id" },
  281. "position": { "$ref": "Playlist.Position" },
  282. "repeat": { "$ref": "Player.Repeat" },
  283. "shuffled": { "type": "boolean" },
  284. "canseek": { "type": "boolean" },
  285. "canchangespeed": { "type": "boolean" },
  286. "canmove": { "type": "boolean" },
  287. "canzoom": { "type": "boolean" },
  288. "canrotate": { "type": "boolean" },
  289. "canshuffle": { "type": "boolean" },
  290. "canrepeat": { "type": "boolean" },
  291. "currentaudiostream": { "$ref": "Player.Audio.Stream" },
  292. "audiostreams": { "type": "array", "items": { "$ref": "Player.Audio.Stream" } },
  293. "currentvideostream": { "$ref": "Player.Video.Stream" },
  294. "videostreams": { "type": "array", "items": { "$ref": "Player.Video.Stream" } },
  295. "subtitleenabled": { "type": "boolean" },
  296. "currentsubtitle": { "$ref": "Player.Subtitle" },
  297. "subtitles": { "type": "array", "items": { "$ref": "Player.Subtitle" } },
  298. "live": { "type": "boolean" }
  299. }
  300. },
  301. "Notifications.Item.Type": {
  302. "type": "string",
  303. "enum": [ "unknown", "movie", "episode", "musicvideo", "song", "picture", "channel" ]
  304. },
  305. "Notifications.Item": {
  306. "type": [
  307. { "type": "object", "description": "An unknown item does not have any additional information.",
  308. "properties": {
  309. "type": { "$ref": "Notifications.Item.Type", "required": true }
  310. }
  311. },
  312. { "type": "object", "description": "An item known to the database has an identification.",
  313. "properties": {
  314. "type": { "$ref": "Notifications.Item.Type", "required": true },
  315. "id": { "$ref": "Library.Id", "required": true }
  316. }
  317. },
  318. { "type": "object", "description": "A movie item has a title and may have a release year.",
  319. "properties": {
  320. "type": { "$ref": "Notifications.Item.Type", "required": true },
  321. "title": { "type": "string", "required": true },
  322. "year": { "type": "integer" }
  323. }
  324. },
  325. { "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.",
  326. "properties": {
  327. "type": { "$ref": "Notifications.Item.Type", "required": true },
  328. "title": { "type": "string", "required": true },
  329. "episode": { "type": "integer" },
  330. "season": { "type": "integer" },
  331. "showtitle": { "type": "string" }
  332. }
  333. },
  334. { "type": "object", "description": "A music video has a title and may have an album and an artist.",
  335. "properties": {
  336. "type": { "$ref": "Notifications.Item.Type", "required": true },
  337. "title": { "type": "string", "required": true },
  338. "album": { "type": "string" },
  339. "artist": { "type": "string" }
  340. }
  341. },
  342. { "type": "object", "description": "A song has a title and may have an album, an artist and a track number.",
  343. "properties": {
  344. "type": { "$ref": "Notifications.Item.Type", "required": true },
  345. "title": { "type": "string", "required": true },
  346. "album": { "type": "string" },
  347. "artist": { "type": "string" },
  348. "track": { "type": "integer" }
  349. }
  350. },
  351. { "type": "object", "description": "A picture has a file path.",
  352. "properties": {
  353. "type": { "$ref": "Notifications.Item.Type", "required": true },
  354. "file": { "type": "string", "required": true }
  355. }
  356. },
  357. { "type": "object", "description": "A PVR channel is either a radio or tv channel and has a title.",
  358. "properties": {
  359. "type": { "$ref": "Notifications.Item.Type", "required": true },
  360. "id": { "$ref": "Library.Id", "required": true },
  361. "title": { "type": "string", "required": true },
  362. "channeltype": { "$ref": "PVR.Channel.Type", "required": true }
  363. }
  364. }
  365. ]
  366. },
  367. "Player.Notifications.Player": {
  368. "type": "object",
  369. "properties": {
  370. "playerid": { "$ref": "Player.Id", "required": true },
  371. "speed": { "type": "integer" }
  372. }
  373. },
  374. "Player.Notifications.Player.Seek": {
  375. "extends": "Player.Notifications.Player",
  376. "properties": {
  377. "time": { "$ref": "Global.Time" },
  378. "seekoffset": { "$ref": "Global.Time" }
  379. }
  380. },
  381. "Player.Notifications.Data": {
  382. "type": "object",
  383. "properties": {
  384. "item": { "$ref": "Notifications.Item", "required": true },
  385. "player": { "$ref": "Player.Notifications.Player", "required": true }
  386. }
  387. },
  388. "Item.Fields.Base": {
  389. "type": "array",
  390. "uniqueItems": true,
  391. "items": { "type": "string" }
  392. },
  393. "Item.Details.Base": {
  394. "type": "object",
  395. "properties": {
  396. "label": { "type": "string", "required": true }
  397. }
  398. },
  399. "Media.Details.Base": {
  400. "extends": "Item.Details.Base",
  401. "properties": {
  402. "fanart": { "type": "string" },
  403. "thumbnail": { "type": "string" }
  404. }
  405. },
  406. "Media.Artwork": {
  407. "type": "object",
  408. "properties": {
  409. "thumb": { "$ref": "Global.String.NotEmpty" },
  410. "poster": { "$ref": "Global.String.NotEmpty" },
  411. "banner": { "$ref": "Global.String.NotEmpty" },
  412. "fanart": { "$ref": "Global.String.NotEmpty" }
  413. },
  414. "additionalProperties": { "$ref": "Global.String.NotEmpty" }
  415. },
  416. "Media.Artwork.Set": {
  417. "type": "object",
  418. "properties": {
  419. "thumb": { "type": [ "null", { "$ref": "Global.String.NotEmpty", "required": true } ], "default": "" },
  420. "poster": { "type": [ "null", { "$ref": "Global.String.NotEmpty", "required": true } ], "default": "" },
  421. "banner": { "type": [ "null", { "$ref": "Global.String.NotEmpty", "required": true } ], "default": "" },
  422. "fanart": { "type": [ "null", { "$ref": "Global.String.NotEmpty", "required": true } ], "default": "" }
  423. },
  424. "additionalProperties": { "type": [ "null", { "$ref": "Global.String.NotEmpty", "required": true } ] }
  425. },
  426. "Video.Rating": {
  427. "type": "object",
  428. "properties": {
  429. "rating": { "type": "number", "required": true },
  430. "votes": { "type": "integer" },
  431. "default": { "type": "boolean" }
  432. }
  433. },
  434. "Video.Ratings": {
  435. "type": "object",
  436. "additionalProperties": { "$ref": "Video.Rating" }
  437. },
  438. "Video.Ratings.Set": {
  439. "type": "object",
  440. "additionalProperties": { "type": [ "null", { "$ref": "Video.Rating", "required": true } ] }
  441. },
  442. "Media.UniqueID": {
  443. "type": "object",
  444. "additionalProperties": { "$ref": "Global.String.NotEmpty" }
  445. },
  446. "Media.UniqueID.Set": {
  447. "type": "object",
  448. "additionalProperties": { "type": [ "null", { "$ref": "Global.String.NotEmpty", "required": true } ] }
  449. },
  450. "Library.Fields.Source": {
  451. "extends": "Item.Fields.Base",
  452. "items": { "type": "string", "enum": [ "file", "paths" ] }
  453. },
  454. "Library.Details.Source": {
  455. "extends": "Item.Details.Base",
  456. "properties": {
  457. "sourceid": { "$ref": "Library.Id", "required": true },
  458. "file": { "type": "string", "description": "The url encoded multipath string combining all paths of the source ", "required": true },
  459. "paths": { "$ref": "Array.String", "description": "The individual paths of the media source" }
  460. }
  461. },
  462. "Library.Fields.Genre": {
  463. "extends": "Item.Fields.Base",
  464. "items": { "type": "string", "enum": [ "title", "thumbnail", "sourceid" ] }
  465. },
  466. "Library.Details.Genre": {
  467. "extends": "Item.Details.Base",
  468. "properties": {
  469. "genreid": { "$ref": "Library.Id", "required": true },
  470. "title": { "type": "string" },
  471. "thumbnail": { "type": "string" },
  472. "sourceid": { "$ref": "Array.Integer", "description": "The ids of sources with songs of the genre" }
  473. }
  474. },
  475. "Library.Fields.Tag": {
  476. "extends": "Item.Fields.Base",
  477. "items": { "type": "string", "enum": [ "title" ] }
  478. },
  479. "Library.Details.Tag": {
  480. "extends": "Item.Details.Base",
  481. "properties": {
  482. "tagid": { "$ref": "Library.Id", "required": true },
  483. "title": { "type": "string" }
  484. }
  485. },
  486. "Audio.Fields.Role": {
  487. "extends": "Item.Fields.Base",
  488. "items": { "type": "string", "enum": [ "title" ] }
  489. },
  490. "Audio.Details.Role": {
  491. "extends": "Item.Details.Base",
  492. "properties": {
  493. "roleid": { "$ref": "Library.Id", "required": true },
  494. "title": { "type": "string" }
  495. }
  496. },
  497. "Audio.Fields.Artist": {
  498. "extends": "Item.Fields.Base",
  499. "items": { "type": "string",
  500. "description": "Requesting the (song)genreid/genre, roleid/role or sourceid fields will result in increased response times",
  501. "enum": [ "instrument", "style", "mood", "born", "formed",
  502. "description", "genre", "died", "disbanded",
  503. "yearsactive", "musicbrainzartistid", "fanart",
  504. "thumbnail", "compilationartist", "dateadded",
  505. "roles", "songgenres", "isalbumartist",
  506. "sortname", "type", "gender", "disambiguation", "art", "sourceid"]
  507. }
  508. },
  509. "Audio.Fields.Album": {
  510. "extends": "Item.Fields.Base",
  511. "items": { "type": "string",
  512. "description": "Requesting the songgenres, artistid and/or sourceid fields will result in increased response times",
  513. "enum": [ "title", "description", "artist", "genre",
  514. "theme", "mood", "style", "type", "albumlabel",
  515. "rating", "votes", "userrating","year", "musicbrainzalbumid",
  516. "musicbrainzalbumartistid", "fanart", "thumbnail",
  517. "playcount", "artistid", "displayartist",
  518. "compilation", "releasetype", "dateadded",
  519. "sortartist", "musicbrainzreleasegroupid", "songgenres", "art",
  520. "lastplayed", "sourceid","isboxset", "totaldiscs",
  521. "releasedate", "originaldate"]
  522. }
  523. },
  524. "Audio.Fields.Song": {
  525. "extends": "Item.Fields.Base",
  526. "items": { "type": "string",
  527. "description": "Requesting the genreid, artistid, albumartistid and/or sourceid fields will result in increased response times",
  528. "enum": [ "title", "artist", "albumartist", "genre", "year",
  529. "rating", "album", "track", "duration", "comment",
  530. "lyrics", "musicbrainztrackid", "musicbrainzartistid",
  531. "musicbrainzalbumid", "musicbrainzalbumartistid",
  532. "playcount", "fanart", "thumbnail", "file", "albumid",
  533. "lastplayed", "disc", "genreid", "artistid", "displayartist",
  534. "albumartistid", "albumreleasetype", "dateadded",
  535. "votes", "userrating", "mood", "contributors",
  536. "displaycomposer", "displayconductor", "displayorchestra", "displaylyricist",
  537. "sortartist", "art", "sourceid", "disctitle", "releasedate", "originaldate",
  538. "bpm", "samplerate", "bitrate", "channels"]
  539. }
  540. },
  541. "Audio.Album.ReleaseType": {
  542. "type": "string",
  543. "enum": [ "album", "single" ],
  544. "default": "album"
  545. },
  546. "Audio.Contributors": {
  547. "type": "array",
  548. "items": { "type": "object",
  549. "description": "The artist and the role they contribute to a song",
  550. "properties": {
  551. "name": { "type": "string", "required": true },
  552. "role": { "type": "string", "required": true },
  553. "roleid": { "$ref": "Library.Id", "required": true },
  554. "artistid": { "$ref": "Library.Id", "required": true }
  555. },
  556. "additionalProperties": false
  557. }
  558. },
  559. "Audio.Artist.Roles": {
  560. "type": "array",
  561. "items": { "type": "object",
  562. "description": "The various roles contributed by an artist to one or more songs",
  563. "properties": {
  564. "roleid": { "$ref": "Library.Id", "required": true },
  565. "role": { "type": "string", "required": true }
  566. },
  567. "additionalProperties": false
  568. }
  569. },
  570. "Audio.Details.Genres": {
  571. "type": "array",
  572. "items": { "type": "object",
  573. "properties": {
  574. "genreid": { "$ref": "Library.Id", "required": true },
  575. "title": { "type": "string" }
  576. }
  577. }
  578. },
  579. "Audio.Details.Base": {
  580. "extends": "Media.Details.Base",
  581. "properties": {
  582. "genre": { "$ref": "Array.String" },
  583. "dateadded": { "type": "string" },
  584. "art": { "$ref": "Media.Artwork" }
  585. }
  586. },
  587. "Audio.Details.Media": {
  588. "extends": "Audio.Details.Base",
  589. "properties": {
  590. "title": { "type": "string" },
  591. "artist": { "$ref": "Array.String" },
  592. "year": { "type": "integer" },
  593. "rating": { "type": "number" },
  594. "musicbrainzalbumartistid": { "$ref": "Array.String" },
  595. "artistid": { "$ref": "Array.Integer" },
  596. "displayartist": { "type" : "string" },
  597. "votes": { "type": "integer" },
  598. "userrating": { "type": "integer" },
  599. "sortartist": { "type" : "string" },
  600. "releasedate": { "type" : "string" },
  601. "originaldate": { "type" : "string" }
  602. }
  603. },
  604. "Audio.Details.Artist": {
  605. "extends": "Audio.Details.Base",
  606. "properties": {
  607. "artistid": { "$ref": "Library.Id", "required": true },
  608. "artist": { "type": "string", "required": true },
  609. "instrument": { "$ref": "Array.String" },
  610. "style": { "$ref": "Array.String" },
  611. "mood": { "$ref": "Array.String" },
  612. "born": { "type": "string" },
  613. "formed": { "type": "string" },
  614. "description": { "type": "string" },
  615. "died": { "type": "string" },
  616. "disbanded": { "type": "string" },
  617. "yearsactive": { "$ref": "Array.String" },
  618. "compilationartist": { "type": "boolean" },
  619. "musicbrainzartistid": { "$ref": "Array.String" },
  620. "roles": {"$ref": "Audio.Artist.Roles"},
  621. "songgenres": {"$ref": "Audio.Details.Genres"},
  622. "isalbumartist": { "type": "boolean" },
  623. "sortname": { "type": "string" },
  624. "type": { "type": "string" },
  625. "gender": { "type": "string" },
  626. "disambiguation": { "type": "string" },
  627. "sourceid": { "$ref": "Array.Integer" }
  628. }
  629. },
  630. "Audio.Details.Album": {
  631. "extends": "Audio.Details.Media",
  632. "properties": {
  633. "albumid": { "$ref": "Library.Id", "required": true },
  634. "description": { "type": "string" },
  635. "theme": { "$ref": "Array.String" },
  636. "mood": { "$ref": "Array.String" },
  637. "style": { "$ref": "Array.String" },
  638. "type": { "type": "string" },
  639. "albumlabel": { "type": "string" },
  640. "playcount": { "type": "integer" },
  641. "compilation": { "type": "boolean" },
  642. "releasetype": { "$ref": "Audio.Album.ReleaseType" },
  643. "musicbrainzreleasegroupid": { "type": "string" },
  644. "musicbrainzalbumid": { "type": "string" },
  645. "songgenres": {"$ref": "Audio.Details.Genres"},
  646. "lastplayed": { "type": "string" },
  647. "sourceid": { "$ref": "Array.Integer" },
  648. "isboxset" : { "type": "boolean" },
  649. "totaldiscs": { "type": "integer" }
  650. }
  651. },
  652. "Audio.Details.Song": {
  653. "extends": "Audio.Details.Media",
  654. "properties": {
  655. "songid": { "$ref": "Library.Id", "required": true },
  656. "file": { "type": "string" },
  657. "albumartist": { "$ref": "Array.String" },
  658. "album": { "type": "string" },
  659. "track": { "type": "integer" },
  660. "duration": { "type": "integer" },
  661. "comment": { "type": "string" },
  662. "lyrics": { "type": "string" },
  663. "playcount": { "type": "integer" },
  664. "musicbrainztrackid": { "type": "string" },
  665. "musicbrainzartistid": { "$ref": "Array.String" },
  666. "albumid": { "$ref": "Library.Id" },
  667. "lastplayed": { "type": "string" },
  668. "disc": { "type": "integer" },
  669. "albumartistid": { "$ref": "Array.Integer" },
  670. "albumreleasetype": { "$ref": "Audio.Album.ReleaseType" },
  671. "mood": { "type": "string"},
  672. "contributors": { "$ref": "Audio.Contributors" },
  673. "displaycomposer": { "type": "string"},
  674. "displayconductor": { "type": "string"},
  675. "displayorchestra": { "type": "string"},
  676. "displaylyricist": { "type": "string"},
  677. "genreid": { "$ref": "Array.Integer"},
  678. "sourceid": { "$ref": "Array.Integer" },
  679. "disctitle": { "type": "string" },
  680. "bpm": { "type": "Integer" },
  681. "samplerate": { "type": "Integer" },
  682. "bitrate": { "type": "Integer"},
  683. "channels": { "type": "Integer"}
  684. }
  685. },
  686. "Audio.Property.Name": {
  687. "type": "string",
  688. "enum": [ "missingartistid", "librarylastupdated" ]
  689. },
  690. "Audio.Property.Value": {
  691. "type": "object",
  692. "properties": {
  693. "missingartistid": { "$ref": "Library.Id" },
  694. "librarylastupdated": { "type": "string" }
  695. }
  696. },
  697. "Video.Fields.Movie": {
  698. "extends": "Item.Fields.Base",
  699. "items": { "type": "string",
  700. "description": "Requesting the cast, ratings, showlink, streamdetails, uniqueid and/or tag field will result in increased response times",
  701. "enum": [ "title", "genre", "year", "rating", "director", "trailer",
  702. "tagline", "plot", "plotoutline", "originaltitle", "lastplayed",
  703. "playcount", "writer", "studio", "mpaa", "cast", "country",
  704. "imdbnumber", "runtime", "set", "showlink", "streamdetails",
  705. "top250", "votes", "fanart", "thumbnail", "file", "sorttitle",
  706. "resume", "setid", "dateadded", "tag", "art", "userrating",
  707. "ratings", "premiered", "uniqueid" ]
  708. }
  709. },
  710. "Video.Fields.MovieSet": {
  711. "extends": "Item.Fields.Base",
  712. "items": { "type": "string",
  713. "enum": [ "title", "playcount", "fanart", "thumbnail", "art", "plot" ]
  714. }
  715. },
  716. "Video.Fields.TVShow": {
  717. "extends": "Item.Fields.Base",
  718. "items": { "type": "string",
  719. "description": "Requesting the cast, ratings, uniqueid and/or tag field will result in increased response times",
  720. "enum": [ "title", "genre", "year", "rating", "plot",
  721. "studio", "mpaa", "cast", "playcount", "episode",
  722. "imdbnumber", "premiered", "votes", "lastplayed",
  723. "fanart", "thumbnail", "file", "originaltitle",
  724. "sorttitle", "episodeguide", "season", "watchedepisodes",
  725. "dateadded", "tag", "art", "userrating", "ratings",
  726. "runtime", "uniqueid" ]
  727. }
  728. },
  729. "Video.Fields.Season": {
  730. "extends": "Item.Fields.Base",
  731. "items": { "type": "string",
  732. "enum": [ "season", "showtitle", "playcount", "episode", "fanart", "thumbnail", "tvshowid",
  733. "watchedepisodes", "art", "userrating", "title" ]
  734. }
  735. },
  736. "Video.Fields.Episode": {
  737. "extends": "Item.Fields.Base",
  738. "items": { "type": "string",
  739. "description": "Requesting the cast, ratings, streamdetails, uniqueid and/or tag field will result in increased response times",
  740. "enum": [ "title", "plot", "votes", "rating", "writer",
  741. "firstaired", "playcount", "runtime", "director",
  742. "productioncode", "season", "episode", "originaltitle",
  743. "showtitle", "cast", "streamdetails", "lastplayed", "fanart",
  744. "thumbnail", "file", "resume", "tvshowid", "dateadded",
  745. "uniqueid", "art", "specialsortseason", "specialsortepisode", "userrating",
  746. "seasonid", "ratings" ]
  747. }
  748. },
  749. "Video.Fields.MusicVideo": {
  750. "extends": "Item.Fields.Base",
  751. "items": { "type": "string",
  752. "description": "Requesting the streamdetails and/or tag field will result in increased response times",
  753. "enum": [ "title", "playcount", "runtime", "director",
  754. "studio", "year", "plot", "album", "artist",
  755. "genre", "track", "streamdetails", "lastplayed",
  756. "fanart", "thumbnail", "file", "resume", "dateadded",
  757. "tag", "art", "rating", "userrating", "premiered" ]
  758. }
  759. },
  760. "Video.Cast": {
  761. "type": "array",
  762. "items": { "type": "object",
  763. "properties": {
  764. "name": { "type": "string", "required": true },
  765. "role": { "type": "string", "required": true },
  766. "order": { "type": "integer", "required": true },
  767. "thumbnail": { "type": "string" }
  768. },
  769. "additionalProperties": false
  770. }
  771. },
  772. "Video.Streams": {
  773. "type": "object",
  774. "properties": {
  775. "audio": { "type": "array", "minItems": 1,
  776. "items": { "type": "object",
  777. "properties": {
  778. "codec": { "type": "string" },
  779. "language": { "type": "string" },
  780. "channels": { "type": "integer" }
  781. },
  782. "additionalProperties": false
  783. }
  784. },
  785. "video": { "type": "array", "minItems": 1,
  786. "items": { "type": "object",
  787. "properties": {
  788. "codec": { "type": "string" },
  789. "aspect": { "type": "number" },
  790. "width": { "type": "integer" },
  791. "height": { "type": "integer" },
  792. "duration": { "type": "integer" }
  793. },
  794. "additionalProperties": false
  795. }
  796. },
  797. "subtitle": { "type": "array", "minItems": 1,
  798. "items": { "type": "object",
  799. "properties": {
  800. "language": { "type": "string" }
  801. },
  802. "additionalProperties": false
  803. }
  804. }
  805. },
  806. "additionalProperties": false
  807. },
  808. "Video.Resume": {
  809. "type": "object",
  810. "properties": {
  811. "position": { "type": "number", "minimum": 0.0 },
  812. "total": { "type": "number", "minimum": 0.0 }
  813. },
  814. "additionalProperties": false
  815. },
  816. "Video.Details.Base": {
  817. "extends": "Media.Details.Base",
  818. "properties": {
  819. "playcount": { "type": "integer" },
  820. "art": { "$ref": "Media.Artwork" }
  821. }
  822. },
  823. "Video.Details.Media": {
  824. "extends": "Video.Details.Base",
  825. "properties": {
  826. "title": { "type": "string" }
  827. }
  828. },
  829. "Video.Details.Item": {
  830. "extends": "Video.Details.Media",
  831. "properties": {
  832. "file": { "type": "string" },
  833. "plot": { "type": "string" },
  834. "lastplayed": { "type": "string" },
  835. "dateadded": { "type": "string" }
  836. }
  837. },
  838. "Video.Details.File": {
  839. "extends": "Video.Details.Item",
  840. "properties": {
  841. "runtime": { "type": "integer", "description": "Runtime in seconds" },
  842. "director": { "$ref": "Array.String" },
  843. "streamdetails": { "$ref": "Video.Streams" },
  844. "resume": { "$ref": "Video.Resume" }
  845. }
  846. },
  847. "Video.Details.Movie": {
  848. "extends": "Video.Details.File",
  849. "properties": {
  850. "movieid": { "$ref": "Library.Id", "required": true },
  851. "genre": { "$ref": "Array.String" },
  852. "year": { "type": "integer" },
  853. "rating": { "type": "number" },
  854. "trailer": { "type": "string" },
  855. "tagline": { "type": "string" },
  856. "plotoutline": { "type": "string" },
  857. "originaltitle": { "type": "string" },
  858. "sorttitle": { "type": "string" },
  859. "writer": { "$ref": "Array.String" },
  860. "studio": { "$ref": "Array.String" },
  861. "mpaa": { "type": "string" },
  862. "cast": { "$ref": "Video.Cast" },
  863. "country": { "$ref": "Array.String" },
  864. "imdbnumber": { "type": "string" },
  865. "set": { "type": "string" },
  866. "showlink": { "$ref": "Array.String" },
  867. "top250": { "type": "integer" },
  868. "votes": { "type": "string" },
  869. "setid": { "$ref": "Library.Id" },
  870. "tag": { "$ref": "Array.String" },
  871. "userrating": { "type": "integer" },
  872. "ratings": { "type": "Video.Ratings" },
  873. "premiered": { "type": "string" },
  874. "uniqueid": { "$ref": "Media.UniqueID" }
  875. }
  876. },
  877. "Video.Details.MovieSet": {
  878. "extends": "Video.Details.Media",
  879. "properties": {
  880. "setid": { "$ref": "Library.Id", "required": true },
  881. "plot": { "type": "string" }
  882. }
  883. },
  884. "Video.Details.MovieSet.Extended": {
  885. "extends": "Video.Details.MovieSet",
  886. "properties": {
  887. "limits": { "$ref": "List.LimitsReturned", "required": true },
  888. "movies": { "type": "array",
  889. "items": { "$ref": "Video.Details.Movie" }
  890. }
  891. }
  892. },
  893. "Video.Details.TVShow": {
  894. "extends": "Video.Details.Item",
  895. "properties": {
  896. "tvshowid": { "$ref": "Library.Id", "required": true },
  897. "genre": { "$ref": "Array.String" },
  898. "year": { "type": "integer" },
  899. "rating": { "type": "number" },
  900. "originaltitle": { "type": "string" },
  901. "sorttitle": { "type": "string" },
  902. "studio": { "$ref": "Array.String" },
  903. "mpaa": { "type": "string" },
  904. "cast": { "$ref": "Video.Cast" },
  905. "episode": { "type": "integer" },
  906. "watchedepisodes": { "type": "integer" },
  907. "imdbnumber": { "type": "string" },
  908. "premiered": { "type": "string" },
  909. "votes": { "type": "string" },
  910. "episodeguide": { "type": "string" },
  911. "season": { "type": "integer" },
  912. "tag": { "$ref": "Array.String" },
  913. "userrating": { "type": "integer" },
  914. "ratings": { "type": "Video.Ratings" },
  915. "runtime": { "type": "integer", "description": "Runtime in seconds" },
  916. "status": { "type": "string", "description": "Returns 'returning series', 'in production', 'planned', 'cancelled' or 'ended'" },
  917. "uniqueid": { "$ref": "Media.UniqueID" }
  918. }
  919. },
  920. "Video.Details.Season": {
  921. "extends": "Video.Details.Base",
  922. "properties": {
  923. "seasonid": { "$ref": "Library.Id", "required": true },
  924. "season": { "type": "integer", "required": true },
  925. "showtitle": { "type": "string" },
  926. "episode": { "type": "integer" },
  927. "watchedepisodes": { "type": "integer" },
  928. "tvshowid": { "$ref": "Library.Id" },
  929. "userrating": { "type": "integer" },
  930. "title": { "type": "string" }
  931. }
  932. },
  933. "Video.Details.Episode": {
  934. "extends": "Video.Details.File",
  935. "properties": {
  936. "episodeid": { "$ref": "Library.Id", "required": true },
  937. "votes": { "type": "string" },
  938. "rating": { "type": "number" },
  939. "writer": { "$ref": "Array.String" },
  940. "firstaired": { "type": "string" },
  941. "productioncode": { "type": "string" },
  942. "season": { "type": "integer" },
  943. "episode": { "type": "integer" },
  944. "uniqueid": { "$ref": "Media.UniqueID" },
  945. "originaltitle": { "type": "string" },
  946. "showtitle": { "type": "string" },
  947. "cast": { "$ref": "Video.Cast" },
  948. "tvshowid": { "$ref": "Library.Id" },
  949. "specialsortseason": { "type": "integer" },
  950. "specialsortepisode": { "type": "integer" },
  951. "userrating": { "type": "integer" },
  952. "seasonid": { "$ref": "Library.Id" },
  953. "ratings": { "type": "Video.Ratings" }
  954. }
  955. },
  956. "Video.Details.MusicVideo": {
  957. "extends": "Video.Details.File",
  958. "properties": {
  959. "musicvideoid": { "$ref": "Library.Id", "required": true },
  960. "studio": { "$ref": "Array.String" },
  961. "year": { "type": "integer" },
  962. "album": { "type": "string" },
  963. "artist": { "$ref": "Array.String" },
  964. "genre": { "$ref": "Array.String" },
  965. "track": { "type": "integer" },
  966. "tag": { "$ref": "Array.String" },
  967. "rating": { "type": "number" },
  968. "userrating": { "type": "integer" },
  969. "premiered": { "type": "string" }
  970. }
  971. },
  972. "PVR.Property.Name": {
  973. "type": "string",
  974. "enum": [ "available", "recording", "scanning" ]
  975. },
  976. "PVR.Property.Value": {
  977. "type": "object",
  978. "properties": {
  979. "available": { "type": "boolean" },
  980. "recording": { "type": "boolean" },
  981. "scanning": { "type": "boolean" }
  982. }
  983. },
  984. "PVR.ChannelGroup.Id": {
  985. "type": [
  986. { "$ref": "Library.Id", "required": true },
  987. { "type": "string", "enum": [ "alltv", "allradio" ], "required": true }
  988. ]
  989. },
  990. "PVR.Fields.Broadcast": {
  991. "extends": "Item.Fields.Base",
  992. "items": { "type": "string",
  993. "enum": [ "title", "plot", "plotoutline", "starttime",
  994. "endtime", "runtime", "progress", "progresspercentage",
  995. "genre", "episodename", "episodenum", "episodepart",
  996. "firstaired", "hastimer", "isactive", "parentalrating",
  997. "wasactive", "thumbnail", "rating", "originaltitle", "cast",
  998. "director", "writer", "year", "imdbnumber", "hastimerrule",
  999. "hasrecording", "recording", "isseries", "isplayable" ]
  1000. }
  1001. },
  1002. "PVR.Details.Broadcast": {
  1003. "extends": "Item.Details.Base",
  1004. "properties": {
  1005. "broadcastid": { "$ref": "Library.Id", "required": true },
  1006. "title": { "type": "string" },
  1007. "plot": { "type": "string" },
  1008. "plotoutline": { "type": "string" },
  1009. "starttime": { "type": "string" },
  1010. "endtime": { "type": "string" },
  1011. "runtime": { "type": "integer" },
  1012. "progress": { "type": "integer" },
  1013. "progresspercentage": { "type": "number" },
  1014. "genre": { "type": "string" },
  1015. "episodename": { "type": "string" },
  1016. "episodenum": { "type": "integer" },
  1017. "episodepart": { "type": "integer" },
  1018. "firstaired": { "type": "string" },
  1019. "hastimer": { "type": "boolean" },
  1020. "isactive": { "type": "boolean" },
  1021. "parentalrating": { "type": "integer" },
  1022. "wasactive": { "type": "boolean" },
  1023. "thumbnail": { "type": "string" },
  1024. "rating": { "type": "integer" },
  1025. "originaltitle": { "type": "string" },
  1026. "cast": { "type": "string" },
  1027. "director": { "type": "string" },
  1028. "writer": { "type": "string" },
  1029. "year": { "type": "integer" },
  1030. "imdbnumber": { "type": "integer" },
  1031. "hastimerrule": { "type": "boolean" },
  1032. "hasrecording": { "type": "boolean" },
  1033. "recording": { "type": "string" },
  1034. "isseries": { "type": "boolean" },
  1035. "isplayable": { "type": "boolean" }
  1036. }
  1037. },
  1038. "PVR.Fields.Channel": {
  1039. "extends": "Item.Fields.Base",
  1040. "items": { "type": "string",
  1041. "enum": [ "thumbnail", "channeltype", "hidden", "locked", "channel", "lastplayed",
  1042. "broadcastnow", "broadcastnext", "uniqueid", "icon", "channelnumber",
  1043. "subchannelnumber", "isrecording", "hasarchive" ]
  1044. }
  1045. },
  1046. "PVR.Details.Channel": {
  1047. "extends": "Item.Details.Base",
  1048. "properties": {
  1049. "channelid": { "$ref": "Library.Id", "required": true },
  1050. "channel": { "type": "string" },
  1051. "channeltype": { "$ref": "PVR.Channel.Type" },
  1052. "hidden": { "type": "boolean" },
  1053. "locked": { "type": "boolean" },
  1054. "thumbnail": { "type": "string" },
  1055. "lastplayed": { "type": "string" },
  1056. "broadcastnow": { "$ref": "PVR.Details.Broadcast" },
  1057. "broadcastnext": { "$ref": "PVR.Details.Broadcast" },
  1058. "uniqueid": { "type": "integer", "required": true },
  1059. "icon": { "type": "string" },
  1060. "channelnumber": { "type": "integer" },
  1061. "subchannelnumber": { "type": "integer" },
  1062. "isrecording": { "type": "boolean" },
  1063. "hasarchive": { "type": "boolean" }
  1064. }
  1065. },
  1066. "PVR.Details.ChannelGroup": {
  1067. "extends": "Item.Details.Base",
  1068. "properties": {
  1069. "channelgroupid": { "$ref": "Library.Id", "required": true },
  1070. "channeltype": { "$ref": "PVR.Channel.Type", "required": true }
  1071. }
  1072. },
  1073. "PVR.Details.ChannelGroup.Extended": {
  1074. "extends": "PVR.Details.ChannelGroup",
  1075. "properties": {
  1076. "limits": { "$ref": "List.LimitsReturned", "required": true },
  1077. "channels": { "type": "array",
  1078. "items": { "$ref": "PVR.Details.Channel" }
  1079. }
  1080. }
  1081. },
  1082. "PVR.TimerState": {
  1083. "type": "string",
  1084. "enum": [ "unknown", "new", "scheduled", "recording", "completed",
  1085. "aborted", "cancelled", "conflict_ok", "conflict_notok",
  1086. "error", "disabled" ]
  1087. },
  1088. "PVR.Fields.Timer": {
  1089. "extends": "Item.Fields.Base",
  1090. "items": { "type": "string",
  1091. "enum": [ "title", "summary", "channelid", "isradio", "istimerrule", "ismanual",
  1092. "starttime", "endtime", "runtime", "lifetime", "firstday",
  1093. "weekdays", "priority", "startmargin", "endmargin", "state",
  1094. "file", "directory", "preventduplicateepisodes", "startanytime",
  1095. "endanytime", "epgsearchstring", "fulltextepgsearch", "recordinggroup",
  1096. "maxrecordings", "epguid", "isreadonly" ]
  1097. }
  1098. },
  1099. "PVR.Details.Timer": {
  1100. "extends": "Item.Details.Base",
  1101. "properties": {
  1102. "timerid": { "$ref": "Library.Id", "required": true },
  1103. "title": { "type": "string" },
  1104. "summary": { "type": "string" },
  1105. "channelid": { "$ref": "Library.Id" },
  1106. "isradio": { "type": "boolean" },
  1107. "istimerrule": { "type": "boolean" },
  1108. "ismanual": { "type": "boolean" },
  1109. "starttime": { "type": "string" },
  1110. "endtime": { "type": "string" },
  1111. "runtime": { "type": "integer" },
  1112. "lifetime": { "type": "integer" },
  1113. "firstday": { "type": "string" },
  1114. "weekdays": { "type": "array",
  1115. "items": { "$ref": "Global.Weekday" },
  1116. "uniqueItems": true
  1117. },
  1118. "priority": { "type": "integer" },
  1119. "startmargin": { "type": "integer" },
  1120. "endmargin": { "type": "integer" },
  1121. "state": { "$ref": "PVR.TimerState" },
  1122. "file": { "type": "string" },
  1123. "directory": { "type": "string" },
  1124. "preventduplicateepisodes": { "type": "integer" },
  1125. "startanytime": { "type": "boolean" },
  1126. "endanytime": { "type": "boolean" },
  1127. "epgsearchstring": { "type": "string" },
  1128. "fulltextepgsearch": { "type": "boolean" },
  1129. "recordinggroup": { "type": "integer" },
  1130. "maxrecordings": { "type": "integer" },
  1131. "epguid": { "type": "integer" },
  1132. "isreadonly": { "type": "boolean" }
  1133. }
  1134. },
  1135. "PVR.Fields.Recording": {
  1136. "extends": "Item.Fields.Base",
  1137. "items": { "type": "string",
  1138. "enum": [ "title", "plot", "plotoutline", "genre", "playcount",
  1139. "resume", "channel", "starttime","endtime", "runtime",
  1140. "lifetime", "icon", "art", "streamurl", "file",
  1141. "directory", "radio", "isdeleted", "epgeventid", "channeluid",
  1142. "season", "episode", "showtitle" ]
  1143. }
  1144. },
  1145. "PVR.Details.Recording": {
  1146. "extends": "Item.Details.Base",
  1147. "properties": {
  1148. "recordingid": { "$ref": "Library.Id", "required": true },
  1149. "title": { "type": "string" },
  1150. "plot": { "type": "string" },
  1151. "plotoutline": { "type": "string" },
  1152. "genre": { "type": "string" },
  1153. "playcount": { "type": "integer" },
  1154. "resume": { "$ref": "Video.Resume" },
  1155. "channel": { "type": "string" },
  1156. "starttime": { "type": "string" },
  1157. "endtime": { "type": "string" },
  1158. "runtime": { "type": "integer" },
  1159. "lifetime": { "type": "integer" },
  1160. "icon": { "type": "string" },
  1161. "art": { "$ref": "Media.Artwork" },
  1162. "streamurl": { "type": "string" },
  1163. "file": { "type": "string" },
  1164. "directory": { "type": "string" },
  1165. "radio": { "type": "boolean" },
  1166. "isdeleted": { "type": "boolean" },
  1167. "epgeventid": { "type": "integer" },
  1168. "channeluid": { "type": "integer" },
  1169. "season": { "type": "integer" },
  1170. "episode": { "type": "integer" },
  1171. "showtitle": { "type": "string" }
  1172. }
  1173. },
  1174. "Textures.Details.Size": {
  1175. "type": "object",
  1176. "properties": {
  1177. "size": { "type": "integer", "description": "Size of the texture (1 == largest)" },
  1178. "width": { "type": "integer", "description": "Width of texture" },
  1179. "height": { "type": "integer", "description": "Height of texture" },
  1180. "usecount": { "type": "integer", "description": "Number of uses" },
  1181. "lastused": { "type": "string", "description": "Date of last use" }
  1182. }
  1183. },
  1184. "Textures.Fields.Texture": {
  1185. "extends": "Item.Fields.Base",
  1186. "items": { "type": "string",
  1187. "enum": [ "url", "cachedurl", "lasthashcheck", "imagehash", "sizes" ]
  1188. }
  1189. },
  1190. "Textures.Details.Texture": {
  1191. "type": "object",
  1192. "properties": {
  1193. "textureid": { "$ref": "Library.Id", "required": "true" },
  1194. "url": { "type": "string", "description": "Original source URL" },
  1195. "cachedurl": { "type": "string", "description": "Cached URL on disk" },
  1196. "lasthashcheck": { "type": "string", "description": "Last time source was checked for changes" },
  1197. "imagehash": { "type": "string", "description": "Hash of image" },
  1198. "sizes": { "type": "array", "items": { "$ref": "Textures.Details.Size" } }
  1199. }
  1200. },
  1201. "Profiles.Password": {
  1202. "type": "object",
  1203. "properties": {
  1204. "value": { "type": "string", "required": true, "description": "Password" },
  1205. "encryption": { "type": "string", "description": "Password Encryption", "default": "md5", "enum": [ "none", "md5" ] }
  1206. }
  1207. },
  1208. "Profiles.Fields.Profile": {
  1209. "extends": "Item.Fields.Base",
  1210. "items": { "type": "string", "enum": [ "thumbnail", "lockmode" ] }
  1211. },
  1212. "Profiles.Details.Profile": {
  1213. "extends": "Item.Details.Base",
  1214. "properties": {
  1215. "thumbnail": { "type": "string" },
  1216. "lockmode": { "type": "integer" }
  1217. }
  1218. },
  1219. "List.Filter.Rule": {
  1220. "type": "object",
  1221. "properties": {
  1222. "operator": { "$ref": "List.Filter.Operators", "required": true },
  1223. "value": {
  1224. "type": [
  1225. { "type": "string", "required": true },
  1226. { "type": "array", "items": { "type": "string" }, "required": true }
  1227. ], "required": true
  1228. }
  1229. }
  1230. },
  1231. "List.Filter.Rule.Movies": {
  1232. "extends": "List.Filter.Rule",
  1233. "properties": {
  1234. "field": { "$ref": "List.Filter.Fields.Movies", "required": true }
  1235. }
  1236. },
  1237. "List.Filter.Rule.TVShows": {
  1238. "extends": "List.Filter.Rule",
  1239. "properties": {
  1240. "field": { "$ref": "List.Filter.Fields.TVShows", "required": true }
  1241. }
  1242. },
  1243. "List.Filter.Rule.Episodes": {
  1244. "extends": "List.Filter.Rule",
  1245. "properties": {
  1246. "field": { "$ref": "List.Filter.Fields.Episodes", "required": true }
  1247. }
  1248. },
  1249. "List.Filter.Rule.MusicVideos": {
  1250. "extends": "List.Filter.Rule",
  1251. "properties": {
  1252. "field": { "$ref": "List.Filter.Fields.MusicVideos", "required": true }
  1253. }
  1254. },
  1255. "List.Filter.Rule.Artists": {
  1256. "extends": "List.Filter.Rule",
  1257. "properties": {
  1258. "field": { "$ref": "List.Filter.Fields.Artists", "required": true }
  1259. }
  1260. },
  1261. "List.Filter.Rule.Albums": {
  1262. "extends": "List.Filter.Rule",
  1263. "properties": {
  1264. "field": { "$ref": "List.Filter.Fields.Albums", "required": true }
  1265. }
  1266. },
  1267. "List.Filter.Rule.Songs": {
  1268. "extends": "List.Filter.Rule",
  1269. "properties": {
  1270. "field": { "$ref": "List.Filter.Fields.Songs", "required": true }
  1271. }
  1272. },
  1273. "List.Filter.Rule.Textures": {
  1274. "extends": "List.Filter.Rule",
  1275. "properties": {
  1276. "field": { "$ref": "List.Filter.Fields.Textures", "required": true }
  1277. }
  1278. },
  1279. "List.Filter.Movies": {
  1280. "type": [
  1281. { "type": "object",
  1282. "properties": {
  1283. "and": { "type": "array",
  1284. "items": { "$ref": "List.Filter.Movies" },
  1285. "minItems": 1, "required": true
  1286. }
  1287. }
  1288. },
  1289. { "type": "object",
  1290. "properties": {
  1291. "or": { "type": "array",
  1292. "items": { "$ref": "List.Filter.Movies" },
  1293. "minItems": 1, "required": true
  1294. }
  1295. }
  1296. },
  1297. { "$ref": "List.Filter.Rule.Movies" }
  1298. ]
  1299. },
  1300. "List.Filter.TVShows": {
  1301. "type": [
  1302. { "type": "object",
  1303. "properties": {
  1304. "and": { "type": "array",
  1305. "items": { "$ref": "List.Filter.TVShows" },
  1306. "minItems": 1, "required": true
  1307. }
  1308. }
  1309. },
  1310. { "type": "object",
  1311. "properties": {
  1312. "or": { "type": "array",
  1313. "items": { "$ref": "List.Filter.TVShows" },
  1314. "minItems": 1, "required": true
  1315. }
  1316. }
  1317. },
  1318. { "$ref": "List.Filter.Rule.TVShows" }
  1319. ]
  1320. },
  1321. "List.Filter.Episodes": {
  1322. "type": [
  1323. { "type": "object",
  1324. "properties": {
  1325. "and": { "type": "array",
  1326. "items": { "$ref": "List.Filter.Episodes" },
  1327. "minItems": 1, "required": true
  1328. }
  1329. }
  1330. },
  1331. { "type": "object",
  1332. "properties": {
  1333. "or": { "type": "array",
  1334. "items": { "$ref": "List.Filter.Episodes" },
  1335. "minItems": 1, "required": true
  1336. }
  1337. }
  1338. },
  1339. { "$ref": "List.Filter.Rule.Episodes" }
  1340. ]
  1341. },
  1342. "List.Filter.MusicVideos": {
  1343. "type": [
  1344. { "type": "object",
  1345. "properties": {
  1346. "and": { "type": "array",
  1347. "items": { "$ref": "List.Filter.MusicVideos" },
  1348. "minItems": 1, "required": true
  1349. }
  1350. }
  1351. },
  1352. { "type": "object",
  1353. "properties": {
  1354. "or": { "type": "array",
  1355. "items": { "$ref": "List.Filter.MusicVideos" },
  1356. "minItems": 1, "required": true
  1357. }
  1358. }
  1359. },
  1360. { "$ref": "List.Filter.Rule.MusicVideos" }
  1361. ]
  1362. },
  1363. "List.Filter.Artists": {
  1364. "type": [
  1365. { "type": "object",
  1366. "properties": {
  1367. "and": { "type": "array",
  1368. "items": { "$ref": "List.Filter.Artists" },
  1369. "minItems": 1, "required": true
  1370. }
  1371. }
  1372. },
  1373. { "type": "object",
  1374. "properties": {
  1375. "or": { "type": "array",
  1376. "items": { "$ref": "List.Filter.Artists" },
  1377. "minItems": 1, "required": true
  1378. }
  1379. }
  1380. },
  1381. { "$ref": "List.Filter.Rule.Artists" }
  1382. ]
  1383. },
  1384. "List.Filter.Albums": {
  1385. "type": [
  1386. { "type": "object",
  1387. "properties": {
  1388. "and": { "type": "array",
  1389. "items": { "$ref": "List.Filter.Albums" },
  1390. "minItems": 1, "required": true
  1391. }
  1392. }
  1393. },
  1394. { "type": "object",
  1395. "properties": {
  1396. "or": { "type": "array",
  1397. "items": { "$ref": "List.Filter.Albums" },
  1398. "minItems": 1, "required": true
  1399. }
  1400. }
  1401. },
  1402. { "$ref": "List.Filter.Rule.Albums" }
  1403. ]
  1404. },
  1405. "List.Filter.Songs": {
  1406. "type": [
  1407. { "type": "object",
  1408. "properties": {
  1409. "and": { "type": "array",
  1410. "items": { "$ref": "List.Filter.Songs" },
  1411. "minItems": 1, "required": true
  1412. }
  1413. }
  1414. },
  1415. { "type": "object",
  1416. "properties": {
  1417. "or": { "type": "array",
  1418. "items": { "$ref": "List.Filter.Songs" },
  1419. "minItems": 1, "required": true
  1420. }
  1421. }
  1422. },
  1423. { "$ref": "List.Filter.Rule.Songs" }
  1424. ]
  1425. },
  1426. "List.Filter.Textures": {
  1427. "type": [
  1428. { "type": "object",
  1429. "properties": {
  1430. "and": { "type": "array",
  1431. "items": { "$ref": "List.Filter.Textures" },
  1432. "minItems": 1, "required": true
  1433. }
  1434. }
  1435. },
  1436. { "type": "object",
  1437. "properties": {
  1438. "or": { "type": "array",
  1439. "items": { "$ref": "List.Filter.Textures" },
  1440. "minItems": 1, "required": true
  1441. }
  1442. }
  1443. },
  1444. { "$ref": "List.Filter.Rule.Textures" }
  1445. ]
  1446. },
  1447. "List.Item.Base": {
  1448. "extends": [ "Video.Details.File", "Audio.Details.Media" ],
  1449. "properties": {
  1450. "id": { "$ref": "Library.Id" },
  1451. "type": { "type": "string", "enum": [ "unknown", "movie", "episode", "musicvideo", "song", "picture", "channel" ] },
  1452. "albumartist": { "$ref": "Array.String" },
  1453. "album": { "type": "string" },
  1454. "track": { "type": "integer" },
  1455. "duration": { "type": "integer" },
  1456. "comment": { "type": "string" },
  1457. "lyrics": { "type": "string" },
  1458. "musicbrainztrackid": { "type": "string" },
  1459. "musicbrainzartistid": { "$ref": "Array.String" },
  1460. "trailer": { "type": "string" },
  1461. "tagline": { "type": "string" },
  1462. "plotoutline": { "type": "string" },
  1463. "originaltitle": { "type": "string" },
  1464. "writer": { "$ref": "Array.String" },
  1465. "studio": { "$ref": "Array.String" },
  1466. "mpaa": { "type": "string" },
  1467. "cast": { "$ref": "Video.Cast" },
  1468. "country": { "$ref": "Array.String" },
  1469. "imdbnumber": { "type": "string" },
  1470. "premiered": { "type": "string" },
  1471. "productioncode": { "type": "string" },
  1472. "set": { "type": "string" },
  1473. "showlink": { "$ref": "Array.String" },
  1474. "top250": { "type": "integer" },
  1475. "votes": { "type": "string" },
  1476. "firstaired": { "type": "string" },
  1477. "season": { "type": "integer" },
  1478. "episode": { "type": "integer" },
  1479. "showtitle": { "type": "string" },
  1480. "albumid": { "$ref": "Library.Id" },
  1481. "setid": { "$ref": "Library.Id" },
  1482. "tvshowid": { "$ref": "Library.Id" },
  1483. "watchedepisodes": { "type": "integer" },
  1484. "disc": { "type": "integer" },
  1485. "tag": { "$ref": "Array.String" },
  1486. "albumartistid": { "$ref": "Array.Integer" },
  1487. "uniqueid": { "$ref": "Media.UniqueID" },
  1488. "episodeguide": { "type": "string" },
  1489. "sorttitle": { "type": "string" },
  1490. "description": { "type": "string" },
  1491. "theme": { "$ref": "Array.String" },
  1492. "mood": { "$ref": "Array.String" },
  1493. "style": { "$ref": "Array.String" },
  1494. "albumlabel": { "type": "string" },
  1495. "specialsortseason": { "type": "integer" },
  1496. "specialsortepisode": { "type": "integer" },
  1497. "compilation": { "type": "boolean" },
  1498. "releasetype": { "$ref": "Audio.Album.ReleaseType" },
  1499. "albumreleasetype": { "$ref": "Audio.Album.ReleaseType" },
  1500. "contributors": { "$ref": "Audio.Contributors" },
  1501. "displaycomposer": { "type": "string"},
  1502. "displayconductor": { "type": "string"},
  1503. "displayorchestra": { "type": "string"},
  1504. "displaylyricist": { "type": "string"},
  1505. "mediapath": { "type": "string", "description": "Media source path that identifies the item"},
  1506. "dynpath": { "type": "string", "description": "An experimental property for debug purposes, often same as mediapath but when different gives the actual file playing that should also be in file property"},
  1507. "isboxset": { "type": "boolean" },
  1508. "totaldiscs": { "type": "integer" },
  1509. "disctitle": { "type": "string" },
  1510. "releasedate": { "type": "string" },
  1511. "originaldate": { "type": "string" },
  1512. "bpm": { "type": "integer" },
  1513. "bitrate": { "type": "integer" },
  1514. "samplerate": { "type": "integer" },
  1515. "channels": { "type": "integer"}
  1516. }
  1517. },
  1518. "List.Fields.All": {
  1519. "extends": "Item.Fields.Base",
  1520. "items": { "type": "string",
  1521. "enum": [ "title", "artist", "albumartist", "genre", "year", "rating",
  1522. "album", "track", "duration", "comment", "lyrics", "musicbrainztrackid",
  1523. "musicbrainzartistid", "musicbrainzalbumid", "musicbrainzalbumartistid",
  1524. "playcount", "fanart", "director", "trailer", "tagline", "plot",
  1525. "plotoutline", "originaltitle", "lastplayed", "writer", "studio",
  1526. "mpaa", "cast", "country", "imdbnumber", "premiered", "productioncode",
  1527. "runtime", "set", "showlink", "streamdetails", "top250", "votes",
  1528. "firstaired", "season", "episode", "showtitle", "thumbnail", "file",
  1529. "resume", "artistid", "albumid", "tvshowid", "setid", "watchedepisodes",
  1530. "disc", "tag", "art", "genreid", "displayartist", "albumartistid",
  1531. "description", "theme", "mood", "style", "albumlabel", "sorttitle",
  1532. "episodeguide", "uniqueid", "dateadded", "channel", "channeltype", "hidden",
  1533. "locked", "channelnumber", "starttime", "endtime", "specialsortseason",
  1534. "specialsortepisode", "compilation", "releasetype", "albumreleasetype",
  1535. "contributors", "displaycomposer", "displayconductor", "displayorchestra", "displaylyricist",
  1536. "userrating", "votes", "sortartist", "musicbrainzreleasegroupid", "mediapath", "dynpath",
  1537. "isboxset", "totaldiscs", "disctitle", "releasedate", "originaldate", "bpm",
  1538. "bitrate", "samplerate", "channels"]
  1539. }
  1540. },
  1541. "List.Item.All": {
  1542. "extends": "List.Item.Base",
  1543. "properties": {
  1544. "channel": { "type": "string" },
  1545. "channeltype": { "$ref": "PVR.Channel.Type" },
  1546. "hidden": { "type": "boolean" },
  1547. "locked": { "type": "boolean" },
  1548. "channelnumber": { "type": "integer" },
  1549. "starttime": { "type": "string" },
  1550. "endtime": { "type": "string" }
  1551. }
  1552. },
  1553. "List.Fields.Files": {
  1554. "extends": "Item.Fields.Base",
  1555. "items": { "type": "string",
  1556. "enum": [ "title", "artist", "albumartist", "genre", "year", "rating",
  1557. "album", "track", "duration", "comment", "lyrics", "musicbrainztrackid",
  1558. "musicbrainzartistid", "musicbrainzalbumid", "musicbrainzalbumartistid",
  1559. "playcount", "fanart", "director", "trailer", "tagline", "plot",
  1560. "plotoutline", "originaltitle", "lastplayed", "writer", "studio",
  1561. "mpaa", "cast", "country", "imdbnumber", "premiered", "productioncode",
  1562. "runtime", "set", "showlink", "streamdetails", "top250", "votes",
  1563. "firstaired", "season", "episode", "showtitle", "thumbnail", "file",
  1564. "resume", "artistid", "albumid", "tvshowid", "setid", "watchedepisodes",
  1565. "disc", "tag", "art", "genreid", "displayartist", "albumartistid",
  1566. "description", "theme", "mood", "style", "albumlabel", "sorttitle",
  1567. "episodeguide", "uniqueid", "dateadded", "size", "lastmodified", "mimetype",
  1568. "specialsortseason", "specialsortepisode", "sortartist", "musicbrainzreleasegroupid",
  1569. "isboxset", "totaldiscs", "disctitle", "releasedate", "originaldate", "bpm",
  1570. "bitrate", "samplerate", "channels"]
  1571. }
  1572. },
  1573. "List.Item.File": {
  1574. "extends": "List.Item.Base",
  1575. "properties": {
  1576. "file": { "type": "string", "required": true },
  1577. "filetype": { "type": "string", "enum": [ "file", "directory" ], "required": true },
  1578. "size": { "type": "integer", "description": "Size of the file in bytes" },
  1579. "lastmodified": { "type": "string" },
  1580. "mimetype": { "type": "string" }
  1581. }
  1582. },
  1583. "List.Items.Sources": {
  1584. "type": "array",
  1585. "items": {
  1586. "extends": "Item.Details.Base",
  1587. "properties": {
  1588. "file": { "type": "string", "required": true }
  1589. }
  1590. }
  1591. },
  1592. "Addon.Content": {
  1593. "type": "string",
  1594. "enum": [ "unknown", "video", "audio", "image", "executable" ],
  1595. "default": "unknown"
  1596. },
  1597. "Addon.Fields": {
  1598. "extends": "Item.Fields.Base",
  1599. "items": { "type": "string",
  1600. "enum": [ "name", "version", "summary", "description", "path", "author", "thumbnail", "disclaimer", "fanart",
  1601. "dependencies", "broken", "extrainfo", "rating", "enabled", "installed" ]
  1602. }
  1603. },
  1604. "Addon.Details": {
  1605. "extends": "Item.Details.Base",
  1606. "properties": {
  1607. "addonid": { "type": "string", "required": true },
  1608. "type": { "$ref": "Addon.Types", "required": true },
  1609. "name": { "type": "string" },
  1610. "version": { "type": "string" },
  1611. "summary": { "type": "string" },
  1612. "description": { "type": "string" },
  1613. "path": { "type": "string" },
  1614. "author": { "type": "string" },
  1615. "thumbnail": { "type": "string" },
  1616. "disclaimer": { "type": "string" },
  1617. "fanart": { "type": "string" },
  1618. "dependencies": { "type": "array",
  1619. "items": { "type": "object",
  1620. "properties": {
  1621. "addonid": { "type": "string", "required": true },
  1622. "version": { "type": "string", "required": true },
  1623. "optional": { "type": "boolean", "required": true }
  1624. }
  1625. }
  1626. },
  1627. "broken": { "type": [ "boolean", "string" ] },
  1628. "extrainfo": { "type": "array",
  1629. "items": { "type": "object",
  1630. "properties": {
  1631. "key": { "type": "string", "required": true },
  1632. "value": { "type": "string", "required": true }
  1633. }
  1634. }
  1635. },
  1636. "rating": { "type": "integer" },
  1637. "enabled": { "type": "boolean" },
  1638. "installed": { "type": "boolean" }
  1639. }
  1640. },
  1641. "GUI.Stereoscopy.Mode": {
  1642. "type": "object",
  1643. "properties": {
  1644. "mode": { "type": "string", "required": true, "enum": [ "off", "split_vertical", "split_horizontal", "row_interleaved", "hardware_based", "anaglyph_cyan_red", "anaglyph_green_magenta", "anaglyph_yellow_blue", "monoscopic" ] },
  1645. "label": { "type": "string", "required": true }
  1646. }
  1647. },
  1648. "GUI.Property.Name": {
  1649. "type": "string",
  1650. "enum": [ "currentwindow", "currentcontrol", "skin", "fullscreen", "stereoscopicmode" ]
  1651. },
  1652. "GUI.Property.Value": {
  1653. "type": "object",
  1654. "properties": {
  1655. "currentwindow": { "type": "object",
  1656. "properties": {
  1657. "id": { "type": "integer", "required": true },
  1658. "label": { "type": "string", "required": true }
  1659. }
  1660. },
  1661. "currentcontrol": { "type": "object",
  1662. "properties": {
  1663. "label": { "type": "string", "required": true }
  1664. }
  1665. },
  1666. "skin": { "type": "object",
  1667. "properties": {
  1668. "id": { "type": "string", "required": true, "minLength": 1 },
  1669. "name": { "type": "string" }
  1670. }
  1671. },
  1672. "fullscreen": { "type": "boolean" },
  1673. "stereoscopicmode": { "$ref": "GUI.Stereoscopy.Mode" }
  1674. }
  1675. },
  1676. "System.Property.Name": {
  1677. "type": "string",
  1678. "enum": [ "canshutdown", "cansuspend", "canhibernate", "canreboot" ]
  1679. },
  1680. "System.Property.Value": {
  1681. "type": "object",
  1682. "properties": {
  1683. "canshutdown": { "type": "boolean" },
  1684. "cansuspend": { "type": "boolean" },
  1685. "canhibernate": { "type": "boolean" },
  1686. "canreboot": { "type": "boolean" }
  1687. }
  1688. },
  1689. "Application.Property.Name": {
  1690. "type": "string",
  1691. "enum": [ "volume", "muted", "name", "version", "volume", "sorttokens", "language" ]
  1692. },
  1693. "Application.Property.Value": {
  1694. "type": "object",
  1695. "properties": {
  1696. "volume": { "type": "integer", "minimum": 0, "maximum": 100 },
  1697. "muted": { "type": "boolean" },
  1698. "name": { "type": "string", "minLength": 1 },
  1699. "version": { "type": "object",
  1700. "properties": {
  1701. "major": { "type": "integer", "minimum": 0, "required": true },
  1702. "minor": { "type": "integer", "minimum": 0, "required": true },
  1703. "revision": { "type": [ "string", "integer" ] },
  1704. "tag": { "type": "string", "enum": [ "prealpha", "alpha", "beta", "releasecandidate", "stable" ], "required": true },
  1705. "tagversion": { "type": "string" }
  1706. }
  1707. },
  1708. "sorttokens": { "$ref": "Array.String", "description": "Articles ignored during sorting when ignorearticle is enabled." },
  1709. "language": { "type": "string", "minLength": 1, "description": "Current language code and region e.g. en_GB" }
  1710. }
  1711. },
  1712. "Favourite.Fields.Favourite": {
  1713. "extends": "Item.Fields.Base",
  1714. "items": { "type": "string",
  1715. "enum": [ "window", "windowparameter", "thumbnail", "path" ]
  1716. }
  1717. },
  1718. "Favourite.Type": {
  1719. "type": "string",
  1720. "enum": [ "media", "window", "script", "androidapp", "unknown" ]
  1721. },
  1722. "Favourite.Details.Favourite": {
  1723. "type": "object",
  1724. "properties": {
  1725. "title": { "type": "string", "required": true },
  1726. "type": { "$ref": "Favourite.Type", "required": true },
  1727. "path": { "type": "string" },
  1728. "window": { "type": "string" },
  1729. "windowparameter": { "type": "string" },
  1730. "thumbnail": { "type": "string" }
  1731. },
  1732. "additionalProperties": false
  1733. },
  1734. "Setting.Type": {
  1735. "type": "string",
  1736. "enum": [
  1737. "boolean", "integer", "number", "string", "action", "list",
  1738. "path", "addon", "date", "time"
  1739. ]
  1740. },
  1741. "Setting.Level": {
  1742. "type": "string",
  1743. "enum": [ "basic", "standard", "advanced", "expert" ]
  1744. },
  1745. "Setting.Value": {
  1746. "type": [
  1747. { "type": "boolean", "required": true },
  1748. { "type": "integer", "required": true },
  1749. { "type": "number", "required": true },
  1750. { "type": "string", "required": true }
  1751. ]
  1752. },
  1753. "Setting.Value.List": {
  1754. "type": "array",
  1755. "items": { "$ref": "Setting.Value" }
  1756. },
  1757. "Setting.Value.Extended": {
  1758. "type": [
  1759. { "type": "boolean", "required": true },
  1760. { "type": "integer", "required": true },
  1761. { "type": "number", "required": true },
  1762. { "type": "string", "required": true },
  1763. { "$ref": "Setting.Value.List", "required": true }
  1764. ]
  1765. },
  1766. "Setting.Details.ControlBase": {
  1767. "type": "object",
  1768. "properties": {
  1769. "type": { "type": "string", "required": true },
  1770. "format": { "type": "string", "required": true },
  1771. "delayed": { "type": "boolean", "required": true }
  1772. }
  1773. },
  1774. "Setting.Details.ControlCheckmark": {
  1775. "extends": "Setting.Details.ControlBase",
  1776. "properties": {
  1777. "type": { "type": "string", "required": true, "enum": [ "toggle" ] },
  1778. "format": { "type": "string", "required": true, "enum": [ "boolean" ] }
  1779. }
  1780. },
  1781. "Setting.Details.ControlSpinner": {
  1782. "extends": "Setting.Details.ControlBase",
  1783. "properties": {
  1784. "type": { "type": "string", "required": true, "enum": [ "spinner" ] },
  1785. "formatlabel": { "type": "string" },
  1786. "minimumlabel": { "type": "string" }
  1787. }
  1788. },
  1789. "Setting.Details.ControlHeading": {
  1790. "extends": "Setting.Details.ControlBase",
  1791. "properties": {
  1792. "heading": { "type": "string" }
  1793. }
  1794. },
  1795. "Setting.Details.ControlEdit": {
  1796. "extends": "Setting.Details.ControlHeading",
  1797. "properties": {
  1798. "type": { "type": "string", "required": true, "enum": [ "edit" ] },
  1799. "hidden": { "type": "boolean", "required": true },
  1800. "verifynewvalue": { "type": "boolean", "required": true }
  1801. }
  1802. },
  1803. "Setting.Details.ControlButton": {
  1804. "extends": "Setting.Details.ControlHeading",
  1805. "properties": {
  1806. "type": { "type": "string", "required": true, "enum": [ "button" ] }
  1807. }
  1808. },
  1809. "Setting.Details.ControlList": {
  1810. "extends": "Setting.Details.ControlHeading",
  1811. "properties": {
  1812. "type": { "type": "string", "required": true, "enum": [ "list" ] },
  1813. "multiselect": { "type": "boolean", "required": true }
  1814. }
  1815. },
  1816. "Setting.Details.ControlSlider": {
  1817. "extends": "Setting.Details.ControlHeading",
  1818. "properties": {
  1819. "type": { "type": "string", "required": true, "enum": [ "slider" ] },
  1820. "formatlabel": { "type": "string", "required": true },
  1821. "popup": { "type": "boolean", "required": true }
  1822. }
  1823. },
  1824. "Setting.Details.ControlRange": {
  1825. "extends": "Setting.Details.ControlBase",
  1826. "properties": {
  1827. "type": { "type": "string", "required": true, "enum": [ "range" ] },
  1828. "formatlabel": { "type": "string", "required": true },
  1829. "formatvalue": { "type": "string", "required": true }
  1830. }
  1831. },
  1832. "Setting.Details.ControlLabel": {
  1833. "extends": "Setting.Details.ControlBase",
  1834. "properties": {
  1835. "type": { "type": "string", "required": true, "enum": [ "label" ] },
  1836. "format": { "type": "string", "required": true, "enum": [ "string" ] }
  1837. }
  1838. },
  1839. "Setting.Details.Control": {
  1840. "type": [
  1841. { "$ref": "Setting.Details.ControlCheckmark", "required": true },
  1842. { "$ref": "Setting.Details.ControlSpinner", "required": true },
  1843. { "$ref": "Setting.Details.ControlEdit", "required": true },
  1844. { "$ref": "Setting.Details.ControlButton", "required": true },
  1845. { "$ref": "Setting.Details.ControlList", "required": true },
  1846. { "$ref": "Setting.Details.ControlSlider", "required": true },
  1847. { "$ref": "Setting.Details.ControlRange", "required": true },
  1848. { "$ref": "Setting.Details.ControlLabel", "required": true }
  1849. ]
  1850. },
  1851. "Setting.Details.Base": {
  1852. "type": "object",
  1853. "properties": {
  1854. "id": { "type": "string", "required": true, "minLength": 1 },
  1855. "label": { "type": "string", "required": true },
  1856. "help": { "type": "string" }
  1857. }
  1858. },
  1859. "Setting.Details.SettingBase": {
  1860. "extends": "Setting.Details.Base",
  1861. "properties": {
  1862. "type": { "$ref": "Setting.Type", "required": true },
  1863. "enabled": { "type": "boolean", "required": true },
  1864. "level": { "$ref": "Setting.Level", "required": true },
  1865. "parent": { "type": "string" },
  1866. "control": { "$ref": "Setting.Details.Control" }
  1867. },
  1868. "additionalProperties": false
  1869. },
  1870. "Setting.Details.SettingBool": {
  1871. "extends": "Setting.Details.SettingBase",
  1872. "properties": {
  1873. "value": { "type": "boolean", "required": true },
  1874. "default": { "type": "boolean", "required": true }
  1875. },
  1876. "additionalProperties": false
  1877. },
  1878. "Setting.Details.SettingInt": {
  1879. "extends": "Setting.Details.SettingBase",
  1880. "properties": {
  1881. "value": { "type": "integer", "required": true },
  1882. "default": { "type": "integer", "required": true },
  1883. "minimum": { "type": "integer" },
  1884. "step": { "type": "integer" },
  1885. "maximum": { "type": "integer" },
  1886. "options": { "type": "array",
  1887. "items": { "type": "object",
  1888. "properties": {
  1889. "label": { "type": "string", "required": true },
  1890. "value": { "type": "integer", "required": true }
  1891. }
  1892. }
  1893. }
  1894. },
  1895. "additionalProperties": false
  1896. },
  1897. "Setting.Details.SettingNumber": {
  1898. "extends": "Setting.Details.SettingBase",
  1899. "properties": {
  1900. "value": { "type": "number", "required": true },
  1901. "default": { "type": "number", "required": true },
  1902. "minimum": { "type": "number", "required": true },
  1903. "step": { "type": "number", "required": true },
  1904. "maximum": { "type": "number", "required": true }
  1905. },
  1906. "additionalProperties": false
  1907. },
  1908. "Setting.Details.SettingString": {
  1909. "extends": "Setting.Details.SettingBase",
  1910. "properties": {
  1911. "value": { "type": "string", "required": true },
  1912. "default": { "type": "string", "required": true },
  1913. "allowempty": { "type": "boolean", "required": true },
  1914. "options": { "type": "array",
  1915. "items": { "type": "object",
  1916. "properties": {
  1917. "label": { "type": "string", "required": true },
  1918. "value": { "type": "string", "required": true }
  1919. }
  1920. }
  1921. }
  1922. }
  1923. },
  1924. "Setting.Details.SettingAction": {
  1925. "extends": "Setting.Details.SettingBase",
  1926. "properties": {
  1927. "data": { "type": "string", "required": true }
  1928. },
  1929. "additionalProperties": false
  1930. },
  1931. "Setting.Details.SettingList": {
  1932. "extends": "Setting.Details.SettingBase",
  1933. "properties": {
  1934. "value": { "$ref": "Setting.Value.List", "required": true },
  1935. "default": { "$ref": "Setting.Value.List", "required": true },
  1936. "elementtype": { "$ref": "Setting.Type", "required": true },
  1937. "definition": { "$ref": "Setting.Details.Setting", "required": true },
  1938. "delimiter": { "type": "string", "required": true },
  1939. "minimumItems": { "type": "integer" },
  1940. "maximumItems": { "type": "integer" }
  1941. },
  1942. "additionalProperties": false
  1943. },
  1944. "Setting.Details.SettingPath": {
  1945. "extends": "Setting.Details.SettingString",
  1946. "properties": {
  1947. "writable": { "type": "boolean", "required": true },
  1948. "sources": { "type": "array", "items": { "type": "string" } }
  1949. },
  1950. "additionalProperties": false
  1951. },
  1952. "Setting.Details.SettingAddon": {
  1953. "extends": "Setting.Details.SettingString",
  1954. "properties": {
  1955. "addontype": { "$ref": "Addon.Types", "required": true }
  1956. },
  1957. "additionalProperties": false
  1958. },
  1959. "Setting.Details.SettingDate": {
  1960. "extends": "Setting.Details.SettingString",
  1961. "additionalProperties": false
  1962. },
  1963. "Setting.Details.SettingTime": {
  1964. "extends": "Setting.Details.SettingString",
  1965. "additionalProperties": false
  1966. },
  1967. "Setting.Details.Setting": {
  1968. "type": [
  1969. { "$ref": "Setting.Details.SettingBool", "required": true },
  1970. { "$ref": "Setting.Details.SettingInt", "required": true },
  1971. { "$ref": "Setting.Details.SettingNumber", "required": true },
  1972. { "$ref": "Setting.Details.SettingString", "required": true },
  1973. { "$ref": "Setting.Details.SettingAction", "required": true },
  1974. { "$ref": "Setting.Details.SettingList", "required": true },
  1975. { "$ref": "Setting.Details.SettingPath", "required": true },
  1976. { "$ref": "Setting.Details.SettingAddon", "required": true },
  1977. { "$ref": "Setting.Details.SettingDate", "required": true },
  1978. { "$ref": "Setting.Details.SettingTime", "required": true }
  1979. ]
  1980. },
  1981. "Setting.Details.Group": {
  1982. "type": "object",
  1983. "properties": {
  1984. "id": { "type": "string", "required": true, "minLength": 1 },
  1985. "settings": {
  1986. "type": "array",
  1987. "items": { "$ref": "Setting.Details.Setting" },
  1988. "minItems": 1,
  1989. "uniqueItems": true
  1990. }
  1991. },
  1992. "additionalProperties": false
  1993. },
  1994. "Setting.Details.Category": {
  1995. "extends": "Setting.Details.Base",
  1996. "properties": {
  1997. "groups": {
  1998. "type": "array",
  1999. "items": { "$ref": "Setting.Details.Group" },
  2000. "minItems": 1,
  2001. "uniqueItems": true
  2002. }
  2003. },
  2004. "additionalProperties": false
  2005. },
  2006. "Setting.Details.Section": {
  2007. "extends": "Setting.Details.Base",
  2008. "properties": {
  2009. "categories": {
  2010. "type": "array",
  2011. "items": { "$ref": "Setting.Details.Category" },
  2012. "minItems": 1,
  2013. "uniqueItems": true
  2014. }
  2015. },
  2016. "additionalProperties": false
  2017. }
  2018. }