Difference between revisions of "User:Ronie"

From Official Kodi Wiki
Jump to: navigation, search
 
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
{{mininav|[[Development]]|[[JSON-RPC API]]}}
 
{{mininav|[[Development]]|[[JSON-RPC API]]}}
Version 12 is the current development version of Kodi's JSON-RPC API and will be published with the release of v19 (Matrix).<br />
+
Version 12 is the current development version of Kodi's JSON-RPC API and will be published with the release of v19.<br />
This document has been updated to version 11.8.1. Recent changes are announced on the [https://forum.kodi.tv/showthread.php?tid=352779 forum]
+
This document has been updated to version 11.8.1. Recent changes are announced on the [https://forum.kodi.tv/forumdisplay.php?fid=174 forum]
  
 
It comes with support for [http://en.wikipedia.org/wiki/WebSocket WebSockets] as an alternative transport for third party clients. Using WebSockets will allow webinterfaces (which are currently restricted to the HTTP transport only) to get access to a bidirectional transport with Kodi's JSON-RPC API and can therefore also profit from additional features like notifications.
 
It comes with support for [http://en.wikipedia.org/wiki/WebSocket WebSockets] as an alternative transport for third party clients. Using WebSockets will allow webinterfaces (which are currently restricted to the HTTP transport only) to get access to a bidirectional transport with Kodi's JSON-RPC API and can therefore also profit from additional features like notifications.
Line 177: Line 177:
 
== Namespaces ==
 
== Namespaces ==
 
The Kodi JSON-RPC API is split up into namespaces, which contain methods that can be called. These namespaces are:
 
The Kodi JSON-RPC API is split up into namespaces, which contain methods that can be called. These namespaces are:
{|
+
 
|
+
{| class="prettytable" style="margin-right: 10;"
<pre>
+
!style="padding-left: 10px; padding-right: 10px;"|Namespace
Addons           List, enable and execute addons
+
!style="padding-left: 10px; padding-right: 10px;"|Description
Application     Application information and control
+
|-
AudioLibrary     Audio Library information
+
|Addons
Favourites       Favourites GetFavourites and AddFavourite
+
|List, enable and execute addons.
Files           Shares information & filesystem listings
+
|-
GUI             Window properties and activation
+
|Application
Input           Allows limited navigation within Kodi
+
|Application information and control.
JSONRPC         A variety of standard JSONRPC calls
+
|-
Player           Manages all available players
+
|AudioLibrary
Playlist         Playlist modification
+
|Audio Library information.
Profiles         Support for Profiles operations to xbmc.  
+
|-
PVR              Live TV control
+
|Favourites
Settings         Allows manipulation of Kodi settings.
+
|Favourites GetFavourites and AddFavourite.
System           System controls and information
+
|-
Textures         Supplies GetTextures and RemoveTexture. Textures are images.
+
|Files
VideoLibrary     Video Library information
+
|Shares information & filesystem listings.
XBMC             Dumping ground for very Kodi specific operations
+
|-
</pre>
+
|GUI
 +
|Window properties and activation.
 +
|-
 +
|Input
 +
|Allows limited navigation within Kodi.
 +
|-
 +
|JSONRPC
 +
|A variety of standard JSONRPC calls.
 +
|-
 +
|PVR
 +
|Live TV control.
 +
|-
 +
|Player
 +
|Manages all available players.
 +
|-
 +
|Playlist
 +
|Playlist modification.
 +
|-
 +
|Profiles
 +
|Support for Profiles operations to Kodi.
 +
|-
 +
|Settings
 +
|Allows manipulation of Kodi settings.
 +
|-
 +
|System
 +
|System controls and information.
 +
|-
 +
|Textures
 +
|Supplies GetTextures and RemoveTexture. Textures are images.
 +
|-
 +
|VideoLibrary
 +
|Video Library information.
 +
|-
 +
|XBMC
 +
|Dumping ground for very Kodi specific operations.
 
|}
 
|}
 
 
== Methods ==
 
== Methods ==
 
=== Addons ===
 
=== Addons ===
Line 218: Line 251:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Executes the given addon with the given parameters (if possible)",
 
   "description": "Executes the given addon with the given parameters (if possible)",
  "transport": "Response",
 
  "permission": "ExecuteAddon",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 
       "name": "addonid",
 
       "name": "addonid",
       "type": "string",
+
       "required": true,
       "required": true
+
       "type": "string"
 
     },
 
     },
 
     {
 
     {
 +
      "default": "",
 
       "name": "params",
 
       "name": "params",
 
       "type": [
 
       "type": [
 
         {
 
         {
          "type": "object",
 
 
           "additionalProperties": {
 
           "additionalProperties": {
 +
            "default": "",
 
             "type": "string"
 
             "type": "string"
           }
+
           },
 +
          "type": "object"
 
         },
 
         },
 
         {
 
         {
          "type": "array",
 
 
           "items": {
 
           "items": {
 
             "type": "string"
 
             "type": "string"
           }
+
           },
 +
          "type": "array"
 
         },
 
         },
 
         {
 
         {
          "type": "string",
+
           "description": "URL path (must start with / or ?",
           "description": "URL path (must start with / or ?"
+
          "type": "string"
 
         }
 
         }
       ],
+
       ]
      "default": ""
 
 
     },
 
     },
 
     {
 
     {
 +
      "default": false,
 
       "name": "wait",
 
       "name": "wait",
       "type": "boolean",
+
       "type": "boolean"
      "default": false
 
 
     }
 
     }
 
   ],
 
   ],
   "returns": "string"
+
  "permission": "ExecuteAddon",
 +
   "returns": {
 +
    "type": "string"
 +
  },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 272: Line 307:
 
'''Type:''' ''object''<br />
 
'''Type:''' ''object''<br />
 
'''Properties:'''
 
'''Properties:'''
 +
# ''[[#Addon.Details|Addon.Details]]'' addon<br />
 
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
 
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# ''[[#Addon.Details|Addon.Details]]'' addon<br />
 
 
</div>
 
</div>
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Gets the details of a specific addon",
 
   "description": "Gets the details of a specific addon",
  "transport": "Response",
 
  "permission": "ReadData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 
       "name": "addonid",
 
       "name": "addonid",
       "type": "string",
+
       "required": true,
       "required": true
+
       "type": "string"
 
     },
 
     },
 
     {
 
     {
       "name": "properties",
+
       "$ref": "Addon.Fields",
       "$ref": "Addon.Fields"
+
       "name": "properties"
 
     }
 
     }
 
   ],
 
   ],
 +
  "permission": "ReadData",
 
   "returns": {
 
   "returns": {
    "type": "object",
 
 
     "properties": {
 
     "properties": {
 +
      "addon": {
 +
        "$ref": "Addon.Details",
 +
        "required": true
 +
      },
 
       "limits": {
 
       "limits": {
 
         "$ref": "List.LimitsReturned",
 
         "$ref": "List.LimitsReturned",
        "required": true
 
      },
 
      "addon": {
 
        "$ref": "Addon.Details",
 
 
         "required": true
 
         "required": true
 
       }
 
       }
     }
+
     },
   }
+
    "type": "object"
 +
   },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 313: Line 347:
 
'''Parameters:'''
 
'''Parameters:'''
 
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
 
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''[[#Addon.Types|Addon.Types]]'' type]<br />
+
# [''[[#Addon.Types|Addon.Types]]'' type = unknown]<br />
# [''[[#Addon.Content|Addon.Content]]'' content] (Content provided by the addon. Only considered for plugins and scripts.)<br />
+
# [''[[#Addon.Content|Addon.Content]]'' content = unknown] (Content provided by the addon. Only considered for plugins and scripts.)<br />
 
# [''mixed: boolean|string'' enabled = all]<br />
 
# [''mixed: boolean|string'' enabled = all]<br />
 
# [''[[#Addon.Fields|Addon.Fields]]'' properties]<br />
 
# [''[[#Addon.Fields|Addon.Fields]]'' properties]<br />
Line 324: Line 358:
 
'''Type:''' ''object''<br />
 
'''Type:''' ''object''<br />
 
'''Properties:'''
 
'''Properties:'''
 +
# [''array[[#Addon.Details|Addon.Details]]'' addons]<br />
 
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
 
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# [''array[[#Addon.Details|Addon.Details]]'' addons]<br />
 
 
</div>
 
</div>
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Gets all available addons",
 
   "description": "Gets all available addons",
  "transport": "Response",
 
  "permission": "ReadData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
       "name": "type",
+
       "$ref": "Addon.Types",
       "$ref": "Addon.Types"
+
      "default": "unknown",
 +
       "name": "type"
 
     },
 
     },
 
     {
 
     {
      "name": "content",
 
 
       "$ref": "Addon.Content",
 
       "$ref": "Addon.Content",
       "description": "Content provided by the addon. Only considered for plugins and scripts."
+
      "default": "unknown",
 +
       "description": "Content provided by the addon. Only considered for plugins and scripts.",
 +
      "name": "content"
 
     },
 
     },
 
     {
 
     {
 +
      "default": "all",
 
       "name": "enabled",
 
       "name": "enabled",
 
       "type": [
 
       "type": [
Line 350: Line 384:
 
         },
 
         },
 
         {
 
         {
           "type": "string",
+
           "enums": [
          "enum": [
 
 
             "all"
 
             "all"
           ]
+
           ],
 +
          "type": "string"
 
         }
 
         }
       ],
+
       ]
      "default": "all"
 
 
     },
 
     },
 
     {
 
     {
       "name": "properties",
+
       "$ref": "Addon.Fields",
       "$ref": "Addon.Fields"
+
       "name": "properties"
 
     },
 
     },
 
     {
 
     {
       "name": "limits",
+
       "$ref": "List.Limits",
       "$ref": "List.Limits"
+
       "name": "limits"
 
     },
 
     },
 
     {
 
     {
 +
      "default": true,
 
       "name": "installed",
 
       "name": "installed",
 
       "type": [
 
       "type": [
Line 373: Line 407:
 
         },
 
         },
 
         {
 
         {
           "type": "string",
+
           "enums": [
          "enum": [
 
 
             "all"
 
             "all"
           ]
+
           ],
 +
          "type": "string"
 
         }
 
         }
       ],
+
       ]
      "default": true
 
 
     }
 
     }
 
   ],
 
   ],
 +
  "permission": "ReadData",
 
   "returns": {
 
   "returns": {
    "type": "object",
 
 
     "properties": {
 
     "properties": {
 +
      "addons": {
 +
        "items": {
 +
          "$ref": "Addon.Details"
 +
        },
 +
        "type": "array"
 +
      },
 
       "limits": {
 
       "limits": {
 
         "$ref": "List.LimitsReturned",
 
         "$ref": "List.LimitsReturned",
 
         "required": true
 
         "required": true
      },
 
      "addons": {
 
        "type": "array",
 
        "items": {
 
          "$ref": "Addon.Details"
 
        }
 
 
       }
 
       }
     }
+
     },
   }
+
    "type": "object"
 +
   },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 414: Line 449:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Enables/Disables a specific addon",
 
   "description": "Enables/Disables a specific addon",
  "transport": "Response",
 
  "permission": "ManageAddon",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 
       "name": "addonid",
 
       "name": "addonid",
       "type": "string",
+
       "required": true,
       "required": true
+
       "type": "string"
 
     },
 
     },
 
     {
 
     {
 +
      "$ref": "Global.Toggle",
 
       "name": "enabled",
 
       "name": "enabled",
      "$ref": "Global.Toggle",
 
 
       "required": true
 
       "required": true
 
     }
 
     }
 
   ],
 
   ],
   "returns": "string"
+
  "permission": "ManageAddon",
 +
   "returns": {
 +
    "type": "string"
 +
  },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 448: Line 484:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Retrieves the values of the given properties",
 
   "description": "Retrieves the values of the given properties",
  "transport": "Response",
 
  "permission": "ReadData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 +
      "items": {
 +
        "$ref": "Application.Property.Name"
 +
      },
 
       "name": "properties",
 
       "name": "properties",
 +
      "required": true,
 
       "type": "array",
 
       "type": "array",
       "uniqueItems": true,
+
       "uniqueItems": true
      "required": true,
 
      "items": {
 
        "$ref": "Application.Property.Name"
 
      }
 
 
     }
 
     }
 
   ],
 
   ],
 +
  "permission": "ReadData",
 
   "returns": {
 
   "returns": {
     "$ref": "Application.Property.Value",
+
     "$ref": "Application.Property.Value"
    "required": true
+
  },
  }
+
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 479: Line 513:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Quit application",
 
   "description": "Quit application",
   "transport": "Response",
+
   "params": [],
 
   "permission": "ControlPower",
 
   "permission": "ControlPower",
   "params": [],
+
   "returns": {
   "returns": "string"
+
    "type": "string"
 +
  },
 +
   "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 501: Line 536:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Toggle mute/unmute",
 
   "description": "Toggle mute/unmute",
  "transport": "Response",
 
  "permission": "ControlPlayback",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 +
      "$ref": "Global.Toggle",
 
       "name": "mute",
 
       "name": "mute",
       "required": true,
+
       "required": true
      "$ref": "Global.Toggle"
 
 
     }
 
     }
 
   ],
 
   ],
 +
  "permission": "ControlPlayback",
 
   "returns": {
 
   "returns": {
     "type": "boolean",
+
     "description": "Mute state",
     "description": "Mute state"
+
     "type": "boolean"
   }
+
   },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 532: Line 566:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Set the current volume",
 
   "description": "Set the current volume",
  "transport": "Response",
 
  "permission": "ControlPlayback",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 
       "name": "volume",
 
       "name": "volume",
 +
      "required": true,
 
       "type": [
 
       "type": [
 
         {
 
         {
           "type": "integer",
+
           "maximum": 100,
 
           "minimum": 0,
 
           "minimum": 0,
           "maximum": 100,
+
           "type": "integer"
          "required": true
 
 
         },
 
         },
 
         {
 
         {
           "$ref": "Global.IncrementDecrement",
+
           "$ref": "Global.IncrementDecrement"
          "required": true
 
 
         }
 
         }
       ],
+
       ]
      "required": true
 
 
     }
 
     }
 
   ],
 
   ],
   "returns": "integer"
+
  "permission": "ControlPlayback",
 +
   "returns": {
 +
    "type": "integer"
 +
  },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 572: Line 605:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Cleans the audio library from non-existent items",
 
   "description": "Cleans the audio library from non-existent items",
  "transport": "Response",
 
  "permission": "RemoveData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 +
      "default": true,
 +
      "description": "Whether or not to show the progress bar or any other GUI dialog",
 
       "name": "showdialogs",
 
       "name": "showdialogs",
       "type": "boolean",
+
       "type": "boolean"
      "default": true,
 
      "description": "Whether or not to show the progress bar or any other GUI dialog"
 
 
     }
 
     }
 
   ],
 
   ],
   "returns": "string"
+
  "permission": "RemoveData",
 +
   "returns": {
 +
    "type": "string"
 +
  },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 601: Line 635:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Exports all items from the audio library",
 
   "description": "Exports all items from the audio library",
  "transport": "Response",
 
  "permission": "WriteFile",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
Line 610: Line 641:
 
       "type": [
 
       "type": [
 
         {
 
         {
          "type": "object",
 
          "required": true,
 
 
           "additionalProperties": false,
 
           "additionalProperties": false,
 
           "properties": {
 
           "properties": {
 
             "path": {
 
             "path": {
               "type": "string",
+
               "description": "Path to the directory to where the data should be exported",
 +
              "minLength": 1,
 
               "required": true,
 
               "required": true,
               "minLength": 1,
+
               "type": "string"
              "description": "Path to the directory to where the data should be exported"
 
 
             }
 
             }
           }
+
           },
 +
          "type": "object"
 
         },
 
         },
 
         {
 
         {
          "type": "object",
 
          "required": true,
 
 
           "additionalProperties": false,
 
           "additionalProperties": false,
 
           "properties": {
 
           "properties": {
             "overwrite": {
+
             "images": {
              "type": "boolean",
 
 
               "default": false,
 
               "default": false,
               "description": "Whether to overwrite existing exported files"
+
               "description": "Whether to export thumbnails and fanart images",
 +
              "type": "boolean"
 
             },
 
             },
             "images": {
+
             "overwrite": {
              "type": "boolean",
 
 
               "default": false,
 
               "default": false,
               "description": "Whether to export thumbnails and fanart images"
+
               "description": "Whether to overwrite existing exported files",
 +
              "type": "boolean"
 
             }
 
             }
           }
+
           },
 +
          "type": "object"
 
         }
 
         }
 
       ]
 
       ]
 
     }
 
     }
 
   ],
 
   ],
   "returns": "string"
+
  "permission": "WriteFile",
 +
   "returns": {
 +
    "type": "string"
 +
  },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 662: Line 695:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Retrieve details about a specific album",
 
   "description": "Retrieve details about a specific album",
  "transport": "Response",
 
  "permission": "ReadData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 +
      "$ref": "Library.Id",
 
       "name": "albumid",
 
       "name": "albumid",
      "$ref": "Library.Id",
 
 
       "required": true
 
       "required": true
 
     },
 
     },
 
     {
 
     {
       "name": "properties",
+
       "$ref": "Audio.Fields.Album",
       "$ref": "Audio.Fields.Album"
+
       "name": "properties"
 
     }
 
     }
 
   ],
 
   ],
 +
  "permission": "ReadData",
 
   "returns": {
 
   "returns": {
    "type": "object",
 
 
     "properties": {
 
     "properties": {
 
       "albumdetails": {
 
       "albumdetails": {
 
         "$ref": "Audio.Details.Album"
 
         "$ref": "Audio.Details.Album"
 
       }
 
       }
     }
+
     },
   }
+
    "type": "object"
 +
   },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 704: Line 736:
 
'''Type:''' ''object''<br />
 
'''Type:''' ''object''<br />
 
'''Properties:'''
 
'''Properties:'''
 +
# [''array[[#Audio.Details.Album|Audio.Details.Album]]'' albums]<br />
 
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
 
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# [''array[[#Audio.Details.Album|Audio.Details.Album]]'' albums]<br />
 
 
</div>
 
