Converted the Sublime Music Adapter API classes to ABCs
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,5 +1,6 @@
|
||||
flatpak/flatpak_build_dir/
|
||||
flatpak/sublime-music.flatpak
|
||||
sublime/adapters/subsonic/api_specs/
|
||||
|
||||
# Created by https://www.gitignore.io/api/python
|
||||
# Edit at https://www.gitignore.io/?templates=python
|
||||
|
@@ -1,156 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:sub="http://subsonic.sourceforge.net/restapi"
|
||||
targetNamespace="http://subsonic.sourceforge.net/restapi"
|
||||
attributeFormDefault="unqualified"
|
||||
elementFormDefault="qualified"
|
||||
version="1.1.0">
|
||||
|
||||
<xs:element name="subsonic-response" type="sub:Response"/>
|
||||
|
||||
<xs:complexType name="Response">
|
||||
<xs:choice minOccurs="0" maxOccurs="1">
|
||||
<xs:element name="musicFolders" type="sub:MusicFolders" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="indexes" type="sub:Indexes" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="directory" type="sub:Directory" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="nowPlaying" type="sub:NowPlaying" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult" type="sub:SearchResult" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playlists" type="sub:Playlists" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playlist" type="sub:Playlist" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="license" type="sub:License" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="error" type="sub:Error" minOccurs="1" maxOccurs="1"/>
|
||||
</xs:choice>
|
||||
<xs:attribute name="status" type="sub:ResponseStatus" use="required"/>
|
||||
<xs:attribute name="version" type="sub:Version" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="ResponseStatus">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="ok"/>
|
||||
<xs:enumeration value="failed"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="Version">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="\d+\.\d+\.\d+"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="MusicFolders">
|
||||
<xs:sequence>
|
||||
<xs:element name="musicFolder" type="sub:MusicFolder" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="MusicFolder">
|
||||
<xs:attribute name="id" type="xs:int" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Indexes">
|
||||
<xs:sequence>
|
||||
<xs:element name="shortcut" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="index" type="sub:Index" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="lastModified" type="xs:long" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Index">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Artist">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Directory">
|
||||
<xs:sequence>
|
||||
<xs:element name="child" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Child">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="isDir" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="title" type="xs:string" use="required"/>
|
||||
<xs:attribute name="album" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="track" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="year" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="genre" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="size" type="xs:long" use="optional"/>
|
||||
<xs:attribute name="contentType" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="suffix" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="transcodedContentType" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="transcodedSuffix" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="duration" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="bitRate" type="xs:int" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="NowPlaying">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:NowPlayingEntry" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="NowPlayingEntry">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:Child">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="minutesAgo" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playerId" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playerName" type="xs:string" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SearchResult">
|
||||
<xs:sequence>
|
||||
<xs:element name="match" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="offset" type="xs:int" use="required"/>
|
||||
<xs:attribute name="totalHits" type="xs:int" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Playlists">
|
||||
<xs:sequence>
|
||||
<xs:element name="playlist" type="sub:PlaylistIdAndName" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PlaylistIdAndName">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Playlist">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:PlaylistIdAndName">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="License">
|
||||
<xs:attribute name="valid" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="email" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="key" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="date" type="xs:dateTime" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Error">
|
||||
<xs:attribute name="code" type="xs:int" use="required"/>
|
||||
<xs:attribute name="message" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
</xs:schema>
|
@@ -1,157 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:sub="http://subsonic.org/restapi"
|
||||
targetNamespace="http://subsonic.org/restapi"
|
||||
attributeFormDefault="unqualified"
|
||||
elementFormDefault="qualified"
|
||||
version="1.1.1">
|
||||
|
||||
<xs:element name="subsonic-response" type="sub:Response"/>
|
||||
|
||||
<xs:complexType name="Response">
|
||||
<xs:choice minOccurs="0" maxOccurs="1">
|
||||
<xs:element name="musicFolders" type="sub:MusicFolders" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="indexes" type="sub:Indexes" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="directory" type="sub:Directory" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="nowPlaying" type="sub:NowPlaying" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult" type="sub:SearchResult" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playlists" type="sub:Playlists" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playlist" type="sub:Playlist" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="license" type="sub:License" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="error" type="sub:Error" minOccurs="1" maxOccurs="1"/>
|
||||
</xs:choice>
|
||||
<xs:attribute name="status" type="sub:ResponseStatus" use="required"/>
|
||||
<xs:attribute name="version" type="sub:Version" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="ResponseStatus">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="ok"/>
|
||||
<xs:enumeration value="failed"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="Version">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="\d+\.\d+\.\d+"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="MusicFolders">
|
||||
<xs:sequence>
|
||||
<xs:element name="musicFolder" type="sub:MusicFolder" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="MusicFolder">
|
||||
<xs:attribute name="id" type="xs:int" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Indexes">
|
||||
<xs:sequence>
|
||||
<xs:element name="shortcut" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="index" type="sub:Index" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="lastModified" type="xs:long" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Index">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Artist">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Directory">
|
||||
<xs:sequence>
|
||||
<xs:element name="child" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Child">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="isDir" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="title" type="xs:string" use="required"/>
|
||||
<xs:attribute name="album" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="track" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="year" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="genre" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="size" type="xs:long" use="optional"/>
|
||||
<xs:attribute name="contentType" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="suffix" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="transcodedContentType" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="transcodedSuffix" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="duration" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="bitRate" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="path" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="NowPlaying">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:NowPlayingEntry" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="NowPlayingEntry">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:Child">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="minutesAgo" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playerId" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playerName" type="xs:string" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SearchResult">
|
||||
<xs:sequence>
|
||||
<xs:element name="match" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="offset" type="xs:int" use="required"/>
|
||||
<xs:attribute name="totalHits" type="xs:int" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Playlists">
|
||||
<xs:sequence>
|
||||
<xs:element name="playlist" type="sub:PlaylistIdAndName" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PlaylistIdAndName">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Playlist">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:PlaylistIdAndName">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="License">
|
||||
<xs:attribute name="valid" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="email" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="key" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="date" type="xs:dateTime" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Error">
|
||||
<xs:attribute name="code" type="xs:int" use="required"/>
|
||||
<xs:attribute name="message" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
</xs:schema>
|
@@ -1,500 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:sub="http://subsonic.org/restapi"
|
||||
targetNamespace="http://subsonic.org/restapi"
|
||||
attributeFormDefault="unqualified"
|
||||
elementFormDefault="qualified"
|
||||
version="1.10.2">
|
||||
|
||||
<xs:element name="subsonic-response" type="sub:Response"/>
|
||||
|
||||
<xs:complexType name="Response">
|
||||
<xs:choice minOccurs="0" maxOccurs="1">
|
||||
<xs:element name="musicFolders" type="sub:MusicFolders" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="indexes" type="sub:Indexes" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="directory" type="sub:Directory" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="genres" type="sub:Genres" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="artists" type="sub:ArtistsID3" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="artist" type="sub:ArtistWithAlbumsID3" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="album" type="sub:AlbumWithSongsID3" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="videos" type="sub:Videos" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="nowPlaying" type="sub:NowPlaying" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult" type="sub:SearchResult" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult2" type="sub:SearchResult2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult3" type="sub:SearchResult3" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playlists" type="sub:Playlists" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playlist" type="sub:PlaylistWithSongs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="jukeboxStatus" type="sub:JukeboxStatus" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="jukeboxPlaylist" type="sub:JukeboxPlaylist" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="license" type="sub:License" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="users" type="sub:Users" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="user" type="sub:User" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="chatMessages" type="sub:ChatMessages" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="albumList" type="sub:AlbumList" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="albumList2" type="sub:AlbumList2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="randomSongs" type="sub:Songs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="songsByGenre" type="sub:Songs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="lyrics" type="sub:Lyrics" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="podcasts" type="sub:Podcasts" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="internetRadioStations" type="sub:InternetRadioStations" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="bookmarks" type="sub:Bookmarks" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="shares" type="sub:Shares" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="starred" type="sub:Starred" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="starred2" type="sub:Starred2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="error" type="sub:Error" minOccurs="1" maxOccurs="1"/>
|
||||
</xs:choice>
|
||||
<xs:attribute name="status" type="sub:ResponseStatus" use="required"/>
|
||||
<xs:attribute name="version" type="sub:Version" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="ResponseStatus">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="ok"/>
|
||||
<xs:enumeration value="failed"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="Version">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="\d+\.\d+\.\d+"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="MusicFolders">
|
||||
<xs:sequence>
|
||||
<xs:element name="musicFolder" type="sub:MusicFolder" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="MusicFolder">
|
||||
<xs:attribute name="id" type="xs:int" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Indexes">
|
||||
<xs:sequence>
|
||||
<xs:element name="shortcut" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="index" type="sub:Index" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="child" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/> <!-- Added in 1.7.0 -->
|
||||
</xs:sequence>
|
||||
<xs:attribute name="lastModified" type="xs:long" use="required"/>
|
||||
<xs:attribute name="ignoredArticles" type="xs:string" use="required"/> <!-- Added in 1.10.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Index">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Artist">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/> <!-- Added in 1.10.1 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Genres">
|
||||
<xs:sequence>
|
||||
<xs:element name="genre" type="sub:Genre" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Genre" mixed="true">
|
||||
<xs:attribute name="songCount" type="xs:int" use="required"/> <!-- Added in 1.10.2 -->
|
||||
<xs:attribute name="albumCount" type="xs:int" use="required"/> <!-- Added in 1.10.2 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistsID3">
|
||||
<xs:sequence>
|
||||
<xs:element name="index" type="sub:IndexID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="ignoredArticles" type="xs:string" use="required"/> <!-- Added in 1.10.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="IndexID3">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:ArtistID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistID3">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="albumCount" type="xs:int" use="required"/>
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistWithAlbumsID3">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:ArtistID3">
|
||||
<xs:sequence>
|
||||
<xs:element name="album" type="sub:AlbumID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumID3">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="artistId" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="songCount" type="xs:int" use="required"/>
|
||||
<xs:attribute name="duration" type="xs:int" use="required"/>
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/>
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/>
|
||||
<xs:attribute name="year" type="xs:int" use="optional"/> <!-- Added in 1.10.1 -->
|
||||
<xs:attribute name="genre" type="xs:string" use="optional"/> <!-- Added in 1.10.1 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumWithSongsID3">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:AlbumID3">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Videos">
|
||||
<xs:sequence>
|
||||
<xs:element name="video" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Directory">
|
||||
<xs:sequence>
|
||||
<xs:element name="child" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="parent" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/> <!-- Added in 1.10.1 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Child">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="parent" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="isDir" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="title" type="xs:string" use="required"/>
|
||||
<xs:attribute name="album" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="track" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="year" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="genre" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="size" type="xs:long" use="optional"/>
|
||||
<xs:attribute name="contentType" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="suffix" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="transcodedContentType" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="transcodedSuffix" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="duration" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="bitRate" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="path" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="isVideo" type="xs:boolean" use="optional"/> <!-- Added in 1.4.1 -->
|
||||
<xs:attribute name="userRating" type="sub:UserRating" use="optional"/> <!-- Added in 1.6.0 -->
|
||||
<xs:attribute name="averageRating" type="sub:AverageRating" use="optional"/> <!-- Added in 1.6.0 -->
|
||||
<xs:attribute name="discNumber" type="xs:int" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="created" type="xs:dateTime" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="albumId" type="xs:string" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="artistId" type="xs:string" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="type" type="sub:MediaType" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="bookmarkPosition" type="xs:long" use="optional"/> <!-- In millis. Added in 1.10.1 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="MediaType">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="music"/>
|
||||
<xs:enumeration value="podcast"/>
|
||||
<xs:enumeration value="audiobook"/>
|
||||
<xs:enumeration value="video"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="UserRating">
|
||||
<xs:restriction base="xs:int">
|
||||
<xs:minInclusive value="1"/>
|
||||
<xs:maxInclusive value="5"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="AverageRating">
|
||||
<xs:restriction base="xs:double">
|
||||
<xs:minInclusive value="1.0"/>
|
||||
<xs:maxInclusive value="5.0"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="NowPlaying">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:NowPlayingEntry" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="NowPlayingEntry">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:Child">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="minutesAgo" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playerId" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playerName" type="xs:string" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<!--Deprecated-->
|
||||
<xs:complexType name="SearchResult">
|
||||
<xs:sequence>
|
||||
<xs:element name="match" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="offset" type="xs:int" use="required"/>
|
||||
<xs:attribute name="totalHits" type="xs:int" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SearchResult2">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SearchResult3">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:ArtistID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:AlbumID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Playlists">
|
||||
<xs:sequence>
|
||||
<xs:element name="playlist" type="sub:Playlist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Playlist">
|
||||
<xs:sequence>
|
||||
<xs:element name="allowedUser" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> <!--Added in 1.8.0-->
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="comment" type="xs:string" use="optional"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="owner" type="xs:string" use="optional"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="public" type="xs:boolean" use="optional"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="songCount" type="xs:int" use="required"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="duration" type="xs:int" use="required"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/> <!--Added in 1.8.0-->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PlaylistWithSongs">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:Playlist">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="JukeboxStatus">
|
||||
<xs:attribute name="currentIndex" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playing" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="gain" type="xs:float" use="required"/>
|
||||
<xs:attribute name="position" type="xs:int" use="optional"/> <!--Added in 1.7.0-->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="JukeboxPlaylist">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:JukeboxStatus">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ChatMessages">
|
||||
<xs:sequence>
|
||||
<xs:element name="chatMessage" type="sub:ChatMessage" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ChatMessage">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="time" type="xs:long" use="required"/>
|
||||
<xs:attribute name="message" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumList">
|
||||
<xs:sequence>
|
||||
<xs:element name="album" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumList2">
|
||||
<xs:sequence>
|
||||
<xs:element name="album" type="sub:AlbumID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Songs">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Lyrics" mixed="true">
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="title" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Podcasts">
|
||||
<xs:sequence>
|
||||
<xs:element name="channel" type="sub:PodcastChannel" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PodcastChannel">
|
||||
<xs:sequence>
|
||||
<xs:element name="episode" type="sub:PodcastEpisode" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="url" type="xs:string" use="required"/>
|
||||
<xs:attribute name="title" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="description" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="status" type="sub:PodcastStatus" use="required"/>
|
||||
<xs:attribute name="errorMessage" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PodcastEpisode">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:Child">
|
||||
<xs:attribute name="streamId" type="xs:string" use="optional"/> <!-- Use this ID for streaming the podcast. -->
|
||||
<xs:attribute name="description" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="status" type="sub:PodcastStatus" use="required"/>
|
||||
<xs:attribute name="publishDate" type="xs:dateTime" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="PodcastStatus">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="new"/>
|
||||
<xs:enumeration value="downloading"/>
|
||||
<xs:enumeration value="completed"/>
|
||||
<xs:enumeration value="error"/>
|
||||
<xs:enumeration value="deleted"/>
|
||||
<xs:enumeration value="skipped"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="InternetRadioStations">
|
||||
<xs:sequence>
|
||||
<xs:element name="internetRadioStation" type="sub:InternetRadioStation" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="InternetRadioStation">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="streamUrl" type="xs:string" use="required"/>
|
||||
<xs:attribute name="homePageUrl" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Bookmarks">
|
||||
<xs:sequence>
|
||||
<xs:element name="bookmark" type="sub:Bookmark" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Bookmark">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="1" maxOccurs="1"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="position" type="xs:long" use="required"/> <!-- In milliseconds -->
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="comment" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/>
|
||||
<xs:attribute name="changed" type="xs:dateTime" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Shares">
|
||||
<xs:sequence>
|
||||
<xs:element name="share" type="sub:Share" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Share">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="url" type="xs:string" use="required"/>
|
||||
<xs:attribute name="description" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/>
|
||||
<xs:attribute name="expires" type="xs:dateTime" use="optional"/>
|
||||
<xs:attribute name="lastVisited" type="xs:dateTime" use="optional"/>
|
||||
<xs:attribute name="visitCount" type="xs:int" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Starred">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Starred2">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:ArtistID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:AlbumID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="License">
|
||||
<xs:attribute name="valid" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="email" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="key" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="date" type="xs:dateTime" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Users">
|
||||
<xs:sequence>
|
||||
<xs:element name="user" type="sub:User" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="User">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="email" type="xs:string" use="optional"/> <!-- Added in 1.6.0 -->
|
||||
<xs:attribute name="scrobblingEnabled" type="xs:boolean" use="required"/> <!-- Added in 1.7.0 -->
|
||||
<xs:attribute name="adminRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="settingsRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="downloadRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="uploadRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="playlistRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="coverArtRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="commentRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="podcastRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="streamRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="jukeboxRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="shareRole" type="xs:boolean" use="required"/> <!-- Added in 1.7.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Error">
|
||||
<xs:attribute name="code" type="xs:int" use="required"/>
|
||||
<xs:attribute name="message" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
</xs:schema>
|
@@ -1,548 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:sub="http://subsonic.org/restapi"
|
||||
targetNamespace="http://subsonic.org/restapi"
|
||||
attributeFormDefault="unqualified"
|
||||
elementFormDefault="qualified"
|
||||
version="1.11.0">
|
||||
|
||||
<xs:element name="subsonic-response" type="sub:Response"/>
|
||||
|
||||
<xs:complexType name="Response">
|
||||
<xs:choice minOccurs="0" maxOccurs="1">
|
||||
<xs:element name="musicFolders" type="sub:MusicFolders" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="indexes" type="sub:Indexes" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="directory" type="sub:Directory" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="genres" type="sub:Genres" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="artists" type="sub:ArtistsID3" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="artist" type="sub:ArtistWithAlbumsID3" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="album" type="sub:AlbumWithSongsID3" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="videos" type="sub:Videos" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="nowPlaying" type="sub:NowPlaying" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult" type="sub:SearchResult" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult2" type="sub:SearchResult2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult3" type="sub:SearchResult3" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playlists" type="sub:Playlists" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playlist" type="sub:PlaylistWithSongs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="jukeboxStatus" type="sub:JukeboxStatus" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="jukeboxPlaylist" type="sub:JukeboxPlaylist" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="license" type="sub:License" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="users" type="sub:Users" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="user" type="sub:User" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="chatMessages" type="sub:ChatMessages" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="albumList" type="sub:AlbumList" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="albumList2" type="sub:AlbumList2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="randomSongs" type="sub:Songs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="songsByGenre" type="sub:Songs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="lyrics" type="sub:Lyrics" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="podcasts" type="sub:Podcasts" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="internetRadioStations" type="sub:InternetRadioStations" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="bookmarks" type="sub:Bookmarks" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="shares" type="sub:Shares" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="starred" type="sub:Starred" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="starred2" type="sub:Starred2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="artistInfo" type="sub:ArtistInfo" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="artistInfo2" type="sub:ArtistInfo2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="similarSongs" type="sub:SimilarSongs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="similarSongs2" type="sub:SimilarSongs2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="error" type="sub:Error" minOccurs="1" maxOccurs="1"/>
|
||||
</xs:choice>
|
||||
<xs:attribute name="status" type="sub:ResponseStatus" use="required"/>
|
||||
<xs:attribute name="version" type="sub:Version" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="ResponseStatus">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="ok"/>
|
||||
<xs:enumeration value="failed"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="Version">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="\d+\.\d+\.\d+"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="MusicFolders">
|
||||
<xs:sequence>
|
||||
<xs:element name="musicFolder" type="sub:MusicFolder" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="MusicFolder">
|
||||
<xs:attribute name="id" type="xs:int" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Indexes">
|
||||
<xs:sequence>
|
||||
<xs:element name="shortcut" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="index" type="sub:Index" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="child" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/> <!-- Added in 1.7.0 -->
|
||||
</xs:sequence>
|
||||
<xs:attribute name="lastModified" type="xs:long" use="required"/>
|
||||
<xs:attribute name="ignoredArticles" type="xs:string" use="required"/> <!-- Added in 1.10.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Index">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Artist">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/> <!-- Added in 1.10.1 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Genres">
|
||||
<xs:sequence>
|
||||
<xs:element name="genre" type="sub:Genre" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Genre" mixed="true">
|
||||
<xs:attribute name="songCount" type="xs:int" use="required"/> <!-- Added in 1.10.2 -->
|
||||
<xs:attribute name="albumCount" type="xs:int" use="required"/> <!-- Added in 1.10.2 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistsID3">
|
||||
<xs:sequence>
|
||||
<xs:element name="index" type="sub:IndexID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="ignoredArticles" type="xs:string" use="required"/> <!-- Added in 1.10.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="IndexID3">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:ArtistID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistID3">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="albumCount" type="xs:int" use="required"/>
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistWithAlbumsID3">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:ArtistID3">
|
||||
<xs:sequence>
|
||||
<xs:element name="album" type="sub:AlbumID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumID3">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="artistId" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="songCount" type="xs:int" use="required"/>
|
||||
<xs:attribute name="duration" type="xs:int" use="required"/>
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/>
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/>
|
||||
<xs:attribute name="year" type="xs:int" use="optional"/> <!-- Added in 1.10.1 -->
|
||||
<xs:attribute name="genre" type="xs:string" use="optional"/> <!-- Added in 1.10.1 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumWithSongsID3">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:AlbumID3">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Videos">
|
||||
<xs:sequence>
|
||||
<xs:element name="video" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Directory">
|
||||
<xs:sequence>
|
||||
<xs:element name="child" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="parent" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/> <!-- Added in 1.10.1 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Child">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="parent" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="isDir" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="title" type="xs:string" use="required"/>
|
||||
<xs:attribute name="album" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="track" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="year" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="genre" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="size" type="xs:long" use="optional"/>
|
||||
<xs:attribute name="contentType" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="suffix" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="transcodedContentType" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="transcodedSuffix" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="duration" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="bitRate" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="path" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="isVideo" type="xs:boolean" use="optional"/> <!-- Added in 1.4.1 -->
|
||||
<xs:attribute name="userRating" type="sub:UserRating" use="optional"/> <!-- Added in 1.6.0 -->
|
||||
<xs:attribute name="averageRating" type="sub:AverageRating" use="optional"/> <!-- Added in 1.6.0 -->
|
||||
<xs:attribute name="discNumber" type="xs:int" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="created" type="xs:dateTime" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="albumId" type="xs:string" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="artistId" type="xs:string" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="type" type="sub:MediaType" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="bookmarkPosition" type="xs:long" use="optional"/> <!-- In millis. Added in 1.10.1 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="MediaType">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="music"/>
|
||||
<xs:enumeration value="podcast"/>
|
||||
<xs:enumeration value="audiobook"/>
|
||||
<xs:enumeration value="video"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="UserRating">
|
||||
<xs:restriction base="xs:int">
|
||||
<xs:minInclusive value="1"/>
|
||||
<xs:maxInclusive value="5"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="AverageRating">
|
||||
<xs:restriction base="xs:double">
|
||||
<xs:minInclusive value="1.0"/>
|
||||
<xs:maxInclusive value="5.0"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="NowPlaying">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:NowPlayingEntry" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="NowPlayingEntry">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:Child">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="minutesAgo" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playerId" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playerName" type="xs:string" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<!--Deprecated-->
|
||||
<xs:complexType name="SearchResult">
|
||||
<xs:sequence>
|
||||
<xs:element name="match" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="offset" type="xs:int" use="required"/>
|
||||
<xs:attribute name="totalHits" type="xs:int" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SearchResult2">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SearchResult3">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:ArtistID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:AlbumID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Playlists">
|
||||
<xs:sequence>
|
||||
<xs:element name="playlist" type="sub:Playlist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Playlist">
|
||||
<xs:sequence>
|
||||
<xs:element name="allowedUser" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> <!--Added in 1.8.0-->
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="comment" type="xs:string" use="optional"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="owner" type="xs:string" use="optional"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="public" type="xs:boolean" use="optional"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="songCount" type="xs:int" use="required"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="duration" type="xs:int" use="required"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/> <!--Added in 1.11.0-->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PlaylistWithSongs">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:Playlist">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="JukeboxStatus">
|
||||
<xs:attribute name="currentIndex" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playing" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="gain" type="xs:float" use="required"/>
|
||||
<xs:attribute name="position" type="xs:int" use="optional"/> <!--Added in 1.7.0-->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="JukeboxPlaylist">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:JukeboxStatus">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ChatMessages">
|
||||
<xs:sequence>
|
||||
<xs:element name="chatMessage" type="sub:ChatMessage" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ChatMessage">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="time" type="xs:long" use="required"/>
|
||||
<xs:attribute name="message" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumList">
|
||||
<xs:sequence>
|
||||
<xs:element name="album" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumList2">
|
||||
<xs:sequence>
|
||||
<xs:element name="album" type="sub:AlbumID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Songs">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Lyrics" mixed="true">
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="title" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Podcasts">
|
||||
<xs:sequence>
|
||||
<xs:element name="channel" type="sub:PodcastChannel" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PodcastChannel">
|
||||
<xs:sequence>
|
||||
<xs:element name="episode" type="sub:PodcastEpisode" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="url" type="xs:string" use="required"/>
|
||||
<xs:attribute name="title" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="description" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="status" type="sub:PodcastStatus" use="required"/>
|
||||
<xs:attribute name="errorMessage" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PodcastEpisode">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:Child">
|
||||
<xs:attribute name="streamId" type="xs:string" use="optional"/> <!-- Use this ID for streaming the podcast. -->
|
||||
<xs:attribute name="description" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="status" type="sub:PodcastStatus" use="required"/>
|
||||
<xs:attribute name="publishDate" type="xs:dateTime" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="PodcastStatus">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="new"/>
|
||||
<xs:enumeration value="downloading"/>
|
||||
<xs:enumeration value="completed"/>
|
||||
<xs:enumeration value="error"/>
|
||||
<xs:enumeration value="deleted"/>
|
||||
<xs:enumeration value="skipped"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="InternetRadioStations">
|
||||
<xs:sequence>
|
||||
<xs:element name="internetRadioStation" type="sub:InternetRadioStation" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="InternetRadioStation">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="streamUrl" type="xs:string" use="required"/>
|
||||
<xs:attribute name="homePageUrl" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Bookmarks">
|
||||
<xs:sequence>
|
||||
<xs:element name="bookmark" type="sub:Bookmark" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Bookmark">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="1" maxOccurs="1"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="position" type="xs:long" use="required"/> <!-- In milliseconds -->
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="comment" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/>
|
||||
<xs:attribute name="changed" type="xs:dateTime" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Shares">
|
||||
<xs:sequence>
|
||||
<xs:element name="share" type="sub:Share" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Share">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="url" type="xs:string" use="required"/>
|
||||
<xs:attribute name="description" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/>
|
||||
<xs:attribute name="expires" type="xs:dateTime" use="optional"/>
|
||||
<xs:attribute name="lastVisited" type="xs:dateTime" use="optional"/>
|
||||
<xs:attribute name="visitCount" type="xs:int" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Starred">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistInfoBase">
|
||||
<xs:sequence>
|
||||
<xs:element name="biography" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="musicBrainzId" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="lastFmUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="smallImageUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="mediumImageUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="largeImageUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistInfo">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:ArtistInfoBase">
|
||||
<xs:sequence>
|
||||
<xs:element name="similarArtist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistInfo2">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:ArtistInfoBase">
|
||||
<xs:sequence>
|
||||
<xs:element name="similarArtist" type="sub:ArtistID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SimilarSongs">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SimilarSongs2">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Starred2">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:ArtistID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:AlbumID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="License">
|
||||
<xs:attribute name="valid" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="email" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="key" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="date" type="xs:dateTime" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Users">
|
||||
<xs:sequence>
|
||||
<xs:element name="user" type="sub:User" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="User">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="email" type="xs:string" use="optional"/> <!-- Added in 1.6.0 -->
|
||||
<xs:attribute name="scrobblingEnabled" type="xs:boolean" use="required"/> <!-- Added in 1.7.0 -->
|
||||
<xs:attribute name="adminRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="settingsRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="downloadRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="uploadRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="playlistRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="coverArtRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="commentRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="podcastRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="streamRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="jukeboxRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="shareRole" type="xs:boolean" use="required"/> <!-- Added in 1.7.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Error">
|
||||
<xs:attribute name="code" type="xs:int" use="required"/>
|
||||
<xs:attribute name="message" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
</xs:schema>
|
@@ -1,563 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:sub="http://subsonic.org/restapi"
|
||||
targetNamespace="http://subsonic.org/restapi"
|
||||
attributeFormDefault="unqualified"
|
||||
elementFormDefault="qualified"
|
||||
version="1.12.0">
|
||||
|
||||
<xs:element name="subsonic-response" type="sub:Response"/>
|
||||
|
||||
<xs:complexType name="Response">
|
||||
<xs:choice minOccurs="0" maxOccurs="1">
|
||||
<xs:element name="musicFolders" type="sub:MusicFolders" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="indexes" type="sub:Indexes" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="directory" type="sub:Directory" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="genres" type="sub:Genres" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="artists" type="sub:ArtistsID3" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="artist" type="sub:ArtistWithAlbumsID3" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="album" type="sub:AlbumWithSongsID3" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="videos" type="sub:Videos" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="nowPlaying" type="sub:NowPlaying" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult" type="sub:SearchResult" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult2" type="sub:SearchResult2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult3" type="sub:SearchResult3" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playlists" type="sub:Playlists" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playlist" type="sub:PlaylistWithSongs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="jukeboxStatus" type="sub:JukeboxStatus" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="jukeboxPlaylist" type="sub:JukeboxPlaylist" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="license" type="sub:License" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="users" type="sub:Users" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="user" type="sub:User" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="chatMessages" type="sub:ChatMessages" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="albumList" type="sub:AlbumList" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="albumList2" type="sub:AlbumList2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="randomSongs" type="sub:Songs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="songsByGenre" type="sub:Songs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="lyrics" type="sub:Lyrics" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="podcasts" type="sub:Podcasts" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="internetRadioStations" type="sub:InternetRadioStations" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="bookmarks" type="sub:Bookmarks" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playQueue" type="sub:PlayQueue" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="shares" type="sub:Shares" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="starred" type="sub:Starred" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="starred2" type="sub:Starred2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="artistInfo" type="sub:ArtistInfo" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="artistInfo2" type="sub:ArtistInfo2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="similarSongs" type="sub:SimilarSongs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="similarSongs2" type="sub:SimilarSongs2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="error" type="sub:Error" minOccurs="1" maxOccurs="1"/>
|
||||
</xs:choice>
|
||||
<xs:attribute name="status" type="sub:ResponseStatus" use="required"/>
|
||||
<xs:attribute name="version" type="sub:Version" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="ResponseStatus">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="ok"/>
|
||||
<xs:enumeration value="failed"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="Version">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="\d+\.\d+\.\d+"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="MusicFolders">
|
||||
<xs:sequence>
|
||||
<xs:element name="musicFolder" type="sub:MusicFolder" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="MusicFolder">
|
||||
<xs:attribute name="id" type="xs:int" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Indexes">
|
||||
<xs:sequence>
|
||||
<xs:element name="shortcut" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="index" type="sub:Index" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="child" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/> <!-- Added in 1.7.0 -->
|
||||
</xs:sequence>
|
||||
<xs:attribute name="lastModified" type="xs:long" use="required"/>
|
||||
<xs:attribute name="ignoredArticles" type="xs:string" use="required"/> <!-- Added in 1.10.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Index">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Artist">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/> <!-- Added in 1.10.1 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Genres">
|
||||
<xs:sequence>
|
||||
<xs:element name="genre" type="sub:Genre" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Genre" mixed="true">
|
||||
<xs:attribute name="songCount" type="xs:int" use="required"/> <!-- Added in 1.10.2 -->
|
||||
<xs:attribute name="albumCount" type="xs:int" use="required"/> <!-- Added in 1.10.2 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistsID3">
|
||||
<xs:sequence>
|
||||
<xs:element name="index" type="sub:IndexID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="ignoredArticles" type="xs:string" use="required"/> <!-- Added in 1.10.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="IndexID3">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:ArtistID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistID3">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="albumCount" type="xs:int" use="required"/>
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistWithAlbumsID3">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:ArtistID3">
|
||||
<xs:sequence>
|
||||
<xs:element name="album" type="sub:AlbumID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumID3">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="artistId" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="songCount" type="xs:int" use="required"/>
|
||||
<xs:attribute name="duration" type="xs:int" use="required"/>
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/>
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/>
|
||||
<xs:attribute name="year" type="xs:int" use="optional"/> <!-- Added in 1.10.1 -->
|
||||
<xs:attribute name="genre" type="xs:string" use="optional"/> <!-- Added in 1.10.1 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumWithSongsID3">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:AlbumID3">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Videos">
|
||||
<xs:sequence>
|
||||
<xs:element name="video" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Directory">
|
||||
<xs:sequence>
|
||||
<xs:element name="child" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="parent" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/> <!-- Added in 1.10.1 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Child">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="parent" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="isDir" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="title" type="xs:string" use="required"/>
|
||||
<xs:attribute name="album" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="track" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="year" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="genre" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="size" type="xs:long" use="optional"/>
|
||||
<xs:attribute name="contentType" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="suffix" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="transcodedContentType" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="transcodedSuffix" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="duration" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="bitRate" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="path" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="isVideo" type="xs:boolean" use="optional"/> <!-- Added in 1.4.1 -->
|
||||
<xs:attribute name="userRating" type="sub:UserRating" use="optional"/> <!-- Added in 1.6.0 -->
|
||||
<xs:attribute name="averageRating" type="sub:AverageRating" use="optional"/> <!-- Added in 1.6.0 -->
|
||||
<xs:attribute name="discNumber" type="xs:int" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="created" type="xs:dateTime" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="albumId" type="xs:string" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="artistId" type="xs:string" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="type" type="sub:MediaType" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="bookmarkPosition" type="xs:long" use="optional"/> <!-- In millis. Added in 1.10.1 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="MediaType">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="music"/>
|
||||
<xs:enumeration value="podcast"/>
|
||||
<xs:enumeration value="audiobook"/>
|
||||
<xs:enumeration value="video"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="UserRating">
|
||||
<xs:restriction base="xs:int">
|
||||
<xs:minInclusive value="1"/>
|
||||
<xs:maxInclusive value="5"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="AverageRating">
|
||||
<xs:restriction base="xs:double">
|
||||
<xs:minInclusive value="1.0"/>
|
||||
<xs:maxInclusive value="5.0"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="NowPlaying">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:NowPlayingEntry" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="NowPlayingEntry">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:Child">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="minutesAgo" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playerId" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playerName" type="xs:string" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<!--Deprecated-->
|
||||
<xs:complexType name="SearchResult">
|
||||
<xs:sequence>
|
||||
<xs:element name="match" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="offset" type="xs:int" use="required"/>
|
||||
<xs:attribute name="totalHits" type="xs:int" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SearchResult2">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SearchResult3">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:ArtistID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:AlbumID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Playlists">
|
||||
<xs:sequence>
|
||||
<xs:element name="playlist" type="sub:Playlist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Playlist">
|
||||
<xs:sequence>
|
||||
<xs:element name="allowedUser" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> <!--Added in 1.8.0-->
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="comment" type="xs:string" use="optional"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="owner" type="xs:string" use="optional"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="public" type="xs:boolean" use="optional"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="songCount" type="xs:int" use="required"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="duration" type="xs:int" use="required"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/> <!--Added in 1.11.0-->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PlaylistWithSongs">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:Playlist">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="JukeboxStatus">
|
||||
<xs:attribute name="currentIndex" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playing" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="gain" type="xs:float" use="required"/>
|
||||
<xs:attribute name="position" type="xs:int" use="optional"/> <!--Added in 1.7.0-->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="JukeboxPlaylist">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:JukeboxStatus">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ChatMessages">
|
||||
<xs:sequence>
|
||||
<xs:element name="chatMessage" type="sub:ChatMessage" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ChatMessage">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="time" type="xs:long" use="required"/>
|
||||
<xs:attribute name="message" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumList">
|
||||
<xs:sequence>
|
||||
<xs:element name="album" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumList2">
|
||||
<xs:sequence>
|
||||
<xs:element name="album" type="sub:AlbumID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Songs">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Lyrics" mixed="true">
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="title" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Podcasts">
|
||||
<xs:sequence>
|
||||
<xs:element name="channel" type="sub:PodcastChannel" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PodcastChannel">
|
||||
<xs:sequence>
|
||||
<xs:element name="episode" type="sub:PodcastEpisode" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="url" type="xs:string" use="required"/>
|
||||
<xs:attribute name="title" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="description" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="status" type="sub:PodcastStatus" use="required"/>
|
||||
<xs:attribute name="errorMessage" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PodcastEpisode">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:Child">
|
||||
<xs:attribute name="streamId" type="xs:string" use="optional"/> <!-- Use this ID for streaming the podcast. -->
|
||||
<xs:attribute name="description" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="status" type="sub:PodcastStatus" use="required"/>
|
||||
<xs:attribute name="publishDate" type="xs:dateTime" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="PodcastStatus">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="new"/>
|
||||
<xs:enumeration value="downloading"/>
|
||||
<xs:enumeration value="completed"/>
|
||||
<xs:enumeration value="error"/>
|
||||
<xs:enumeration value="deleted"/>
|
||||
<xs:enumeration value="skipped"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="InternetRadioStations">
|
||||
<xs:sequence>
|
||||
<xs:element name="internetRadioStation" type="sub:InternetRadioStation" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="InternetRadioStation">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="streamUrl" type="xs:string" use="required"/>
|
||||
<xs:attribute name="homePageUrl" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Bookmarks">
|
||||
<xs:sequence>
|
||||
<xs:element name="bookmark" type="sub:Bookmark" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Bookmark">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="1" maxOccurs="1"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="position" type="xs:long" use="required"/> <!-- In milliseconds -->
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="comment" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/>
|
||||
<xs:attribute name="changed" type="xs:dateTime" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PlayQueue">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="current" type="xs:int" use="optional"/> <!-- ID of currently playing track -->
|
||||
<xs:attribute name="position" type="xs:long" use="optional"/> <!-- Position in milliseconds of currently playing track -->
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="changed" type="xs:dateTime" use="required"/>
|
||||
<xs:attribute name="changedBy" type="xs:string" use="required"/> <!-- Name of client app -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Shares">
|
||||
<xs:sequence>
|
||||
<xs:element name="share" type="sub:Share" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Share">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="url" type="xs:string" use="required"/>
|
||||
<xs:attribute name="description" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/>
|
||||
<xs:attribute name="expires" type="xs:dateTime" use="optional"/>
|
||||
<xs:attribute name="lastVisited" type="xs:dateTime" use="optional"/>
|
||||
<xs:attribute name="visitCount" type="xs:int" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Starred">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistInfoBase">
|
||||
<xs:sequence>
|
||||
<xs:element name="biography" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="musicBrainzId" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="lastFmUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="smallImageUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="mediumImageUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="largeImageUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistInfo">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:ArtistInfoBase">
|
||||
<xs:sequence>
|
||||
<xs:element name="similarArtist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistInfo2">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:ArtistInfoBase">
|
||||
<xs:sequence>
|
||||
<xs:element name="similarArtist" type="sub:ArtistID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SimilarSongs">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SimilarSongs2">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Starred2">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:ArtistID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:AlbumID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="License">
|
||||
<xs:attribute name="valid" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="email" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="key" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="date" type="xs:dateTime" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Users">
|
||||
<xs:sequence>
|
||||
<xs:element name="user" type="sub:User" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="User">
|
||||
<xs:sequence>
|
||||
<xs:element name="folder" type="xs:int" minOccurs="0" maxOccurs="unbounded"/> <!-- Added in 1.12.0 -->
|
||||
</xs:sequence>
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="email" type="xs:string" use="optional"/> <!-- Added in 1.6.0 -->
|
||||
<xs:attribute name="scrobblingEnabled" type="xs:boolean" use="required"/> <!-- Added in 1.7.0 -->
|
||||
<xs:attribute name="adminRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="settingsRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="downloadRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="uploadRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="playlistRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="coverArtRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="commentRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="podcastRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="streamRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="jukeboxRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="shareRole" type="xs:boolean" use="required"/> <!-- Added in 1.7.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Error">
|
||||
<xs:attribute name="code" type="xs:int" use="required"/>
|
||||
<xs:attribute name="message" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
</xs:schema>
|
@@ -1,588 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:sub="http://subsonic.org/restapi"
|
||||
targetNamespace="http://subsonic.org/restapi"
|
||||
attributeFormDefault="unqualified"
|
||||
elementFormDefault="qualified"
|
||||
version="1.13.0">
|
||||
|
||||
<xs:element name="subsonic-response" type="sub:Response"/>
|
||||
|
||||
<xs:complexType name="Response">
|
||||
<xs:choice minOccurs="0" maxOccurs="1">
|
||||
<xs:element name="musicFolders" type="sub:MusicFolders" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="indexes" type="sub:Indexes" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="directory" type="sub:Directory" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="genres" type="sub:Genres" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="artists" type="sub:ArtistsID3" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="artist" type="sub:ArtistWithAlbumsID3" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="album" type="sub:AlbumWithSongsID3" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="videos" type="sub:Videos" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="nowPlaying" type="sub:NowPlaying" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult" type="sub:SearchResult" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult2" type="sub:SearchResult2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult3" type="sub:SearchResult3" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playlists" type="sub:Playlists" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playlist" type="sub:PlaylistWithSongs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="jukeboxStatus" type="sub:JukeboxStatus" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="jukeboxPlaylist" type="sub:JukeboxPlaylist" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="license" type="sub:License" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="users" type="sub:Users" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="user" type="sub:User" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="chatMessages" type="sub:ChatMessages" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="albumList" type="sub:AlbumList" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="albumList2" type="sub:AlbumList2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="randomSongs" type="sub:Songs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="songsByGenre" type="sub:Songs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="lyrics" type="sub:Lyrics" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="podcasts" type="sub:Podcasts" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="newestPodcasts" type="sub:NewestPodcasts" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="internetRadioStations" type="sub:InternetRadioStations" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="bookmarks" type="sub:Bookmarks" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playQueue" type="sub:PlayQueue" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="shares" type="sub:Shares" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="starred" type="sub:Starred" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="starred2" type="sub:Starred2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="artistInfo" type="sub:ArtistInfo" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="artistInfo2" type="sub:ArtistInfo2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="similarSongs" type="sub:SimilarSongs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="similarSongs2" type="sub:SimilarSongs2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="topSongs" type="sub:TopSongs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="error" type="sub:Error" minOccurs="1" maxOccurs="1"/>
|
||||
</xs:choice>
|
||||
<xs:attribute name="status" type="sub:ResponseStatus" use="required"/>
|
||||
<xs:attribute name="version" type="sub:Version" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="ResponseStatus">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="ok"/>
|
||||
<xs:enumeration value="failed"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="Version">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="\d+\.\d+\.\d+"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="MusicFolders">
|
||||
<xs:sequence>
|
||||
<xs:element name="musicFolder" type="sub:MusicFolder" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="MusicFolder">
|
||||
<xs:attribute name="id" type="xs:int" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Indexes">
|
||||
<xs:sequence>
|
||||
<xs:element name="shortcut" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="index" type="sub:Index" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="child" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/> <!-- Added in 1.7.0 -->
|
||||
</xs:sequence>
|
||||
<xs:attribute name="lastModified" type="xs:long" use="required"/>
|
||||
<xs:attribute name="ignoredArticles" type="xs:string" use="required"/> <!-- Added in 1.10.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Index">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Artist">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/> <!-- Added in 1.10.1 -->
|
||||
<xs:attribute name="userRating" type="sub:UserRating" use="optional"/> <!-- Added in 1.13.0 -->
|
||||
<xs:attribute name="averageRating" type="sub:AverageRating" use="optional"/> <!-- Added in 1.13.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Genres">
|
||||
<xs:sequence>
|
||||
<xs:element name="genre" type="sub:Genre" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Genre" mixed="true">
|
||||
<xs:attribute name="songCount" type="xs:int" use="required"/> <!-- Added in 1.10.2 -->
|
||||
<xs:attribute name="albumCount" type="xs:int" use="required"/> <!-- Added in 1.10.2 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistsID3">
|
||||
<xs:sequence>
|
||||
<xs:element name="index" type="sub:IndexID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="ignoredArticles" type="xs:string" use="required"/> <!-- Added in 1.10.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="IndexID3">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:ArtistID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistID3">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="albumCount" type="xs:int" use="required"/>
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistWithAlbumsID3">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:ArtistID3">
|
||||
<xs:sequence>
|
||||
<xs:element name="album" type="sub:AlbumID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumID3">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="artistId" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="songCount" type="xs:int" use="required"/>
|
||||
<xs:attribute name="duration" type="xs:int" use="required"/>
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/>
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/>
|
||||
<xs:attribute name="year" type="xs:int" use="optional"/> <!-- Added in 1.10.1 -->
|
||||
<xs:attribute name="genre" type="xs:string" use="optional"/> <!-- Added in 1.10.1 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumWithSongsID3">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:AlbumID3">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Videos">
|
||||
<xs:sequence>
|
||||
<xs:element name="video" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Directory">
|
||||
<xs:sequence>
|
||||
<xs:element name="child" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="parent" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/> <!-- Added in 1.10.1 -->
|
||||
<xs:attribute name="userRating" type="sub:UserRating" use="optional"/> <!-- Added in 1.13.0 -->
|
||||
<xs:attribute name="averageRating" type="sub:AverageRating" use="optional"/> <!-- Added in 1.13.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Child">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="parent" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="isDir" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="title" type="xs:string" use="required"/>
|
||||
<xs:attribute name="album" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="track" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="year" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="genre" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="size" type="xs:long" use="optional"/>
|
||||
<xs:attribute name="contentType" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="suffix" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="transcodedContentType" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="transcodedSuffix" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="duration" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="bitRate" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="path" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="isVideo" type="xs:boolean" use="optional"/> <!-- Added in 1.4.1 -->
|
||||
<xs:attribute name="userRating" type="sub:UserRating" use="optional"/> <!-- Added in 1.6.0 -->
|
||||
<xs:attribute name="averageRating" type="sub:AverageRating" use="optional"/> <!-- Added in 1.6.0 -->
|
||||
<xs:attribute name="discNumber" type="xs:int" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="created" type="xs:dateTime" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="albumId" type="xs:string" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="artistId" type="xs:string" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="type" type="sub:MediaType" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="bookmarkPosition" type="xs:long" use="optional"/> <!-- In millis. Added in 1.10.1 -->
|
||||
<xs:attribute name="originalWidth" type="xs:int" use="optional"/> <!-- Added in 1.13.0 -->
|
||||
<xs:attribute name="originalHeight" type="xs:int" use="optional"/> <!-- Added in 1.13.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="MediaType">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="music"/>
|
||||
<xs:enumeration value="podcast"/>
|
||||
<xs:enumeration value="audiobook"/>
|
||||
<xs:enumeration value="video"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="UserRating">
|
||||
<xs:restriction base="xs:int">
|
||||
<xs:minInclusive value="1"/>
|
||||
<xs:maxInclusive value="5"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="AverageRating">
|
||||
<xs:restriction base="xs:double">
|
||||
<xs:minInclusive value="1.0"/>
|
||||
<xs:maxInclusive value="5.0"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="NowPlaying">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:NowPlayingEntry" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="NowPlayingEntry">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:Child">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="minutesAgo" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playerId" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playerName" type="xs:string" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<!--Deprecated-->
|
||||
<xs:complexType name="SearchResult">
|
||||
<xs:sequence>
|
||||
<xs:element name="match" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="offset" type="xs:int" use="required"/>
|
||||
<xs:attribute name="totalHits" type="xs:int" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SearchResult2">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SearchResult3">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:ArtistID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:AlbumID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Playlists">
|
||||
<xs:sequence>
|
||||
<xs:element name="playlist" type="sub:Playlist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Playlist">
|
||||
<xs:sequence>
|
||||
<xs:element name="allowedUser" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> <!--Added in 1.8.0-->
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="comment" type="xs:string" use="optional"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="owner" type="xs:string" use="optional"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="public" type="xs:boolean" use="optional"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="songCount" type="xs:int" use="required"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="duration" type="xs:int" use="required"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="changed" type="xs:dateTime" use="required"/> <!--Added in 1.13.0-->
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/> <!--Added in 1.11.0-->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PlaylistWithSongs">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:Playlist">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="JukeboxStatus">
|
||||
<xs:attribute name="currentIndex" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playing" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="gain" type="xs:float" use="required"/>
|
||||
<xs:attribute name="position" type="xs:int" use="optional"/> <!--Added in 1.7.0-->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="JukeboxPlaylist">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:JukeboxStatus">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ChatMessages">
|
||||
<xs:sequence>
|
||||
<xs:element name="chatMessage" type="sub:ChatMessage" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ChatMessage">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="time" type="xs:long" use="required"/>
|
||||
<xs:attribute name="message" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumList">
|
||||
<xs:sequence>
|
||||
<xs:element name="album" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumList2">
|
||||
<xs:sequence>
|
||||
<xs:element name="album" type="sub:AlbumID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Songs">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Lyrics" mixed="true">
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="title" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Podcasts">
|
||||
<xs:sequence>
|
||||
<xs:element name="channel" type="sub:PodcastChannel" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PodcastChannel">
|
||||
<xs:sequence>
|
||||
<xs:element name="episode" type="sub:PodcastEpisode" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="url" type="xs:string" use="required"/>
|
||||
<xs:attribute name="title" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="description" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/> <!-- Added in 1.13.0 -->
|
||||
<xs:attribute name="originalImageUrl" type="xs:string" use="optional"/> <!-- Added in 1.13.0 -->
|
||||
<xs:attribute name="status" type="sub:PodcastStatus" use="required"/>
|
||||
<xs:attribute name="errorMessage" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="NewestPodcasts">
|
||||
<xs:sequence>
|
||||
<xs:element name="episode" type="sub:PodcastEpisode" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PodcastEpisode">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:Child">
|
||||
<xs:attribute name="streamId" type="xs:string" use="optional"/> <!-- Use this ID for streaming the podcast. -->
|
||||
<xs:attribute name="channelId" type="xs:string" use="required"/> <!-- Added in 1.13.0 -->
|
||||
<xs:attribute name="description" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="status" type="sub:PodcastStatus" use="required"/>
|
||||
<xs:attribute name="publishDate" type="xs:dateTime" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="PodcastStatus">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="new"/>
|
||||
<xs:enumeration value="downloading"/>
|
||||
<xs:enumeration value="completed"/>
|
||||
<xs:enumeration value="error"/>
|
||||
<xs:enumeration value="deleted"/>
|
||||
<xs:enumeration value="skipped"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="InternetRadioStations">
|
||||
<xs:sequence>
|
||||
<xs:element name="internetRadioStation" type="sub:InternetRadioStation" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="InternetRadioStation">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="streamUrl" type="xs:string" use="required"/>
|
||||
<xs:attribute name="homePageUrl" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Bookmarks">
|
||||
<xs:sequence>
|
||||
<xs:element name="bookmark" type="sub:Bookmark" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Bookmark">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="1" maxOccurs="1"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="position" type="xs:long" use="required"/> <!-- In milliseconds -->
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="comment" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/>
|
||||
<xs:attribute name="changed" type="xs:dateTime" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PlayQueue">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="current" type="xs:int" use="optional"/> <!-- ID of currently playing track -->
|
||||
<xs:attribute name="position" type="xs:long" use="optional"/> <!-- Position in milliseconds of currently playing track -->
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="changed" type="xs:dateTime" use="required"/>
|
||||
<xs:attribute name="changedBy" type="xs:string" use="required"/> <!-- Name of client app -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Shares">
|
||||
<xs:sequence>
|
||||
<xs:element name="share" type="sub:Share" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Share">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="url" type="xs:string" use="required"/>
|
||||
<xs:attribute name="description" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/>
|
||||
<xs:attribute name="expires" type="xs:dateTime" use="optional"/>
|
||||
<xs:attribute name="lastVisited" type="xs:dateTime" use="optional"/>
|
||||
<xs:attribute name="visitCount" type="xs:int" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Starred">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistInfoBase">
|
||||
<xs:sequence>
|
||||
<xs:element name="biography" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="musicBrainzId" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="lastFmUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="smallImageUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="mediumImageUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="largeImageUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistInfo">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:ArtistInfoBase">
|
||||
<xs:sequence>
|
||||
<xs:element name="similarArtist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistInfo2">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:ArtistInfoBase">
|
||||
<xs:sequence>
|
||||
<xs:element name="similarArtist" type="sub:ArtistID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SimilarSongs">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SimilarSongs2">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="TopSongs">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Starred2">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:ArtistID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:AlbumID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="License">
|
||||
<xs:attribute name="valid" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="email" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="licenseExpires" type="xs:dateTime" use="optional"/>
|
||||
<xs:attribute name="trialExpires" type="xs:dateTime" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Users">
|
||||
<xs:sequence>
|
||||
<xs:element name="user" type="sub:User" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="User">
|
||||
<xs:sequence>
|
||||
<xs:element name="folder" type="xs:int" minOccurs="0" maxOccurs="unbounded"/> <!-- Added in 1.12.0 -->
|
||||
</xs:sequence>
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="email" type="xs:string" use="optional"/> <!-- Added in 1.6.0 -->
|
||||
<xs:attribute name="scrobblingEnabled" type="xs:boolean" use="required"/> <!-- Added in 1.7.0 -->
|
||||
<xs:attribute name="maxBitRate" type="xs:int" use="optional"/> <!-- In Kbps, added in 1.13.0 -->
|
||||
<xs:attribute name="adminRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="settingsRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="downloadRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="uploadRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="playlistRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="coverArtRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="commentRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="podcastRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="streamRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="jukeboxRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="shareRole" type="xs:boolean" use="required"/> <!-- Added in 1.7.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Error">
|
||||
<xs:attribute name="code" type="xs:int" use="required"/>
|
||||
<xs:attribute name="message" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
</xs:schema>
|
@@ -1,632 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:sub="http://subsonic.org/restapi"
|
||||
targetNamespace="http://subsonic.org/restapi"
|
||||
attributeFormDefault="unqualified"
|
||||
elementFormDefault="qualified"
|
||||
version="1.14.0">
|
||||
|
||||
<xs:element name="subsonic-response" type="sub:Response"/>
|
||||
|
||||
<xs:complexType name="Response">
|
||||
<xs:choice minOccurs="0" maxOccurs="1">
|
||||
<xs:element name="musicFolders" type="sub:MusicFolders" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="indexes" type="sub:Indexes" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="directory" type="sub:Directory" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="genres" type="sub:Genres" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="artists" type="sub:ArtistsID3" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="artist" type="sub:ArtistWithAlbumsID3" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="album" type="sub:AlbumWithSongsID3" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="videos" type="sub:Videos" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="videoInfo" type="sub:VideoInfo" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="nowPlaying" type="sub:NowPlaying" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult" type="sub:SearchResult" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult2" type="sub:SearchResult2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult3" type="sub:SearchResult3" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playlists" type="sub:Playlists" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playlist" type="sub:PlaylistWithSongs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="jukeboxStatus" type="sub:JukeboxStatus" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="jukeboxPlaylist" type="sub:JukeboxPlaylist" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="license" type="sub:License" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="users" type="sub:Users" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="user" type="sub:User" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="chatMessages" type="sub:ChatMessages" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="albumList" type="sub:AlbumList" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="albumList2" type="sub:AlbumList2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="randomSongs" type="sub:Songs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="songsByGenre" type="sub:Songs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="lyrics" type="sub:Lyrics" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="podcasts" type="sub:Podcasts" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="newestPodcasts" type="sub:NewestPodcasts" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="internetRadioStations" type="sub:InternetRadioStations" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="bookmarks" type="sub:Bookmarks" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playQueue" type="sub:PlayQueue" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="shares" type="sub:Shares" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="starred" type="sub:Starred" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="starred2" type="sub:Starred2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="albumInfo" type="sub:AlbumInfo" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="artistInfo" type="sub:ArtistInfo" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="artistInfo2" type="sub:ArtistInfo2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="similarSongs" type="sub:SimilarSongs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="similarSongs2" type="sub:SimilarSongs2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="topSongs" type="sub:TopSongs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="error" type="sub:Error" minOccurs="1" maxOccurs="1"/>
|
||||
</xs:choice>
|
||||
<xs:attribute name="status" type="sub:ResponseStatus" use="required"/>
|
||||
<xs:attribute name="version" type="sub:Version" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="ResponseStatus">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="ok"/>
|
||||
<xs:enumeration value="failed"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="Version">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="\d+\.\d+\.\d+"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="MusicFolders">
|
||||
<xs:sequence>
|
||||
<xs:element name="musicFolder" type="sub:MusicFolder" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="MusicFolder">
|
||||
<xs:attribute name="id" type="xs:int" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Indexes">
|
||||
<xs:sequence>
|
||||
<xs:element name="shortcut" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="index" type="sub:Index" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="child" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/> <!-- Added in 1.7.0 -->
|
||||
</xs:sequence>
|
||||
<xs:attribute name="lastModified" type="xs:long" use="required"/>
|
||||
<xs:attribute name="ignoredArticles" type="xs:string" use="required"/> <!-- Added in 1.10.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Index">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Artist">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/> <!-- Added in 1.10.1 -->
|
||||
<xs:attribute name="userRating" type="sub:UserRating" use="optional"/> <!-- Added in 1.13.0 -->
|
||||
<xs:attribute name="averageRating" type="sub:AverageRating" use="optional"/> <!-- Added in 1.13.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Genres">
|
||||
<xs:sequence>
|
||||
<xs:element name="genre" type="sub:Genre" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Genre" mixed="true">
|
||||
<xs:attribute name="songCount" type="xs:int" use="required"/> <!-- Added in 1.10.2 -->
|
||||
<xs:attribute name="albumCount" type="xs:int" use="required"/> <!-- Added in 1.10.2 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistsID3">
|
||||
<xs:sequence>
|
||||
<xs:element name="index" type="sub:IndexID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="ignoredArticles" type="xs:string" use="required"/> <!-- Added in 1.10.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="IndexID3">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:ArtistID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistID3">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="albumCount" type="xs:int" use="required"/>
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistWithAlbumsID3">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:ArtistID3">
|
||||
<xs:sequence>
|
||||
<xs:element name="album" type="sub:AlbumID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumID3">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="artistId" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="songCount" type="xs:int" use="required"/>
|
||||
<xs:attribute name="duration" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playCount" type="xs:long" use="optional"/> <!-- Added in 1.14.0 -->
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/>
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/>
|
||||
<xs:attribute name="year" type="xs:int" use="optional"/> <!-- Added in 1.10.1 -->
|
||||
<xs:attribute name="genre" type="xs:string" use="optional"/> <!-- Added in 1.10.1 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumWithSongsID3">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:AlbumID3">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Videos">
|
||||
<xs:sequence>
|
||||
<xs:element name="video" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="VideoInfo">
|
||||
<xs:sequence>
|
||||
<xs:element name="captions" type="sub:Captions" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="audioTrack" type="sub:AudioTrack" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="conversion" type="sub:VideoConversion" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Captions">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AudioTrack">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="languageCode" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="VideoConversion">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="bitRate" type="xs:int" use="optional"/> <!-- In Kbps -->
|
||||
<xs:attribute name="audioTrackId" type="xs:int" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Directory">
|
||||
<xs:sequence>
|
||||
<xs:element name="child" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="parent" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/> <!-- Added in 1.10.1 -->
|
||||
<xs:attribute name="userRating" type="sub:UserRating" use="optional"/> <!-- Added in 1.13.0 -->
|
||||
<xs:attribute name="averageRating" type="sub:AverageRating" use="optional"/> <!-- Added in 1.13.0 -->
|
||||
<xs:attribute name="playCount" type="xs:long" use="optional"/> <!-- Added in 1.14.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Child">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="parent" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="isDir" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="title" type="xs:string" use="required"/>
|
||||
<xs:attribute name="album" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="track" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="year" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="genre" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="size" type="xs:long" use="optional"/>
|
||||
<xs:attribute name="contentType" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="suffix" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="transcodedContentType" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="transcodedSuffix" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="duration" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="bitRate" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="path" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="isVideo" type="xs:boolean" use="optional"/> <!-- Added in 1.4.1 -->
|
||||
<xs:attribute name="userRating" type="sub:UserRating" use="optional"/> <!-- Added in 1.6.0 -->
|
||||
<xs:attribute name="averageRating" type="sub:AverageRating" use="optional"/> <!-- Added in 1.6.0 -->
|
||||
<xs:attribute name="playCount" type="xs:long" use="optional"/> <!-- Added in 1.14.0 -->
|
||||
<xs:attribute name="discNumber" type="xs:int" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="created" type="xs:dateTime" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="albumId" type="xs:string" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="artistId" type="xs:string" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="type" type="sub:MediaType" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="bookmarkPosition" type="xs:long" use="optional"/> <!-- In millis. Added in 1.10.1 -->
|
||||
<xs:attribute name="originalWidth" type="xs:int" use="optional"/> <!-- Added in 1.13.0 -->
|
||||
<xs:attribute name="originalHeight" type="xs:int" use="optional"/> <!-- Added in 1.13.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="MediaType">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="music"/>
|
||||
<xs:enumeration value="podcast"/>
|
||||
<xs:enumeration value="audiobook"/>
|
||||
<xs:enumeration value="video"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="UserRating">
|
||||
<xs:restriction base="xs:int">
|
||||
<xs:minInclusive value="1"/>
|
||||
<xs:maxInclusive value="5"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="AverageRating">
|
||||
<xs:restriction base="xs:double">
|
||||
<xs:minInclusive value="1.0"/>
|
||||
<xs:maxInclusive value="5.0"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="NowPlaying">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:NowPlayingEntry" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="NowPlayingEntry">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:Child">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="minutesAgo" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playerId" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playerName" type="xs:string" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<!--Deprecated-->
|
||||
<xs:complexType name="SearchResult">
|
||||
<xs:sequence>
|
||||
<xs:element name="match" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="offset" type="xs:int" use="required"/>
|
||||
<xs:attribute name="totalHits" type="xs:int" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SearchResult2">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SearchResult3">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:ArtistID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:AlbumID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Playlists">
|
||||
<xs:sequence>
|
||||
<xs:element name="playlist" type="sub:Playlist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Playlist">
|
||||
<xs:sequence>
|
||||
<xs:element name="allowedUser" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> <!--Added in 1.8.0-->
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="comment" type="xs:string" use="optional"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="owner" type="xs:string" use="optional"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="public" type="xs:boolean" use="optional"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="songCount" type="xs:int" use="required"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="duration" type="xs:int" use="required"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="changed" type="xs:dateTime" use="required"/> <!--Added in 1.13.0-->
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/> <!--Added in 1.11.0-->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PlaylistWithSongs">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:Playlist">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="JukeboxStatus">
|
||||
<xs:attribute name="currentIndex" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playing" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="gain" type="xs:float" use="required"/>
|
||||
<xs:attribute name="position" type="xs:int" use="optional"/> <!--Added in 1.7.0-->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="JukeboxPlaylist">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:JukeboxStatus">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ChatMessages">
|
||||
<xs:sequence>
|
||||
<xs:element name="chatMessage" type="sub:ChatMessage" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ChatMessage">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="time" type="xs:long" use="required"/>
|
||||
<xs:attribute name="message" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumList">
|
||||
<xs:sequence>
|
||||
<xs:element name="album" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumList2">
|
||||
<xs:sequence>
|
||||
<xs:element name="album" type="sub:AlbumID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Songs">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Lyrics" mixed="true">
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="title" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Podcasts">
|
||||
<xs:sequence>
|
||||
<xs:element name="channel" type="sub:PodcastChannel" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PodcastChannel">
|
||||
<xs:sequence>
|
||||
<xs:element name="episode" type="sub:PodcastEpisode" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="url" type="xs:string" use="required"/>
|
||||
<xs:attribute name="title" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="description" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/> <!-- Added in 1.13.0 -->
|
||||
<xs:attribute name="originalImageUrl" type="xs:string" use="optional"/> <!-- Added in 1.13.0 -->
|
||||
<xs:attribute name="status" type="sub:PodcastStatus" use="required"/>
|
||||
<xs:attribute name="errorMessage" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="NewestPodcasts">
|
||||
<xs:sequence>
|
||||
<xs:element name="episode" type="sub:PodcastEpisode" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PodcastEpisode">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:Child">
|
||||
<xs:attribute name="streamId" type="xs:string" use="optional"/> <!-- Use this ID for streaming the podcast. -->
|
||||
<xs:attribute name="channelId" type="xs:string" use="required"/> <!-- Added in 1.13.0 -->
|
||||
<xs:attribute name="description" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="status" type="sub:PodcastStatus" use="required"/>
|
||||
<xs:attribute name="publishDate" type="xs:dateTime" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="PodcastStatus">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="new"/>
|
||||
<xs:enumeration value="downloading"/>
|
||||
<xs:enumeration value="completed"/>
|
||||
<xs:enumeration value="error"/>
|
||||
<xs:enumeration value="deleted"/>
|
||||
<xs:enumeration value="skipped"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="InternetRadioStations">
|
||||
<xs:sequence>
|
||||
<xs:element name="internetRadioStation" type="sub:InternetRadioStation" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="InternetRadioStation">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="streamUrl" type="xs:string" use="required"/>
|
||||
<xs:attribute name="homePageUrl" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Bookmarks">
|
||||
<xs:sequence>
|
||||
<xs:element name="bookmark" type="sub:Bookmark" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Bookmark">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="1" maxOccurs="1"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="position" type="xs:long" use="required"/> <!-- In milliseconds -->
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="comment" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/>
|
||||
<xs:attribute name="changed" type="xs:dateTime" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PlayQueue">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="current" type="xs:int" use="optional"/> <!-- ID of currently playing track -->
|
||||
<xs:attribute name="position" type="xs:long" use="optional"/> <!-- Position in milliseconds of currently playing track -->
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="changed" type="xs:dateTime" use="required"/>
|
||||
<xs:attribute name="changedBy" type="xs:string" use="required"/> <!-- Name of client app -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Shares">
|
||||
<xs:sequence>
|
||||
<xs:element name="share" type="sub:Share" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Share">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="url" type="xs:string" use="required"/>
|
||||
<xs:attribute name="description" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/>
|
||||
<xs:attribute name="expires" type="xs:dateTime" use="optional"/>
|
||||
<xs:attribute name="lastVisited" type="xs:dateTime" use="optional"/>
|
||||
<xs:attribute name="visitCount" type="xs:int" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Starred">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumInfo">
|
||||
<xs:sequence>
|
||||
<xs:element name="notes" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="musicBrainzId" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="lastFmUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="smallImageUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="mediumImageUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="largeImageUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistInfoBase">
|
||||
<xs:sequence>
|
||||
<xs:element name="biography" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="musicBrainzId" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="lastFmUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="smallImageUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="mediumImageUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="largeImageUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistInfo">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:ArtistInfoBase">
|
||||
<xs:sequence>
|
||||
<xs:element name="similarArtist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistInfo2">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:ArtistInfoBase">
|
||||
<xs:sequence>
|
||||
<xs:element name="similarArtist" type="sub:ArtistID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SimilarSongs">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SimilarSongs2">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="TopSongs">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Starred2">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:ArtistID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:AlbumID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="License">
|
||||
<xs:attribute name="valid" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="email" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="licenseExpires" type="xs:dateTime" use="optional"/>
|
||||
<xs:attribute name="trialExpires" type="xs:dateTime" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Users">
|
||||
<xs:sequence>
|
||||
<xs:element name="user" type="sub:User" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="User">
|
||||
<xs:sequence>
|
||||
<xs:element name="folder" type="xs:int" minOccurs="0" maxOccurs="unbounded"/> <!-- Added in 1.12.0 -->
|
||||
</xs:sequence>
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="email" type="xs:string" use="optional"/> <!-- Added in 1.6.0 -->
|
||||
<xs:attribute name="scrobblingEnabled" type="xs:boolean" use="required"/> <!-- Added in 1.7.0 -->
|
||||
<xs:attribute name="maxBitRate" type="xs:int" use="optional"/> <!-- In Kbps, added in 1.13.0 -->
|
||||
<xs:attribute name="adminRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="settingsRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="downloadRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="uploadRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="playlistRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="coverArtRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="commentRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="podcastRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="streamRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="jukeboxRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="shareRole" type="xs:boolean" use="required"/> <!-- Added in 1.7.0 -->
|
||||
<xs:attribute name="videoConversionRole" type="xs:boolean" use="required"/> <!-- Added in 1.14.0 -->
|
||||
<xs:attribute name="avatarLastChanged" type="xs:dateTime" use="optional"/> <!-- Added in 1.14.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Error">
|
||||
<xs:attribute name="code" type="xs:int" use="required"/>
|
||||
<xs:attribute name="message" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
</xs:schema>
|
@@ -1,638 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:sub="http://subsonic.org/restapi"
|
||||
targetNamespace="http://subsonic.org/restapi"
|
||||
attributeFormDefault="unqualified"
|
||||
elementFormDefault="qualified"
|
||||
version="1.15.0">
|
||||
|
||||
<xs:element name="subsonic-response" type="sub:Response"/>
|
||||
|
||||
<xs:complexType name="Response">
|
||||
<xs:choice minOccurs="0" maxOccurs="1">
|
||||
<xs:element name="musicFolders" type="sub:MusicFolders" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="indexes" type="sub:Indexes" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="directory" type="sub:Directory" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="genres" type="sub:Genres" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="artists" type="sub:ArtistsID3" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="artist" type="sub:ArtistWithAlbumsID3" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="album" type="sub:AlbumWithSongsID3" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="videos" type="sub:Videos" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="videoInfo" type="sub:VideoInfo" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="nowPlaying" type="sub:NowPlaying" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult" type="sub:SearchResult" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult2" type="sub:SearchResult2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult3" type="sub:SearchResult3" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playlists" type="sub:Playlists" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playlist" type="sub:PlaylistWithSongs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="jukeboxStatus" type="sub:JukeboxStatus" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="jukeboxPlaylist" type="sub:JukeboxPlaylist" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="license" type="sub:License" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="users" type="sub:Users" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="user" type="sub:User" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="chatMessages" type="sub:ChatMessages" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="albumList" type="sub:AlbumList" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="albumList2" type="sub:AlbumList2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="randomSongs" type="sub:Songs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="songsByGenre" type="sub:Songs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="lyrics" type="sub:Lyrics" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="podcasts" type="sub:Podcasts" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="newestPodcasts" type="sub:NewestPodcasts" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="internetRadioStations" type="sub:InternetRadioStations" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="bookmarks" type="sub:Bookmarks" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playQueue" type="sub:PlayQueue" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="shares" type="sub:Shares" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="starred" type="sub:Starred" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="starred2" type="sub:Starred2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="albumInfo" type="sub:AlbumInfo" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="artistInfo" type="sub:ArtistInfo" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="artistInfo2" type="sub:ArtistInfo2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="similarSongs" type="sub:SimilarSongs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="similarSongs2" type="sub:SimilarSongs2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="topSongs" type="sub:TopSongs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="scanStatus" type="sub:ScanStatus" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="error" type="sub:Error" minOccurs="1" maxOccurs="1"/>
|
||||
</xs:choice>
|
||||
<xs:attribute name="status" type="sub:ResponseStatus" use="required"/>
|
||||
<xs:attribute name="version" type="sub:Version" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="ResponseStatus">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="ok"/>
|
||||
<xs:enumeration value="failed"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="Version">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="\d+\.\d+\.\d+"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="MusicFolders">
|
||||
<xs:sequence>
|
||||
<xs:element name="musicFolder" type="sub:MusicFolder" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="MusicFolder">
|
||||
<xs:attribute name="id" type="xs:int" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Indexes">
|
||||
<xs:sequence>
|
||||
<xs:element name="shortcut" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="index" type="sub:Index" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="child" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/> <!-- Added in 1.7.0 -->
|
||||
</xs:sequence>
|
||||
<xs:attribute name="lastModified" type="xs:long" use="required"/>
|
||||
<xs:attribute name="ignoredArticles" type="xs:string" use="required"/> <!-- Added in 1.10.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Index">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Artist">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/> <!-- Added in 1.10.1 -->
|
||||
<xs:attribute name="userRating" type="sub:UserRating" use="optional"/> <!-- Added in 1.13.0 -->
|
||||
<xs:attribute name="averageRating" type="sub:AverageRating" use="optional"/> <!-- Added in 1.13.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Genres">
|
||||
<xs:sequence>
|
||||
<xs:element name="genre" type="sub:Genre" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Genre" mixed="true">
|
||||
<xs:attribute name="songCount" type="xs:int" use="required"/> <!-- Added in 1.10.2 -->
|
||||
<xs:attribute name="albumCount" type="xs:int" use="required"/> <!-- Added in 1.10.2 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistsID3">
|
||||
<xs:sequence>
|
||||
<xs:element name="index" type="sub:IndexID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="ignoredArticles" type="xs:string" use="required"/> <!-- Added in 1.10.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="IndexID3">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:ArtistID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistID3">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="albumCount" type="xs:int" use="required"/>
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistWithAlbumsID3">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:ArtistID3">
|
||||
<xs:sequence>
|
||||
<xs:element name="album" type="sub:AlbumID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumID3">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="artistId" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="songCount" type="xs:int" use="required"/>
|
||||
<xs:attribute name="duration" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playCount" type="xs:long" use="optional"/> <!-- Added in 1.14.0 -->
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/>
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/>
|
||||
<xs:attribute name="year" type="xs:int" use="optional"/> <!-- Added in 1.10.1 -->
|
||||
<xs:attribute name="genre" type="xs:string" use="optional"/> <!-- Added in 1.10.1 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumWithSongsID3">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:AlbumID3">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Videos">
|
||||
<xs:sequence>
|
||||
<xs:element name="video" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="VideoInfo">
|
||||
<xs:sequence>
|
||||
<xs:element name="captions" type="sub:Captions" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="audioTrack" type="sub:AudioTrack" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="conversion" type="sub:VideoConversion" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Captions">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AudioTrack">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="languageCode" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="VideoConversion">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="bitRate" type="xs:int" use="optional"/> <!-- In Kbps -->
|
||||
<xs:attribute name="audioTrackId" type="xs:int" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Directory">
|
||||
<xs:sequence>
|
||||
<xs:element name="child" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="parent" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/> <!-- Added in 1.10.1 -->
|
||||
<xs:attribute name="userRating" type="sub:UserRating" use="optional"/> <!-- Added in 1.13.0 -->
|
||||
<xs:attribute name="averageRating" type="sub:AverageRating" use="optional"/> <!-- Added in 1.13.0 -->
|
||||
<xs:attribute name="playCount" type="xs:long" use="optional"/> <!-- Added in 1.14.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Child">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="parent" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="isDir" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="title" type="xs:string" use="required"/>
|
||||
<xs:attribute name="album" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="track" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="year" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="genre" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="size" type="xs:long" use="optional"/>
|
||||
<xs:attribute name="contentType" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="suffix" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="transcodedContentType" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="transcodedSuffix" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="duration" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="bitRate" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="path" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="isVideo" type="xs:boolean" use="optional"/> <!-- Added in 1.4.1 -->
|
||||
<xs:attribute name="userRating" type="sub:UserRating" use="optional"/> <!-- Added in 1.6.0 -->
|
||||
<xs:attribute name="averageRating" type="sub:AverageRating" use="optional"/> <!-- Added in 1.6.0 -->
|
||||
<xs:attribute name="playCount" type="xs:long" use="optional"/> <!-- Added in 1.14.0 -->
|
||||
<xs:attribute name="discNumber" type="xs:int" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="created" type="xs:dateTime" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="albumId" type="xs:string" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="artistId" type="xs:string" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="type" type="sub:MediaType" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="bookmarkPosition" type="xs:long" use="optional"/> <!-- In millis. Added in 1.10.1 -->
|
||||
<xs:attribute name="originalWidth" type="xs:int" use="optional"/> <!-- Added in 1.13.0 -->
|
||||
<xs:attribute name="originalHeight" type="xs:int" use="optional"/> <!-- Added in 1.13.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="MediaType">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="music"/>
|
||||
<xs:enumeration value="podcast"/>
|
||||
<xs:enumeration value="audiobook"/>
|
||||
<xs:enumeration value="video"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="UserRating">
|
||||
<xs:restriction base="xs:int">
|
||||
<xs:minInclusive value="1"/>
|
||||
<xs:maxInclusive value="5"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="AverageRating">
|
||||
<xs:restriction base="xs:double">
|
||||
<xs:minInclusive value="1.0"/>
|
||||
<xs:maxInclusive value="5.0"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="NowPlaying">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:NowPlayingEntry" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="NowPlayingEntry">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:Child">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="minutesAgo" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playerId" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playerName" type="xs:string" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<!--Deprecated-->
|
||||
<xs:complexType name="SearchResult">
|
||||
<xs:sequence>
|
||||
<xs:element name="match" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="offset" type="xs:int" use="required"/>
|
||||
<xs:attribute name="totalHits" type="xs:int" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SearchResult2">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SearchResult3">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:ArtistID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:AlbumID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Playlists">
|
||||
<xs:sequence>
|
||||
<xs:element name="playlist" type="sub:Playlist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Playlist">
|
||||
<xs:sequence>
|
||||
<xs:element name="allowedUser" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> <!--Added in 1.8.0-->
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="comment" type="xs:string" use="optional"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="owner" type="xs:string" use="optional"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="public" type="xs:boolean" use="optional"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="songCount" type="xs:int" use="required"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="duration" type="xs:int" use="required"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="changed" type="xs:dateTime" use="required"/> <!--Added in 1.13.0-->
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/> <!--Added in 1.11.0-->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PlaylistWithSongs">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:Playlist">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="JukeboxStatus">
|
||||
<xs:attribute name="currentIndex" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playing" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="gain" type="xs:float" use="required"/>
|
||||
<xs:attribute name="position" type="xs:int" use="optional"/> <!--Added in 1.7.0-->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="JukeboxPlaylist">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:JukeboxStatus">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ChatMessages">
|
||||
<xs:sequence>
|
||||
<xs:element name="chatMessage" type="sub:ChatMessage" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ChatMessage">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="time" type="xs:long" use="required"/>
|
||||
<xs:attribute name="message" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumList">
|
||||
<xs:sequence>
|
||||
<xs:element name="album" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumList2">
|
||||
<xs:sequence>
|
||||
<xs:element name="album" type="sub:AlbumID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Songs">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Lyrics" mixed="true">
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="title" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Podcasts">
|
||||
<xs:sequence>
|
||||
<xs:element name="channel" type="sub:PodcastChannel" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PodcastChannel">
|
||||
<xs:sequence>
|
||||
<xs:element name="episode" type="sub:PodcastEpisode" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="url" type="xs:string" use="required"/>
|
||||
<xs:attribute name="title" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="description" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/> <!-- Added in 1.13.0 -->
|
||||
<xs:attribute name="originalImageUrl" type="xs:string" use="optional"/> <!-- Added in 1.13.0 -->
|
||||
<xs:attribute name="status" type="sub:PodcastStatus" use="required"/>
|
||||
<xs:attribute name="errorMessage" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="NewestPodcasts">
|
||||
<xs:sequence>
|
||||
<xs:element name="episode" type="sub:PodcastEpisode" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PodcastEpisode">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:Child">
|
||||
<xs:attribute name="streamId" type="xs:string" use="optional"/> <!-- Use this ID for streaming the podcast. -->
|
||||
<xs:attribute name="channelId" type="xs:string" use="required"/> <!-- Added in 1.13.0 -->
|
||||
<xs:attribute name="description" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="status" type="sub:PodcastStatus" use="required"/>
|
||||
<xs:attribute name="publishDate" type="xs:dateTime" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="PodcastStatus">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="new"/>
|
||||
<xs:enumeration value="downloading"/>
|
||||
<xs:enumeration value="completed"/>
|
||||
<xs:enumeration value="error"/>
|
||||
<xs:enumeration value="deleted"/>
|
||||
<xs:enumeration value="skipped"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="InternetRadioStations">
|
||||
<xs:sequence>
|
||||
<xs:element name="internetRadioStation" type="sub:InternetRadioStation" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="InternetRadioStation">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="streamUrl" type="xs:string" use="required"/>
|
||||
<xs:attribute name="homePageUrl" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Bookmarks">
|
||||
<xs:sequence>
|
||||
<xs:element name="bookmark" type="sub:Bookmark" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Bookmark">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="1" maxOccurs="1"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="position" type="xs:long" use="required"/> <!-- In milliseconds -->
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="comment" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/>
|
||||
<xs:attribute name="changed" type="xs:dateTime" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PlayQueue">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="current" type="xs:int" use="optional"/> <!-- ID of currently playing track -->
|
||||
<xs:attribute name="position" type="xs:long" use="optional"/> <!-- Position in milliseconds of currently playing track -->
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="changed" type="xs:dateTime" use="required"/>
|
||||
<xs:attribute name="changedBy" type="xs:string" use="required"/> <!-- Name of client app -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Shares">
|
||||
<xs:sequence>
|
||||
<xs:element name="share" type="sub:Share" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Share">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="url" type="xs:string" use="required"/>
|
||||
<xs:attribute name="description" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/>
|
||||
<xs:attribute name="expires" type="xs:dateTime" use="optional"/>
|
||||
<xs:attribute name="lastVisited" type="xs:dateTime" use="optional"/>
|
||||
<xs:attribute name="visitCount" type="xs:int" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Starred">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumInfo">
|
||||
<xs:sequence>
|
||||
<xs:element name="notes" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="musicBrainzId" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="lastFmUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="smallImageUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="mediumImageUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="largeImageUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistInfoBase">
|
||||
<xs:sequence>
|
||||
<xs:element name="biography" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="musicBrainzId" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="lastFmUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="smallImageUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="mediumImageUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="largeImageUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistInfo">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:ArtistInfoBase">
|
||||
<xs:sequence>
|
||||
<xs:element name="similarArtist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistInfo2">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:ArtistInfoBase">
|
||||
<xs:sequence>
|
||||
<xs:element name="similarArtist" type="sub:ArtistID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SimilarSongs">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SimilarSongs2">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="TopSongs">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Starred2">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:ArtistID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:AlbumID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="License">
|
||||
<xs:attribute name="valid" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="email" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="licenseExpires" type="xs:dateTime" use="optional"/>
|
||||
<xs:attribute name="trialExpires" type="xs:dateTime" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ScanStatus">
|
||||
<xs:attribute name="scanning" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="count" type="xs:long" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Users">
|
||||
<xs:sequence>
|
||||
<xs:element name="user" type="sub:User" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="User">
|
||||
<xs:sequence>
|
||||
<xs:element name="folder" type="xs:int" minOccurs="0" maxOccurs="unbounded"/> <!-- Added in 1.12.0 -->
|
||||
</xs:sequence>
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="email" type="xs:string" use="optional"/> <!-- Added in 1.6.0 -->
|
||||
<xs:attribute name="scrobblingEnabled" type="xs:boolean" use="required"/> <!-- Added in 1.7.0 -->
|
||||
<xs:attribute name="maxBitRate" type="xs:int" use="optional"/> <!-- In Kbps, added in 1.13.0 -->
|
||||
<xs:attribute name="adminRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="settingsRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="downloadRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="uploadRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="playlistRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="coverArtRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="commentRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="podcastRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="streamRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="jukeboxRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="shareRole" type="xs:boolean" use="required"/> <!-- Added in 1.7.0 -->
|
||||
<xs:attribute name="videoConversionRole" type="xs:boolean" use="required"/> <!-- Added in 1.14.0 -->
|
||||
<xs:attribute name="avatarLastChanged" type="xs:dateTime" use="optional"/> <!-- Added in 1.14.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Error">
|
||||
<xs:attribute name="code" type="xs:int" use="required"/>
|
||||
<xs:attribute name="message" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
</xs:schema>
|
@@ -1,638 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:sub="http://subsonic.org/restapi"
|
||||
targetNamespace="http://subsonic.org/restapi"
|
||||
attributeFormDefault="unqualified"
|
||||
elementFormDefault="qualified"
|
||||
version="1.16.0">
|
||||
|
||||
<xs:element name="subsonic-response" type="sub:Response"/>
|
||||
|
||||
<xs:complexType name="Response">
|
||||
<xs:choice minOccurs="0" maxOccurs="1">
|
||||
<xs:element name="musicFolders" type="sub:MusicFolders" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="indexes" type="sub:Indexes" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="directory" type="sub:Directory" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="genres" type="sub:Genres" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="artists" type="sub:ArtistsID3" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="artist" type="sub:ArtistWithAlbumsID3" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="album" type="sub:AlbumWithSongsID3" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="videos" type="sub:Videos" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="videoInfo" type="sub:VideoInfo" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="nowPlaying" type="sub:NowPlaying" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult" type="sub:SearchResult" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult2" type="sub:SearchResult2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult3" type="sub:SearchResult3" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playlists" type="sub:Playlists" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playlist" type="sub:PlaylistWithSongs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="jukeboxStatus" type="sub:JukeboxStatus" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="jukeboxPlaylist" type="sub:JukeboxPlaylist" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="license" type="sub:License" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="users" type="sub:Users" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="user" type="sub:User" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="chatMessages" type="sub:ChatMessages" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="albumList" type="sub:AlbumList" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="albumList2" type="sub:AlbumList2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="randomSongs" type="sub:Songs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="songsByGenre" type="sub:Songs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="lyrics" type="sub:Lyrics" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="podcasts" type="sub:Podcasts" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="newestPodcasts" type="sub:NewestPodcasts" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="internetRadioStations" type="sub:InternetRadioStations" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="bookmarks" type="sub:Bookmarks" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playQueue" type="sub:PlayQueue" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="shares" type="sub:Shares" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="starred" type="sub:Starred" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="starred2" type="sub:Starred2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="albumInfo" type="sub:AlbumInfo" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="artistInfo" type="sub:ArtistInfo" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="artistInfo2" type="sub:ArtistInfo2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="similarSongs" type="sub:SimilarSongs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="similarSongs2" type="sub:SimilarSongs2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="topSongs" type="sub:TopSongs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="scanStatus" type="sub:ScanStatus" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="error" type="sub:Error" minOccurs="1" maxOccurs="1"/>
|
||||
</xs:choice>
|
||||
<xs:attribute name="status" type="sub:ResponseStatus" use="required"/>
|
||||
<xs:attribute name="version" type="sub:Version" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="ResponseStatus">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="ok"/>
|
||||
<xs:enumeration value="failed"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="Version">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="\d+\.\d+\.\d+"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="MusicFolders">
|
||||
<xs:sequence>
|
||||
<xs:element name="musicFolder" type="sub:MusicFolder" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="MusicFolder">
|
||||
<xs:attribute name="id" type="xs:int" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Indexes">
|
||||
<xs:sequence>
|
||||
<xs:element name="shortcut" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="index" type="sub:Index" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="child" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/> <!-- Added in 1.7.0 -->
|
||||
</xs:sequence>
|
||||
<xs:attribute name="lastModified" type="xs:long" use="required"/>
|
||||
<xs:attribute name="ignoredArticles" type="xs:string" use="required"/> <!-- Added in 1.10.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Index">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Artist">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/> <!-- Added in 1.10.1 -->
|
||||
<xs:attribute name="userRating" type="sub:UserRating" use="optional"/> <!-- Added in 1.13.0 -->
|
||||
<xs:attribute name="averageRating" type="sub:AverageRating" use="optional"/> <!-- Added in 1.13.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Genres">
|
||||
<xs:sequence>
|
||||
<xs:element name="genre" type="sub:Genre" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Genre" mixed="true">
|
||||
<xs:attribute name="songCount" type="xs:int" use="required"/> <!-- Added in 1.10.2 -->
|
||||
<xs:attribute name="albumCount" type="xs:int" use="required"/> <!-- Added in 1.10.2 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistsID3">
|
||||
<xs:sequence>
|
||||
<xs:element name="index" type="sub:IndexID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="ignoredArticles" type="xs:string" use="required"/> <!-- Added in 1.10.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="IndexID3">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:ArtistID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistID3">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="albumCount" type="xs:int" use="required"/>
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistWithAlbumsID3">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:ArtistID3">
|
||||
<xs:sequence>
|
||||
<xs:element name="album" type="sub:AlbumID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumID3">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="artistId" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="songCount" type="xs:int" use="required"/>
|
||||
<xs:attribute name="duration" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playCount" type="xs:long" use="optional"/> <!-- Added in 1.14.0 -->
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/>
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/>
|
||||
<xs:attribute name="year" type="xs:int" use="optional"/> <!-- Added in 1.10.1 -->
|
||||
<xs:attribute name="genre" type="xs:string" use="optional"/> <!-- Added in 1.10.1 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumWithSongsID3">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:AlbumID3">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Videos">
|
||||
<xs:sequence>
|
||||
<xs:element name="video" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="VideoInfo">
|
||||
<xs:sequence>
|
||||
<xs:element name="captions" type="sub:Captions" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="audioTrack" type="sub:AudioTrack" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="conversion" type="sub:VideoConversion" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Captions">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AudioTrack">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="languageCode" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="VideoConversion">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="bitRate" type="xs:int" use="optional"/> <!-- In Kbps -->
|
||||
<xs:attribute name="audioTrackId" type="xs:int" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Directory">
|
||||
<xs:sequence>
|
||||
<xs:element name="child" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="parent" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/> <!-- Added in 1.10.1 -->
|
||||
<xs:attribute name="userRating" type="sub:UserRating" use="optional"/> <!-- Added in 1.13.0 -->
|
||||
<xs:attribute name="averageRating" type="sub:AverageRating" use="optional"/> <!-- Added in 1.13.0 -->
|
||||
<xs:attribute name="playCount" type="xs:long" use="optional"/> <!-- Added in 1.14.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Child">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="parent" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="isDir" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="title" type="xs:string" use="required"/>
|
||||
<xs:attribute name="album" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="track" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="year" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="genre" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="size" type="xs:long" use="optional"/>
|
||||
<xs:attribute name="contentType" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="suffix" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="transcodedContentType" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="transcodedSuffix" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="duration" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="bitRate" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="path" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="isVideo" type="xs:boolean" use="optional"/> <!-- Added in 1.4.1 -->
|
||||
<xs:attribute name="userRating" type="sub:UserRating" use="optional"/> <!-- Added in 1.6.0 -->
|
||||
<xs:attribute name="averageRating" type="sub:AverageRating" use="optional"/> <!-- Added in 1.6.0 -->
|
||||
<xs:attribute name="playCount" type="xs:long" use="optional"/> <!-- Added in 1.14.0 -->
|
||||
<xs:attribute name="discNumber" type="xs:int" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="created" type="xs:dateTime" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="albumId" type="xs:string" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="artistId" type="xs:string" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="type" type="sub:MediaType" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="bookmarkPosition" type="xs:long" use="optional"/> <!-- In millis. Added in 1.10.1 -->
|
||||
<xs:attribute name="originalWidth" type="xs:int" use="optional"/> <!-- Added in 1.13.0 -->
|
||||
<xs:attribute name="originalHeight" type="xs:int" use="optional"/> <!-- Added in 1.13.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="MediaType">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="music"/>
|
||||
<xs:enumeration value="podcast"/>
|
||||
<xs:enumeration value="audiobook"/>
|
||||
<xs:enumeration value="video"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="UserRating">
|
||||
<xs:restriction base="xs:int">
|
||||
<xs:minInclusive value="1"/>
|
||||
<xs:maxInclusive value="5"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="AverageRating">
|
||||
<xs:restriction base="xs:double">
|
||||
<xs:minInclusive value="1.0"/>
|
||||
<xs:maxInclusive value="5.0"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="NowPlaying">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:NowPlayingEntry" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="NowPlayingEntry">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:Child">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="minutesAgo" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playerId" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playerName" type="xs:string" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<!--Deprecated-->
|
||||
<xs:complexType name="SearchResult">
|
||||
<xs:sequence>
|
||||
<xs:element name="match" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="offset" type="xs:int" use="required"/>
|
||||
<xs:attribute name="totalHits" type="xs:int" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SearchResult2">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SearchResult3">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:ArtistID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:AlbumID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Playlists">
|
||||
<xs:sequence>
|
||||
<xs:element name="playlist" type="sub:Playlist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Playlist">
|
||||
<xs:sequence>
|
||||
<xs:element name="allowedUser" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> <!--Added in 1.8.0-->
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="comment" type="xs:string" use="optional"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="owner" type="xs:string" use="optional"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="public" type="xs:boolean" use="optional"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="songCount" type="xs:int" use="required"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="duration" type="xs:int" use="required"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="changed" type="xs:dateTime" use="required"/> <!--Added in 1.13.0-->
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/> <!--Added in 1.11.0-->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PlaylistWithSongs">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:Playlist">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="JukeboxStatus">
|
||||
<xs:attribute name="currentIndex" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playing" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="gain" type="xs:float" use="required"/>
|
||||
<xs:attribute name="position" type="xs:int" use="optional"/> <!--Added in 1.7.0-->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="JukeboxPlaylist">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:JukeboxStatus">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ChatMessages">
|
||||
<xs:sequence>
|
||||
<xs:element name="chatMessage" type="sub:ChatMessage" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ChatMessage">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="time" type="xs:long" use="required"/>
|
||||
<xs:attribute name="message" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumList">
|
||||
<xs:sequence>
|
||||
<xs:element name="album" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumList2">
|
||||
<xs:sequence>
|
||||
<xs:element name="album" type="sub:AlbumID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Songs">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Lyrics" mixed="true">
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="title" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Podcasts">
|
||||
<xs:sequence>
|
||||
<xs:element name="channel" type="sub:PodcastChannel" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PodcastChannel">
|
||||
<xs:sequence>
|
||||
<xs:element name="episode" type="sub:PodcastEpisode" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="url" type="xs:string" use="required"/>
|
||||
<xs:attribute name="title" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="description" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/> <!-- Added in 1.13.0 -->
|
||||
<xs:attribute name="originalImageUrl" type="xs:string" use="optional"/> <!-- Added in 1.13.0 -->
|
||||
<xs:attribute name="status" type="sub:PodcastStatus" use="required"/>
|
||||
<xs:attribute name="errorMessage" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="NewestPodcasts">
|
||||
<xs:sequence>
|
||||
<xs:element name="episode" type="sub:PodcastEpisode" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PodcastEpisode">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:Child">
|
||||
<xs:attribute name="streamId" type="xs:string" use="optional"/> <!-- Use this ID for streaming the podcast. -->
|
||||
<xs:attribute name="channelId" type="xs:string" use="required"/> <!-- Added in 1.13.0 -->
|
||||
<xs:attribute name="description" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="status" type="sub:PodcastStatus" use="required"/>
|
||||
<xs:attribute name="publishDate" type="xs:dateTime" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="PodcastStatus">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="new"/>
|
||||
<xs:enumeration value="downloading"/>
|
||||
<xs:enumeration value="completed"/>
|
||||
<xs:enumeration value="error"/>
|
||||
<xs:enumeration value="deleted"/>
|
||||
<xs:enumeration value="skipped"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="InternetRadioStations">
|
||||
<xs:sequence>
|
||||
<xs:element name="internetRadioStation" type="sub:InternetRadioStation" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="InternetRadioStation">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="streamUrl" type="xs:string" use="required"/>
|
||||
<xs:attribute name="homePageUrl" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Bookmarks">
|
||||
<xs:sequence>
|
||||
<xs:element name="bookmark" type="sub:Bookmark" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Bookmark">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="1" maxOccurs="1"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="position" type="xs:long" use="required"/> <!-- In milliseconds -->
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="comment" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/>
|
||||
<xs:attribute name="changed" type="xs:dateTime" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PlayQueue">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="current" type="xs:int" use="optional"/> <!-- ID of currently playing track -->
|
||||
<xs:attribute name="position" type="xs:long" use="optional"/> <!-- Position in milliseconds of currently playing track -->
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="changed" type="xs:dateTime" use="required"/>
|
||||
<xs:attribute name="changedBy" type="xs:string" use="required"/> <!-- Name of client app -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Shares">
|
||||
<xs:sequence>
|
||||
<xs:element name="share" type="sub:Share" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Share">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="url" type="xs:string" use="required"/>
|
||||
<xs:attribute name="description" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/>
|
||||
<xs:attribute name="expires" type="xs:dateTime" use="optional"/>
|
||||
<xs:attribute name="lastVisited" type="xs:dateTime" use="optional"/>
|
||||
<xs:attribute name="visitCount" type="xs:int" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Starred">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumInfo">
|
||||
<xs:sequence>
|
||||
<xs:element name="notes" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="musicBrainzId" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="lastFmUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="smallImageUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="mediumImageUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="largeImageUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistInfoBase">
|
||||
<xs:sequence>
|
||||
<xs:element name="biography" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="musicBrainzId" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="lastFmUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="smallImageUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="mediumImageUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="largeImageUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistInfo">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:ArtistInfoBase">
|
||||
<xs:sequence>
|
||||
<xs:element name="similarArtist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistInfo2">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:ArtistInfoBase">
|
||||
<xs:sequence>
|
||||
<xs:element name="similarArtist" type="sub:ArtistID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SimilarSongs">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SimilarSongs2">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="TopSongs">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Starred2">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:ArtistID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:AlbumID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="License">
|
||||
<xs:attribute name="valid" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="email" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="licenseExpires" type="xs:dateTime" use="optional"/>
|
||||
<xs:attribute name="trialExpires" type="xs:dateTime" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ScanStatus">
|
||||
<xs:attribute name="scanning" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="count" type="xs:long" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Users">
|
||||
<xs:sequence>
|
||||
<xs:element name="user" type="sub:User" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="User">
|
||||
<xs:sequence>
|
||||
<xs:element name="folder" type="xs:int" minOccurs="0" maxOccurs="unbounded"/> <!-- Added in 1.12.0 -->
|
||||
</xs:sequence>
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="email" type="xs:string" use="optional"/> <!-- Added in 1.6.0 -->
|
||||
<xs:attribute name="scrobblingEnabled" type="xs:boolean" use="required"/> <!-- Added in 1.7.0 -->
|
||||
<xs:attribute name="maxBitRate" type="xs:int" use="optional"/> <!-- In Kbps, added in 1.13.0 -->
|
||||
<xs:attribute name="adminRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="settingsRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="downloadRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="uploadRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="playlistRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="coverArtRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="commentRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="podcastRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="streamRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="jukeboxRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="shareRole" type="xs:boolean" use="required"/> <!-- Added in 1.7.0 -->
|
||||
<xs:attribute name="videoConversionRole" type="xs:boolean" use="required"/> <!-- Added in 1.14.0 -->
|
||||
<xs:attribute name="avatarLastChanged" type="xs:dateTime" use="optional"/> <!-- Added in 1.14.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Error">
|
||||
<xs:attribute name="code" type="xs:int" use="required"/>
|
||||
<xs:attribute name="message" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
</xs:schema>
|
@@ -1,640 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:sub="http://subsonic.org/restapi"
|
||||
targetNamespace="http://subsonic.org/restapi"
|
||||
attributeFormDefault="unqualified"
|
||||
elementFormDefault="qualified"
|
||||
version="1.16.1">
|
||||
|
||||
<xs:element name="subsonic-response" type="sub:Response"/>
|
||||
|
||||
<xs:complexType name="Response">
|
||||
<xs:choice minOccurs="0" maxOccurs="1">
|
||||
<xs:element name="musicFolders" type="sub:MusicFolders" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="indexes" type="sub:Indexes" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="directory" type="sub:Directory" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="genres" type="sub:Genres" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="artists" type="sub:ArtistsID3" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="artist" type="sub:ArtistWithAlbumsID3" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="album" type="sub:AlbumWithSongsID3" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="videos" type="sub:Videos" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="videoInfo" type="sub:VideoInfo" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="nowPlaying" type="sub:NowPlaying" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult" type="sub:SearchResult" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult2" type="sub:SearchResult2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult3" type="sub:SearchResult3" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playlists" type="sub:Playlists" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playlist" type="sub:PlaylistWithSongs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="jukeboxStatus" type="sub:JukeboxStatus" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="jukeboxPlaylist" type="sub:JukeboxPlaylist" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="license" type="sub:License" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="users" type="sub:Users" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="user" type="sub:User" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="chatMessages" type="sub:ChatMessages" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="albumList" type="sub:AlbumList" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="albumList2" type="sub:AlbumList2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="randomSongs" type="sub:Songs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="songsByGenre" type="sub:Songs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="lyrics" type="sub:Lyrics" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="podcasts" type="sub:Podcasts" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="newestPodcasts" type="sub:NewestPodcasts" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="internetRadioStations" type="sub:InternetRadioStations" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="bookmarks" type="sub:Bookmarks" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playQueue" type="sub:PlayQueue" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="shares" type="sub:Shares" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="starred" type="sub:Starred" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="starred2" type="sub:Starred2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="albumInfo" type="sub:AlbumInfo" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="artistInfo" type="sub:ArtistInfo" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="artistInfo2" type="sub:ArtistInfo2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="similarSongs" type="sub:SimilarSongs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="similarSongs2" type="sub:SimilarSongs2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="topSongs" type="sub:TopSongs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="scanStatus" type="sub:ScanStatus" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="error" type="sub:Error" minOccurs="1" maxOccurs="1"/>
|
||||
</xs:choice>
|
||||
<xs:attribute name="status" type="sub:ResponseStatus" use="required"/>
|
||||
<xs:attribute name="version" type="sub:Version" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="ResponseStatus">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="ok"/>
|
||||
<xs:enumeration value="failed"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="Version">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="\d+\.\d+\.\d+"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="MusicFolders">
|
||||
<xs:sequence>
|
||||
<xs:element name="musicFolder" type="sub:MusicFolder" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="MusicFolder">
|
||||
<xs:attribute name="id" type="xs:int" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Indexes">
|
||||
<xs:sequence>
|
||||
<xs:element name="shortcut" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="index" type="sub:Index" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="child" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/> <!-- Added in 1.7.0 -->
|
||||
</xs:sequence>
|
||||
<xs:attribute name="lastModified" type="xs:long" use="required"/>
|
||||
<xs:attribute name="ignoredArticles" type="xs:string" use="required"/> <!-- Added in 1.10.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Index">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Artist">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="artistImageUrl" type="xs:string" use="optional"/> <!-- Added in 1.16.1 -->
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/> <!-- Added in 1.10.1 -->
|
||||
<xs:attribute name="userRating" type="sub:UserRating" use="optional"/> <!-- Added in 1.13.0 -->
|
||||
<xs:attribute name="averageRating" type="sub:AverageRating" use="optional"/> <!-- Added in 1.13.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Genres">
|
||||
<xs:sequence>
|
||||
<xs:element name="genre" type="sub:Genre" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Genre" mixed="true">
|
||||
<xs:attribute name="songCount" type="xs:int" use="required"/> <!-- Added in 1.10.2 -->
|
||||
<xs:attribute name="albumCount" type="xs:int" use="required"/> <!-- Added in 1.10.2 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistsID3">
|
||||
<xs:sequence>
|
||||
<xs:element name="index" type="sub:IndexID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="ignoredArticles" type="xs:string" use="required"/> <!-- Added in 1.10.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="IndexID3">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:ArtistID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistID3">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="artistImageUrl" type="xs:string" use="optional"/> <!-- Added in 1.16.1 -->
|
||||
<xs:attribute name="albumCount" type="xs:int" use="required"/>
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistWithAlbumsID3">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:ArtistID3">
|
||||
<xs:sequence>
|
||||
<xs:element name="album" type="sub:AlbumID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumID3">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="artistId" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="songCount" type="xs:int" use="required"/>
|
||||
<xs:attribute name="duration" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playCount" type="xs:long" use="optional"/> <!-- Added in 1.14.0 -->
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/>
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/>
|
||||
<xs:attribute name="year" type="xs:int" use="optional"/> <!-- Added in 1.10.1 -->
|
||||
<xs:attribute name="genre" type="xs:string" use="optional"/> <!-- Added in 1.10.1 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumWithSongsID3">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:AlbumID3">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Videos">
|
||||
<xs:sequence>
|
||||
<xs:element name="video" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="VideoInfo">
|
||||
<xs:sequence>
|
||||
<xs:element name="captions" type="sub:Captions" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="audioTrack" type="sub:AudioTrack" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="conversion" type="sub:VideoConversion" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Captions">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AudioTrack">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="languageCode" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="VideoConversion">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="bitRate" type="xs:int" use="optional"/> <!-- In Kbps -->
|
||||
<xs:attribute name="audioTrackId" type="xs:int" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Directory">
|
||||
<xs:sequence>
|
||||
<xs:element name="child" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="parent" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/> <!-- Added in 1.10.1 -->
|
||||
<xs:attribute name="userRating" type="sub:UserRating" use="optional"/> <!-- Added in 1.13.0 -->
|
||||
<xs:attribute name="averageRating" type="sub:AverageRating" use="optional"/> <!-- Added in 1.13.0 -->
|
||||
<xs:attribute name="playCount" type="xs:long" use="optional"/> <!-- Added in 1.14.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Child">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="parent" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="isDir" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="title" type="xs:string" use="required"/>
|
||||
<xs:attribute name="album" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="track" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="year" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="genre" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="size" type="xs:long" use="optional"/>
|
||||
<xs:attribute name="contentType" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="suffix" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="transcodedContentType" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="transcodedSuffix" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="duration" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="bitRate" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="path" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="isVideo" type="xs:boolean" use="optional"/> <!-- Added in 1.4.1 -->
|
||||
<xs:attribute name="userRating" type="sub:UserRating" use="optional"/> <!-- Added in 1.6.0 -->
|
||||
<xs:attribute name="averageRating" type="sub:AverageRating" use="optional"/> <!-- Added in 1.6.0 -->
|
||||
<xs:attribute name="playCount" type="xs:long" use="optional"/> <!-- Added in 1.14.0 -->
|
||||
<xs:attribute name="discNumber" type="xs:int" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="created" type="xs:dateTime" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="albumId" type="xs:string" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="artistId" type="xs:string" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="type" type="sub:MediaType" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="bookmarkPosition" type="xs:long" use="optional"/> <!-- In millis. Added in 1.10.1 -->
|
||||
<xs:attribute name="originalWidth" type="xs:int" use="optional"/> <!-- Added in 1.13.0 -->
|
||||
<xs:attribute name="originalHeight" type="xs:int" use="optional"/> <!-- Added in 1.13.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="MediaType">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="music"/>
|
||||
<xs:enumeration value="podcast"/>
|
||||
<xs:enumeration value="audiobook"/>
|
||||
<xs:enumeration value="video"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="UserRating">
|
||||
<xs:restriction base="xs:int">
|
||||
<xs:minInclusive value="1"/>
|
||||
<xs:maxInclusive value="5"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="AverageRating">
|
||||
<xs:restriction base="xs:double">
|
||||
<xs:minInclusive value="1.0"/>
|
||||
<xs:maxInclusive value="5.0"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="NowPlaying">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:NowPlayingEntry" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="NowPlayingEntry">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:Child">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="minutesAgo" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playerId" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playerName" type="xs:string" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<!--Deprecated-->
|
||||
<xs:complexType name="SearchResult">
|
||||
<xs:sequence>
|
||||
<xs:element name="match" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="offset" type="xs:int" use="required"/>
|
||||
<xs:attribute name="totalHits" type="xs:int" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SearchResult2">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SearchResult3">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:ArtistID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:AlbumID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Playlists">
|
||||
<xs:sequence>
|
||||
<xs:element name="playlist" type="sub:Playlist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Playlist">
|
||||
<xs:sequence>
|
||||
<xs:element name="allowedUser" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> <!--Added in 1.8.0-->
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="comment" type="xs:string" use="optional"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="owner" type="xs:string" use="optional"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="public" type="xs:boolean" use="optional"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="songCount" type="xs:int" use="required"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="duration" type="xs:int" use="required"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="changed" type="xs:dateTime" use="required"/> <!--Added in 1.13.0-->
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/> <!--Added in 1.11.0-->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PlaylistWithSongs">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:Playlist">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="JukeboxStatus">
|
||||
<xs:attribute name="currentIndex" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playing" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="gain" type="xs:float" use="required"/>
|
||||
<xs:attribute name="position" type="xs:int" use="optional"/> <!--Added in 1.7.0-->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="JukeboxPlaylist">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:JukeboxStatus">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ChatMessages">
|
||||
<xs:sequence>
|
||||
<xs:element name="chatMessage" type="sub:ChatMessage" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ChatMessage">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="time" type="xs:long" use="required"/>
|
||||
<xs:attribute name="message" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumList">
|
||||
<xs:sequence>
|
||||
<xs:element name="album" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumList2">
|
||||
<xs:sequence>
|
||||
<xs:element name="album" type="sub:AlbumID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Songs">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Lyrics" mixed="true">
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="title" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Podcasts">
|
||||
<xs:sequence>
|
||||
<xs:element name="channel" type="sub:PodcastChannel" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PodcastChannel">
|
||||
<xs:sequence>
|
||||
<xs:element name="episode" type="sub:PodcastEpisode" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="url" type="xs:string" use="required"/>
|
||||
<xs:attribute name="title" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="description" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/> <!-- Added in 1.13.0 -->
|
||||
<xs:attribute name="originalImageUrl" type="xs:string" use="optional"/> <!-- Added in 1.13.0 -->
|
||||
<xs:attribute name="status" type="sub:PodcastStatus" use="required"/>
|
||||
<xs:attribute name="errorMessage" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="NewestPodcasts">
|
||||
<xs:sequence>
|
||||
<xs:element name="episode" type="sub:PodcastEpisode" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PodcastEpisode">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:Child">
|
||||
<xs:attribute name="streamId" type="xs:string" use="optional"/> <!-- Use this ID for streaming the podcast. -->
|
||||
<xs:attribute name="channelId" type="xs:string" use="required"/> <!-- Added in 1.13.0 -->
|
||||
<xs:attribute name="description" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="status" type="sub:PodcastStatus" use="required"/>
|
||||
<xs:attribute name="publishDate" type="xs:dateTime" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="PodcastStatus">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="new"/>
|
||||
<xs:enumeration value="downloading"/>
|
||||
<xs:enumeration value="completed"/>
|
||||
<xs:enumeration value="error"/>
|
||||
<xs:enumeration value="deleted"/>
|
||||
<xs:enumeration value="skipped"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="InternetRadioStations">
|
||||
<xs:sequence>
|
||||
<xs:element name="internetRadioStation" type="sub:InternetRadioStation" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="InternetRadioStation">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="streamUrl" type="xs:string" use="required"/>
|
||||
<xs:attribute name="homePageUrl" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Bookmarks">
|
||||
<xs:sequence>
|
||||
<xs:element name="bookmark" type="sub:Bookmark" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Bookmark">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="1" maxOccurs="1"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="position" type="xs:long" use="required"/> <!-- In milliseconds -->
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="comment" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/>
|
||||
<xs:attribute name="changed" type="xs:dateTime" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PlayQueue">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="current" type="xs:int" use="optional"/> <!-- ID of currently playing track -->
|
||||
<xs:attribute name="position" type="xs:long" use="optional"/> <!-- Position in milliseconds of currently playing track -->
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="changed" type="xs:dateTime" use="required"/>
|
||||
<xs:attribute name="changedBy" type="xs:string" use="required"/> <!-- Name of client app -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Shares">
|
||||
<xs:sequence>
|
||||
<xs:element name="share" type="sub:Share" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Share">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="url" type="xs:string" use="required"/>
|
||||
<xs:attribute name="description" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/>
|
||||
<xs:attribute name="expires" type="xs:dateTime" use="optional"/>
|
||||
<xs:attribute name="lastVisited" type="xs:dateTime" use="optional"/>
|
||||
<xs:attribute name="visitCount" type="xs:int" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Starred">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumInfo">
|
||||
<xs:sequence>
|
||||
<xs:element name="notes" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="musicBrainzId" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="lastFmUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="smallImageUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="mediumImageUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="largeImageUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistInfoBase">
|
||||
<xs:sequence>
|
||||
<xs:element name="biography" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="musicBrainzId" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="lastFmUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="smallImageUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="mediumImageUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
<xs:element name="largeImageUrl" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistInfo">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:ArtistInfoBase">
|
||||
<xs:sequence>
|
||||
<xs:element name="similarArtist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistInfo2">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:ArtistInfoBase">
|
||||
<xs:sequence>
|
||||
<xs:element name="similarArtist" type="sub:ArtistID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SimilarSongs">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SimilarSongs2">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="TopSongs">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Starred2">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:ArtistID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:AlbumID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="License">
|
||||
<xs:attribute name="valid" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="email" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="licenseExpires" type="xs:dateTime" use="optional"/>
|
||||
<xs:attribute name="trialExpires" type="xs:dateTime" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ScanStatus">
|
||||
<xs:attribute name="scanning" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="count" type="xs:long" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Users">
|
||||
<xs:sequence>
|
||||
<xs:element name="user" type="sub:User" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="User">
|
||||
<xs:sequence>
|
||||
<xs:element name="folder" type="xs:int" minOccurs="0" maxOccurs="unbounded"/> <!-- Added in 1.12.0 -->
|
||||
</xs:sequence>
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="email" type="xs:string" use="optional"/> <!-- Added in 1.6.0 -->
|
||||
<xs:attribute name="scrobblingEnabled" type="xs:boolean" use="required"/> <!-- Added in 1.7.0 -->
|
||||
<xs:attribute name="maxBitRate" type="xs:int" use="optional"/> <!-- In Kbps, added in 1.13.0 -->
|
||||
<xs:attribute name="adminRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="settingsRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="downloadRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="uploadRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="playlistRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="coverArtRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="commentRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="podcastRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="streamRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="jukeboxRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="shareRole" type="xs:boolean" use="required"/> <!-- Added in 1.7.0 -->
|
||||
<xs:attribute name="videoConversionRole" type="xs:boolean" use="required"/> <!-- Added in 1.14.0 -->
|
||||
<xs:attribute name="avatarLastChanged" type="xs:dateTime" use="optional"/> <!-- Added in 1.14.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Error">
|
||||
<xs:attribute name="code" type="xs:int" use="required"/>
|
||||
<xs:attribute name="message" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
</xs:schema>
|
@@ -1,199 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:sub="http://subsonic.org/restapi"
|
||||
targetNamespace="http://subsonic.org/restapi"
|
||||
attributeFormDefault="unqualified"
|
||||
elementFormDefault="qualified"
|
||||
version="1.2">
|
||||
|
||||
<xs:element name="subsonic-response" type="sub:Response"/>
|
||||
|
||||
<xs:complexType name="Response">
|
||||
<xs:choice minOccurs="0" maxOccurs="1">
|
||||
<xs:element name="musicFolders" type="sub:MusicFolders" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="indexes" type="sub:Indexes" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="directory" type="sub:Directory" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="nowPlaying" type="sub:NowPlaying" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult" type="sub:SearchResult" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playlists" type="sub:Playlists" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playlist" type="sub:Playlist" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="jukeboxPlaylist" type="sub:JukeboxPlaylist" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="license" type="sub:License" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="chatMessages" type="sub:ChatMessages" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="albumList" type="sub:AlbumList" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="randomSongs" type="sub:RandomSongs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="lyrics" type="sub:Lyrics" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="error" type="sub:Error" minOccurs="1" maxOccurs="1"/>
|
||||
</xs:choice>
|
||||
<xs:attribute name="status" type="sub:ResponseStatus" use="required"/>
|
||||
<xs:attribute name="version" type="sub:Version" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="ResponseStatus">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="ok"/>
|
||||
<xs:enumeration value="failed"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="Version">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="\d+\.\d+\.\d+"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="MusicFolders">
|
||||
<xs:sequence>
|
||||
<xs:element name="musicFolder" type="sub:MusicFolder" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="MusicFolder">
|
||||
<xs:attribute name="id" type="xs:int" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Indexes">
|
||||
<xs:sequence>
|
||||
<xs:element name="shortcut" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="index" type="sub:Index" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="lastModified" type="xs:long" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Index">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Artist">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Directory">
|
||||
<xs:sequence>
|
||||
<xs:element name="child" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Child">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="isDir" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="title" type="xs:string" use="required"/>
|
||||
<xs:attribute name="album" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="track" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="year" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="genre" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="size" type="xs:long" use="optional"/>
|
||||
<xs:attribute name="contentType" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="suffix" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="transcodedContentType" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="transcodedSuffix" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="duration" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="bitRate" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="path" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="NowPlaying">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:NowPlayingEntry" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="NowPlayingEntry">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:Child">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="minutesAgo" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playerId" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playerName" type="xs:string" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SearchResult">
|
||||
<xs:sequence>
|
||||
<xs:element name="match" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="offset" type="xs:int" use="required"/>
|
||||
<xs:attribute name="totalHits" type="xs:int" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Playlists">
|
||||
<xs:sequence>
|
||||
<xs:element name="playlist" type="sub:PlaylistIdAndName" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PlaylistIdAndName">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Playlist">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:PlaylistIdAndName">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="JukeboxPlaylist">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="currentIndex" type="xs:int" use="required"/>
|
||||
<xs:attribute name="gain" type="xs:float" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ChatMessages">
|
||||
<xs:sequence>
|
||||
<xs:element name="chatMessage" type="sub:ChatMessage" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ChatMessage">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="time" type="xs:long" use="required"/>
|
||||
<xs:attribute name="message" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumList">
|
||||
<xs:sequence>
|
||||
<xs:element name="album" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="RandomSongs">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Lyrics" mixed="true">
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="title" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="License">
|
||||
<xs:attribute name="valid" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="email" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="key" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="date" type="xs:dateTime" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Error">
|
||||
<xs:attribute name="code" type="xs:int" use="required"/>
|
||||
<xs:attribute name="message" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
</xs:schema>
|
@@ -1,214 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:sub="http://subsonic.org/restapi"
|
||||
targetNamespace="http://subsonic.org/restapi"
|
||||
attributeFormDefault="unqualified"
|
||||
elementFormDefault="qualified"
|
||||
version="1.3.0">
|
||||
|
||||
<xs:element name="subsonic-response" type="sub:Response"/>
|
||||
|
||||
<xs:complexType name="Response">
|
||||
<xs:choice minOccurs="0" maxOccurs="1">
|
||||
<xs:element name="musicFolders" type="sub:MusicFolders" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="indexes" type="sub:Indexes" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="directory" type="sub:Directory" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="nowPlaying" type="sub:NowPlaying" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult" type="sub:SearchResult" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playlists" type="sub:Playlists" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playlist" type="sub:Playlist" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="jukeboxPlaylist" type="sub:JukeboxPlaylist" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="license" type="sub:License" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="user" type="sub:User" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="chatMessages" type="sub:ChatMessages" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="albumList" type="sub:AlbumList" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="randomSongs" type="sub:RandomSongs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="lyrics" type="sub:Lyrics" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="error" type="sub:Error" minOccurs="1" maxOccurs="1"/>
|
||||
</xs:choice>
|
||||
<xs:attribute name="status" type="sub:ResponseStatus" use="required"/>
|
||||
<xs:attribute name="version" type="sub:Version" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="ResponseStatus">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="ok"/>
|
||||
<xs:enumeration value="failed"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="Version">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="\d+\.\d+\.\d+"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="MusicFolders">
|
||||
<xs:sequence>
|
||||
<xs:element name="musicFolder" type="sub:MusicFolder" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="MusicFolder">
|
||||
<xs:attribute name="id" type="xs:int" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Indexes">
|
||||
<xs:sequence>
|
||||
<xs:element name="shortcut" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="index" type="sub:Index" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="lastModified" type="xs:long" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Index">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Artist">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Directory">
|
||||
<xs:sequence>
|
||||
<xs:element name="child" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Child">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="isDir" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="title" type="xs:string" use="required"/>
|
||||
<xs:attribute name="album" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="track" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="year" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="genre" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="size" type="xs:long" use="optional"/>
|
||||
<xs:attribute name="contentType" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="suffix" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="transcodedContentType" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="transcodedSuffix" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="duration" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="bitRate" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="path" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="NowPlaying">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:NowPlayingEntry" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="NowPlayingEntry">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:Child">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="minutesAgo" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playerId" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playerName" type="xs:string" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SearchResult">
|
||||
<xs:sequence>
|
||||
<xs:element name="match" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="offset" type="xs:int" use="required"/>
|
||||
<xs:attribute name="totalHits" type="xs:int" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Playlists">
|
||||
<xs:sequence>
|
||||
<xs:element name="playlist" type="sub:PlaylistIdAndName" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PlaylistIdAndName">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Playlist">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:PlaylistIdAndName">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="JukeboxPlaylist">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="currentIndex" type="xs:int" use="required"/>
|
||||
<xs:attribute name="gain" type="xs:float" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ChatMessages">
|
||||
<xs:sequence>
|
||||
<xs:element name="chatMessage" type="sub:ChatMessage" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ChatMessage">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="time" type="xs:long" use="required"/>
|
||||
<xs:attribute name="message" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumList">
|
||||
<xs:sequence>
|
||||
<xs:element name="album" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="RandomSongs">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Lyrics" mixed="true">
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="title" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="License">
|
||||
<xs:attribute name="valid" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="email" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="key" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="date" type="xs:dateTime" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="User">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="adminRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="settingsRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="downloadRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="uploadRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="playlistRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="coverArtRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="commentRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="podcastRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="streamRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="jukeboxRole" type="xs:boolean" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Error">
|
||||
<xs:attribute name="code" type="xs:int" use="required"/>
|
||||
<xs:attribute name="message" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
</xs:schema>
|
@@ -1,226 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:sub="http://subsonic.org/restapi"
|
||||
targetNamespace="http://subsonic.org/restapi"
|
||||
attributeFormDefault="unqualified"
|
||||
elementFormDefault="qualified"
|
||||
version="1.4.0">
|
||||
|
||||
<xs:element name="subsonic-response" type="sub:Response"/>
|
||||
|
||||
<xs:complexType name="Response">
|
||||
<xs:choice minOccurs="0" maxOccurs="1">
|
||||
<xs:element name="musicFolders" type="sub:MusicFolders" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="indexes" type="sub:Indexes" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="directory" type="sub:Directory" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="nowPlaying" type="sub:NowPlaying" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult" type="sub:SearchResult" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult2" type="sub:SearchResult2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playlists" type="sub:Playlists" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playlist" type="sub:Playlist" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="jukeboxPlaylist" type="sub:JukeboxPlaylist" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="license" type="sub:License" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="user" type="sub:User" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="chatMessages" type="sub:ChatMessages" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="albumList" type="sub:AlbumList" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="randomSongs" type="sub:RandomSongs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="lyrics" type="sub:Lyrics" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="error" type="sub:Error" minOccurs="1" maxOccurs="1"/>
|
||||
</xs:choice>
|
||||
<xs:attribute name="status" type="sub:ResponseStatus" use="required"/>
|
||||
<xs:attribute name="version" type="sub:Version" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="ResponseStatus">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="ok"/>
|
||||
<xs:enumeration value="failed"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="Version">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="\d+\.\d+\.\d+"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="MusicFolders">
|
||||
<xs:sequence>
|
||||
<xs:element name="musicFolder" type="sub:MusicFolder" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="MusicFolder">
|
||||
<xs:attribute name="id" type="xs:int" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Indexes">
|
||||
<xs:sequence>
|
||||
<xs:element name="shortcut" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="index" type="sub:Index" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="lastModified" type="xs:long" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Index">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Artist">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Directory">
|
||||
<xs:sequence>
|
||||
<xs:element name="child" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="parent" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Child">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="parent" type="xs:string" use="required"/>
|
||||
<xs:attribute name="isDir" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="title" type="xs:string" use="required"/>
|
||||
<xs:attribute name="album" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="track" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="year" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="genre" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="size" type="xs:long" use="optional"/>
|
||||
<xs:attribute name="contentType" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="suffix" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="transcodedContentType" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="transcodedSuffix" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="duration" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="bitRate" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="path" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="NowPlaying">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:NowPlayingEntry" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="NowPlayingEntry">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:Child">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="minutesAgo" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playerId" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playerName" type="xs:string" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<!--Deprecated-->
|
||||
<xs:complexType name="SearchResult">
|
||||
<xs:sequence>
|
||||
<xs:element name="match" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="offset" type="xs:int" use="required"/>
|
||||
<xs:attribute name="totalHits" type="xs:int" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SearchResult2">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Playlists">
|
||||
<xs:sequence>
|
||||
<xs:element name="playlist" type="sub:PlaylistIdAndName" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PlaylistIdAndName">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Playlist">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:PlaylistIdAndName">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="JukeboxPlaylist">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="currentIndex" type="xs:int" use="required"/>
|
||||
<xs:attribute name="gain" type="xs:float" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ChatMessages">
|
||||
<xs:sequence>
|
||||
<xs:element name="chatMessage" type="sub:ChatMessage" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ChatMessage">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="time" type="xs:long" use="required"/>
|
||||
<xs:attribute name="message" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumList">
|
||||
<xs:sequence>
|
||||
<xs:element name="album" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="RandomSongs">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Lyrics" mixed="true">
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="title" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="License">
|
||||
<xs:attribute name="valid" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="email" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="key" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="date" type="xs:dateTime" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="User">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="adminRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="settingsRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="downloadRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="uploadRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="playlistRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="coverArtRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="commentRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="podcastRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="streamRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="jukeboxRole" type="xs:boolean" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Error">
|
||||
<xs:attribute name="code" type="xs:int" use="required"/>
|
||||
<xs:attribute name="message" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
</xs:schema>
|
@@ -1,227 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:sub="http://subsonic.org/restapi"
|
||||
targetNamespace="http://subsonic.org/restapi"
|
||||
attributeFormDefault="unqualified"
|
||||
elementFormDefault="qualified"
|
||||
version="1.5.0">
|
||||
|
||||
<xs:element name="subsonic-response" type="sub:Response"/>
|
||||
|
||||
<xs:complexType name="Response">
|
||||
<xs:choice minOccurs="0" maxOccurs="1">
|
||||
<xs:element name="musicFolders" type="sub:MusicFolders" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="indexes" type="sub:Indexes" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="directory" type="sub:Directory" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="nowPlaying" type="sub:NowPlaying" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult" type="sub:SearchResult" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult2" type="sub:SearchResult2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playlists" type="sub:Playlists" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playlist" type="sub:Playlist" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="jukeboxPlaylist" type="sub:JukeboxPlaylist" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="license" type="sub:License" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="user" type="sub:User" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="chatMessages" type="sub:ChatMessages" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="albumList" type="sub:AlbumList" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="randomSongs" type="sub:RandomSongs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="lyrics" type="sub:Lyrics" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="error" type="sub:Error" minOccurs="1" maxOccurs="1"/>
|
||||
</xs:choice>
|
||||
<xs:attribute name="status" type="sub:ResponseStatus" use="required"/>
|
||||
<xs:attribute name="version" type="sub:Version" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="ResponseStatus">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="ok"/>
|
||||
<xs:enumeration value="failed"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="Version">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="\d+\.\d+\.\d+"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="MusicFolders">
|
||||
<xs:sequence>
|
||||
<xs:element name="musicFolder" type="sub:MusicFolder" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="MusicFolder">
|
||||
<xs:attribute name="id" type="xs:int" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Indexes">
|
||||
<xs:sequence>
|
||||
<xs:element name="shortcut" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="index" type="sub:Index" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="lastModified" type="xs:long" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Index">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Artist">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Directory">
|
||||
<xs:sequence>
|
||||
<xs:element name="child" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="parent" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Child">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="parent" type="xs:string" use="required"/>
|
||||
<xs:attribute name="isDir" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="title" type="xs:string" use="required"/>
|
||||
<xs:attribute name="album" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="track" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="year" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="genre" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="size" type="xs:long" use="optional"/>
|
||||
<xs:attribute name="contentType" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="suffix" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="transcodedContentType" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="transcodedSuffix" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="duration" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="bitRate" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="path" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="isVideo" type="xs:boolean" use="optional"/> <!-- Added in 1.4.1 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="NowPlaying">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:NowPlayingEntry" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="NowPlayingEntry">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:Child">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="minutesAgo" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playerId" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playerName" type="xs:string" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<!--Deprecated-->
|
||||
<xs:complexType name="SearchResult">
|
||||
<xs:sequence>
|
||||
<xs:element name="match" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="offset" type="xs:int" use="required"/>
|
||||
<xs:attribute name="totalHits" type="xs:int" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SearchResult2">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Playlists">
|
||||
<xs:sequence>
|
||||
<xs:element name="playlist" type="sub:PlaylistIdAndName" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PlaylistIdAndName">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Playlist">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:PlaylistIdAndName">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="JukeboxPlaylist">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="currentIndex" type="xs:int" use="required"/>
|
||||
<xs:attribute name="gain" type="xs:float" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ChatMessages">
|
||||
<xs:sequence>
|
||||
<xs:element name="chatMessage" type="sub:ChatMessage" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ChatMessage">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="time" type="xs:long" use="required"/>
|
||||
<xs:attribute name="message" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumList">
|
||||
<xs:sequence>
|
||||
<xs:element name="album" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="RandomSongs">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Lyrics" mixed="true">
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="title" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="License">
|
||||
<xs:attribute name="valid" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="email" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="key" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="date" type="xs:dateTime" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="User">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="adminRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="settingsRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="downloadRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="uploadRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="playlistRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="coverArtRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="commentRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="podcastRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="streamRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="jukeboxRole" type="xs:boolean" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Error">
|
||||
<xs:attribute name="code" type="xs:int" use="required"/>
|
||||
<xs:attribute name="message" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
</xs:schema>
|
@@ -1,306 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:sub="http://subsonic.org/restapi"
|
||||
targetNamespace="http://subsonic.org/restapi"
|
||||
attributeFormDefault="unqualified"
|
||||
elementFormDefault="qualified"
|
||||
version="1.6.0">
|
||||
|
||||
<xs:element name="subsonic-response" type="sub:Response"/>
|
||||
|
||||
<xs:complexType name="Response">
|
||||
<xs:choice minOccurs="0" maxOccurs="1">
|
||||
<xs:element name="musicFolders" type="sub:MusicFolders" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="indexes" type="sub:Indexes" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="directory" type="sub:Directory" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="nowPlaying" type="sub:NowPlaying" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult" type="sub:SearchResult" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult2" type="sub:SearchResult2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playlists" type="sub:Playlists" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playlist" type="sub:Playlist" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="jukeboxPlaylist" type="sub:JukeboxPlaylist" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="license" type="sub:License" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="user" type="sub:User" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="chatMessages" type="sub:ChatMessages" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="albumList" type="sub:AlbumList" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="randomSongs" type="sub:RandomSongs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="lyrics" type="sub:Lyrics" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="podcasts" type="sub:Podcasts" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="shares" type="sub:Shares" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="error" type="sub:Error" minOccurs="1" maxOccurs="1"/>
|
||||
</xs:choice>
|
||||
<xs:attribute name="status" type="sub:ResponseStatus" use="required"/>
|
||||
<xs:attribute name="version" type="sub:Version" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="ResponseStatus">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="ok"/>
|
||||
<xs:enumeration value="failed"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="Version">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="\d+\.\d+\.\d+"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="MusicFolders">
|
||||
<xs:sequence>
|
||||
<xs:element name="musicFolder" type="sub:MusicFolder" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="MusicFolder">
|
||||
<xs:attribute name="id" type="xs:int" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Indexes">
|
||||
<xs:sequence>
|
||||
<xs:element name="shortcut" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="index" type="sub:Index" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="lastModified" type="xs:long" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Index">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Artist">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Directory">
|
||||
<xs:sequence>
|
||||
<xs:element name="child" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="parent" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Child">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="parent" type="xs:string" use="required"/>
|
||||
<xs:attribute name="isDir" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="title" type="xs:string" use="required"/>
|
||||
<xs:attribute name="album" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="track" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="year" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="genre" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="size" type="xs:long" use="optional"/>
|
||||
<xs:attribute name="contentType" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="suffix" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="transcodedContentType" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="transcodedSuffix" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="duration" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="bitRate" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="path" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="isVideo" type="xs:boolean" use="optional"/> <!-- Added in 1.4.1 -->
|
||||
<xs:attribute name="userRating" type="sub:UserRating" use="optional"/> <!-- Added in 1.6.0 -->
|
||||
<xs:attribute name="averageRating" type="sub:AverageRating" use="optional"/> <!-- Added in 1.6.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="UserRating">
|
||||
<xs:restriction base="xs:int">
|
||||
<xs:minInclusive value="1"/>
|
||||
<xs:maxInclusive value="5"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="AverageRating">
|
||||
<xs:restriction base="xs:double">
|
||||
<xs:minInclusive value="1.0"/>
|
||||
<xs:maxInclusive value="5.0"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="NowPlaying">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:NowPlayingEntry" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="NowPlayingEntry">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:Child">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="minutesAgo" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playerId" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playerName" type="xs:string" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<!--Deprecated-->
|
||||
<xs:complexType name="SearchResult">
|
||||
<xs:sequence>
|
||||
<xs:element name="match" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="offset" type="xs:int" use="required"/>
|
||||
<xs:attribute name="totalHits" type="xs:int" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SearchResult2">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Playlists">
|
||||
<xs:sequence>
|
||||
<xs:element name="playlist" type="sub:PlaylistIdAndName" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PlaylistIdAndName">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Playlist">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:PlaylistIdAndName">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="JukeboxPlaylist">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="currentIndex" type="xs:int" use="required"/>
|
||||
<xs:attribute name="gain" type="xs:float" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ChatMessages">
|
||||
<xs:sequence>
|
||||
<xs:element name="chatMessage" type="sub:ChatMessage" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ChatMessage">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="time" type="xs:long" use="required"/>
|
||||
<xs:attribute name="message" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumList">
|
||||
<xs:sequence>
|
||||
<xs:element name="album" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="RandomSongs">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Lyrics" mixed="true">
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="title" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Podcasts">
|
||||
<xs:sequence>
|
||||
<xs:element name="channel" type="sub:PodcastChannel" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PodcastChannel">
|
||||
<xs:sequence>
|
||||
<xs:element name="episode" type="sub:PodcastEpisode" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="url" type="xs:string" use="required"/>
|
||||
<xs:attribute name="title" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="description" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="status" type="sub:PodcastStatus" use="required"/>
|
||||
<xs:attribute name="errorMessage" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PodcastEpisode">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:Child">
|
||||
<xs:attribute name="streamId" type="xs:string" use="optional"/> <!-- Use this ID for streaming the podcast. -->
|
||||
<xs:attribute name="description" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="status" type="sub:PodcastStatus" use="required"/>
|
||||
<xs:attribute name="publishDate" type="xs:dateTime" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="PodcastStatus">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="new"/>
|
||||
<xs:enumeration value="downloading"/>
|
||||
<xs:enumeration value="completed"/>
|
||||
<xs:enumeration value="error"/>
|
||||
<xs:enumeration value="deleted"/>
|
||||
<xs:enumeration value="skipped"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="Shares">
|
||||
<xs:sequence>
|
||||
<xs:element name="share" type="sub:Share" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Share">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="url" type="xs:string" use="required"/>
|
||||
<xs:attribute name="description" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/>
|
||||
<xs:attribute name="expires" type="xs:dateTime" use="optional"/>
|
||||
<xs:attribute name="lastVisited" type="xs:dateTime" use="optional"/>
|
||||
<xs:attribute name="visitCount" type="xs:int" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="License">
|
||||
<xs:attribute name="valid" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="email" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="key" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="date" type="xs:dateTime" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="User">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="email" type="xs:string" use="optional"/> <!-- Added in 1.6.0 -->
|
||||
<xs:attribute name="adminRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="settingsRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="downloadRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="uploadRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="playlistRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="coverArtRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="commentRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="podcastRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="streamRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="jukeboxRole" type="xs:boolean" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Error">
|
||||
<xs:attribute name="code" type="xs:int" use="required"/>
|
||||
<xs:attribute name="message" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
</xs:schema>
|
@@ -1,319 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:sub="http://subsonic.org/restapi"
|
||||
targetNamespace="http://subsonic.org/restapi"
|
||||
attributeFormDefault="unqualified"
|
||||
elementFormDefault="qualified"
|
||||
version="1.7.0">
|
||||
|
||||
<xs:element name="subsonic-response" type="sub:Response"/>
|
||||
|
||||
<xs:complexType name="Response">
|
||||
<xs:choice minOccurs="0" maxOccurs="1">
|
||||
<xs:element name="musicFolders" type="sub:MusicFolders" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="indexes" type="sub:Indexes" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="directory" type="sub:Directory" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="nowPlaying" type="sub:NowPlaying" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult" type="sub:SearchResult" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult2" type="sub:SearchResult2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playlists" type="sub:Playlists" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playlist" type="sub:Playlist" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="jukeboxStatus" type="sub:JukeboxStatus" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="jukeboxPlaylist" type="sub:JukeboxPlaylist" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="license" type="sub:License" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="user" type="sub:User" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="chatMessages" type="sub:ChatMessages" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="albumList" type="sub:AlbumList" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="randomSongs" type="sub:RandomSongs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="lyrics" type="sub:Lyrics" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="podcasts" type="sub:Podcasts" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="shares" type="sub:Shares" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="error" type="sub:Error" minOccurs="1" maxOccurs="1"/>
|
||||
</xs:choice>
|
||||
<xs:attribute name="status" type="sub:ResponseStatus" use="required"/>
|
||||
<xs:attribute name="version" type="sub:Version" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="ResponseStatus">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="ok"/>
|
||||
<xs:enumeration value="failed"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="Version">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="\d+\.\d+\.\d+"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="MusicFolders">
|
||||
<xs:sequence>
|
||||
<xs:element name="musicFolder" type="sub:MusicFolder" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="MusicFolder">
|
||||
<xs:attribute name="id" type="xs:int" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Indexes">
|
||||
<xs:sequence>
|
||||
<xs:element name="shortcut" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="index" type="sub:Index" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="child" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/> <!-- Added in 1.7.0 -->
|
||||
</xs:sequence>
|
||||
<xs:attribute name="lastModified" type="xs:long" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Index">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Artist">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Directory">
|
||||
<xs:sequence>
|
||||
<xs:element name="child" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="parent" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Child">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="parent" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="isDir" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="title" type="xs:string" use="required"/>
|
||||
<xs:attribute name="album" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="track" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="year" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="genre" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="size" type="xs:long" use="optional"/>
|
||||
<xs:attribute name="contentType" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="suffix" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="transcodedContentType" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="transcodedSuffix" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="duration" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="bitRate" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="path" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="isVideo" type="xs:boolean" use="optional"/> <!-- Added in 1.4.1 -->
|
||||
<xs:attribute name="userRating" type="sub:UserRating" use="optional"/> <!-- Added in 1.6.0 -->
|
||||
<xs:attribute name="averageRating" type="sub:AverageRating" use="optional"/> <!-- Added in 1.6.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="UserRating">
|
||||
<xs:restriction base="xs:int">
|
||||
<xs:minInclusive value="1"/>
|
||||
<xs:maxInclusive value="5"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="AverageRating">
|
||||
<xs:restriction base="xs:double">
|
||||
<xs:minInclusive value="1.0"/>
|
||||
<xs:maxInclusive value="5.0"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="NowPlaying">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:NowPlayingEntry" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="NowPlayingEntry">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:Child">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="minutesAgo" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playerId" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playerName" type="xs:string" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<!--Deprecated-->
|
||||
<xs:complexType name="SearchResult">
|
||||
<xs:sequence>
|
||||
<xs:element name="match" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="offset" type="xs:int" use="required"/>
|
||||
<xs:attribute name="totalHits" type="xs:int" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SearchResult2">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Playlists">
|
||||
<xs:sequence>
|
||||
<xs:element name="playlist" type="sub:PlaylistIdAndName" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PlaylistIdAndName">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Playlist">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:PlaylistIdAndName">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="JukeboxStatus">
|
||||
<xs:attribute name="currentIndex" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playing" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="gain" type="xs:float" use="required"/>
|
||||
<xs:attribute name="position" type="xs:int" use="optional"/> <!--Added in 1.7.0-->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="JukeboxPlaylist">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:JukeboxStatus">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ChatMessages">
|
||||
<xs:sequence>
|
||||
<xs:element name="chatMessage" type="sub:ChatMessage" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ChatMessage">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="time" type="xs:long" use="required"/>
|
||||
<xs:attribute name="message" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumList">
|
||||
<xs:sequence>
|
||||
<xs:element name="album" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="RandomSongs">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Lyrics" mixed="true">
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="title" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Podcasts">
|
||||
<xs:sequence>
|
||||
<xs:element name="channel" type="sub:PodcastChannel" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PodcastChannel">
|
||||
<xs:sequence>
|
||||
<xs:element name="episode" type="sub:PodcastEpisode" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="url" type="xs:string" use="required"/>
|
||||
<xs:attribute name="title" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="description" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="status" type="sub:PodcastStatus" use="required"/>
|
||||
<xs:attribute name="errorMessage" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PodcastEpisode">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:Child">
|
||||
<xs:attribute name="streamId" type="xs:string" use="optional"/> <!-- Use this ID for streaming the podcast. -->
|
||||
<xs:attribute name="description" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="status" type="sub:PodcastStatus" use="required"/>
|
||||
<xs:attribute name="publishDate" type="xs:dateTime" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="PodcastStatus">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="new"/>
|
||||
<xs:enumeration value="downloading"/>
|
||||
<xs:enumeration value="completed"/>
|
||||
<xs:enumeration value="error"/>
|
||||
<xs:enumeration value="deleted"/>
|
||||
<xs:enumeration value="skipped"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="Shares">
|
||||
<xs:sequence>
|
||||
<xs:element name="share" type="sub:Share" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Share">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="url" type="xs:string" use="required"/>
|
||||
<xs:attribute name="description" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/>
|
||||
<xs:attribute name="expires" type="xs:dateTime" use="optional"/>
|
||||
<xs:attribute name="lastVisited" type="xs:dateTime" use="optional"/>
|
||||
<xs:attribute name="visitCount" type="xs:int" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="License">
|
||||
<xs:attribute name="valid" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="email" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="key" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="date" type="xs:dateTime" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="User">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="email" type="xs:string" use="optional"/> <!-- Added in 1.6.0 -->
|
||||
<xs:attribute name="scrobblingEnabled" type="xs:boolean" use="required"/> <!-- Added in 1.7.0 -->
|
||||
<xs:attribute name="adminRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="settingsRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="downloadRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="uploadRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="playlistRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="coverArtRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="commentRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="podcastRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="streamRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="jukeboxRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="shareRole" type="xs:boolean" use="required"/> <!-- Added in 1.7.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Error">
|
||||
<xs:attribute name="code" type="xs:int" use="required"/>
|
||||
<xs:attribute name="message" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
</xs:schema>
|
@@ -1,448 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:sub="http://subsonic.org/restapi"
|
||||
targetNamespace="http://subsonic.org/restapi"
|
||||
attributeFormDefault="unqualified"
|
||||
elementFormDefault="qualified"
|
||||
version="1.8.0">
|
||||
|
||||
<xs:element name="subsonic-response" type="sub:Response"/>
|
||||
|
||||
<xs:complexType name="Response">
|
||||
<xs:choice minOccurs="0" maxOccurs="1">
|
||||
<xs:element name="musicFolders" type="sub:MusicFolders" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="indexes" type="sub:Indexes" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="directory" type="sub:Directory" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="artists" type="sub:ArtistsID3" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="artist" type="sub:ArtistWithAlbumsID3" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="album" type="sub:AlbumWithSongsID3" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="videos" type="sub:Videos" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="nowPlaying" type="sub:NowPlaying" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult" type="sub:SearchResult" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult2" type="sub:SearchResult2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult3" type="sub:SearchResult3" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playlists" type="sub:Playlists" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playlist" type="sub:PlaylistWithSongs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="jukeboxStatus" type="sub:JukeboxStatus" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="jukeboxPlaylist" type="sub:JukeboxPlaylist" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="license" type="sub:License" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="users" type="sub:Users" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="user" type="sub:User" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="chatMessages" type="sub:ChatMessages" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="albumList" type="sub:AlbumList" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="albumList2" type="sub:AlbumList2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="randomSongs" type="sub:RandomSongs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="lyrics" type="sub:Lyrics" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="podcasts" type="sub:Podcasts" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="shares" type="sub:Shares" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="starred" type="sub:Starred" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="starred2" type="sub:Starred2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="error" type="sub:Error" minOccurs="1" maxOccurs="1"/>
|
||||
</xs:choice>
|
||||
<xs:attribute name="status" type="sub:ResponseStatus" use="required"/>
|
||||
<xs:attribute name="version" type="sub:Version" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="ResponseStatus">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="ok"/>
|
||||
<xs:enumeration value="failed"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="Version">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="\d+\.\d+\.\d+"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="MusicFolders">
|
||||
<xs:sequence>
|
||||
<xs:element name="musicFolder" type="sub:MusicFolder" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="MusicFolder">
|
||||
<xs:attribute name="id" type="xs:int" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Indexes">
|
||||
<xs:sequence>
|
||||
<xs:element name="shortcut" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="index" type="sub:Index" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="child" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/> <!-- Added in 1.7.0 -->
|
||||
</xs:sequence>
|
||||
<xs:attribute name="lastModified" type="xs:long" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Index">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Artist">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistsID3">
|
||||
<xs:sequence>
|
||||
<xs:element name="index" type="sub:IndexID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="IndexID3">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:ArtistID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistID3">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="albumCount" type="xs:int" use="required"/>
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistWithAlbumsID3">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:ArtistID3">
|
||||
<xs:sequence>
|
||||
<xs:element name="album" type="sub:AlbumID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumID3">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="artistId" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="songCount" type="xs:int" use="required"/>
|
||||
<xs:attribute name="duration" type="xs:int" use="required"/>
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/>
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumWithSongsID3">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:AlbumID3">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Videos">
|
||||
<xs:sequence>
|
||||
<xs:element name="video" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Directory">
|
||||
<xs:sequence>
|
||||
<xs:element name="child" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="parent" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Child">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="parent" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="isDir" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="title" type="xs:string" use="required"/>
|
||||
<xs:attribute name="album" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="track" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="year" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="genre" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="size" type="xs:long" use="optional"/>
|
||||
<xs:attribute name="contentType" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="suffix" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="transcodedContentType" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="transcodedSuffix" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="duration" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="bitRate" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="path" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="isVideo" type="xs:boolean" use="optional"/> <!-- Added in 1.4.1 -->
|
||||
<xs:attribute name="userRating" type="sub:UserRating" use="optional"/> <!-- Added in 1.6.0 -->
|
||||
<xs:attribute name="averageRating" type="sub:AverageRating" use="optional"/> <!-- Added in 1.6.0 -->
|
||||
<xs:attribute name="discNumber" type="xs:int" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="created" type="xs:dateTime" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="albumId" type="xs:string" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="artistId" type="xs:string" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="type" type="sub:MediaType" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="MediaType">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="music"/>
|
||||
<xs:enumeration value="podcast"/>
|
||||
<xs:enumeration value="audiobook"/>
|
||||
<xs:enumeration value="video"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="UserRating">
|
||||
<xs:restriction base="xs:int">
|
||||
<xs:minInclusive value="1"/>
|
||||
<xs:maxInclusive value="5"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="AverageRating">
|
||||
<xs:restriction base="xs:double">
|
||||
<xs:minInclusive value="1.0"/>
|
||||
<xs:maxInclusive value="5.0"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="NowPlaying">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:NowPlayingEntry" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="NowPlayingEntry">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:Child">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="minutesAgo" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playerId" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playerName" type="xs:string" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<!--Deprecated-->
|
||||
<xs:complexType name="SearchResult">
|
||||
<xs:sequence>
|
||||
<xs:element name="match" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="offset" type="xs:int" use="required"/>
|
||||
<xs:attribute name="totalHits" type="xs:int" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SearchResult2">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SearchResult3">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:ArtistID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:AlbumID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Playlists">
|
||||
<xs:sequence>
|
||||
<xs:element name="playlist" type="sub:Playlist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Playlist">
|
||||
<xs:sequence>
|
||||
<xs:element name="allowedUser" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> <!--Added in 1.8.0-->
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="comment" type="xs:string" use="optional"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="owner" type="xs:string" use="optional"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="public" type="xs:boolean" use="optional"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="songCount" type="xs:int" use="required"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="duration" type="xs:int" use="required"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/> <!--Added in 1.8.0-->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PlaylistWithSongs">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:Playlist">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="JukeboxStatus">
|
||||
<xs:attribute name="currentIndex" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playing" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="gain" type="xs:float" use="required"/>
|
||||
<xs:attribute name="position" type="xs:int" use="optional"/> <!--Added in 1.7.0-->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="JukeboxPlaylist">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:JukeboxStatus">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ChatMessages">
|
||||
<xs:sequence>
|
||||
<xs:element name="chatMessage" type="sub:ChatMessage" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ChatMessage">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="time" type="xs:long" use="required"/>
|
||||
<xs:attribute name="message" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumList">
|
||||
<xs:sequence>
|
||||
<xs:element name="album" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumList2">
|
||||
<xs:sequence>
|
||||
<xs:element name="album" type="sub:AlbumID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="RandomSongs">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Lyrics" mixed="true">
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="title" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Podcasts">
|
||||
<xs:sequence>
|
||||
<xs:element name="channel" type="sub:PodcastChannel" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PodcastChannel">
|
||||
<xs:sequence>
|
||||
<xs:element name="episode" type="sub:PodcastEpisode" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="url" type="xs:string" use="required"/>
|
||||
<xs:attribute name="title" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="description" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="status" type="sub:PodcastStatus" use="required"/>
|
||||
<xs:attribute name="errorMessage" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PodcastEpisode">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:Child">
|
||||
<xs:attribute name="streamId" type="xs:string" use="optional"/> <!-- Use this ID for streaming the podcast. -->
|
||||
<xs:attribute name="description" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="status" type="sub:PodcastStatus" use="required"/>
|
||||
<xs:attribute name="publishDate" type="xs:dateTime" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="PodcastStatus">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="new"/>
|
||||
<xs:enumeration value="downloading"/>
|
||||
<xs:enumeration value="completed"/>
|
||||
<xs:enumeration value="error"/>
|
||||
<xs:enumeration value="deleted"/>
|
||||
<xs:enumeration value="skipped"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="Shares">
|
||||
<xs:sequence>
|
||||
<xs:element name="share" type="sub:Share" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Share">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="url" type="xs:string" use="required"/>
|
||||
<xs:attribute name="description" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/>
|
||||
<xs:attribute name="expires" type="xs:dateTime" use="optional"/>
|
||||
<xs:attribute name="lastVisited" type="xs:dateTime" use="optional"/>
|
||||
<xs:attribute name="visitCount" type="xs:int" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Starred">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Starred2">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:ArtistID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:AlbumID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="License">
|
||||
<xs:attribute name="valid" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="email" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="key" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="date" type="xs:dateTime" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Users">
|
||||
<xs:sequence>
|
||||
<xs:element name="user" type="sub:User" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="User">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="email" type="xs:string" use="optional"/> <!-- Added in 1.6.0 -->
|
||||
<xs:attribute name="scrobblingEnabled" type="xs:boolean" use="required"/> <!-- Added in 1.7.0 -->
|
||||
<xs:attribute name="adminRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="settingsRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="downloadRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="uploadRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="playlistRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="coverArtRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="commentRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="podcastRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="streamRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="jukeboxRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="shareRole" type="xs:boolean" use="required"/> <!-- Added in 1.7.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Error">
|
||||
<xs:attribute name="code" type="xs:int" use="required"/>
|
||||
<xs:attribute name="message" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
</xs:schema>
|
@@ -1,488 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:sub="http://subsonic.org/restapi"
|
||||
targetNamespace="http://subsonic.org/restapi"
|
||||
attributeFormDefault="unqualified"
|
||||
elementFormDefault="qualified"
|
||||
version="1.9.0">
|
||||
|
||||
<xs:element name="subsonic-response" type="sub:Response"/>
|
||||
|
||||
<xs:complexType name="Response">
|
||||
<xs:choice minOccurs="0" maxOccurs="1">
|
||||
<xs:element name="musicFolders" type="sub:MusicFolders" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="indexes" type="sub:Indexes" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="directory" type="sub:Directory" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="genres" type="sub:Genres" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="artists" type="sub:ArtistsID3" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="artist" type="sub:ArtistWithAlbumsID3" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="album" type="sub:AlbumWithSongsID3" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="videos" type="sub:Videos" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="nowPlaying" type="sub:NowPlaying" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult" type="sub:SearchResult" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult2" type="sub:SearchResult2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="searchResult3" type="sub:SearchResult3" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playlists" type="sub:Playlists" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="playlist" type="sub:PlaylistWithSongs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="jukeboxStatus" type="sub:JukeboxStatus" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="jukeboxPlaylist" type="sub:JukeboxPlaylist" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="license" type="sub:License" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="users" type="sub:Users" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="user" type="sub:User" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="chatMessages" type="sub:ChatMessages" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="albumList" type="sub:AlbumList" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="albumList2" type="sub:AlbumList2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="randomSongs" type="sub:Songs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="songsByGenre" type="sub:Songs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="lyrics" type="sub:Lyrics" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="podcasts" type="sub:Podcasts" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="internetRadioStations" type="sub:InternetRadioStations" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="bookmarks" type="sub:Bookmarks" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="shares" type="sub:Shares" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="starred" type="sub:Starred" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="starred2" type="sub:Starred2" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="error" type="sub:Error" minOccurs="1" maxOccurs="1"/>
|
||||
</xs:choice>
|
||||
<xs:attribute name="status" type="sub:ResponseStatus" use="required"/>
|
||||
<xs:attribute name="version" type="sub:Version" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="ResponseStatus">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="ok"/>
|
||||
<xs:enumeration value="failed"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="Version">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="\d+\.\d+\.\d+"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="MusicFolders">
|
||||
<xs:sequence>
|
||||
<xs:element name="musicFolder" type="sub:MusicFolder" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="MusicFolder">
|
||||
<xs:attribute name="id" type="xs:int" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Indexes">
|
||||
<xs:sequence>
|
||||
<xs:element name="shortcut" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="index" type="sub:Index" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="child" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/> <!-- Added in 1.7.0 -->
|
||||
</xs:sequence>
|
||||
<xs:attribute name="lastModified" type="xs:long" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Index">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Artist">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Genres">
|
||||
<xs:sequence>
|
||||
<xs:element name="genre" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistsID3">
|
||||
<xs:sequence>
|
||||
<xs:element name="index" type="sub:IndexID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="IndexID3">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:ArtistID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistID3">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="albumCount" type="xs:int" use="required"/>
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ArtistWithAlbumsID3">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:ArtistID3">
|
||||
<xs:sequence>
|
||||
<xs:element name="album" type="sub:AlbumID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumID3">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="artistId" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="songCount" type="xs:int" use="required"/>
|
||||
<xs:attribute name="duration" type="xs:int" use="required"/>
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/>
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumWithSongsID3">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:AlbumID3">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Videos">
|
||||
<xs:sequence>
|
||||
<xs:element name="video" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Directory">
|
||||
<xs:sequence>
|
||||
<xs:element name="child" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="parent" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Child">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="parent" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="isDir" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="title" type="xs:string" use="required"/>
|
||||
<xs:attribute name="album" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="track" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="year" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="genre" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="coverArt" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="size" type="xs:long" use="optional"/>
|
||||
<xs:attribute name="contentType" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="suffix" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="transcodedContentType" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="transcodedSuffix" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="duration" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="bitRate" type="xs:int" use="optional"/>
|
||||
<xs:attribute name="path" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="isVideo" type="xs:boolean" use="optional"/> <!-- Added in 1.4.1 -->
|
||||
<xs:attribute name="userRating" type="sub:UserRating" use="optional"/> <!-- Added in 1.6.0 -->
|
||||
<xs:attribute name="averageRating" type="sub:AverageRating" use="optional"/> <!-- Added in 1.6.0 -->
|
||||
<xs:attribute name="discNumber" type="xs:int" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="created" type="xs:dateTime" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="starred" type="xs:dateTime" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="albumId" type="xs:string" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="artistId" type="xs:string" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
<xs:attribute name="type" type="sub:MediaType" use="optional"/> <!-- Added in 1.8.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="MediaType">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="music"/>
|
||||
<xs:enumeration value="podcast"/>
|
||||
<xs:enumeration value="audiobook"/>
|
||||
<xs:enumeration value="video"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="UserRating">
|
||||
<xs:restriction base="xs:int">
|
||||
<xs:minInclusive value="1"/>
|
||||
<xs:maxInclusive value="5"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="AverageRating">
|
||||
<xs:restriction base="xs:double">
|
||||
<xs:minInclusive value="1.0"/>
|
||||
<xs:maxInclusive value="5.0"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="NowPlaying">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:NowPlayingEntry" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="NowPlayingEntry">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:Child">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="minutesAgo" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playerId" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playerName" type="xs:string" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<!--Deprecated-->
|
||||
<xs:complexType name="SearchResult">
|
||||
<xs:sequence>
|
||||
<xs:element name="match" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="offset" type="xs:int" use="required"/>
|
||||
<xs:attribute name="totalHits" type="xs:int" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SearchResult2">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="SearchResult3">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:ArtistID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:AlbumID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Playlists">
|
||||
<xs:sequence>
|
||||
<xs:element name="playlist" type="sub:Playlist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Playlist">
|
||||
<xs:sequence>
|
||||
<xs:element name="allowedUser" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> <!--Added in 1.8.0-->
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="comment" type="xs:string" use="optional"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="owner" type="xs:string" use="optional"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="public" type="xs:boolean" use="optional"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="songCount" type="xs:int" use="required"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="duration" type="xs:int" use="required"/> <!--Added in 1.8.0-->
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/> <!--Added in 1.8.0-->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PlaylistWithSongs">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:Playlist">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="JukeboxStatus">
|
||||
<xs:attribute name="currentIndex" type="xs:int" use="required"/>
|
||||
<xs:attribute name="playing" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="gain" type="xs:float" use="required"/>
|
||||
<xs:attribute name="position" type="xs:int" use="optional"/> <!--Added in 1.7.0-->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="JukeboxPlaylist">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:JukeboxStatus">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ChatMessages">
|
||||
<xs:sequence>
|
||||
<xs:element name="chatMessage" type="sub:ChatMessage" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ChatMessage">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="time" type="xs:long" use="required"/>
|
||||
<xs:attribute name="message" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumList">
|
||||
<xs:sequence>
|
||||
<xs:element name="album" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="AlbumList2">
|
||||
<xs:sequence>
|
||||
<xs:element name="album" type="sub:AlbumID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Songs">
|
||||
<xs:sequence>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Lyrics" mixed="true">
|
||||
<xs:attribute name="artist" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="title" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Podcasts">
|
||||
<xs:sequence>
|
||||
<xs:element name="channel" type="sub:PodcastChannel" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PodcastChannel">
|
||||
<xs:sequence>
|
||||
<xs:element name="episode" type="sub:PodcastEpisode" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="url" type="xs:string" use="required"/>
|
||||
<xs:attribute name="title" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="description" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="status" type="sub:PodcastStatus" use="required"/>
|
||||
<xs:attribute name="errorMessage" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PodcastEpisode">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="sub:Child">
|
||||
<xs:attribute name="streamId" type="xs:string" use="optional"/> <!-- Use this ID for streaming the podcast. -->
|
||||
<xs:attribute name="description" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="status" type="sub:PodcastStatus" use="required"/>
|
||||
<xs:attribute name="publishDate" type="xs:dateTime" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="PodcastStatus">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="new"/>
|
||||
<xs:enumeration value="downloading"/>
|
||||
<xs:enumeration value="completed"/>
|
||||
<xs:enumeration value="error"/>
|
||||
<xs:enumeration value="deleted"/>
|
||||
<xs:enumeration value="skipped"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="InternetRadioStations">
|
||||
<xs:sequence>
|
||||
<xs:element name="internetRadioStation" type="sub:InternetRadioStation" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="InternetRadioStation">
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attribute name="streamUrl" type="xs:string" use="required"/>
|
||||
<xs:attribute name="homePageUrl" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Bookmarks">
|
||||
<xs:sequence>
|
||||
<xs:element name="bookmark" type="sub:Bookmark" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Bookmark">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="1" maxOccurs="1"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="position" type="xs:long" use="required"/> <!-- In milliseconds -->
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="comment" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/>
|
||||
<xs:attribute name="changed" type="xs:dateTime" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Shares">
|
||||
<xs:sequence>
|
||||
<xs:element name="share" type="sub:Share" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Share">
|
||||
<xs:sequence>
|
||||
<xs:element name="entry" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:string" use="required"/>
|
||||
<xs:attribute name="url" type="xs:string" use="required"/>
|
||||
<xs:attribute name="description" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="created" type="xs:dateTime" use="required"/>
|
||||
<xs:attribute name="expires" type="xs:dateTime" use="optional"/>
|
||||
<xs:attribute name="lastVisited" type="xs:dateTime" use="optional"/>
|
||||
<xs:attribute name="visitCount" type="xs:int" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Starred">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:Artist" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Starred2">
|
||||
<xs:sequence>
|
||||
<xs:element name="artist" type="sub:ArtistID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="album" type="sub:AlbumID3" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="song" type="sub:Child" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="License">
|
||||
<xs:attribute name="valid" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="email" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="key" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="date" type="xs:dateTime" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Users">
|
||||
<xs:sequence>
|
||||
<xs:element name="user" type="sub:User" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="User">
|
||||
<xs:attribute name="username" type="xs:string" use="required"/>
|
||||
<xs:attribute name="email" type="xs:string" use="optional"/> <!-- Added in 1.6.0 -->
|
||||
<xs:attribute name="scrobblingEnabled" type="xs:boolean" use="required"/> <!-- Added in 1.7.0 -->
|
||||
<xs:attribute name="adminRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="settingsRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="downloadRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="uploadRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="playlistRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="coverArtRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="commentRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="podcastRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="streamRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="jukeboxRole" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="shareRole" type="xs:boolean" use="required"/> <!-- Added in 1.7.0 -->
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Error">
|
||||
<xs:attribute name="code" type="xs:int" use="required"/>
|
||||
<xs:attribute name="message" type="xs:string" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
</xs:schema>
|
@@ -1,16 +1,16 @@
|
||||
import abc
|
||||
from dataclasses import dataclass
|
||||
from pathlib import Path
|
||||
from typing import (
|
||||
Any,
|
||||
Dict,
|
||||
Iterable,
|
||||
List,
|
||||
Sequence,
|
||||
Optional,
|
||||
Type,
|
||||
Tuple,
|
||||
Type,
|
||||
Union,
|
||||
)
|
||||
from pathlib import Path
|
||||
|
||||
from .api_objects import (
|
||||
Playlist,
|
||||
@@ -187,7 +187,7 @@ class Adapter(abc.ABC):
|
||||
# These properties determine if what things the adapter can be used to do
|
||||
# at the current moment.
|
||||
# =========================================================================
|
||||
def get_playlists(self) -> List[Playlist]:
|
||||
def get_playlists(self) -> Sequence[Playlist]:
|
||||
"""
|
||||
Gets a list of all of the :class:`sublime.adapter.api_objects.Playlist`
|
||||
objects known to the adapter.
|
||||
|
@@ -156,6 +156,7 @@ class AdapterManager:
|
||||
def can_get_playlists() -> bool:
|
||||
# It only matters that the ground truth one can service the request.
|
||||
return (
|
||||
AdapterManager._instance is not None and
|
||||
AdapterManager._instance.ground_truth_adapter.can_service_requests
|
||||
and
|
||||
AdapterManager._instance.ground_truth_adapter.can_get_playlists)
|
||||
|
@@ -1,40 +1,37 @@
|
||||
"""
|
||||
Defines the objects that are returned by adapter methods.
|
||||
"""
|
||||
from dataclasses import dataclass
|
||||
import abc
|
||||
from datetime import datetime, timedelta
|
||||
from typing import List, Optional
|
||||
from typing import Optional, Sequence
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class Song:
|
||||
class Song(abc.ABC):
|
||||
id: str
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class Playlist:
|
||||
class Playlist(abc.ABC):
|
||||
id: str
|
||||
name: str
|
||||
song_count: Optional[int] = None
|
||||
duration: Optional[timedelta] = None
|
||||
created: Optional[datetime] = None
|
||||
changed: Optional[datetime] = None
|
||||
comment: Optional[str] = None
|
||||
owner: Optional[str] = None
|
||||
public: Optional[bool] = None
|
||||
cover_art: Optional[str] = None
|
||||
song_count: Optional[int]
|
||||
duration: Optional[timedelta]
|
||||
created: Optional[datetime]
|
||||
changed: Optional[datetime]
|
||||
comment: Optional[str]
|
||||
owner: Optional[str]
|
||||
public: Optional[bool]
|
||||
cover_art: Optional[str]
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class PlaylistDetails:
|
||||
class PlaylistDetails(abc.ABC):
|
||||
id: str
|
||||
name: str
|
||||
song_count: int
|
||||
duration: timedelta
|
||||
songs: List[Song]
|
||||
created: Optional[datetime] = None
|
||||
changed: Optional[datetime] = None
|
||||
comment: Optional[str] = None
|
||||
owner: Optional[str] = None
|
||||
public: Optional[bool] = None
|
||||
cover_art: Optional[str] = None
|
||||
songs: Sequence[Song]
|
||||
created: Optional[datetime]
|
||||
changed: Optional[datetime]
|
||||
comment: Optional[str]
|
||||
owner: Optional[str]
|
||||
public: Optional[bool]
|
||||
cover_art: Optional[str]
|
||||
|
@@ -1,7 +1,7 @@
|
||||
import logging
|
||||
from dataclasses import asdict
|
||||
from pathlib import Path
|
||||
from typing import Any, Dict, List, Optional, Tuple
|
||||
from typing import Any, Dict, Sequence, Optional, Tuple
|
||||
|
||||
from playhouse.sqliteq import SqliteQueueDatabase
|
||||
|
||||
@@ -60,7 +60,7 @@ class FilesystemAdapter(CachingAdapter):
|
||||
# =========================================================================
|
||||
can_get_playlists: bool = True
|
||||
|
||||
def get_playlists(self) -> List[Playlist]:
|
||||
def get_playlists(self) -> Sequence[Playlist]:
|
||||
playlists = list(database.Playlist.select())
|
||||
if len(playlists) == 0: # TODO not necessarily a cache miss
|
||||
raise CacheMissError()
|
||||
|
@@ -1,19 +1,16 @@
|
||||
import json
|
||||
import logging
|
||||
import os
|
||||
import re
|
||||
from datetime import datetime, timedelta
|
||||
from pathlib import Path
|
||||
from time import sleep
|
||||
from typing import Any, Dict, List, Optional, Union
|
||||
from typing import Any, Dict, Sequence, Optional, Tuple, Union
|
||||
|
||||
import requests
|
||||
|
||||
from sublime.adapters.api_objects import (
|
||||
Playlist,
|
||||
PlaylistDetails,
|
||||
Song,
|
||||
)
|
||||
from .. import Adapter, ConfigParamDescriptor
|
||||
from .api_objects import Response
|
||||
from .. import Adapter, api_objects as API, ConfigParamDescriptor
|
||||
|
||||
|
||||
class SubsonicAdapter(Adapter):
|
||||
@@ -47,14 +44,20 @@ class SubsonicAdapter(Adapter):
|
||||
self.hostname = config['server_address']
|
||||
self.username = config['username']
|
||||
self.password = config['password']
|
||||
self.disable_cert_verify = config['disable_cert_verify']
|
||||
self.disable_cert_verify = config.get('disable_cert_verify')
|
||||
|
||||
# TODO support XML | JSON
|
||||
|
||||
# Availability Properties
|
||||
# =========================================================================
|
||||
@property
|
||||
def can_service_requests(self) -> bool:
|
||||
# TODO: detect ping
|
||||
try:
|
||||
self._get_json('ping', timeout=2)
|
||||
return True
|
||||
except Exception:
|
||||
logging.exception(f'Could not connect to {self.hostname}')
|
||||
return False
|
||||
|
||||
# Helper mothods for making requests
|
||||
# =========================================================================
|
||||
@@ -74,8 +77,12 @@ class SubsonicAdapter(Adapter):
|
||||
def _make_url(self, endpoint: str) -> str:
|
||||
return f'{self.hostname}/rest/{endpoint}.view'
|
||||
|
||||
# def _get(self, url, timeout=(3.05, 2), **params):
|
||||
def _get(self, url: str, **params) -> Any:
|
||||
def _get(
|
||||
self,
|
||||
url: str,
|
||||
timeout: Union[float, Tuple[float, float], None] = None,
|
||||
**params,
|
||||
) -> Any:
|
||||
params = {**self._get_params(), **params}
|
||||
logging.info(f'[START] get: {url}')
|
||||
|
||||
@@ -90,12 +97,16 @@ class SubsonicAdapter(Adapter):
|
||||
if type(v) == datetime:
|
||||
params[k] = int(v.timestamp() * 1000)
|
||||
|
||||
if self._is_mock:
|
||||
return self._get_mock_data()
|
||||
|
||||
result = requests.get(
|
||||
url,
|
||||
params=params,
|
||||
verify=not self.disable_cert_verify,
|
||||
# timeout=timeout,
|
||||
timeout=timeout,
|
||||
)
|
||||
|
||||
# TODO (#122): make better
|
||||
if result.status_code != 200:
|
||||
raise Exception(f'[FAIL] get: {url} status={result.status_code}')
|
||||
@@ -106,8 +117,8 @@ class SubsonicAdapter(Adapter):
|
||||
def _get_json(
|
||||
self,
|
||||
url: str,
|
||||
**params: Union[None, str, datetime, int, List[int]],
|
||||
) -> Dict[str, Any]:
|
||||
**params: Union[None, str, datetime, int, Sequence[int]],
|
||||
) -> Response:
|
||||
"""
|
||||
Make a get request to a *Sonic REST API. Handle all types of errors
|
||||
including *Sonic ``<error>`` responses.
|
||||
@@ -129,47 +140,57 @@ class SubsonicAdapter(Adapter):
|
||||
)
|
||||
raise Exception(f'Subsonic API Error #{code}: {message}')
|
||||
|
||||
return subsonic_response
|
||||
logging.debug(f'Response from {url}', subsonic_response)
|
||||
return Response.from_dict(subsonic_response)
|
||||
|
||||
_snake_case_re = re.compile(r'(?<!^)(?=[A-Z])')
|
||||
# Helper Methods for Testing
|
||||
_get_mock_data: Any = None
|
||||
_is_mock: bool = False
|
||||
|
||||
def _to_snake_case(self, obj: Dict[str, Any]) -> Dict[str, Any]:
|
||||
return {
|
||||
self._snake_case_re.sub('_', k).lower(): v
|
||||
for k, v in obj.items()
|
||||
}
|
||||
def _set_mock_data(self, data: Any):
|
||||
class MockResult:
|
||||
def __init__(self, content: Any):
|
||||
self._content = content
|
||||
|
||||
def content(self) -> Any:
|
||||
return self._content
|
||||
|
||||
def json(self) -> Any:
|
||||
return json.loads(self._content)
|
||||
|
||||
def get_mock_data() -> Any:
|
||||
if type(data) == Exception:
|
||||
raise data
|
||||
return MockResult(data)
|
||||
|
||||
self._get_mock_data = get_mock_data
|
||||
|
||||
# Data Retrieval Methods
|
||||
# =========================================================================
|
||||
can_get_playlists = True
|
||||
|
||||
def get_playlists(self) -> List[Playlist]:
|
||||
result = [
|
||||
{
|
||||
**p,
|
||||
'duration':
|
||||
timedelta(
|
||||
seconds=p['duration']) if p.get('duration') else None,
|
||||
} for p in self._get_json(self._make_url('getPlaylists')).get(
|
||||
'playlists', {}).get('playlist')
|
||||
]
|
||||
return [Playlist(**self._to_snake_case(p)) for p in result]
|
||||
def get_playlists(self) -> Sequence[API.Playlist]:
|
||||
response = self._get_json(self._make_url('getPlaylists')).playlists
|
||||
if not response:
|
||||
return []
|
||||
return response.playlist
|
||||
|
||||
can_get_playlist_details = True
|
||||
|
||||
def get_playlist_details(
|
||||
self,
|
||||
playlist_id: str,
|
||||
) -> PlaylistDetails:
|
||||
) -> API.PlaylistDetails:
|
||||
result = self._get_json(
|
||||
self._make_url('getPlaylist'),
|
||||
id=playlist_id,
|
||||
).get('playlist')
|
||||
).playlist
|
||||
print(result)
|
||||
assert result
|
||||
result['duration'] = result.get('duration') or sum(
|
||||
s.get('duration') or 0 for s in result['entry'])
|
||||
result['songCount'] = result.get('songCount') or len(result['entry'])
|
||||
songs = [Song(id=s['id']) for s in result['entry']]
|
||||
del result['entry']
|
||||
return PlaylistDetails(**self._to_snake_case(result), songs=songs)
|
||||
return result
|
||||
# assert result
|
||||
# result['duration'] = result.get('duration') or sum(
|
||||
# s.get('duration') or 0 for s in result['entry'])
|
||||
# result['songCount'] = result.get('songCount') or len(result['entry'])
|
||||
# songs = [Song(id=s['id']) for s in result['entry']]
|
||||
# del result['entry']
|
||||
# return API.PlaylistDetails(**self._to_snake_case(result), songs=songs)
|
||||
|
110
sublime/adapters/subsonic/api_objects.py
Normal file
110
sublime/adapters/subsonic/api_objects.py
Normal file
@@ -0,0 +1,110 @@
|
||||
"""
|
||||
These are the API objects that are returned by Subsonic.
|
||||
"""
|
||||
|
||||
from dataclasses import dataclass, field
|
||||
from datetime import datetime, timedelta
|
||||
from enum import Enum
|
||||
from typing import List, Optional, Sequence
|
||||
|
||||
from dataclasses_json import config, dataclass_json, DataClassJsonMixin, LetterCase
|
||||
from dateutil import parser
|
||||
from marshmallow import fields
|
||||
|
||||
from .. import api_objects as SublimeAPI
|
||||
|
||||
datetime_metadata = config(
|
||||
encoder=datetime.isoformat,
|
||||
decoder=lambda d: parser.parse(d) if d else None,
|
||||
mm_field=fields.DateTime(format='iso'),
|
||||
)
|
||||
|
||||
timedelta_metadata = config(
|
||||
encoder=datetime.isoformat,
|
||||
decoder=lambda s: timedelta(seconds=s) if s else None,
|
||||
mm_field=fields.TimeDelta(),
|
||||
)
|
||||
|
||||
|
||||
@dataclass_json(letter_case=LetterCase.CAMEL)
|
||||
@dataclass(frozen=True)
|
||||
class Child(SublimeAPI.Song, DataClassJsonMixin):
|
||||
title: str
|
||||
value: Optional[str] = None
|
||||
parent: Optional[str] = None
|
||||
album: Optional[str] = None
|
||||
artist: Optional[str] = None
|
||||
track: Optional[int] = None
|
||||
year: Optional[int] = None
|
||||
genre: Optional[str] = None
|
||||
coverArt: Optional[str] = None
|
||||
size: Optional[int] = None
|
||||
content_type: Optional[str] = None
|
||||
suffix: Optional[str] = None
|
||||
transcoded_content_type: Optional[str] = None
|
||||
transcoded_suffix: Optional[str] = None
|
||||
duration: Optional[int] = None
|
||||
bit_rate: Optional[int] = None
|
||||
path: Optional[str] = None
|
||||
isVideo: Optional[bool] = None
|
||||
# userRating: Optional[UserRating] = None
|
||||
# averageRating: Optional[AverageRating] = None
|
||||
play_count: Optional[int] = None
|
||||
disc_number: Optional[int] = None
|
||||
created: Optional[datetime] = None
|
||||
starred: Optional[datetime] = None
|
||||
albumId: Optional[str] = None
|
||||
artistId: Optional[str] = None
|
||||
# type_: Optional[MediaType] = None
|
||||
bookmark_position: Optional[int] = None
|
||||
original_width: Optional[int] = None
|
||||
original_height: Optional[int] = None
|
||||
|
||||
|
||||
@dataclass_json(letter_case=LetterCase.CAMEL)
|
||||
@dataclass
|
||||
class Playlist(SublimeAPI.Playlist):
|
||||
id: str
|
||||
name: str
|
||||
song_count: Optional[int] = None
|
||||
duration: Optional[timedelta] = field(
|
||||
default=None, metadata=timedelta_metadata)
|
||||
created: Optional[datetime] = field(
|
||||
default=None, metadata=datetime_metadata)
|
||||
changed: Optional[datetime] = field(
|
||||
default=None, metadata=datetime_metadata)
|
||||
comment: Optional[str] = None
|
||||
owner: Optional[str] = None
|
||||
public: Optional[bool] = None
|
||||
cover_art: Optional[str] = None
|
||||
|
||||
|
||||
@dataclass_json(letter_case=LetterCase.CAMEL)
|
||||
@dataclass
|
||||
class PlaylistWithSongs(SublimeAPI.PlaylistDetails):
|
||||
duration: timedelta = field(
|
||||
default_factory=timedelta, metadata=timedelta_metadata)
|
||||
songs: List[SublimeAPI.Song] = field(
|
||||
default_factory=list,
|
||||
metadata=config(field_name='entry'),
|
||||
)
|
||||
created: Optional[datetime] = field(
|
||||
default=None, metadata=datetime_metadata)
|
||||
changed: Optional[datetime] = field(
|
||||
default=None, metadata=datetime_metadata)
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class Playlists(DataClassJsonMixin):
|
||||
playlist: List[Playlist] = field(default_factory=list)
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class Response(DataClassJsonMixin):
|
||||
"""
|
||||
The base Subsonic response object.
|
||||
"""
|
||||
song: Optional[Child] = None
|
||||
playlists: Optional[Playlists] = None
|
||||
playlist: Optional[PlaylistWithSongs] = None
|
||||
value: Optional[str] = None
|
@@ -1,11 +0,0 @@
|
||||
import pytest
|
||||
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from sublime.adapters.api_objects import (Playlist, PlaylistDetails)
|
||||
|
||||
|
||||
def test_playlist_inheritance():
|
||||
Playlist('foo', 'Bar')
|
||||
|
||||
PlaylistDetails('foo', 'bar', 3, timedelta(seconds=720))
|
@@ -1,58 +0,0 @@
|
||||
import pytest
|
||||
|
||||
from sublime.adapters import Adapter, AdapterManager
|
||||
|
||||
|
||||
def test_adapter_manager_singleton():
|
||||
AdapterManager.reset()
|
||||
AdapterManager.get_playlists()
|
||||
|
||||
|
||||
def test_functions_not_implemented():
|
||||
with pytest.raises(NotImplementedError):
|
||||
Adapter(None)
|
||||
|
||||
class MyAdapter(Adapter):
|
||||
def __init__(self, s: dict, c: bool = False):
|
||||
pass
|
||||
|
||||
can_be_cache: bool = True
|
||||
|
||||
with pytest.raises(NotImplementedError):
|
||||
adapter = MyAdapter({})
|
||||
adapter.can_service_requests
|
||||
|
||||
with pytest.raises(NotImplementedError):
|
||||
adapter = MyAdapter({})
|
||||
adapter.ingest_new_data()
|
||||
|
||||
|
||||
def test_override_bool():
|
||||
class MyAdapter(Adapter):
|
||||
def __init__(self, s: dict, c: bool = False):
|
||||
pass
|
||||
|
||||
can_be_cache = True
|
||||
can_service_requests = True
|
||||
|
||||
adapter = MyAdapter({})
|
||||
assert adapter.can_be_cache is True
|
||||
assert adapter.can_service_requests is True
|
||||
|
||||
|
||||
def test_override_bool_with_property():
|
||||
class MyAdapter(Adapter):
|
||||
def __init__(self, s: dict, c: bool = False):
|
||||
pass
|
||||
|
||||
@property
|
||||
def can_be_cache(self) -> bool:
|
||||
return True
|
||||
|
||||
@property
|
||||
def can_service_requests(self) -> bool:
|
||||
return True
|
||||
|
||||
adapter = MyAdapter({})
|
||||
assert adapter.can_be_cache is True
|
||||
assert adapter.can_service_requests is True
|
140
tests/adapter_tests/sublime_adapter_tests.py
Normal file
140
tests/adapter_tests/sublime_adapter_tests.py
Normal file
@@ -0,0 +1,140 @@
|
||||
import json
|
||||
import re
|
||||
from datetime import datetime, timedelta
|
||||
from pathlib import Path
|
||||
from typing import Any, Callable, Dict, Tuple
|
||||
|
||||
import pytest
|
||||
|
||||
from dateutil import parser
|
||||
|
||||
from sublime.adapters.subsonic import (
|
||||
SubsonicAdapter, api_objects as SubsonicAPI)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def subsonic_adapter(tmp_path: Path):
|
||||
adapter = SubsonicAdapter(
|
||||
{
|
||||
'server_address': 'http://localhost:4533',
|
||||
'username': 'test',
|
||||
'password': 'testpass',
|
||||
},
|
||||
tmp_path,
|
||||
)
|
||||
adapter._is_mock = True
|
||||
yield adapter
|
||||
|
||||
|
||||
def mock_json(**obj: Any) -> str:
|
||||
return json.dumps(
|
||||
{
|
||||
'subsonic-response': {
|
||||
'status': 'ok',
|
||||
'version': '1.15.0',
|
||||
**obj,
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
def camel_to_snake(name: str) -> str:
|
||||
name = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', name)
|
||||
return re.sub('([a-z0-9])([A-Z])', r'\1_\2', name).lower()
|
||||
|
||||
|
||||
def test_request_making_methods(subsonic_adapter: SubsonicAdapter):
|
||||
expected = {
|
||||
'u': 'test',
|
||||
'p': 'testpass',
|
||||
'c': 'Sublime Music',
|
||||
'f': 'json',
|
||||
'v': '1.15.0',
|
||||
}
|
||||
assert (
|
||||
sorted(expected.items()) == sorted(
|
||||
subsonic_adapter._get_params().items()))
|
||||
|
||||
assert subsonic_adapter._make_url(
|
||||
'foo') == 'http://localhost:4533/rest/foo.view'
|
||||
|
||||
|
||||
def test_can_service_requests(subsonic_adapter: SubsonicAdapter):
|
||||
# Mock a connection error
|
||||
subsonic_adapter._set_mock_data(Exception())
|
||||
assert subsonic_adapter.can_service_requests is False
|
||||
|
||||
# Simulate some sort of ping error
|
||||
subsonic_adapter._set_mock_data(
|
||||
mock_json(
|
||||
status='failed',
|
||||
error={
|
||||
'code': '1',
|
||||
'message': 'Test message',
|
||||
},
|
||||
))
|
||||
assert subsonic_adapter.can_service_requests is False
|
||||
|
||||
# Simulate valid ping
|
||||
subsonic_adapter._set_mock_data(mock_json())
|
||||
assert subsonic_adapter.can_service_requests is True
|
||||
|
||||
|
||||
def test_get_playlists(subsonic_adapter: SubsonicAdapter):
|
||||
playlists = [
|
||||
{
|
||||
"id": "6",
|
||||
"name": "Playlist 1",
|
||||
"comment": "Foo",
|
||||
"owner": "test",
|
||||
"public": True,
|
||||
"songCount": 2,
|
||||
"duration": 625,
|
||||
"created": "2020-03-27T05:39:35.188Z",
|
||||
"changed": "2020-04-08T00:07:01.748Z",
|
||||
"coverArt": "pl-6"
|
||||
},
|
||||
{
|
||||
"id": "7",
|
||||
"name": "Playlist 2",
|
||||
"comment": "",
|
||||
"owner": "test",
|
||||
"public": True,
|
||||
"songCount": 3,
|
||||
"duration": 952,
|
||||
"created": "2020-03-27T05:39:43.327Z",
|
||||
"changed": "2020-03-27T05:44:37.275Z",
|
||||
"coverArt": "pl-7"
|
||||
},
|
||||
]
|
||||
subsonic_adapter._set_mock_data(
|
||||
mock_json(playlists={
|
||||
'playlist': playlists,
|
||||
}))
|
||||
|
||||
expected = [
|
||||
SubsonicAPI.Playlist(
|
||||
id='6',
|
||||
name='Playlist 1',
|
||||
song_count=2,
|
||||
duration=timedelta(seconds=625),
|
||||
created=parser.parse('2020-03-27T05:39:35.188Z'),
|
||||
changed=parser.parse('2020-04-08T00:07:01.748Z'),
|
||||
comment='Foo',
|
||||
owner='test',
|
||||
public=True,
|
||||
cover_art='pl-6',
|
||||
),
|
||||
SubsonicAPI.Playlist(
|
||||
id='7',
|
||||
name='Playlist 2',
|
||||
song_count=3,
|
||||
duration=timedelta(seconds=952),
|
||||
created=parser.parse('2020-03-27T05:39:43.327Z'),
|
||||
changed=parser.parse('2020-03-27T05:44:37.275Z'),
|
||||
comment='',
|
||||
owner='test',
|
||||
public=True,
|
||||
cover_art='pl-7',
|
||||
),
|
||||
]
|
||||
assert subsonic_adapter.get_playlists() == expected
|
Reference in New Issue
Block a user