</div>
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Retrieve all albums from specified artist (and role) or that has songs of the specified genre",
 
   "description": "Retrieve all albums from specified artist (and role) or that has songs of the specified genre",
  "transport": "Response",
 
  "permission": "ReadData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
       "name": "properties",
+
       "$ref": "Audio.Fields.Album",
       "$ref": "Audio.Fields.Album"
+
       "name": "properties"
 
     },
 
     },
 
     {
 
     {
       "name": "limits",
+
       "$ref": "List.Limits",
       "$ref": "List.Limits"
+
       "name": "limits"
 
     },
 
     },
 
     {
 
     {
       "name": "sort",
+
       "$ref": "List.Sort",
       "$ref": "List.Sort"
+
       "name": "sort"
 
     },
 
     },
 
     {
 
     {
Line 730: Line 759:
 
       "type": [
 
       "type": [
 
         {
 
         {
           "type": "object",
+
           "additionalProperties": false,
 
           "properties": {
 
           "properties": {
 
             "genreid": {
 
             "genreid": {
 
               "$ref": "Library.Id",
 
               "$ref": "Library.Id",
              "required": true,
+
               "description": "Song genre. Filter for existence of songs with this genre",
               "description": "Song genre. Filter for existence of songs with this genre"
+
              "required": true
 
             }
 
             }
 
           },
 
           },
           "additionalProperties": false
+
           "type": "object"
 
         },
 
         },
 
         {
 
         {
           "type": "object",
+
           "additionalProperties": false,
 
           "properties": {
 
           "properties": {
 
             "genre": {
 
             "genre": {
               "type": "string",
+
               "description": "Song genre. Filter for existence of songs with this genre",
 
               "minLength": 1,
 
               "minLength": 1,
 
               "required": true,
 
               "required": true,
               "description": "Song genre. Filter for existence of songs with this genre"
+
               "type": "string"
 
             }
 
             }
 
           },
 
           },
           "additionalProperties": false
+
           "type": "object"
 
         },
 
         },
 
         {
 
         {
           "type": "object",
+
           "additionalProperties": false,
 
           "properties": {
 
           "properties": {
 
             "artistid": {
 
             "artistid": {
Line 760: Line 789:
 
             }
 
             }
 
           },
 
           },
           "additionalProperties": false
+
           "type": "object"
 
         },
 
         },
 
         {
 
         {
           "type": "object",
+
           "additionalProperties": false,
 
           "properties": {
 
           "properties": {
 
             "artistid": {
 
             "artistid": {
Line 774: Line 803:
 
             }
 
             }
 
           },
 
           },
           "additionalProperties": false
+
           "type": "object"
 
         },
 
         },
 
         {
 
         {
           "type": "object",
+
           "additionalProperties": false,
 
           "properties": {
 
           "properties": {
 
             "artistid": {
 
             "artistid": {
Line 784: Line 813:
 
             },
 
             },
 
             "role": {
 
             "role": {
              "type": "string",
 
 
               "minLength": 1,
 
               "minLength": 1,
               "required": true
+
               "required": true,
 +
              "type": "string"
 
             }
 
             }
 
           },
 
           },
           "additionalProperties": false
+
           "type": "object"
 
         },
 
         },
 
         {
 
         {
           "type": "object",
+
           "additionalProperties": false,
 
           "properties": {
 
           "properties": {
 
             "artist": {
 
             "artist": {
              "type": "string",
 
 
               "minLength": 1,
 
               "minLength": 1,
               "required": true
+
               "required": true,
 +
              "type": "string"
 
             }
 
             }
 
           },
 
           },
           "additionalProperties": false
+
           "type": "object"
 
         },
 
         },
 
         {
 
         {
           "type": "object",
+
           "additionalProperties": false,
 
           "properties": {
 
           "properties": {
 
             "artist": {
 
             "artist": {
              "type": "string",
 
 
               "minLength": 1,
 
               "minLength": 1,
               "required": true
+
               "required": true,
 +
              "type": "string"
 
             },
 
             },
 
             "roleid": {
 
             "roleid": {
Line 815: Line 844:
 
             }
 
             }
 
           },
 
           },
           "additionalProperties": false
+
           "type": "object"
 
         },
 
         },
 
         {
 
         {
           "type": "object",
+
           "additionalProperties": false,
 
           "properties": {
 
           "properties": {
 
             "artist": {
 
             "artist": {
              "type": "string",
 
 
               "minLength": 1,
 
               "minLength": 1,
               "required": true
+
               "required": true,
 +
              "type": "string"
 
             },
 
             },
 
             "role": {
 
             "role": {
              "type": "string",
 
 
               "minLength": 1,
 
               "minLength": 1,
               "required": true
+
               "required": true,
 +
              "type": "string"
 
             }
 
             }
 
           },
 
           },
           "additionalProperties": false
+
           "type": "object"
 
         },
 
         },
 
         {
 
         {
Line 839: Line 868:
 
     },
 
     },
 
     {
 
     {
 +
      "default": false,
 
       "name": "includesingles",
 
       "name": "includesingles",
       "type": "boolean",
+
       "type": "boolean"
      "default": false
 
 
     },
 
     },
 
     {
 
     {
 +
      "default": false,
 +
      "description": "Whether or not to include all roles when filtering by artist, rather than the default of excluding other contributions. When true it overrides any role filter value.",
 
       "name": "allroles",
 
       "name": "allroles",
       "type": "boolean",
+
       "type": "boolean"
      "default": false,
 
      "description": "Whether or not to include all roles when filtering by artist, rather than the default of excluding other contributions. When true it overrides any role filter value."
 
 
     }
 
     }
 
   ],
 
   ],
 +
  "permission": "ReadData",
 
   "returns": {
 
   "returns": {
    "type": "object",
 
 
     "properties": {
 
     "properties": {
 +
      "albums": {
 +
        "items": {
 +
          "$ref": "Audio.Details.Album"
 +
        },
 +
        "type": "array"
 +
      },
 
       "limits": {
 
       "limits": {
 
         "$ref": "List.LimitsReturned",
 
         "$ref": "List.LimitsReturned",
 
         "required": true
 
         "required": true
      },
 
      "albums": {
 
        "type": "array",
 
        "items": {
 
          "$ref": "Audio.Details.Album"
 
        }
 
 
       }
 
       }
     }
+
     },
   }
+
    "type": "object"
 +
   },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 884: Line 915:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Retrieve details about a specific artist",
 
   "description": "Retrieve details about a specific artist",
  "transport": "Response",
 
  "permission": "ReadData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 +
      "$ref": "Library.Id",
 
       "name": "artistid",
 
       "name": "artistid",
      "$ref": "Library.Id",
 
 
       "required": true
 
       "required": true
 
     },
 
     },
 
     {
 
     {
       "name": "properties",
+
       "$ref": "Audio.Fields.Artist",
       "$ref": "Audio.Fields.Artist"
+
       "name": "properties"
 
     }
 
     }
 
   ],
 
   ],
 +
  "permission": "ReadData",
 
   "returns": {
 
   "returns": {
    "type": "object",
 
 
     "properties": {
 
     "properties": {
 
       "artistdetails": {
 
       "artistdetails": {
 
         "$ref": "Audio.Details.Artist"
 
         "$ref": "Audio.Details.Artist"
 
       }
 
       }
     }
+
     },
   }
+
    "type": "object"
 +
   },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 915: Line 945:
 
'''Parameters:'''
 
'''Parameters:'''
 
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
 
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''[[#Optional.Boolean|Optional.Boolean]]'' albumartistsonly] (Whether or not to only include album artists rather than the artists of only individual songs as well. If the parameter is not passed or is passed as null the GUI setting will be used)<br />
+
# [''[[#Optional.Boolean|Optional.Boolean]]'' albumartistsonly = None] (Whether or not to only include album artists rather than the artists of only individual songs as well. If the parameter is not passed or is passed as null the GUI setting will be used)<br />
 
# [''[[#Audio.Fields.Artist|Audio.Fields.Artist]]'' properties]<br />
 
# [''[[#Audio.Fields.Artist|Audio.Fields.Artist]]'' properties]<br />
 
# [''[[#List.Limits|List.Limits]]'' limits]<br />
 
# [''[[#List.Limits|List.Limits]]'' limits]<br />
Line 926: Line 956:
 
'''Type:''' ''object''<br />
 
'''Type:''' ''object''<br />
 
'''Properties:'''
 
'''Properties:'''
 +
# [''array[[#Audio.Details.Artist|Audio.Details.Artist]]'' artists]<br />
 
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
 
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# [''array[[#Audio.Details.Artist|Audio.Details.Artist]]'' artists]<br />
 
 
</div>
 
</div>
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Retrieve all artists. For backward compatibility by default this implicity does not include those that only contribute other roles, however absolutely all artists can be returned using allroles=true",
 
   "description": "Retrieve all artists. For backward compatibility by default this implicity does not include those that only contribute other roles, however absolutely all artists can be returned using allroles=true",
  "transport": "Response",
 
  "permission": "ReadData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
      "name": "albumartistsonly",
 
 
       "$ref": "Optional.Boolean",
 
       "$ref": "Optional.Boolean",
       "description": "Whether or not to only include album artists rather than the artists of only individual songs as well. If the parameter is not passed or is passed as null the GUI setting will be used"
+
      "default": null,
 +
       "description": "Whether or not to only include album artists rather than the artists of only individual songs as well. If the parameter is not passed or is passed as null the GUI setting will be used",
 +
      "name": "albumartistsonly"
 
     },
 
     },
 
     {
 
     {
       "name": "properties",
+
       "$ref": "Audio.Fields.Artist",
       "$ref": "Audio.Fields.Artist"
+
       "name": "properties"
 
     },
 
     },
 
     {
 
     {
       "name": "limits",
+
       "$ref": "List.Limits",
       "$ref": "List.Limits"
+
       "name": "limits"
 
     },
 
     },
 
     {
 
     {
       "name": "sort",
+
       "$ref": "List.Sort",
       "$ref": "List.Sort"
+
       "name": "sort"
 
     },
 
     },
 
     {
 
     {
Line 957: Line 985:
 
       "type": [
 
       "type": [
 
         {
 
         {
           "type": "object",
+
           "additionalProperties": false,
 
           "properties": {
 
           "properties": {
 
             "genreid": {
 
             "genreid": {
 
               "$ref": "Library.Id",
 
               "$ref": "Library.Id",
              "required": true,
+
               "description": "Deprecated, use songgenreid. Filter for existence of songs with this genre",
               "description": "Deprecated, use songgenreid. Filter for existence of songs with this genre"
+
              "required": true
 
             }
 
             }
 
           },
 
           },
           "additionalProperties": false
+
           "type": "object"
 
         },
 
         },
 
         {
 
         {
           "type": "object",
+
           "additionalProperties": false,
 
           "properties": {
 
           "properties": {
 
             "songgenreid": {
 
             "songgenreid": {
 
               "$ref": "Library.Id",
 
               "$ref": "Library.Id",
              "required": true,
+
               "description": "Song genreid. Filter for existence of songs with this genre",
               "description": "Song genreid. Filter for existence of songs with this genre"
+
              "required": true
 
             }
 
             }
 
           },
 
           },
           "additionalProperties": false
+
           "type": "object"
 
         },
 
         },
 
         {
 
         {
           "type": "object",
+
           "additionalProperties": false,
 
           "properties": {
 
           "properties": {
             "songgenreid": {
+
             "roleid": {
 
               "$ref": "Library.Id",
 
               "$ref": "Library.Id",
 
               "required": true
 
               "required": true
 
             },
 
             },
             "roleid": {
+
             "songgenreid": {
 
               "$ref": "Library.Id",
 
               "$ref": "Library.Id",
 
               "required": true
 
               "required": true
 
             }
 
             }
 
           },
 
           },
           "additionalProperties": false
+
           "type": "object"
 
         },
 
         },
 
         {
 
         {
           "type": "object",
+
           "additionalProperties": false,
 
           "properties": {
 
           "properties": {
 +
            "role": {
 +
              "minLength": 1,
 +
              "required": true,
 +
              "type": "string"
 +
            },
 
             "songgenreid": {
 
             "songgenreid": {
 
               "$ref": "Library.Id",
 
               "$ref": "Library.Id",
              "required": true
 
            },
 
            "role": {
 
              "type": "string",
 
              "minLength": 1,
 
 
               "required": true
 
               "required": true
 
             }
 
             }
 
           },
 
           },
           "additionalProperties": false
+
           "type": "object"
 
         },
 
         },
 
         {
 
         {
           "type": "object",
+
           "additionalProperties": false,
 
           "properties": {
 
           "properties": {
 
             "genre": {
 
             "genre": {
               "type": "string",
+
               "description": "Deprecated, use songgenre. Filter for existence of songs with this genre",
 
               "minLength": 1,
 
               "minLength": 1,
 
               "required": true,
 
               "required": true,
               "description": "Deprecated, use songgenre. Filter for existence of songs with this genre"
+
               "type": "string"
 
             }
 
             }
 
           },
 
           },
           "additionalProperties": false
+
           "type": "object"
 
         },
 
         },
 
         {
 
         {
           "type": "object",
+
           "additionalProperties": false,
 
           "properties": {
 
           "properties": {
 
             "songgenre": {
 
             "songgenre": {
               "type": "string",
+
               "description": "Song genre. Filter for existence of songs with this genre",
 
               "minLength": 1,
 
               "minLength": 1,
 
               "required": true,
 
               "required": true,
               "description": "Song genre. Filter for existence of songs with this genre"
+
               "type": "string"
 
             }
 
             }
 
           },
 
           },
           "additionalProperties": false
+
           "type": "object"
 
         },
 
         },
 
         {
 
         {
           "type": "object",
+
           "additionalProperties": false,
 
           "properties": {
 
           "properties": {
            "songgenre": {
 
              "type": "string",
 
              "minLength": 1,
 
              "required": true
 
            },
 
 
             "roleid": {
 
             "roleid": {
 
               "$ref": "Library.Id",
 
               "$ref": "Library.Id",
 
               "required": true
 
               "required": true
 +
            },
 +
            "songgenre": {
 +
              "minLength": 1,
 +
              "required": true,
 +
              "type": "string"
 
             }
 
             }
 
           },
 
           },
           "additionalProperties": false
+
           "type": "object"
 
         },
 
         },
 
         {
 
         {
           "type": "object",
+
           "additionalProperties": false,
 
           "properties": {
 
           "properties": {
             "songgenre": {
+
             "role": {
              "type": "string",
 
 
               "minLength": 1,
 
               "minLength": 1,
               "required": true
+
               "required": true,
 +
              "type": "string"
 
             },
 
             },
             "role": {
+
             "songgenre": {
              "type": "string",
 
 
               "minLength": 1,
 
               "minLength": 1,
               "required": true
+
               "required": true,
 +
              "type": "string"
 
             }
 
             }
 
           },
 
           },
           "additionalProperties": false
+
           "type": "object"
 
         },
 
         },
 
         {
 
         {
           "type": "object",
+
           "additionalProperties": false,
 
           "properties": {
 
           "properties": {
 
             "albumid": {
 
             "albumid": {
Line 1,070: Line 1,098:
 
             }
 
             }
 
           },
 
           },
           "additionalProperties": false
+
           "type": "object"
 
         },
 
         },
 
         {
 
         {
           "type": "object",
+
           "additionalProperties": false,
 
           "properties": {
 
           "properties": {
 
             "album": {
 
             "album": {
              "type": "string",
 
 
               "minLength": 1,
 
               "minLength": 1,
               "required": true
+
               "required": true,
 +
              "type": "string"
 
             }
 
             }
 
           },
 
           },
           "additionalProperties": false
+
           "type": "object"
 
         },
 
         },
 
         {
 
         {
           "type": "object",
+
           "additionalProperties": false,
 
           "properties": {
 
           "properties": {
 
             "songid": {
 
             "songid": {
Line 1,091: Line 1,119:
 
             }
 
             }
 
           },
 
           },
           "additionalProperties": false
+
           "type": "object"
 
         },
 
         },
 
         {
 
         {
           "type": "object",
+
           "additionalProperties": false,
 
           "properties": {
 
           "properties": {
             "songid": {
+
             "roleid": {
 
               "$ref": "Library.Id",
 
               "$ref": "Library.Id",
 
               "required": true
 
               "required": true
 
             },
 
             },
             "roleid": {
+
             "songid": {
 
               "$ref": "Library.Id",
 
               "$ref": "Library.Id",
 
               "required": true
 
               "required": true
 
             }
 
             }
 
           },
 
           },
           "additionalProperties": false
+
           "type": "object"
 
         },
 
         },
 
         {
 
         {
           "type": "object",
+
           "additionalProperties": false,
 
           "properties": {
 
           "properties": {
 +
            "role": {
 +
              "minLength": 1,
 +
              "required": true,
 +
              "type": "string"
 +
            },
 
             "songid": {
 
             "songid": {
 
               "$ref": "Library.Id",
 
               "$ref": "Library.Id",
              "required": true
 
            },
 
            "role": {
 
              "type": "string",
 
              "minLength": 1,
 
 
               "required": true
 
               "required": true
 
             }
 
             }
 
           },
 
           },
           "additionalProperties": false
+
           "type": "object"
 
         },
 
         },
 
         {
 
         {
           "type": "object",
+
           "additionalProperties": false,
 
           "properties": {
 
           "properties": {
 
             "roleid": {
 
             "roleid": {
 
               "$ref": "Library.Id",
 
               "$ref": "Library.Id",
              "required": true,
+
               "description": "Role contributed by artist. Overridden by allroles parameter",
               "description": "Role contributed by artist. Overridden by allroles parameter"
+
              "required": true
 
             }
 
             }
 
           },
 
           },
           "additionalProperties": false
+
           "type": "object"
 
         },
 
         },
 
         {
 
         {
           "type": "object",
+
           "additionalProperties": false,
 
           "properties": {
 
           "properties": {
 
             "role": {
 
             "role": {
               "type": "string",
+
               "description": "Role contributed by artist. Overridden by allroles parameter",
 
               "minLength": 1,
 
               "minLength": 1,
 
               "required": true,
 
               "required": true,
               "description": "Role contributed by artist. Overridden by allroles parameter"
+
               "type": "string"
 
             }
 
             }
 
           },
 
           },
           "additionalProperties": false
+
           "type": "object"
 
         },
 
         },
 
         {
 
         {
Line 1,151: Line 1,179:
 
     },
 
     },
 
     {
 
     {
 +
      "default": false,
 +
      "description": "Whether or not to include all artists irrespective of the role they contributed. When true it overrides any role filter value.",
 
       "name": "allroles",
 
       "name": "allroles",
       "type": "boolean",
+
       "type": "boolean"
      "default": false,
 
      "description": "Whether or not to include all artists irrespective of the role they contributed. When true it overrides any role filter value."
 
 
     }
 
     }
 
   ],
 
   ],
 +
  "permission": "ReadData",
 
   "returns": {
 
   "returns": {
    "type": "object",
 
 
     "properties": {
 
     "properties": {
 +
      "artists": {
 +
        "items": {
 +
          "$ref": "Audio.Details.Artist"
 +
        },
 +
        "type": "array"
 +
      },
 
       "limits": {
 
       "limits": {
 
         "$ref": "List.LimitsReturned",
 
         "$ref": "List.LimitsReturned",
 
         "required": true
 
         "required": true
      },
 
      "artists": {
 
        "type": "array",
 
        "items": {
 
          "$ref": "Audio.Details.Artist"
 
        }
 
 
       }
 
       }
     }
+
     },
   }
+
    "type": "object"
 +
   },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 1,188: Line 1,218:
 
'''Type:''' ''object''<br />
 
'''Type:''' ''object''<br />
 
'''Properties:'''
 
'''Properties:'''
 +
# ''array[[#Library.Details.Genre|Library.Details.Genre]]'' genres<br />
 
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
 
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# ''array[[#Library.Details.Genre|Library.Details.Genre]]'' genres<br />
 
 
</div>
 
</div>
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Retrieve all genres",
 
   "description": "Retrieve all genres",
  "transport": "Response",
 
  "permission": "ReadData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
       "name": "properties",
+
       "$ref": "Library.Fields.Genre",
       "$ref": "Library.Fields.Genre"
+
       "name": "properties"
 
     },
 
     },
 
     {
 
     {
       "name": "limits",
+
       "$ref": "List.Limits",
       "$ref": "List.Limits"
+
       "name": "limits"
 
     },
 
     },
 
     {
 
     {
       "name": "sort",
+
       "$ref": "List.Sort",
       "$ref": "List.Sort"
+
       "name": "sort"
 
     }
 
     }
 
   ],
 
   ],
 +
  "permission": "ReadData",
 
   "returns": {
 
   "returns": {
    "type": "object",
 
 
     "properties": {
 
     "properties": {
 +
      "genres": {
 +
        "items": {
 +
          "$ref": "Library.Details.Genre"
 +
        },
 +
        "required": true,
 +
        "type": "array"
 +
      },
 
       "limits": {
 
       "limits": {
 
         "$ref": "List.LimitsReturned",
 
         "$ref": "List.LimitsReturned",
 
         "required": true
 
         "required": true
      },
 
      "genres": {
 
        "type": "array",
 
        "required": true,
 
        "items": {
 
          "$ref": "Library.Details.Genre"
 
        }
 
 
       }
 
       }
     }
+
     },
   }
+
    "type": "object"
 +
   },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 1,243: Line 1,272:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Retrieves the values of the music library properties",
 
   "description": "Retrieves the values of the music library properties",
  "transport": "Response",
 
  "permission": "ReadData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 +
      "items": {
 +
        "$ref": "Audio.Property.Name"
 +
      },
 
       "name": "properties",
 
       "name": "properties",
 +
      "required": true,
 
       "type": "array",
 
       "type": "array",
       "uniqueItems": true,
+
       "uniqueItems": true
      "required": true,
 
      "items": {
 
        "$ref": "Audio.Property.Name"
 
      }
 
 
     }
 
     }
 
   ],
 
   ],
 +
  "permission": "ReadData",
 
   "returns": {
 
   "returns": {
     "$ref": "Audio.Property.Value",
+
     "$ref": "Audio.Property.Value"
    "required": true
+
  },
  }
+
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 1,278: Line 1,305:
 
'''Type:''' ''object''<br />
 
'''Type:''' ''object''<br />
 
'''Properties:'''
 
'''Properties:'''
 +
# [''array[[#Audio.Details.Album|Audio.Details.Album]]'' albums]<br />
 
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
 
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# [''array[[#Audio.Details.Album|Audio.Details.Album]]'' albums]<br />
 
 
</div>
 
</div>
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Retrieve recently added albums",
 
   "description": "Retrieve recently added albums",
  "transport": "Response",
 
  "permission": "ReadData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
       "name": "properties",
+
       "$ref": "Audio.Fields.Album",
       "$ref": "Audio.Fields.Album"
+
       "name": "properties"
 
     },
 
     },
 
     {
 
     {
       "name": "limits",
+
       "$ref": "List.Limits",
       "$ref": "List.Limits"
+
       "name": "limits"
 
     },
 
     },
 
     {
 
     {
       "name": "sort",
+
       "$ref": "List.Sort",
       "$ref": "List.Sort"
+
       "name": "sort"
 
     }
 
     }
 
   ],
 
   ],
 +
  "permission": "ReadData",
 
   "returns": {
 
   "returns": {
    "type": "object",
 
 
     "properties": {
 
     "properties": {
 +
      "albums": {
 +
        "items": {
 +
          "$ref": "Audio.Details.Album"
 +
        },
 +
        "type": "array"
 +
      },
 
       "limits": {
 
       "limits": {
 
         "$ref": "List.LimitsReturned",
 
         "$ref": "List.LimitsReturned",
 
         "required": true
 
         "required": true
      },
 
      "albums": {
 
        "type": "array",
 
        "items": {
 
          "$ref": "Audio.Details.Album"
 
        }
 
 
       }
 
       }
     }
+
     },
   }
+
    "type": "object"
 +
   },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 1,324: Line 1,350:
 
'''Parameters:'''
 
'''Parameters:'''
 
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
 
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''[[#List.Amount|List.Amount]]'' albumlimit] (The amount of recently added albums from which to return the songs)<br />
+
# [''[[#List.Amount|List.Amount]]'' albumlimit = -1] (The amount of recently added albums from which to return the songs)<br />
 
# [''[[#Audio.Fields.Song|Audio.Fields.Song]]'' properties]<br />
 
# [''[[#Audio.Fields.Song|Audio.Fields.Song]]'' properties]<br />
 
# [''[[#List.Limits|List.Limits]]'' limits]<br />
 
# [''[[#List.Limits|List.Limits]]'' limits]<br />
Line 1,338: Line 1,364:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Retrieve recently added songs",
 
   "description": "Retrieve recently added songs",
  "transport": "Response",
 
  "permission": "ReadData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
      "name": "albumlimit",
 
 
       "$ref": "List.Amount",
 
       "$ref": "List.Amount",
       "description": "The amount of recently added albums from which to return the songs"
+
      "default": -1,
 +
       "description": "The amount of recently added albums from which to return the songs",
 +
      "name": "albumlimit"
 
     },
 
     },
 
     {
 
     {
       "name": "properties",
+
       "$ref": "Audio.Fields.Song",
       "$ref": "Audio.Fields.Song"
+
       "name": "properties"
 
     },
 
     },
 
     {
 
     {
       "name": "limits",
+
       "$ref": "List.Limits",
       "$ref": "List.Limits"
+
       "name": "limits"
 
     },
 
     },
 
     {
 
     {
       "name": "sort",
+
       "$ref": "List.Sort",
       "$ref": "List.Sort"
+
       "name": "sort"
 
     }
 
     }
 
   ],
 
   ],
 +
  "permission": "ReadData",
 
   "returns": {
 
   "returns": {
    "type": "object",
 
 
     "properties": {
 
     "properties": {
 
       "limits": {
 
       "limits": {
Line 1,369: Line 1,393:
 
       },
 
       },
 
       "songs": {
 
       "songs": {
        "type": "array",
 
 
         "items": {
 
         "items": {
 
           "$ref": "Audio.Details.Song"
 
           "$ref": "Audio.Details.Song"
         }
+
         },
 +
        "type": "array"
 
       }
 
       }
     }
+
     },
   }
+
    "type": "object"
 +
   },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 1,392: Line 1,418:
 
'''Type:''' ''object''<br />
 
'''Type:''' ''object''<br />
 
'''Properties:'''
 
'''Properties:'''
 +
# [''array[[#Audio.Details.Album|Audio.Details.Album]]'' albums]<br />
 
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
 
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# [''array[[#Audio.Details.Album|Audio.Details.Album]]'' albums]<br />
 
 
</div>
 
</div>
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Retrieve recently played albums",
 
   "description": "Retrieve recently played albums",
  "transport": "Response",
 
  "permission": "ReadData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
       "name": "properties",
+
       "$ref": "Audio.Fields.Album",
       "$ref": "Audio.Fields.Album"
+
       "name": "properties"
 
     },
 
     },
 
     {
 
     {
       "name": "limits",
+
       "$ref": "List.Limits",
       "$ref": "List.Limits"
+
       "name": "limits"
 
     },
 
     },
 
     {
 
     {
       "name": "sort",
+
       "$ref": "List.Sort",
       "$ref": "List.Sort"
+
       "name": "sort"
 
     }
 
     }
 
   ],
 
   ],
 +
  "permission": "ReadData",
 
   "returns": {
 
   "returns": {
    "type": "object",
 
 
     "properties": {
 
     "properties": {
 +
      "albums": {
 +
        "items": {
 +
          "$ref": "Audio.Details.Album"
 +
        },
 +
        "type": "array"
 +
      },
 
       "limits": {
 
       "limits": {
 
         "$ref": "List.LimitsReturned",
 
         "$ref": "List.LimitsReturned",
 
         "required": true
 
         "required": true
      },
 
      "albums": {
 
        "type": "array",
 
        "items": {
 
          "$ref": "Audio.Details.Album"
 
        }
 
 
       }
 
       }
     }
+
     },
   }
+
    "type": "object"
 +
   },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 1,451: Line 1,476:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Retrieve recently played songs",
 
   "description": "Retrieve recently played songs",
  "transport": "Response",
 
  "permission": "ReadData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
       "name": "properties",
+
       "$ref": "Audio.Fields.Song",
       "$ref": "Audio.Fields.Song"
+
       "name": "properties"
 
     },
 
     },
 
     {
 
     {
       "name": "limits",
+
       "$ref": "List.Limits",
       "$ref": "List.Limits"
+
       "name": "limits"
 
     },
 
     },
 
     {
 
     {
       "name": "sort",
+
       "$ref": "List.Sort",
       "$ref": "List.Sort"
+
       "name": "sort"
 
     }
 
     }
 
   ],
 
   ],
 +
  "permission": "ReadData",
 
   "returns": {
 
   "returns": {
    "type": "object",
 
 
     "properties": {
 
     "properties": {
 
       "limits": {
 
       "limits": {
Line 1,477: Line 1,499:
 
       },
 
       },
 
       "songs": {
 
       "songs": {
        "type": "array",
 
 
         "items": {
 
         "items": {
 
           "$ref": "Audio.Details.Song"
 
           "$ref": "Audio.Details.Song"
         }
+
         },
 +
        "type": "array"
 
       }
 
       }
     }
+
     },
   }
+
    "type": "object"
 +
   },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 1,505: Line 1,529:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Retrieve all contributor roles",
 
   "description": "Retrieve all contributor roles",
  "transport": "Response",
 
  "permission": "ReadData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
       "name": "properties",
+
       "$ref": "Audio.Fields.Role",
       "$ref": "Audio.Fields.Role"
+
       "name": "properties"
 
     },
 
     },
 
     {
 
     {
       "name": "limits",
+
       "$ref": "List.Limits",
       "$ref": "List.Limits"
+
       "name": "limits"
 
     },
 
     },
 
     {
 
     {
       "name": "sort",
+
       "$ref": "List.Sort",
       "$ref": "List.Sort"
+
       "name": "sort"
 
     }
 
     }
 
   ],
 
   ],
 +
  "permission": "ReadData",
 
   "returns": {
 
   "returns": {
    "type": "object",
 
 
     "properties": {
 
     "properties": {
 
       "limits": {
 
       "limits": {
Line 1,531: Line 1,552:
 
       },
 
       },
 
       "roles": {
 
       "roles": {
        "type": "array",
 
        "required": true,
 
 
         "items": {
 
         "items": {
 
           "$ref": "Audio.Details.Role"
 
           "$ref": "Audio.Details.Role"
         }
+
         },
 +
        "required": true,
 +
        "type": "array"
 
       }
 
       }
     }
+
     },
   }
+
    "type": "object"
 +
   },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 1,558: Line 1,581:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Retrieve details about a specific song",
 
   "description": "Retrieve details about a specific song",
  "transport": "Response",
 
  "permission": "ReadData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 +
      "$ref": "Library.Id",
 
       "name": "songid",
 
       "name": "songid",
      "$ref": "Library.Id",
 
 
       "required": true
 
       "required": true
 
     },
 
     },
 
     {
 
     {
       "name": "properties",
+
       "$ref": "Audio.Fields.Song",
       "$ref": "Audio.Fields.Song"
+
       "name": "properties"
 
     }
 
     }
 
   ],
 
   ],
 +
  "permission": "ReadData",
 
   "returns": {
 
   "returns": {
    "type": "object",
 
 
     "properties": {
 
     "properties": {
 
       "songdetails": {
 
       "songdetails": {
 
         "$ref": "Audio.Details.Song"
 
         "$ref": "Audio.Details.Song"
 
       }
 
       }
     }
+
     },
   }
+
    "type": "object"
 +
   },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 1,606: Line 1,628:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Retrieve all songs from specified album, artist or genre",
 
   "description": "Retrieve all songs from specified album, artist or genre",
  "transport": "Response",
 
  "permission": "ReadData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
       "name": "properties",
+
       "$ref": "Audio.Fields.Song",
       "$ref": "Audio.Fields.Song"
+
       "name": "properties"
 
     },
 
     },
 
     {
 
     {
       "name": "limits",
+
       "$ref": "List.Limits",
       "$ref": "List.Limits"
+
       "name": "limits"
 
     },
 
     },
 
     {
 
     {
       "name": "sort",
+
       "$ref": "List.Sort",
       "$ref": "List.Sort"
+
       "name": "sort"
 
     },
 
     },
 
     {
 
     {
Line 1,627: Line 1,646:
 
       "type": [
 
       "type": [
 
         {
 
         {
           "type": "object",
+
           "additionalProperties": false,
 
           "properties": {
 
           "properties": {
 
             "genreid": {
 
             "genreid": {
 
               "$ref": "Library.Id",
 
               "$ref": "Library.Id",
              "required": true,
+
               "description": "Song genre. Filter for existence of songs with this genre",
               "description": "Song genre. Filter for existence of songs with this genre"
+
              "required": true
 
             }
 
             }
 
           },
 
           },
           "additionalProperties": false
+
           "type": "object"
 
         },
 
         },
 
         {
 
         {
           "type": "object",
+
           "additionalProperties": false,
 
           "properties": {
 
           "properties": {
 
             "genre": {
 
             "genre": {
               "type": "string",
+
               "description": "Song genre. Filter for existence of songs with this genre",
 
               "minLength": 1,
 
               "minLength": 1,
 
               "required": true,
 
               "required": true,
               "description": "Song genre. Filter for existence of songs with this genre"
+
               "type": "string"
 
             }
 
             }
 
           },
 
           },
           "additionalProperties": false
+
           "type": "object"
 
         },
 
         },
 
         {
 
         {
           "type": "object",
+
           "additionalProperties": false,
 
           "properties": {
 
           "properties": {
 
             "artistid": {
 
             "artistid": {
Line 1,657: Line 1,676:
 
             }
 
             }
 
           },
 
           },
           "additionalProperties": false
+
           "type": "object"
 
         },
 
         },
 
         {
 
         {
           "type": "object",
+
           "additionalProperties": false,
 
           "properties": {
 
           "properties": {
 
             "artistid": {
 
             "artistid": {
Line 1,671: Line 1,690:
 
             }
 
             }
 
           },
 
           },
           "additionalProperties": false
+
           "type": "object"
 
         },
 
         },
 
         {
 
         {
           "type": "object",
+
           "additionalProperties": false,
 
           "properties": {
 
           "properties": {
 
             "artistid": {
 
             "artistid": {
Line 1,681: Line 1,700:
 
             },
 
             },
 
             "role": {
 
             "role": {
              "type": "string",
 
 
               "minLength": 1,
 
               "minLength": 1,
               "required": true
+
               "required": true,
 +
              "type": "string"
 
             }
 
             }
 
           },
 
           },
           "additionalProperties": false
+
           "type": "object"
 
         },
 
         },
 
         {
 
         {
           "type": "object",
+
           "additionalProperties": false,
 
           "properties": {
 
           "properties": {
 
             "artist": {
 
             "artist": {
              "type": "string",
 
 
               "minLength": 1,
 
               "minLength": 1,
               "required": true
+
               "required": true,
 +
              "type": "string"
 
             }
 
             }
 
           },
 
           },
           "additionalProperties": false
+
           "type": "object"
 
         },
 
         },
 
         {
 
         {
           "type": "object",
+
           "additionalProperties": false,
 
           "properties": {
 
           "properties": {
 
             "artist": {
 
             "artist": {
              "type": "string",
 
 
               "minLength": 1,
 
               "minLength": 1,
               "required": true
+
               "required": true,
 +
              "type": "string"
 
             },
 
             },
 
             "roleid": {
 
             "roleid": {
Line 1,712: Line 1,731:
 
             }
 
             }
 
           },
 
           },
           "additionalProperties": false
+
           "type": "object"
 
         },
 
         },
 
         {
 
         {
           "type": "object",
+
           "additionalProperties": false,
 
           "properties": {
 
           "properties": {
 
             "artist": {
 
             "artist": {
              "type": "string",
 
 
               "minLength": 1,
 
               "minLength": 1,
               "required": true
+
               "required": true,
 +
              "type": "string"
 
             },
 
             },
 
             "role": {
 
             "role": {
              "type": "string",
 
 
               "minLength": 1,
 
               "minLength": 1,
               "required": true
+
               "required": true,
 +
              "type": "string"
 
             }
 
             }
 
           },
 
           },
           "additionalProperties": false
+
           "type": "object"
 
         },
 
         },
 
         {
 
         {
           "type": "object",
+
           "additionalProperties": false,
 
           "properties": {
 
           "properties": {
 
             "albumid": {
 
             "albumid": {
Line 1,738: Line 1,757:
 
             }
 
             }
 
           },
 
           },
           "additionalProperties": false
+
           "type": "object"
 
         },
 
         },
 
         {
 
         {
           "type": "object",
+
           "additionalProperties": false,
 
           "properties": {
 
           "properties": {
 
             "album": {
 
             "album": {
              "type": "string",
 
 
               "minLength": 1,
 
               "minLength": 1,
               "required": true
+
               "required": true,
 +
              "type": "string"
 
             }
 
             }
 
           },
 
           },
           "additionalProperties": false
+
           "type": "object"
 
         },
 
         },
 
         {
 
         {
Line 1,757: Line 1,776:
 
     },
 
     },
 
     {
 
     {
 +
      "default": true,
 +
      "description": "Only songs from albums are returned when false, but overidden when singlesonly parameter is true",
 
       "name": "includesingles",
 
       "name": "includesingles",
       "type": "boolean",
+
       "type": "boolean"
      "default": true,
 
      "description": "Only songs from albums are returned when false, but overidden when singlesonly parameter is true"
 
 
     },
 
     },
 
     {
 
     {
 +
      "default": false,
 +
      "description": "Whether or not to include all roles when filtering by artist, rather than default of excluding other contributors. When true it overrides any role filter value.",
 
       "name": "allroles",
 
       "name": "allroles",
       "type": "boolean",
+
       "type": "boolean"
      "default": false,
 
      "description": "Whether or not to include all roles when filtering by artist, rather than default of excluding other contributors. When true it overrides any role filter value."
 
 
     },
 
     },
 
     {
 
     {
 +
      "default": false,
 +
      "description": "Only singles are returned when true, and overides includesingles parameter",
 
       "name": "singlesonly",
 
       "name": "singlesonly",
       "type": "boolean",
+
       "type": "boolean"
      "default": false,
 
      "description": "Only singles are returned when true, and overides includesingles parameter"
 
 
     }
 
     }
 
   ],
 
   ],
 +
  "permission": "ReadData",
 
   "returns": {
 
   "returns": {
    "type": "object",
 
 
     "properties": {
 
     "properties": {
 
       "limits": {
 
       "limits": {
Line 1,783: Line 1,802:
 
       },
 
       },
 
       "songs": {
 
       "songs": {
        "type": "array",
 
 
         "items": {
 
         "items": {
 
           "$ref": "Audio.Details.Song"
 
           "$ref": "Audio.Details.Song"
         }
+
         },
 +
        "type": "array"
 
       }
 
       }
     }
+
     },
   }
+
    "type": "object"
 +
   },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 1,811: Line 1,832:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Get all music sources, including unique ID",
 
   "description": "Get all music sources, including unique ID",
  "transport": "Response",
 
  "permission": "ReadData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
       "name": "properties",
+
       "$ref": "Library.Fields.Source",
       "$ref": "Library.Fields.Source"
+
       "name": "properties"
 
     },
 
     },
 
     {
 
     {
       "name": "limits",
+
       "$ref": "List.Limits",
       "$ref": "List.Limits"
+
       "name": "limits"
 
     },
 
     },
 
     {
 
     {
       "name": "sort",
+
       "$ref": "List.Sort",
       "$ref": "List.Sort"
+
       "name": "sort"
 
     }
 
     }
 
   ],
 
   ],
 +
  "permission": "ReadData",
 
   "returns": {
 
   "returns": {
    "type": "object",
 
 
     "properties": {
 
     "properties": {
 
       "limits": {
 
       "limits": {
Line 1,837: Line 1,855:
 
       },
 
       },
 
       "sources": {
 
       "sources": {
        "type": "array",
 
        "required": true,
 
 
         "items": {
 
         "items": {
 
           "$ref": "Library.Details.Source"
 
           "$ref": "Library.Details.Source"
         }
+
         },
 +
        "required": true,
 +
        "type": "array"
 
       }
 
       }
     }
+
     },
   }
+
    "type": "object"
 +
   },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 1,862: Line 1,882:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Scans the audio sources for new library items",
 
   "description": "Scans the audio sources for new library items",
  "transport": "Response",
 
  "permission": "UpdateData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 +
      "default": "",
 
       "name": "directory",
 
       "name": "directory",
       "type": "string",
+
       "type": "string"
      "default": ""
 
 
     },
 
     },
 
     {
 
     {
 +
      "default": true,
 +
      "description": "Whether or not to show the progress bar or any other GUI dialog",
 
       "name": "showdialogs",
 
       "name": "showdialogs",
       "type": "boolean",
+
       "type": "boolean"
      "default": true,
 
      "description": "Whether or not to show the progress bar or any other GUI dialog"
 
 
     }
 
     }
 
   ],
 
   ],
   "returns": "string"
+
  "permission": "UpdateData",
 +
   "returns": {
 +
    "type": "string"
 +
  },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 1,889: Line 1,910:
 
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
 
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
 
# ''[[#Library.Id|Library.Id]]'' albumid<br />
 
# ''[[#Library.Id|Library.Id]]'' albumid<br />
# [''[[#Optional.String|Optional.String]]'' title]<br />
+
# [''[[#Optional.String|Optional.String]]'' title = None]<br />
# [''mixed: [[#Array.String|Array.String]]'' artist = None]<br />
+
# [''mixed: null|[[#Array.String|Array.String]]'' artist = None]<br />
# [''[[#Optional.String|Optional.String]]'' description]<br />
+
# [''[[#Optional.String|Optional.String]]'' description = None]<br />
# [''mixed: [[#Array.String|Array.String]]'' genre = None]<br />
+
# [''mixed: null|[[#Array.String|Array.String]]'' genre = None]<br />
# [''mixed: [[#Array.String|Array.String]]'' theme = None]<br />
+
# [''mixed: null|[[#Array.String|Array.String]]'' theme = None]<br />
# [''mixed: [[#Array.String|Array.String]]'' mood = None]<br />
+
# [''mixed: null|[[#Array.String|Array.String]]'' mood = None]<br />
# [''mixed: [[#Array.String|Array.String]]'' style = None]<br />
+
# [''mixed: null|[[#Array.String|Array.String]]'' style = None]<br />
# [''[[#Optional.String|Optional.String]]'' type]<br />
+
# [''[[#Optional.String|Optional.String]]'' type = None]<br />
# [''[[#Optional.String|Optional.String]]'' albumlabel]<br />
+
# [''[[#Optional.String|Optional.String]]'' albumlabel = None]<br />
# [''[[#Optional.Number|Optional.Number]]'' rating]<br />
+
# [''[[#Optional.Number|Optional.Number]]'' rating = None]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' year]<br />
+
# [''[[#Optional.Integer|Optional.Integer]]'' year = None]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' userrating]<br />
+
# [''[[#Optional.Integer|Optional.Integer]]'' userrating = None]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' votes]<br />
+
# [''[[#Optional.Integer|Optional.Integer]]'' votes = None]<br />
# [''[[#Optional.String|Optional.String]]'' musicbrainzalbumid]<br />
+
# [''[[#Optional.String|Optional.String]]'' musicbrainzalbumid = None]<br />
# [''[[#Optional.String|Optional.String]]'' musicbrainzreleasegroupid]<br />
+
# [''[[#Optional.String|Optional.String]]'' musicbrainzreleasegroupid = None]<br />
# [''[[#Optional.String|Optional.String]]'' sortartist]<br />
+
# [''[[#Optional.String|Optional.String]]'' sortartist = None]<br />
# [''[[#Optional.String|Optional.String]]'' displayartist]<br />
+
# [''[[#Optional.String|Optional.String]]'' displayartist = None]<br />
# [''mixed: [[#Array.String|Array.String]]'' musicbrainzalbumartistid = None]<br />
+
# [''mixed: null|[[#Array.String|Array.String]]'' musicbrainzalbumartistid = None]<br />
# [''mixed: [[#Media.Artwork.Set|Media.Artwork.Set]]'' art = None]<br />
+
# [''mixed: null|[[#Media.Artwork.Set|Media.Artwork.Set]]'' art = None]<br />
# [''[[#Optional.Boolean|Optional.Boolean]]'' isboxset]<br />
+
# [''[[#Optional.Boolean|Optional.Boolean]]'' isboxset = None]<br />
# [''[[#Optional.String|Optional.String]]'' releasedate]<br />
+
# [''[[#Optional.String|Optional.String]]'' releasedate = None]<br />
# [''[[#Optional.String|Optional.String]]'' originaldate]<br />
+
# [''[[#Optional.String|Optional.String]]'' originaldate = None]<br />
 
</div>
 
</div>
 
'''Returns:'''  
 
'''Returns:'''  
Line 1,918: Line 1,939:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Update the given album with the given details",
 
   "description": "Update the given album with the given details",
  "transport": "Response",
 
  "permission": "UpdateData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 +
      "$ref": "Library.Id",
 
       "name": "albumid",
 
       "name": "albumid",
      "$ref": "Library.Id",
 
 
       "required": true
 
       "required": true
 
     },
 
     },
 
     {
 
     {
       "name": "title",
+
       "$ref": "Optional.String",
       "$ref": "Optional.String"
+
      "default": null,
 +
       "name": "title"
 
     },
 
     },
 
     {
 
     {
 +
      "default": null,
 
       "name": "artist",
 
       "name": "artist",
 
       "type": [
 
       "type": [
        "null",
 
 
         {
 
         {
           "$ref": "Array.String",
+
           "type": "null"
           "required": true
+
        },
 +
        {
 +
           "$ref": "Array.String"
 
         }
 
         }
       ],
+
       ]
      "default": null
 
 
     },
 
     },
 
     {
 
     {
       "name": "description",
+
       "$ref": "Optional.String",
       "$ref": "Optional.String"
+
      "default": null,
 +
       "name": "description"
 
     },
 
     },
 
     {
 
     {
 +
      "default": null,
 
       "name": "genre",
 
       "name": "genre",
 
       "type": [
 
       "type": [
        "null",
 
 
         {
 
         {
           "$ref": "Array.String",
+
           "type": "null"
           "required": true
+
        },
 +
        {
 +
           "$ref": "Array.String"
 
         }
 
         }
       ],
+
       ]
      "default": null
 
 
     },
 
     },
 
     {
 
     {
 +
      "default": null,
 
       "name": "theme",
 
       "name": "theme",
 
       "type": [
 
       "type": [
        "null",
 
 
         {
 
         {
           "$ref": "Array.String",
+
           "type": "null"
           "required": true
+
        },
 +
        {
 +
           "$ref": "Array.String"
 
         }
 
         }
       ],
+
       ]
      "default": null
 
 
     },
 
     },
 
     {
 
     {
 +
      "default": null,
 
       "name": "mood",
 
       "name": "mood",
 
       "type": [
 
       "type": [
        "null",
 
 
         {
 
         {
           "$ref": "Array.String",
+
           "type": "null"
           "required": true
+
        },
 +
        {
 +
           "$ref": "Array.String"
 
         }
 
         }
       ],
+
       ]
      "default": null
 
 
     },
 
     },
 
     {
 
     {
 +
      "default": null,
 
       "name": "style",
 
       "name": "style",
 
       "type": [
 
       "type": [
        "null",
 
 
         {
 
         {
           "$ref": "Array.String",
+
           "type": "null"
           "required": true
+
        },
 +
        {
 +
           "$ref": "Array.String"
 
         }
 
         }
       ],
+
       ]
      "default": null
 
 
     },
 
     },
 
     {
 
     {
       "name": "type",
+
       "$ref": "Optional.String",
       "$ref": "Optional.String"
+
      "default": null,
 +
       "name": "type"
 
     },
 
     },
 
     {
 
     {
       "name": "albumlabel",
+
       "$ref": "Optional.String",
       "$ref": "Optional.String"
+
      "default": null,
 +
       "name": "albumlabel"
 
     },
 
     },
 
     {
 
     {
       "name": "rating",
+
       "$ref": "Optional.Number",
       "$ref": "Optional.Number"
+
      "default": null,
 +
       "name": "rating"
 
     },
 
     },
 
     {
 
     {
       "name": "year",
+
       "$ref": "Optional.Integer",
       "$ref": "Optional.Integer"
+
      "default": null,
 +
       "name": "year"
 
     },
 
     },
 
     {
 
     {
       "name": "userrating",
+
       "$ref": "Optional.Integer",
       "$ref": "Optional.Integer"
+
      "default": null,
 +
       "name": "userrating"
 
     },
 
     },
 
     {
 
     {
       "name": "votes",
+
       "$ref": "Optional.Integer",
       "$ref": "Optional.Integer"
+
      "default": null,
 +
       "name": "votes"
 
     },
 
     },
 
     {
 
     {
       "name": "musicbrainzalbumid",
+
       "$ref": "Optional.String",
       "$ref": "Optional.String"
+
      "default": null,
 +
       "name": "musicbrainzalbumid"
 
     },
 
     },
 
     {
 
     {
       "name": "musicbrainzreleasegroupid",
+
       "$ref": "Optional.String",
       "$ref": "Optional.String"
+
      "default": null,
 +
       "name": "musicbrainzreleasegroupid"
 
     },
 
     },
 
     {
 
     {
       "name": "sortartist",
+
       "$ref": "Optional.String",
       "$ref": "Optional.String"
+
      "default": null,
 +
       "name": "sortartist"
 
     },
 
     },
 
     {
 
     {
       "name": "displayartist",
+
       "$ref": "Optional.String",
       "$ref": "Optional.String"
+
      "default": null,
 +
       "name": "displayartist"
 
     },
 
     },
 
     {
 
     {
 +
      "default": null,
 
       "name": "musicbrainzalbumartistid",
 
       "name": "musicbrainzalbumartistid",
 
       "type": [
 
       "type": [
        "null",
 
 
         {
 
         {
           "$ref": "Array.String",
+
           "type": "null"
           "required": true
+
        },
 +
        {
 +
           "$ref": "Array.String"
 
         }
 
         }
       ],
+
       ]
      "default": null
 
 
     },
 
     },
 
     {
 
     {
 +
      "default": null,
 
       "name": "art",
 
       "name": "art",
 
       "type": [
 
       "type": [
        "null",
 
 
         {
 
         {
           "$ref": "Media.Artwork.Set",
+
          "type": "null"
          "required": true
+
        },
 +
        {
 +
           "$ref": "Media.Artwork.Set"
 
         }
 
         }
       ],
+
       ]
      "default": null
 
 
     },
 
     },
 
     {
 
     {
       "name": "isboxset",
+
       "$ref": "Optional.Boolean",
       "$ref": "Optional.Boolean"
+
      "default": null,
 +
       "name": "isboxset"
 
     },
 
     },
 
     {
 
     {
       "name": "releasedate",
+
       "$ref": "Optional.String",
       "$ref": "Optional.String"
+
      "default": null,
 +
       "name": "releasedate"
 
     },
 
     },
 
     {
 
     {
       "name": "originaldate",
+
       "$ref": "Optional.String",
       "$ref": "Optional.String"
+
      "default": null,
 +
       "name": "originaldate"
 
     }
 
     }
 
   ],
 
   ],
   "returns": "string"
+
  "permission": "UpdateData",
 +
   "returns": {
 +
    "type": "string"
 +
  },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 2,076: Line 2,120:
 
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
 
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
 
# ''[[#Library.Id|Library.Id]]'' artistid<br />
 
# ''[[#Library.Id|Library.Id]]'' artistid<br />
# [''[[#Optional.String|Optional.String]]'' artist]<br />
+
# [''[[#Optional.String|Optional.String]]'' artist = None]<br />
# [''mixed: [[#Array.String|Array.String]]'' instrument = None]<br />
+
# [''mixed: null|[[#Array.String|Array.String]]'' instrument = None]<br />
# [''mixed: [[#Array.String|Array.String]]'' style = None]<br />
+
# [''mixed: null|[[#Array.String|Array.String]]'' style = None]<br />
# [''mixed: [[#Array.String|Array.String]]'' mood = None]<br />
+
# [''mixed: null|[[#Array.String|Array.String]]'' mood = None]<br />
# [''[[#Optional.String|Optional.String]]'' born]<br />
+
# [''[[#Optional.String|Optional.String]]'' born = None]<br />
# [''[[#Optional.String|Optional.String]]'' formed]<br />
+
# [''[[#Optional.String|Optional.String]]'' formed = None]<br />
# [''[[#Optional.String|Optional.String]]'' description]<br />
+
# [''[[#Optional.String|Optional.String]]'' description = None]<br />
# [''mixed: [[#Array.String|Array.String]]'' genre = None]<br />
+
# [''mixed: null|[[#Array.String|Array.String]]'' genre = None]<br />
# [''[[#Optional.String|Optional.String]]'' died]<br />
+
# [''[[#Optional.String|Optional.String]]'' died = None]<br />
# [''[[#Optional.String|Optional.String]]'' disbanded]<br />
+
# [''[[#Optional.String|Optional.String]]'' disbanded = None]<br />
# [''mixed: [[#Array.String|Array.String]]'' yearsactive = None]<br />
+
# [''mixed: null|[[#Array.String|Array.String]]'' yearsactive = None]<br />
# [''[[#Optional.String|Optional.String]]'' musicbrainzartistid]<br />
+
# [''[[#Optional.String|Optional.String]]'' musicbrainzartistid = None]<br />
# [''[[#Optional.String|Optional.String]]'' sortname]<br />
+
# [''[[#Optional.String|Optional.String]]'' sortname = None]<br />
# [''[[#Optional.String|Optional.String]]'' type]<br />
+
# [''[[#Optional.String|Optional.String]]'' type = None]<br />
# [''[[#Optional.String|Optional.String]]'' gender]<br />
+
# [''[[#Optional.String|Optional.String]]'' gender = None]<br />
# [''[[#Optional.String|Optional.String]]'' disambiguation]<br />
+
# [''[[#Optional.String|Optional.String]]'' disambiguation = None]<br />
# [''mixed: [[#Media.Artwork.Set|Media.Artwork.Set]]'' art = None]<br />
+
# [''mixed: null|[[#Media.Artwork.Set|Media.Artwork.Set]]'' art = None]<br />
 
</div>
 
</div>
 
'''Returns:'''  
 
'''Returns:'''  
Line 2,100: Line 2,144:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Update the given artist with the given details",
 
   "description": "Update the given artist with the given details",
  "transport": "Response",
 
  "permission": "UpdateData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 +
      "$ref": "Library.Id",
 
       "name": "artistid",
 
       "name": "artistid",
      "$ref": "Library.Id",
 
 
       "required": true
 
       "required": true
 
     },
 
     },
 
     {
 
     {
       "name": "artist",
+
       "$ref": "Optional.String",
       "$ref": "Optional.String"
+
      "default": null,
 +
       "name": "artist"
 
     },
 
     },
 
     {
 
     {
 +
      "default": null,
 
       "name": "instrument",
 
       "name": "instrument",
 
       "type": [
 
       "type": [
        "null",
 
 
         {
 
         {
           "$ref": "Array.String",
+
           "type": "null"
           "required": true
+
        },
 +
        {
 +
           "$ref": "Array.String"
 
         }
 
         }
       ],
+
       ]
      "default": null
 
 
     },
 
     },
 
     {
 
     {
 +
      "default": null,
 
       "name": "style",
 
       "name": "style",
 
       "type": [
 
       "type": [
        "null",
 
 
         {
 
         {
           "$ref": "Array.String",
+
           "type": "null"
           "required": true
+
        },
 +
        {
 +
           "$ref": "Array.String"
 
         }
 
         }
       ],
+
       ]
      "default": null
 
 
     },
 
     },
 
     {
 
     {
 +
      "default": null,
 
       "name": "mood",
 
       "name": "mood",
 
       "type": [
 
       "type": [
        "null",
 
 
         {
 
         {
           "$ref": "Array.String",
+
           "type": "null"
           "required": true
+
        },
 +
        {
 +
           "$ref": "Array.String"
 
         }
 
         }
       ],
+
       ]
      "default": null
 
 
     },
 
     },
 
     {
 
     {
       "name": "born",
+
       "$ref": "Optional.String",
       "$ref": "Optional.String"
+
      "default": null,
 +
       "name": "born"
 
     },
 
     },
 
     {
 
     {
       "name": "formed",
+
       "$ref": "Optional.String",
       "$ref": "Optional.String"
+
      "default": null,
 +
       "name": "formed"
 
     },
 
     },
 
     {
 
     {
       "name": "description",
+
       "$ref": "Optional.String",
       "$ref": "Optional.String"
+
      "default": null,
 +
       "name": "description"
 
     },
 
     },
 
     {
 
     {
 +
      "default": null,
 
       "name": "genre",
 
       "name": "genre",
 
       "type": [
 
       "type": [
        "null",
 
 
         {
 
         {
           "$ref": "Array.String",
+
           "type": "null"
           "required": true
+
        },
 +
        {
 +
           "$ref": "Array.String"
 
         }
 
         }
       ],
+
       ]
      "default": null
 
 
     },
 
     },
 
     {
 
     {
       "name": "died",
+
       "$ref": "Optional.String",
       "$ref": "Optional.String"
+
      "default": null,
 +
       "name": "died"
 
     },
 
     },
 
     {
 
     {
       "name": "disbanded",
+
       "$ref": "Optional.String",
       "$ref": "Optional.String"
+
      "default": null,
 +
       "name": "disbanded"
 
     },
 
     },
 
     {
 
     {
 +
      "default": null,
 
       "name": "yearsactive",
 
       "name": "yearsactive",
 
       "type": [
 
       "type": [
        "null",
 
 
         {
 
         {
           "$ref": "Array.String",
+
           "type": "null"
           "required": true
+
        },
 +
        {
 +
           "$ref": "Array.String"
 
         }
 
         }
       ],
+
       ]
      "default": null
 
 
     },
 
     },
 
     {
 
     {
       "name": "musicbrainzartistid",
+
       "$ref": "Optional.String",
       "$ref": "Optional.String"
+
      "default": null,
 +
       "name": "musicbrainzartistid"
 
     },
 
     },
 
     {
 
     {
       "name": "sortname",
+
       "$ref": "Optional.String",
       "$ref": "Optional.String"
+
      "default": null,
 +
       "name": "sortname"
 
     },
 
     },
 
     {
 
     {
       "name": "type",
+
       "$ref": "Optional.String",
       "$ref": "Optional.String"
+
      "default": null,
 +
       "name": "type"
 
     },
 
     },
 
     {
 
     {
       "name": "gender",
+
       "$ref": "Optional.String",
       "$ref": "Optional.String"
+
      "default": null,
 +
       "name": "gender"
 
     },
 
     },
 
     {
 
     {
       "name": "disambiguation",
+
       "$ref": "Optional.String",
       "$ref": "Optional.String"
+
      "default": null,
 +
       "name": "disambiguation"
 
     },
 
     },
 
     {
 
     {
 +
      "default": null,
 
       "name": "art",
 
       "name": "art",
 
       "type": [
 
       "type": [
        "null",
 
 
         {
 
         {
           "$ref": "Media.Artwork.Set",
+
          "type": "null"
          "required": true
+
        },
 +
        {
 +
           "$ref": "Media.Artwork.Set"
 
         }
 
         }
       ],
+
       ]
      "default": null
 
 
     }
 
     }
 
   ],
 
   ],
   "returns": "string"
+
  "permission": "UpdateData",
 +
   "returns": {
 +
    "type": "string"
 +
  },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 2,231: Line 2,293:
 
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
 
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
 
# ''[[#Library.Id|Library.Id]]'' songid<br />
 
# ''[[#Library.Id|Library.Id]]'' songid<br />
# [''[[#Optional.String|Optional.String]]'' title]<br />
+
# [''[[#Optional.String|Optional.String]]'' title = None]<br />
# [''mixed: [[#Array.String|Array.String]]'' artist = None]<br />
+
# [''mixed: null|[[#Array.String|Array.String]]'' artist = None]<br />
# [''mixed: [[#Array.String|Array.String]]'' genre = None]<br />
+
# [''mixed: null|[[#Array.String|Array.String]]'' genre = None]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' year]<br />
+
# [''[[#Optional.Integer|Optional.Integer]]'' year = None]<br />
# [''[[#Optional.Number|Optional.Number]]'' rating]<br />
+
# [''[[#Optional.Number|Optional.Number]]'' rating = None]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' track]<br />
+
# [''[[#Optional.Integer|Optional.Integer]]'' track = None]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' disc]<br />
+
# [''[[#Optional.Integer|Optional.Integer]]'' disc = None]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' duration]<br />
+
# [''[[#Optional.Integer|Optional.Integer]]'' duration = None]<br />
# [''[[#Optional.String|Optional.String]]'' comment]<br />
+
# [''[[#Optional.String|Optional.String]]'' comment = None]<br />
# [''[[#Optional.String|Optional.String]]'' musicbrainztrackid]<br />
+
# [''[[#Optional.String|Optional.String]]'' musicbrainztrackid = None]<br />
# [''[[#Optional.String|Optional.String]]'' musicbrainzartistid]<br />
+
# [''[[#Optional.String|Optional.String]]'' musicbrainzartistid = None]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' playcount]<br />
+
# [''[[#Optional.Integer|Optional.Integer]]'' playcount = None]<br />
# [''[[#Optional.String|Optional.String]]'' lastplayed]<br />
+
# [''[[#Optional.String|Optional.String]]'' lastplayed = None]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' userrating]<br />
+
# [''[[#Optional.Integer|Optional.Integer]]'' userrating = None]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' votes]<br />
+
# [''[[#Optional.Integer|Optional.Integer]]'' votes = None]<br />
# [''[[#Optional.String|Optional.String]]'' displayartist]<br />
+
# [''[[#Optional.String|Optional.String]]'' displayartist = None]<br />
# [''[[#Optional.String|Optional.String]]'' sortartist]<br />
+
# [''[[#Optional.String|Optional.String]]'' sortartist = None]<br />
# [''[[#Optional.String|Optional.String]]'' mood]<br />
+
# [''[[#Optional.String|Optional.String]]'' mood = None]<br />
# [''mixed: [[#Media.Artwork.Set|Media.Artwork.Set]]'' art = None]<br />
+
# [''mixed: null|[[#Media.Artwork.Set|Media.Artwork.Set]]'' art = None]<br />
# [''[[#Optional.String|Optional.String]]'' disctitle]<br />
+
# [''[[#Optional.String|Optional.String]]'' disctitle = None]<br />
# [''[[#Optional.String|Optional.String]]'' releasedate]<br />
+
# [''[[#Optional.String|Optional.String]]'' releasedate = None]<br />
# [''[[#Optional.String|Optional.String]]'' originaldate]<br />
+
# [''[[#Optional.String|Optional.String]]'' originaldate = None]<br />
# [''[[#Optional.Integer|Optional.Integer]]'' bpm]<br />
+
# [''[[#Optional.Integer|Optional.Integer]]'' bpm = None]<br />
 
</div>
 
</div>
 
'''Returns:'''  
 
'''Returns:'''  
Line 2,261: Line 2,323:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Update the given song with the given details",
 
   "description": "Update the given song with the given details",
  "transport": "Response",
 
  "permission": "UpdateData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 +
      "$ref": "Library.Id",
 
       "name": "songid",
 
       "name": "songid",
      "$ref": "Library.Id",
 
 
       "required": true
 
       "required": true
 
     },
 
     },
 
     {
 
     {
       "name": "title",
+
       "$ref": "Optional.String",
       "$ref": "Optional.String"
+
      "default": null,
 +
       "name": "title"
 
     },
 
     },
 
     {
 
     {
 +
      "default": null,
 
       "name": "artist",
 
       "name": "artist",
 
       "type": [
 
       "type": [
        "null",
 
 
         {
 
         {
           "$ref": "Array.String",
+
           "type": "null"
           "required": true
+
        },
 +
        {
 +
           "$ref": "Array.String"
 
         }
 
         }
       ],
+
       ]
      "default": null
 
 
     },
 
     },
 
     {
 
     {
 +
      "default": null,
 
       "name": "genre",
 
       "name": "genre",
 
       "type": [
 
       "type": [
        "null",
 
 
         {
 
         {
           "$ref": "Array.String",
+
           "type": "null"
           "required": true
+
        },
 +
        {
 +
           "$ref": "Array.String"
 
         }
 
         }
       ],
+
       ]
      "default": null
 
 
     },
 
     },
 
     {
 
     {
       "name": "year",
+
       "$ref": "Optional.Integer",
       "$ref": "Optional.Integer"
+
      "default": null,
 +
       "name": "year"
 
     },
 
     },
 
     {
 
     {
       "name": "rating",
+
       "$ref": "Optional.Number",
       "$ref": "Optional.Number"
+
      "default": null,
 +
       "name": "rating"
 
     },
 
     },
 
     {
 
     {
       "name": "track",
+
       "$ref": "Optional.Integer",
       "$ref": "Optional.Integer"
+
      "default": null,
 +
       "name": "track"
 
     },
 
     },
 
     {
 
     {
       "name": "disc",
+
       "$ref": "Optional.Integer",
       "$ref": "Optional.Integer"
+
      "default": null,
 +
       "name": "disc"
 
     },
 
     },
 
     {
 
     {
       "name": "duration",
+
       "$ref": "Optional.Integer",
       "$ref": "Optional.Integer"
+
      "default": null,
 +
       "name": "duration"
 
     },
 
     },
 
     {
 
     {
       "name": "comment",
+
       "$ref": "Optional.String",
       "$ref": "Optional.String"
+
      "default": null,
 +
       "name": "comment"
 
     },
 
     },
 
     {
 
     {
       "name": "musicbrainztrackid",
+
       "$ref": "Optional.String",
       "$ref": "Optional.String"
+
      "default": null,
 +
       "name": "musicbrainztrackid"
 
     },
 
     },
 
     {
 
     {
       "name": "musicbrainzartistid",
+
       "$ref": "Optional.String",
       "$ref": "Optional.String"
+
      "default": null,
 +
       "name": "musicbrainzartistid"
 
     },
 
     },
 
     {
 
     {
       "name": "playcount",
+
       "$ref": "Optional.Integer",
       "$ref": "Optional.Integer"
+
      "default": null,
 +
       "name": "playcount"
 
     },
 
     },
 
     {
 
     {
       "name": "lastplayed",
+
       "$ref": "Optional.String",
       "$ref": "Optional.String"
+
      "default": null,
 +
       "name": "lastplayed"
 
     },
 
     },
 
     {
 
     {
       "name": "userrating",
+
       "$ref": "Optional.Integer",
       "$ref": "Optional.Integer"
+
      "default": null,
 +
       "name": "userrating"
 
     },
 
     },
 
     {
 
     {
       "name": "votes",
+
       "$ref": "Optional.Integer",
       "$ref": "Optional.Integer"
+
      "default": null,
 +
       "name": "votes"
 
     },
 
     },
 
     {
 
     {
       "name": "displayartist",
+
       "$ref": "Optional.String",
       "$ref": "Optional.String"
+
      "default": null,
 +
       "name": "displayartist"
 
     },
 
     },
 
     {
 
     {
       "name": "sortartist",
+
       "$ref": "Optional.String",
       "$ref": "Optional.String"
+
      "default": null,
 +
       "name": "sortartist"
 
     },
 
     },
 
     {
 
     {
       "name": "mood",
+
       "$ref": "Optional.String",
       "$ref": "Optional.String"
+
      "default": null,
 +
       "name": "mood"
 
     },
 
     },
 
     {
 
     {
 +
      "default": null,
 
       "name": "art",
 
       "name": "art",
 
       "type": [
 
       "type": [
        "null",
 
 
         {
 
         {
           "$ref": "Media.Artwork.Set",
+
          "type": "null"
          "required": true
+
        },
 +
        {
 +
           "$ref": "Media.Artwork.Set"
 
         }
 
         }
       ],
+
       ]
      "default": null
 
 
     },
 
     },
 
     {
 
     {
       "name": "disctitle",
+
       "$ref": "Optional.String",
       "$ref": "Optional.String"
+
      "default": null,
 +
       "name": "disctitle"
 
     },
 
     },
 
     {
 
     {
       "name": "releasedate",
+
       "$ref": "Optional.String",
       "$ref": "Optional.String"
+
      "default": null,
 +
       "name": "releasedate"
 
     },
 
     },
 
     {
 
     {
       "name": "originaldate",
+
       "$ref": "Optional.String",
       "$ref": "Optional.String"
+
      "default": null,
 +
       "name": "originaldate"
 
     },
 
     },
 
     {
 
     {
       "name": "bpm",
+
       "$ref": "Optional.Integer",
       "$ref": "Optional.Integer"
+
      "default": null,
 +
       "name": "bpm"
 
     }
 
     }
 
   ],
 
   ],
   "returns": "string"
+
  "permission": "UpdateData",
 +
   "returns": {
 +
    "type": "string"
 +
  },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 2,397: Line 2,483:
 
# ''string'' title<br />
 
# ''string'' title<br />
 
# ''[[#Favourite.Type|Favourite.Type]]'' type<br />
 
# ''[[#Favourite.Type|Favourite.Type]]'' type<br />
# [''[[#Optional.String|Optional.String]]'' path] (Required for media, script and androidapp favourites types)<br />
+
# [''[[#Optional.String|Optional.String]]'' path = None] (Required for media, script and androidapp favourites types)<br />
# [''[[#Optional.String|Optional.String]]'' window] (Required for window favourite type)<br />
+
# [''[[#Optional.String|Optional.String]]'' window = None] (Required for window favourite type)<br />
# [''[[#Optional.String|Optional.String]]'' windowparameter]<br />
+
# [''[[#Optional.String|Optional.String]]'' windowparameter = None]<br />
# [''[[#Optional.String|Optional.String]]'' thumbnail]<br />
+
# [''[[#Optional.String|Optional.String]]'' thumbnail = None]<br />
 
</div>
 
</div>
 
'''Returns:'''  
 
'''Returns:'''  
Line 2,408: Line 2,494:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Add a favourite with the given details",
 
   "description": "Add a favourite with the given details",
  "transport": "Response",
 
  "permission": "UpdateData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 
       "name": "title",
 
       "name": "title",
       "type": "string",
+
       "required": true,
       "required": true
+
       "type": "string"
 
     },
 
     },
 
     {
 
     {
 +
      "$ref": "Favourite.Type",
 
       "name": "type",
 
       "name": "type",
      "$ref": "Favourite.Type",
 
 
       "required": true
 
       "required": true
 
     },
 
     },
 
     {
 
     {
      "name": "path",
 
 
       "$ref": "Optional.String",
 
       "$ref": "Optional.String",
       "description": "Required for media, script and androidapp favourites types"
+
      "default": null,
 +
       "description": "Required for media, script and androidapp favourites types",
 +
      "name": "path"
 
     },
 
     },
 
     {
 
     {
      "name": "window",
 
 
       "$ref": "Optional.String",
 
       "$ref": "Optional.String",
       "description": "Required for window favourite type"
+
      "default": null,
 +
       "description": "Required for window favourite type",
 +
      "name": "window"
 
     },
 
     },
 
     {
 
     {
       "name": "windowparameter",
+
       "$ref": "Optional.String",
       "$ref": "Optional.String"
+
      "default": null,
 +
       "name": "windowparameter"
 
     },
 
     },
 
     {
 
     {
       "name": "thumbnail",
+
       "$ref": "Optional.String",
       "$ref": "Optional.String"
+
      "default": null,
 +
       "name": "thumbnail"
 
     }
 
     }
 
   ],
 
   ],
   "returns": "string"
+
  "permission": "UpdateData",
 +
   "returns": {
 +
    "type": "string"
 +
  },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 2,451: Line 2,542:
 
'''Parameters:'''
 
'''Parameters:'''
 
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
 
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# [''mixed: [[#Favourite.Type|Favourite.Type]]'' type = None]<br />
+
# [''mixed: null|[[#Favourite.Type|Favourite.Type]]'' type = None]<br />
 
# [''[[#Favourite.Fields.Favourite|Favourite.Fields.Favourite]]'' properties]<br />
 
# [''[[#Favourite.Fields.Favourite|Favourite.Fields.Favourite]]'' properties]<br />
 
</div>
 
</div>
Line 2,458: Line 2,549:
 
'''Type:''' ''object''<br />
 
'''Type:''' ''object''<br />
 
'''Properties:'''
 
'''Properties:'''
 +
# [''array[[#Favourite.Details.Favourite|Favourite.Details.Favourite]]'' favourites]<br />
 
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
 
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# [''array[[#Favourite.Details.Favourite|Favourite.Details.Favourite]]'' favourites]<br />
 
 
</div>
 
</div>
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Retrieve all favourites",
 
   "description": "Retrieve all favourites",
  "transport": "Response",
 
  "permission": "ReadData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 +
      "default": null,
 
       "name": "type",
 
       "name": "type",
 
       "type": [
 
       "type": [
         "null",
+
         {
 +
          "type": "null"
 +
        },
 
         {
 
         {
 
           "$ref": "Favourite.Type"
 
           "$ref": "Favourite.Type"
 
         }
 
         }
       ],
+
       ]
      "default": null
 
 
     },
 
     },
 
     {
 
     {
       "name": "properties",
+
       "$ref": "Favourite.Fields.Favourite",
       "$ref": "Favourite.Fields.Favourite"
+
       "name": "properties"
 
     }
 
     }
 
   ],
 
   ],
 +
  "permission": "ReadData",
 
   "returns": {
 
   "returns": {
    "type": "object",
 
 
     "properties": {
 
     "properties": {
 +
      "favourites": {
 +
        "items": {
 +
          "$ref": "Favourite.Details.Favourite"
 +
        },
 +
        "type": "array"
 +
      },
 
       "limits": {
 
       "limits": {
 
         "$ref": "List.LimitsReturned",
 
         "$ref": "List.LimitsReturned",
 
         "required": true
 
         "required": true
      },
 
      "favourites": {
 
        "type": "array",
 
        "items": {
 
          "$ref": "Favourite.Details.Favourite"
 
        }
 
 
       }
 
       }
     }
+
     },
   }
+
    "type": "object"
 +
   },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
 
=== Files ===
 
=== Files ===
==== Files.Download ====
 
Downloads the given file<br />
 
'''Permissions:'''
 
* ReadData
 
'''Parameters:'''
 
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
 
# ''string'' path<br />
 
</div>
 
'''Returns:'''
 
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
 
'''Type:''' ''any''<br />
 
</div>
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
  "type": "method",
 
  "description": "Downloads the given file",
 
  "transport": [
 
    "Response",
 
    "FileDownloadDirect"
 
  ],
 
  "permission": "ReadData",
 
  "params": [
 
    {
 
      "name": "path",
 
      "type": "string",
 
      "required": true
 
    }
 
  ],
 
  "returns": {
 
    "type": "any",
 
    "required": true
 
  }
 
}
 
</syntaxhighlight>}}
 
 
==== Files.GetDirectory ====
 
==== Files.GetDirectory ====
 
Get the directories and files in the given directory<br />
 
Get the directories and files in the given directory<br />
Line 2,551: Line 2,609:
 
'''Type:''' ''object''<br />
 
'''Type:''' ''object''<br />
 
'''Properties:'''
 
'''Properties:'''
 +
# ''array[[#List.Item.File|List.Item.File]]'' files<br />
 
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
 
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# ''array[[#List.Item.File|List.Item.File]]'' files<br />
 
 
</div>
 
</div>
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Get the directories and files in the given directory",
 
   "description": "Get the directories and files in the given directory",
  "transport": "Response",
 
  "permission": "ReadData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 
       "name": "directory",
 
       "name": "directory",
       "type": "string",
+
       "required": true,
       "required": true
+
       "type": "string"
 
     },
 
     },
 
     {
 
     {
      "name": "media",
 
 
       "$ref": "Files.Media",
 
       "$ref": "Files.Media",
       "default": "files"
+
       "default": "files",
 +
      "name": "media"
 
     },
 
     },
 
     {
 
     {
       "name": "properties",
+
       "$ref": "List.Fields.Files",
       "$ref": "List.Fields.Files"
+
       "name": "properties"
 
     },
 
     },
 
     {
 
     {
       "name": "sort",
+
       "$ref": "List.Sort",
       "$ref": "List.Sort"
+
       "name": "sort"
 
     },
 
     },
 
     {
 
     {
      "name": "limits",
 
 
       "$ref": "List.Limits",
 
       "$ref": "List.Limits",
       "description": "Limits are applied after getting the directory content thus retrieval is not faster when they are applied."
+
       "description": "Limits are applied after getting the directory content thus retrieval is not faster when they are applied.",
 +
      "name": "limits"
 
     }
 
     }
 
   ],
 
   ],
 +
  "permission": "ReadData",
 
   "returns": {
 
   "returns": {
    "type": "object",
 
 
     "properties": {
 
     "properties": {
      "limits": {
 
        "$ref": "List.LimitsReturned",
 
        "required": true
 
      },
 
 
       "files": {
 
       "files": {
        "type": "array",
 
 
         "items": {
 
         "items": {
 
           "$ref": "List.Item.File"
 
           "$ref": "List.Item.File"
 
         },
 
         },
 +
        "required": true,
 +
        "type": "array"
 +
      },
 +
      "limits": {
 +
        "$ref": "List.LimitsReturned",
 
         "required": true
 
         "required": true
 
       }
 
       }
     }
+
     },
   }
+
    "type": "object"
 +
   },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 2,621: Line 2,678:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Get details for a specific file",
 
   "description": "Get details for a specific file",
  "transport": "Response",
 
  "permission": "ReadData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 +
      "description": "Full path to the file",
 
       "name": "file",
 
       "name": "file",
      "type": "string",
 
 
       "required": true,
 
       "required": true,
       "description": "Full path to the file"
+
       "type": "string"
 
     },
 
     },
 
     {
 
     {
      "name": "media",
 
 
       "$ref": "Files.Media",
 
       "$ref": "Files.Media",
       "default": "files"
+
       "default": "files",
 +
      "name": "media"
 
     },
 
     },
 
     {
 
     {
       "name": "properties",
+
       "$ref": "List.Fields.Files",
       "$ref": "List.Fields.Files"
+
       "name": "properties"
 
     }
 
     }
 
   ],
 
   ],
 +
  "permission": "ReadData",
 
   "returns": {
 
   "returns": {
    "type": "object",
 
 
     "properties": {
 
     "properties": {
 
       "filedetails": {
 
       "filedetails": {
Line 2,649: Line 2,703:
 
         "required": true
 
         "required": true
 
       }
 
       }
     }
+
     },
   }
+
    "type": "object"
 +
   },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 2,672: Line 2,728:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Get the sources of the media windows",
 
   "description": "Get the sources of the media windows",
  "transport": "Response",
 
  "permission": "ReadData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 +
      "$ref": "Files.Media",
 
       "name": "media",
 
       "name": "media",
      "$ref": "Files.Media",
 
 
       "required": true
 
       "required": true
 
     },
 
     },
 
     {
 
     {
       "name": "limits",
+
       "$ref": "List.Limits",
       "$ref": "List.Limits"
+
       "name": "limits"
 
     },
 
     },
 
     {
 
     {
       "name": "sort",
+
       "$ref": "List.Sort",
       "$ref": "List.Sort"
+
       "name": "sort"
 
     }
 
     }
 
   ],
 
   ],
 +
  "permission": "ReadData",
 
   "returns": {
 
   "returns": {
    "type": "object",
 
 
     "properties": {
 
     "properties": {
 
       "limits": {
 
       "limits": {
Line 2,702: Line 2,755:
 
         "required": true
 
         "required": true
 
       }
 
       }
     }
+
     },
   }
+
    "type": "object"
 +
   },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
==== Files.PrepareDownload ====
+
==== Files.SetFileDetails ====
Provides a way to download a given file (e.g. providing an URL to the real file location)<br />
+
Update the given specific file with the given details<br />
 
'''Permissions:'''
 
'''Permissions:'''
* ReadData
+
* UpdateData
 
'''Parameters:'''
 
'''Parameters:'''
 
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
 
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
# ''string'' path<br />
+
# ''string'' file (Full path to the file)<br />
 +
# ''[[#Files.Media|Files.Media]]'' media (File type to update correct database. Currently only "video" is supported.)<br />
 +
# [''[[#Optional.Integer|Optional.Integer]]'' playcount = None]<br />
 +
# [''[[#Optional.String|Optional.String]]'' lastplayed = None] (Setting a valid lastplayed without a playcount will force playcount to 1.)<br />
 +
# [''mixed: null|[[#Video.Resume|Video.Resume]]'' resume = None]<br />
 
</div>
 
</div>
 
'''Returns:'''  
 
'''Returns:'''  
 
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
 
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
'''Type:''' ''object''<br />
+
'''Type:''' ''string''<br />
'''Properties:'''
 
# ''string'' protocol<br />
 
# ''any'' details (Transport specific details on how/from where to download the given file)<br />
 
# ''string'' mode (Direct mode allows using Files.Download whereas redirect mode requires the usage of a different protocol)<br />
 
 
</div>
 
</div>
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
  "description": "Provides a way to download a given file (e.g. providing an URL to the real file location)",
 
  "transport": [
 
    "Response",
 
    "FileDownloadRedirect"
 
  ],
 
  "permission": "ReadData",
 
  "params": [
 
    {
 
      "name": "path",
 
      "type": "string",
 
      "required": true
 
    }
 
  ],
 
  "returns": {
 
    "type": "object",
 
    "properties": {
 
      "protocol": {
 
        "type": "string",
 
        "enum": [
 
          "http"
 
        ],
 
        "required": true
 
      },
 
      "details": {
 
        "type": "any",
 
        "required": true,
 
        "description": "Transport specific details on how/from where to download the given file"
 
      },
 
      "mode": {
 
        "type": "string",
 
        "enum": [
 
          "redirect",
 
          "direct"
 
        ],
 
        "required": true,
 
        "description": "Direct mode allows using Files.Download whereas redirect mode requires the usage of a different protocol"
 
      }
 
    }
 
  }
 
}
 
</syntaxhighlight>}}
 
==== Files.SetFileDetails ====
 
Update the given specific file with the given details<br />
 
'''Permissions:'''
 
* UpdateData
 
'''Parameters:'''
 
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
 
# ''string'' file (Full path to the file)<br />
 
# ''[[#Files.Media|Files.Media]]'' media (File type to update correct database. Currently only "video" is supported.)<br />
 
# [''[[#Optional.Integer|Optional.Integer]]'' playcount]<br />
 
# [''[[#Optional.String|Optional.String]]'' lastplayed] (Setting a valid lastplayed without a playcount will force playcount to 1.)<br />
 
# [''mixed: [[#Video.Resume|Video.Resume]]'' resume = None]<br />
 
</div>
 
'''Returns:'''
 
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
 
'''Type:''' ''string''<br />
 
</div>
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
  "type": "method",
 
 
   "description": "Update the given specific file with the given details",
 
   "description": "Update the given specific file with the given details",
  "transport": "Response",
 
  "permission": "UpdateData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 +
      "description": "Full path to the file",
 
       "name": "file",
 
       "name": "file",
      "type": "string",
 
 
       "required": true,
 
       "required": true,
       "description": "Full path to the file"
+
       "type": "string"
 
     },
 
     },
 
     {
 
     {
 +
      "$ref": "Files.Media",
 +
      "description": "File type to update correct database. Currently only \"video\" is supported.",
 
       "name": "media",
 
       "name": "media",
      "$ref": "Files.Media",
+
       "required": true
       "required": true,
 
      "description": "File type to update correct database. Currently only \"video\" is supported."
 
 
     },
 
     },
 
     {
 
     {
       "name": "playcount",
+
       "$ref": "Optional.Integer",
       "$ref": "Optional.Integer"
+
      "default": null,
 +
       "name": "playcount"
 
     },
 
     },
 
     {
 
     {
      "name": "lastplayed",
 
 
       "$ref": "Optional.String",
 
       "$ref": "Optional.String",
       "description": "Setting a valid lastplayed without a playcount will force playcount to 1."
+
      "default": null,
 +
       "description": "Setting a valid lastplayed without a playcount will force playcount to 1.",
 +
      "name": "lastplayed"
 
     },
 
     },
 
     {
 
     {
 +
      "default": null,
 
       "name": "resume",
 
       "name": "resume",
 
       "type": [
 
       "type": [
        "null",
 
 
         {
 
         {
           "$ref": "Video.Resume",
+
           "type": "null"
           "required": true
+
        },
 +
        {
 +
           "$ref": "Video.Resume"
 
         }
 
         }
       ],
+
       ]
      "default": null
 
 
     }
 
     }
 
   ],
 
   ],
   "returns": "string"
+
  "permission": "UpdateData",
 +
   "returns": {
 +
    "type": "string"
 +
  },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 2,841: Line 2,840:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Activates the given window",
 
   "description": "Activates the given window",
  "transport": "Response",
 
  "permission": "ControlGUI",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 +
      "$ref": "GUI.Window",
 
       "name": "window",
 
       "name": "window",
      "$ref": "GUI.Window",
 
 
       "required": true
 
       "required": true
 
     },
 
     },
 
     {
 
     {
      "name": "parameters",
 
      "type": "array",
 
 
       "items": {
 
       "items": {
        "type": "string",
 
 
         "minLength": 1,
 
         "minLength": 1,
         "required": true
+
         "type": "string"
 
       },
 
       },
       "minItems": 1
+
       "minItems": 1,
 +
      "name": "parameters",
 +
      "type": "array"
 
     }
 
     }
 
   ],
 
   ],
   "returns": "string"
+
  "permission": "ControlGUI",
 +
   "returns": {
 +
    "type": "string"
 +
  },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 2,879: Line 2,878:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Retrieves the values of the given properties",
 
   "description": "Retrieves the values of the given properties",
  "transport": "Response",
 
  "permission": "ReadData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 +
      "items": {
 +
        "$ref": "GUI.Property.Name"
 +
      },
 
       "name": "properties",
 
       "name": "properties",
 +
      "required": true,
 
       "type": "array",
 
       "type": "array",
       "uniqueItems": true,
+
       "uniqueItems": true
      "required": true,
 
      "items": {
 
        "$ref": "GUI.Property.Name"
 
      }
 
 
     }
 
     }
 
   ],
 
   ],
 +
  "permission": "ReadData",
 
   "returns": {
 
   "returns": {
     "$ref": "GUI.Property.Value",
+
     "$ref": "GUI.Property.Value"
    "required": true
+
  },
  }
+
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 2,912: Line 2,909:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Returns the supported stereoscopic modes of the GUI",
 
   "description": "Returns the supported stereoscopic modes of the GUI",
   "transport": "Response",
+
   "params": [],
 
   "permission": "ReadData",
 
   "permission": "ReadData",
  "params": [],
 
 
   "returns": {
 
   "returns": {
    "type": "object",
 
 
     "properties": {
 
     "properties": {
 
       "stereoscopicmodes": {
 
       "stereoscopicmodes": {
        "type": "array",
 
        "uniqueItems": true,
 
 
         "items": {
 
         "items": {
 
           "$ref": "GUI.Stereoscopy.Mode"
 
           "$ref": "GUI.Stereoscopy.Mode"
         }
+
         },
 +
        "type": "array",
 +
        "uniqueItems": true
 
       }
 
       }
     }
+
     },
   }
+
    "type": "object"
 +
   },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 2,945: Line 2,941:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Toggle fullscreen/GUI",
 
   "description": "Toggle fullscreen/GUI",
  "transport": "Response",
 
  "permission": "ControlGUI",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 +
      "$ref": "Global.Toggle",
 
       "name": "fullscreen",
 
       "name": "fullscreen",
       "required": true,
+
       "required": true
      "$ref": "Global.Toggle"
 
 
     }
 
     }
 
   ],
 
   ],
 +
  "permission": "ControlGUI",
 
   "returns": {
 
   "returns": {
     "type": "boolean",
+
     "description": "Fullscreen state",
     "description": "Fullscreen state"
+
     "type": "boolean"
   }
+
   },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 2,976: Line 2,971:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Sets the stereoscopic mode of the GUI to the given mode",
 
   "description": "Sets the stereoscopic mode of the GUI to the given mode",
  "transport": "Response",
 
  "permission": "ControlGUI",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
       "name": "mode",
+
       "enums": [
      "type": "string",
 
      "enum": [
 
 
         "toggle",
 
         "toggle",
 
         "tomono",
 
         "tomono",
Line 2,999: Line 2,989:
 
         "monoscopic"
 
         "monoscopic"
 
       ],
 
       ],
       "required": true
+
      "name": "mode",
 +
       "required": true,
 +
      "type": "string"
 
     }
 
     }
 
   ],
 
   ],
   "returns": "string"
+
  "permission": "ControlGUI",
 +
   "returns": {
 +
    "type": "string"
 +
  },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 3,022: Line 3,018:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Shows a GUI notification",
 
   "description": "Shows a GUI notification",
  "transport": "Response",
 
  "permission": "ControlGUI",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 
       "name": "title",
 
       "name": "title",
       "type": "string",
+
       "required": true,
       "required": true
+
       "type": "string"
 
     },
 
     },
 
     {
 
     {
 
       "name": "message",
 
       "name": "message",
       "type": "string",
+
       "required": true,
       "required": true
+
       "type": "string"
 
     },
 
     },
 
     {
 
     {
 +
      "default": "",
 
       "name": "image",
 
       "name": "image",
 
       "type": [
 
       "type": [
 
         {
 
         {
           "type": "string",
+
           "enums": [
          "required": true,
 
          "enum": [
 
 
             "info",
 
             "info",
 
             "warning",
 
             "warning",
 
             "error"
 
             "error"
           ]
+
           ],
 +
          "type": "string"
 
         },
 
         },
 
         {
 
         {
           "type": "string",
+
           "type": "string"
          "required": true
 
 
         }
 
         }
       ],
+
       ]
      "default": ""
 
 
     },
 
     },
 
     {
 
     {
 +
      "default": 5000,
 +
      "description": "The time in milliseconds the notification will be visible",
 +
      "minimum": 1500,
 
       "name": "displaytime",
 
       "name": "displaytime",
       "type": "integer",
+
       "type": "integer"
      "minimum": 1500,
 
      "default": 5000,
 
      "description": "The time in milliseconds the notification will be visible"
 
 
     }
 
     }
 
   ],
 
   ],
   "returns": "string"
+
  "permission": "ControlGUI",
 +
   "returns": {
 +
    "type": "string"
 +
  },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 3,078: Line 3,073:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Goes back in GUI",
 
   "description": "Goes back in GUI",
   "transport": "Response",
+
   "params": [],
 
   "permission": "Navigate",
 
   "permission": "Navigate",
   "params": [],
+
   "returns": {
   "returns": "string"
+
    "type": "string"
 +
  },
 +
   "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 3,094: Line 3,090:
 
# ''string'' button (Button name)<br />
 
# ''string'' button (Button name)<br />
 
# ''string'' keymap (Keymap name (KB, XG, R1, or R2))<br />
 
# ''string'' keymap (Keymap name (KB, XG, R1, or R2))<br />
# ''integer'' holdtime = 0 (Number of milliseconds to simulate button hold.)<br />
+
# [''integer'' holdtime = 0] (Number of milliseconds to simulate button hold.)<br />
 
</div>
 
</div>
 
'''Returns:'''  
 
'''Returns:'''  
Line 3,102: Line 3,098:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Send a button press event",
 
   "description": "Send a button press event",
  "transport": "Response",
 
  "permission": "Navigate",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 +
      "description": "Button name",
 
       "name": "button",
 
       "name": "button",
      "type": "string",
 
 
       "required": true,
 
       "required": true,
       "description": "Button name"
+
       "type": "string"
 
     },
 
     },
 
     {
 
     {
      "name": "keymap",
 
      "type": "string",
 
      "required": true,
 
 
       "description": "Keymap name (KB, XG, R1, or R2)",
 
       "description": "Keymap name (KB, XG, R1, or R2)",
       "enum": [
+
       "enums": [
 
         "KB",
 
         "KB",
 
         "XG",
 
         "XG",
 
         "R1",
 
         "R1",
 
         "R2"
 
         "R2"
       ]
+
       ],
 +
      "name": "keymap",
 +
      "required": true,
 +
      "type": "string"
 
     },
 
     },
 
     {
 
     {
 +
      "default": 0,
 +
      "description": "Number of milliseconds to simulate button hold.",
 +
      "minimum": 0,
 
       "name": "holdtime",
 
       "name": "holdtime",
       "type": "integer",
+
       "type": "integer"
      "required": false,
 
      "minimum": 0,
 
      "default": 0,
 
      "description": "Number of milliseconds to simulate button hold."
 
 
     }
 
     }
 
   ],
 
   ],
   "returns": "string"
+
  "permission": "Navigate",
 +
   "returns": {
 +
    "type": "string"
 +
  },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 3,147: Line 3,143:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Shows the context menu",
 
   "description": "Shows the context menu",
   "transport": "Response",
+
   "params": [],
 
   "permission": "Navigate",
 
   "permission": "Navigate",
   "params": [],
+
   "returns": {
   "returns": "string"
+
    "type": "string"
 +
  },
 +
   "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 3,165: Line 3,162:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Navigate down in GUI",
 
   "description": "Navigate down in GUI",
   "transport": "Response",
+
   "params": [],
 
   "permission": "Navigate",
 
   "permission": "Navigate",
   "params": [],
+
   "returns": {
   "returns": "string"
+
    "type": "string"
 +
  },
 +
   "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 3,187: Line 3,185:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Execute a specific action",
 
   "description": "Execute a specific action",
  "transport": "Response",
 
  "permission": "Navigate",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 +
      "$ref": "Input.Action",
 
       "name": "action",
 
       "name": "action",
      "$ref": "Input.Action",
 
 
       "required": true
 
       "required": true
 
     }
 
     }
 
   ],
 
   ],
   "returns": "string"
+
  "permission": "Navigate",
 +
   "returns": {
 +
    "type": "string"
 +
  },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 3,211: Line 3,210:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Goes to home window in GUI",
 
   "description": "Goes to home window in GUI",
   "transport": "Response",
+
   "params": [],
 
   "permission": "Navigate",
 
   "permission": "Navigate",
   "params": [],
+
   "returns": {
   "returns": "string"
+
    "type": "string"
 +
  },
 +
   "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 3,229: Line 3,229:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Shows the information dialog",
 
   "description": "Shows the information dialog",
   "transport": "Response",
+
   "params": [],
 
   "permission": "Navigate",
 
   "permission": "Navigate",
   "params": [],
+
   "returns": {
   "returns": "string"
+
    "type": "string"
 +
  },
 +
   "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 3,247: Line 3,248:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Navigate left in GUI",
 
   "description": "Navigate left in GUI",
   "transport": "Response",
+
   "params": [],
 
   "permission": "Navigate",
 
   "permission": "Navigate",
   "params": [],
+
   "returns": {
   "returns": "string"
+
    "type": "string"
 +
  },
 +
   "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 3,265: Line 3,267:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Navigate right in GUI",
 
   "description": "Navigate right in GUI",
   "transport": "Response",
+
   "params": [],
 
   "permission": "Navigate",
 
   "permission": "Navigate",
   "params": [],
+
   "returns": {
   "returns": "string"
+
    "type": "string"
 +
  },
 +
   "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 3,283: Line 3,286:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Select current item in GUI",
 
   "description": "Select current item in GUI",
   "transport": "Response",
+
   "params": [],
 
   "permission": "Navigate",
 
   "permission": "Navigate",
   "params": [],
+
   "returns": {
   "returns": "string"
+
    "type": "string"
 +
  },
 +
   "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 3,306: Line 3,310:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Send a generic (unicode) text",
 
   "description": "Send a generic (unicode) text",
  "transport": "Response",
 
  "permission": "Navigate",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 +
      "description": "Unicode text",
 
       "name": "text",
 
       "name": "text",
      "type": "string",
 
 
       "required": true,
 
       "required": true,
       "description": "Unicode text"
+
       "type": "string"
 
     },
 
     },
 
     {
 
     {
 +
      "default": true,
 +
      "description": "Whether this is the whole input or not (closes an open input dialog if true).",
 
       "name": "done",
 
       "name": "done",
       "type": "boolean",
+
       "type": "boolean"
      "default": true,
 
      "description": "Whether this is the whole input or not (closes an open input dialog if true)."
 
 
     }
 
     }
 
   ],
 
   ],
   "returns": "string"
+
  "permission": "Navigate",
 +
   "returns": {
 +
    "type": "string"
 +
  },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 3,337: Line 3,342:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Show codec information of the playing item",
 
   "description": "Show codec information of the playing item",
   "transport": "Response",
+
   "params": [],
 
   "permission": "Navigate",
 
   "permission": "Navigate",
   "params": [],
+
   "returns": {
   "returns": "string"
+
    "type": "string"
 +
  },
 +
   "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 3,355: Line 3,361:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Show the on-screen display for the current player",
 
   "description": "Show the on-screen display for the current player",
   "transport": "Response",
+
   "params": [],
 
   "permission": "Navigate",
 
   "permission": "Navigate",
   "params": [],
+
   "returns": {
   "returns": "string"
+
    "type": "string"
 +
  },
 +
   "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 3,373: Line 3,380:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Show player process information of the playing item, like video decoder, pixel format, pvr signal strength, ...",
 
   "description": "Show player process information of the playing item, like video decoder, pixel format, pvr signal strength, ...",
   "transport": "Response",
+
   "params": [],
 
   "permission": "Navigate",
 
   "permission": "Navigate",
   "params": [],
+
   "returns": {
   "returns": "string"
+
    "type": "string"
 +
  },
 +
   "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 3,391: Line 3,399:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Navigate up in GUI",
 
   "description": "Navigate up in GUI",
   "transport": "Response",
+
   "params": [],
 
   "permission": "Navigate",
 
   "permission": "Navigate",
   "params": [],
+
   "returns": {
   "returns": "string"
+
    "type": "string"
 +
  },
 +
   "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
 
=== JSONRPC ===
 
=== JSONRPC ===
==== JSONRPC.GetConfiguration ====
+
==== JSONRPC.Introspect ====
Get client-specific configurations<br />
+
Enumerates all actions and descriptions<br />
 
'''Permissions:'''
 
'''Permissions:'''
 
* ReadData
 
* ReadData
'''Returns:'''
+
'''Parameters:'''
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
 
'''Type:''' ''[[#Configuration|Configuration]]''<br />
 
</div>
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
  "type": "method",
 
  "description": "Get client-specific configurations",
 
  "transport": "Announcing",
 
  "permission": "ReadData",
 
  "params": [],
 
  "returns": {
 
    "$ref": "Configuration"
 
  }
 
}
 
</syntaxhighlight>}}
 
==== JSONRPC.Introspect ====
 
Enumerates all actions and descriptions<br />
 
'''Permissions:'''
 
* ReadData
 
'''Parameters:'''
 
 
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
 
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
 
# [''boolean'' getdescriptions = True]<br />
 
# [''boolean'' getdescriptions = True]<br />
Line 3,437: Line 3,426:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Enumerates all actions and descriptions",
 
   "description": "Enumerates all actions and descriptions",
  "transport": "Response",
 
  "permission": "ReadData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 +
      "default": true,
 
       "name": "getdescriptions",
 
       "name": "getdescriptions",
       "type": "boolean",
+
       "type": "boolean"
      "default": true
 
 
     },
 
     },
 
     {
 
     {
 +
      "default": false,
 
       "name": "getmetadata",
 
       "name": "getmetadata",
       "type": "boolean",
+
       "type": "boolean"
      "default": false
 
 
     },
 
     },
 
     {
 
     {
 +
      "default": true,
 
       "name": "filterbytransport",
 
       "name": "filterbytransport",
       "type": "boolean",
+
       "type": "boolean"
      "default": true
 
 
     },
 
     },
 
     {
 
     {
 
       "name": "filter",
 
       "name": "filter",
      "type": "object",
 
 
       "properties": {
 
       "properties": {
 +
        "getreferences": {
 +
          "default": true,
 +
          "description": "Whether or not to print the schema for referenced types",
 +
          "type": "boolean"
 +
        },
 
         "id": {
 
         "id": {
           "type": "string",
+
           "description": "Name of a namespace, method or type",
 
           "required": true,
 
           "required": true,
           "description": "Name of a namespace, method or type"
+
           "type": "string"
 
         },
 
         },
 
         "type": {
 
         "type": {
           "type": "string",
+
           "description": "Type of the given name",
           "required": true,
+
           "enums": [
          "enum": [
 
 
             "method",
 
             "method",
 
             "namespace",
 
             "namespace",
Line 3,475: Line 3,464:
 
             "notification"
 
             "notification"
 
           ],
 
           ],
           "description": "Type of the given name"
+
           "required": true,
        },
+
           "type": "string"
        "getreferences": {
 
           "type": "boolean",
 
          "default": true,
 
          "description": "Whether or not to print the schema for referenced types"
 
 
         }
 
         }
       }
+
       },
 +
      "type": "object"
 
     }
 
     }
 
   ],
 
   ],
   "returns": "object"
+
  "permission": "ReadData",
 +
   "returns": {
 +
    "additionalProperties": false,
 +
    "type": "object"
 +
  },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 3,504: Line 3,495:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Notify all other connected clients",
 
   "description": "Notify all other connected clients",
  "transport": "Response",
 
  "permission": "ReadData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 
       "name": "sender",
 
       "name": "sender",
       "type": "string",
+
       "required": true,
       "required": true
+
       "type": "string"
 
     },
 
     },
 
     {
 
     {
 
       "name": "message",
 
       "name": "message",
       "type": "string",
+
       "required": true,
       "required": true
+
       "type": "string"
 
     },
 
     },
 
     {
 
     {
 +
      "default": null,
 
       "name": "data",
 
       "name": "data",
       "type": "any",
+
       "type": "any"
      "default": null
 
 
     }
 
     }
 
   ],
 
   ],
   "returns": "any"
+
  "permission": "ReadData",
 +
   "returns": {
 +
    "type": "any"
 +
  },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 3,536: Line 3,528:
 
'''Type:''' ''object''<br />
 
'''Type:''' ''object''<br />
 
'''Properties:'''
 
'''Properties:'''
# ''boolean'' ReadData<br />
+
# ''boolean'' controlgui<br />
# ''boolean'' ControlPlayback<br />
+
# ''boolean'' controlnotify<br />
# ''boolean'' ControlNotify<br />
+
# ''boolean'' controlplayback<br />
# ''boolean'' ControlPower<br />
+
# ''boolean'' controlpower<br />
# ''boolean'' UpdateData<br />
+
# ''boolean'' controlpvr<br />
# ''boolean'' RemoveData<br />
+
# ''boolean'' controlsystem<br />
# ''boolean'' Navigate<br />
+
# ''boolean'' executeaddon<br />
# ''boolean'' WriteFile<br />
+
# ''boolean'' manageaddon<br />
# ''boolean'' ControlSystem<br />
+
# ''boolean'' navigate<br />
# ''boolean'' ControlGUI<br />
+
# ''boolean'' readdata<br />
# ''boolean'' ManageAddon<br />
+
# ''boolean'' removedata<br />
# ''boolean'' ExecuteAddon<br />
+
# ''boolean'' updatedata<br />
# ''boolean'' ControlPVR<br />
+
# ''boolean'' writefile<br />
 
</div>
 
</div>
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Retrieve the clients permissions",
 
   "description": "Retrieve the clients permissions",
   "transport": "Response",
+
   "params": [],
 
   "permission": "ReadData",
 
   "permission": "ReadData",
  "params": [],
 
 
   "returns": {
 
   "returns": {
    "type": "object",
 
 
     "properties": {
 
     "properties": {
       "ReadData": {
+
       "controlgui": {
         "type": "boolean",
+
         "required": true,
         "required": true
+
         "type": "boolean"
 
       },
 
       },
       "ControlPlayback": {
+
       "controlnotify": {
         "type": "boolean",
+
         "required": true,
         "required": true
+
         "type": "boolean"
 
       },
 
       },
       "ControlNotify": {
+
       "controlplayback": {
         "type": "boolean",
+
         "required": true,
         "required": true
+
         "type": "boolean"
 
       },
 
       },
       "ControlPower": {
+
       "controlpower": {
         "type": "boolean",
+
         "required": true,
         "required": true
+
         "type": "boolean"
 
       },
 
       },
       "UpdateData": {
+
       "controlpvr": {
         "type": "boolean",
+
         "required": true,
         "required": true
+
         "type": "boolean"
 
       },
 
       },
       "RemoveData": {
+
       "controlsystem": {
         "type": "boolean",
+
         "required": true,
         "required": true
+
         "type": "boolean"
 
       },
 
       },
       "Navigate": {
+
       "executeaddon": {
         "type": "boolean",
+
         "required": true,
         "required": true
+
         "type": "boolean"
 
       },
 
       },
       "WriteFile": {
+
       "manageaddon": {
         "type": "boolean",
+
         "required": true,
         "required": true
+
         "type": "boolean"
 
       },
 
       },
       "ControlSystem": {
+
       "navigate": {
         "type": "boolean",
+
         "required": true,
         "required": true
+
         "type": "boolean"
 
       },
 
       },
       "ControlGUI": {
+
       "readdata": {
         "type": "boolean",
+
         "required": true,
         "required": true
+
         "type": "boolean"
 
       },
 
       },
       "ManageAddon": {
+
       "removedata": {
         "type": "boolean",
+
         "required": true,
         "required": true
+
         "type": "boolean"
 
       },
 
       },
       "ExecuteAddon": {
+
       "updatedata": {
         "type": "boolean",
+
         "required": true,
         "required": true
+
         "type": "boolean"
 
       },
 
       },
       "ControlPVR": {
+
       "writefile": {
         "type": "boolean",
+
         "required": true,
         "required": true
+
         "type": "boolean"
 
       }
 
       }
     }
+
     },
   }
+
    "type": "object"
 +
   },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 3,626: Line 3,617:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Ping responder",
 
   "description": "Ping responder",
   "transport": "Response",
+
   "params": [],
 
   "permission": "ReadData",
 
   "permission": "ReadData",
  "params": [],
 
  "returns": "string"
 
}
 
</syntaxhighlight>}}
 
==== JSONRPC.SetConfiguration ====
 
Change the client-specific configuration<br />
 
'''Permissions:'''
 
* ControlNotify
 
'''Parameters:'''
 
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
 
# [''object'' notifications]<br />
 
</div>
 
'''Returns:'''
 
<div style="margin-left: 20px; width: 60%; padding: 0px 5px 0px 5px; border-width: 1px; border-style: solid; border-color: #AAAAAA">
 
'''Type:''' ''[[#Configuration|Configuration]]''<br />
 
</div>
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
  "type": "method",
 
  "description": "Change the client-specific configuration",
 
  "transport": "Announcing",
 
  "permission": "ControlNotify",
 
  "params": [
 
    {
 
      "name": "notifications",
 
      "type": "object",
 
      "properties": {
 
        "Player": {
 
          "$ref": "Optional.Boolean"
 
        },
 
        "Playlist": {
 
          "$ref": "Optional.Boolean"
 
        },
 
        "GUI": {
 
          "$ref": "Optional.Boolean"
 
        },
 
        "System": {
 
          "$ref": "Optional.Boolean"
 
        },
 
        "AudioLibrary": {
 
          "$ref": "Optional.Boolean"
 
        },
 
        "VideoLibrary": {
 
          "$ref": "Optional.Boolean"
 
        },
 
        "Application": {
 
          "$ref": "Optional.Boolean"
 
        },
 
        "Input": {
 
          "$ref": "Optional.Boolean"
 
        },
 
        "Other": {
 
          "$ref": "Optional.Boolean"
 
        }
 
      }
 
    }
 
  ],
 
 
   "returns": {
 
   "returns": {
     "$ref": "Configuration"
+
     "type": "string"
   }
+
   },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 3,704: Line 3,638:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Retrieve the JSON-RPC protocol version.",
 
   "description": "Retrieve the JSON-RPC protocol version.",
   "transport": "Response",
+
   "params": [],
 
   "permission": "ReadData",
 
   "permission": "ReadData",
  "params": [],
 
 
   "returns": {
 
   "returns": {
    "type": "object",
 
 
     "properties": {
 
     "properties": {
 
       "version": {
 
       "version": {
        "type": "object",
 
        "required": true,
 
 
         "properties": {
 
         "properties": {
 
           "major": {
 
           "major": {
             "type": "integer",
+
             "description": "Bumped on backwards incompatible changes to the API definition",
 
             "minimum": 0,
 
             "minimum": 0,
 
             "required": true,
 
             "required": true,
             "description": "Bumped on backwards incompatible changes to the API definition"
+
             "type": "integer"
 
           },
 
           },
 
           "minor": {
 
           "minor": {
             "type": "integer",
+
             "description": "Bumped on backwards compatible additions/changes to the API definition",
 
             "minimum": 0,
 
             "minimum": 0,
 
             "required": true,
 
             "required": true,
             "description": "Bumped on backwards compatible additions/changes to the API definition"
+
             "type": "integer"
 
           },
 
           },
 
           "patch": {
 
           "patch": {
             "type": "integer",
+
             "description": "Bumped on any changes to the internal implementation but not to the API definition",
 
             "minimum": 0,
 
             "minimum": 0,
 
             "required": true,
 
             "required": true,
             "description": "Bumped on any changes to the internal implementation but not to the API definition"
+
             "type": "integer"
 
           }
 
           }
         }
+
         },
 +
        "required": true,
 +
        "type": "object"
 
       }
 
       }
     }
+
     },
   }
+
    "type": "object"
 +
   },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 3,756: Line 3,689:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Adds a timer to record the given show one times or a timer rule to record all showings of the given show",
 
   "description": "Adds a timer to record the given show one times or a timer rule to record all showings of the given show",
  "transport": "Response",
 
  "permission": "ControlPVR",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 +
      "$ref": "Library.Id",
 +
      "description": "the broadcast id of the item to record",
 
       "name": "broadcastid",
 
       "name": "broadcastid",
      "$ref": "Library.Id",
+
       "required": true
       "required": true,
 
      "description": "the broadcast id of the item to record"
 
 
     },
 
     },
 
     {
 
     {
 +
      "default": false,
 +
      "description": "controls whether to create a timer rule or a onetime timer",
 
       "name": "timerrule",
 
       "name": "timerrule",
       "type": "boolean",
+
       "type": "boolean"
      "default": false,
 
      "description": "controls whether to create a timer rule or a onetime timer"
 
 
     }
 
     }
 
   ],
 
   ],
   "returns": "string"
+
  "permission": "ControlPVR",
 +
   "returns": {
 +
    "type": "string"
 +
  },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 3,791: Line 3,725:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Deletes a onetime timer or a timer rule",
 
   "description": "Deletes a onetime timer or a timer rule",
  "transport": "Response",
 
  "permission": "ControlPVR",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 +
      "$ref": "Library.Id",
 +
      "description": "the id of the onetime timer or timer rule to delete",
 
       "name": "timerid",
 
       "name": "timerid",
      "$ref": "Library.Id",
+
       "required": true
       "required": true,
 
      "description": "the id of the onetime timer or timer rule to delete"
 
 
     }
 
     }
 
   ],
 
   ],
   "returns": "string"
+
  "permission": "ControlPVR",
 +
   "returns": {
 +
    "type": "string"
 +
  },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 3,823: Line 3,758:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Retrieves the details of a specific broadcast",
 
   "description": "Retrieves the details of a specific broadcast",
  "transport": "Response",
 
  "permission": "ReadData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 +
      "$ref": "Library.Id",
 
       "name": "broadcastid",
 
       "name": "broadcastid",
      "$ref": "Library.Id",
 
 
       "required": true
 
       "required": true
 
     },
 
     },
 
     {
 
     {
       "name": "properties",
+
       "$ref": "PVR.Fields.Broadcast",
       "$ref": "PVR.Fields.Broadcast"
+
       "name": "properties"
 
     }
 
     }
 
   ],
 
   ],
 +
  "permission": "ReadData",
 
   "returns": {
 
   "returns": {
    "type": "object",
 
 
     "properties": {
 
     "properties": {
 
       "broadcastdetails": {
 
       "broadcastdetails": {
 
         "$ref": "PVR.Details.Broadcast"
 
         "$ref": "PVR.Details.Broadcast"
 
       }
 
       }
     }
+
     },
   }
+
    "type": "object"
 +
   },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 3,862: Line 3,796:
 
'''Type:''' ''object''<br />
 
'''Type:''' ''object''<br />
 
'''Properties:'''
 
'''Properties:'''
 +
# ''array[[#PVR.Details.Broadcast|PVR.Details.Broadcast]]'' broadcasts<br />
 
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
 
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# ''array[[#PVR.Details.Broadcast|PVR.Details.Broadcast]]'' broadcasts<br />
 
 
</div>
 
</div>
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Retrieves the program of a specific channel",
 
   "description": "Retrieves the program of a specific channel",
  "transport": "Response",
 
  "permission": "ReadData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 +
      "$ref": "Library.Id",
 
       "name": "channelid",
 
       "name": "channelid",
      "$ref": "Library.Id",
 
 
       "required": true
 
       "required": true
 
     },
 
     },
 
     {
 
     {
       "name": "properties",
+
       "$ref": "PVR.Fields.Broadcast",
       "$ref": "PVR.Fields.Broadcast"
+
       "name": "properties"
 
     },
 
     },
 
     {
 
     {
       "name": "limits",
+
       "$ref": "List.Limits",
       "$ref": "List.Limits"
+
       "name": "limits"
 
     }
 
     }
 
   ],
 
   ],
 +
  "permission": "ReadData",
 
   "returns": {
 
   "returns": {
    "type": "object",
 
 
     "properties": {
 
     "properties": {
 +
      "broadcasts": {
 +
        "items": {
 +
          "$ref": "PVR.Details.Broadcast"
 +
        },
 +
        "required": true,
 +
        "type": "array"
 +
      },
 
       "limits": {
 
       "limits": {
 
         "$ref": "List.LimitsReturned",
 
         "$ref": "List.LimitsReturned",
 
         "required": true
 
         "required": true
      },
 
      "broadcasts": {
 
        "type": "array",
 
        "required": true,
 
        "items": {
 
          "$ref": "PVR.Details.Broadcast"
 
        }
 
 
       }
 
       }
     }
+
     },
   }
+
    "type": "object"
 +
   },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 3,921: Line 3,854:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Retrieves the details of a specific channel",
 
   "description": "Retrieves the details of a specific channel",
  "transport": "Response",
 
  "permission": "ReadData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 +
      "$ref": "Library.Id",
 
       "name": "channelid",
 
       "name": "channelid",
      "$ref": "Library.Id",
 
 
       "required": true
 
       "required": true
 
     },
 
     },
 
     {
 
     {
       "name": "properties",
+
       "$ref": "PVR.Fields.Channel",
       "$ref": "PVR.Fields.Channel"
+
       "name": "properties"
 
     }
 
     }
 
   ],
 
   ],
 +
  "permission": "ReadData",
 
   "returns": {
 
   "returns": {
    "type": "object",
 
 
     "properties": {
 
     "properties": {
 
       "channeldetails": {
 
       "channeldetails": {
 
         "$ref": "PVR.Details.Channel"
 
         "$ref": "PVR.Details.Channel"
 
       }
 
       }
     }
+
     },
   }
+
    "type": "object"
 +
   },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 3,963: Line 3,895:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Retrieves the details of a specific channel group",
 
   "description": "Retrieves the details of a specific channel group",
  "transport": "Response",
 
  "permission": "ReadData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 +
      "$ref": "PVR.ChannelGroup.Id",
 
       "name": "channelgroupid",
 
       "name": "channelgroupid",
      "$ref": "PVR.ChannelGroup.Id",
 
 
       "required": true
 
       "required": true
 
     },
 
     },
 
     {
 
     {
 
       "name": "channels",
 
       "name": "channels",
      "type": "object",
 
 
       "properties": {
 
       "properties": {
 +
        "limits": {
 +
          "$ref": "List.Limits"
 +
        },
 
         "properties": {
 
         "properties": {
 
           "$ref": "PVR.Fields.Channel"
 
           "$ref": "PVR.Fields.Channel"
        },
 
        "limits": {
 
          "$ref": "List.Limits"
 
 
         }
 
         }
       }
+
       },
 +
      "type": "object"
 
     }
 
     }
 
   ],
 
   ],
 +
  "permission": "ReadData",
 
   "returns": {
 
   "returns": {
    "type": "object",
 
 
     "properties": {
 
     "properties": {
 
       "channelgroupdetails": {
 
       "channelgroupdetails": {
 
         "$ref": "PVR.Details.ChannelGroup.Extended"
 
         "$ref": "PVR.Details.ChannelGroup.Extended"
 
       }
 
       }
     }
+
     },
   }
+
    "type": "object"
 +
   },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 4,009: Line 3,940:
 
'''Type:''' ''object''<br />
 
'''Type:''' ''object''<br />
 
'''Properties:'''
 
'''Properties:'''
 +
# ''array[[#PVR.Details.ChannelGroup|PVR.Details.ChannelGroup]]'' channelgroups<br />
 
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
 
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# ''array[[#PVR.Details.ChannelGroup|PVR.Details.ChannelGroup]]'' channelgroups<br />
 
 
</div>
 
</div>
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Retrieves the channel groups for the specified type",
 
   "description": "Retrieves the channel groups for the specified type",
  "transport": "Response",
 
  "permission": "ReadData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 +
      "$ref": "PVR.Channel.Type",
 
       "name": "channeltype",
 
       "name": "channeltype",
      "$ref": "PVR.Channel.Type",
 
 
       "required": true
 
       "required": true
 
     },
 
     },
 
     {
 
     {
       "name": "limits",
+
       "$ref": "List.Limits",
       "$ref": "List.Limits"
+
       "name": "limits"
 
     }
 
     }
 
   ],
 
   ],
 +
  "permission": "ReadData",
 
   "returns": {
 
   "returns": {
    "type": "object",
 
 
     "properties": {
 
     "properties": {
 +
      "channelgroups": {
 +
        "items": {
 +
          "$ref": "PVR.Details.ChannelGroup"
 +
        },
 +
        "required": true,
 +
        "type": "array"
 +
      },
 
       "limits": {
 
       "limits": {
 
         "$ref": "List.LimitsReturned",
 
         "$ref": "List.LimitsReturned",
 
         "required": true
 
         "required": true
      },
 
      "channelgroups": {
 
        "type": "array",
 
        "required": true,
 
        "items": {
 
          "$ref": "PVR.Details.ChannelGroup"
 
        }
 
 
       }
 
       }
     }
+
     },
   }
+
    "type": "object"
 +
   },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 4,061: Line 3,991:
 
'''Type:''' ''object''<br />
 
'''Type:''' ''object''<br />
 
'''Properties:'''
 
'''Properties:'''
 +
# ''array[[#PVR.Details.Channel|PVR.Details.Channel]]'' channels<br />
 
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
 
# ''[[#List.LimitsReturned|List.LimitsReturned]]'' limits<br />
# ''array[[#PVR.Details.Channel|PVR.Details.Channel]]'' channels<br />
 
 
</div>
 
</div>
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Retrieves the channel list",
 
   "description": "Retrieves the channel list",
  "transport": "Response",
 
  "permission": "ReadData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 +
      "$ref": "PVR.ChannelGroup.Id",
 
       "name": "channelgroupid",
 
       "name": "channelgroupid",
      "$ref": "PVR.ChannelGroup.Id",
 
 
       "required": true
 
       "required": true
 
     },
 
     },
 
     {
 
     {
       "name": "properties",
+
       "$ref": "PVR.Fields.Channel",
       "$ref": "PVR.Fields.Channel"
+
       "name": "properties"
 
     },
 
     },
 
     {
 
     {
       "name": "limits",
+
       "$ref": "List.Limits",
       "$ref": "List.Limits"
+
       "name": "limits"
 
     }
 
     }
 
   ],
 
   ],
 +
  "permission": "ReadData",
 
   "returns": {
 
   "returns": {
    "type": "object",
 
 
     "properties": {
 
     "properties": {
 +
      "channels": {
 +
        "items": {
 +
          "$ref": "PVR.Details.Channel"
 +
        },
 +
        "required": true,
 +
        "type": "array"
 +
      },
 
       "limits": {
 
       "limits": {
 
         "$ref": "List.LimitsReturned",
 
         "$ref": "List.LimitsReturned",
 
         "required": true
 
         "required": true
      },
 
      "channels": {
 
        "type": "array",
 
        "required": true,
 
        "items": {
 
          "$ref": "PVR.Details.Channel"
 
        }
 
 
       }
 
       }
     }
+
     },
   }
+
    "type": "object"
 +
   },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 4,117: Line 4,046:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Retrieves the values of the given properties",
 
   "description": "Retrieves the values of the given properties",
  "transport": "Response",
 
  "permission": "ReadData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 +
      "items": {
 +
        "$ref": "PVR.Property.Name"
 +
      },
 
       "name": "properties",
 
       "name": "properties",
 +
      "required": true,
 
       "type": "array",
 
       "type": "array",
       "uniqueItems": true,
+
       "uniqueItems": true
      "required": true,
 
      "items": {
 
        "$ref": "PVR.Property.Name"
 
      }
 
 
     }
 
     }
 
   ],
 
   ],
 +
  "permission": "ReadData",
 
   "returns": {
 
   "returns": {
     "$ref": "PVR.Property.Value",
+
     "$ref": "PVR.Property.Value"
    "required": true
+
  },
  }
+
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 4,155: Line 4,082:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Retrieves the details of a specific recording",
 
   "description": "Retrieves the details of a specific recording",
  "transport": "Response",
 
  "permission": "ReadData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 +
      "$ref": "Library.Id",
 
       "name": "recordingid",
 
       "name": "recordingid",
      "$ref": "Library.Id",
 
 
       "required": true
 
       "required": true
 
     },
 
     },
 
     {
 
     {
       "name": "properties",
+
       "$ref": "PVR.Fields.Recording",
       "$ref": "PVR.Fields.Recording"
+
       "name": "properties"
 
     }
 
     }
 
   ],
 
   ],
 +
  "permission": "ReadData",
 
   "returns": {
 
   "returns": {
    "type": "object",
 
 
     "properties": {
 
     "properties": {
 
       "recordingdetails": {
 
       "recordingdetails": {
 
         "$ref": "PVR.Details.Recording"
 
         "$ref": "PVR.Details.Recording"
 
       }
 
       }
     }
+
     },
   }
+
    "type": "object"
 +
   },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 4,198: Line 4,124:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Retrieves the recordings",
 
   "description": "Retrieves the recordings",
  "transport": "Response",
 
  "permission": "ReadData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
       "name": "properties",
+
       "$ref": "PVR.Fields.Recording",
       "$ref": "PVR.Fields.Recording"
+
       "name": "properties"
 
     },
 
     },
 
     {
 
     {
       "name": "limits",
+
       "$ref": "List.Limits",
       "$ref": "List.Limits"
+
       "name": "limits"
 
     }
 
     }
 
   ],
 
   ],
 +
  "permission": "ReadData",
 
   "returns": {
 
   "returns": {
    "type": "object",
 
 
     "properties": {
 
     "properties": {
 
       "limits": {
 
       "limits": {
Line 4,220: Line 4,143:
 
       },
 
       },
 
       "recordings": {
 
       "recordings": {
        "type": "array",
 
        "required": true,
 
 
         "items": {
 
         "items": {
 
           "$ref": "PVR.Details.Recording"
 
           "$ref": "PVR.Details.Recording"
         }
+
         },
 +
        "required": true,
 +
        "type": "array"
 
       }
 
       }
     }
+
     },
   }
+
    "type": "object"
 +
   },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}
 
</syntaxhighlight>}}
Line 4,247: Line 4,172:
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{{hidden|style = width: 60%;|headerstyle = background: #cccccc;|contentstyle = text-align: left; border: 0px solid #AAAAAA;|JSON Schema Description|<syntaxhighlight enclose="div">
 
{
 
{
  "type": "method",
 
 
   "description": "Retrieves the details of a specific timer",
 
   "description": "Retrieves the details of a specific timer",
  "transport": "Response",
 
  "permission": "ReadData",
 
 
   "params": [
 
   "params": [
 
     {
 
     {
 +
      "$ref": "Library.Id",
 
       "name": "timerid",
 
       "name": "timerid",
      "$ref": "Library.Id",
 
 
       "required": true
 
       "required": true
 
     },
 
     },
 
     {
 
     {
       "name": "properties",
+
       "$ref": "PVR.Fields.Timer",
       "$ref": "PVR.Fields.Timer"
+
       "name": "properties"
 
     }
 
     }
 
   ],
 
   ],
 +
  "permission": "ReadData",
 
   "returns": {
 
   "returns": {
    "type": "object",
 
 
     "properties": {
 
     "properties": {
 
       "timerdetails": {
 
       "timerdetails": {
 
         "$ref": "PVR.Details.Timer"
 
         "$ref": "PVR.Details.Timer"
 
       }
 
       }
     }
+
     },
   }
+
    "type": "object"
 +
   },
 +
  "type": "method"
 
}
 
}
 
</syntaxhighlight>}}