Added full browsing, playlist and search support.

This commit is contained in:
Frederick Gnodtke 2016-09-18 18:19:08 +02:00
parent a73edeae8e
commit d8cbb503a5
6 changed files with 137 additions and 70 deletions

View file

@ -1,8 +1,12 @@
from mopidy import backend, models
from mopidy.models import Ref, SearchResult
from mopidy_subidy import uri
import logging
logger = logging.getLogger(__name__)
class SubidyLibraryProvider(backend.LibraryProvider):
root_directory = models.Ref(uri=uri.ROOT_URI, type=models.Ref.DIRECTORY, name='Subsonic')
root_directory = Ref.directory(uri=uri.ROOT_URI, name='Subsonic')
def __init__(self, *args, **kwargs):
super(SubidyLibraryProvider, self).__init__(*args, **kwargs)
@ -18,13 +22,13 @@ class SubidyLibraryProvider(backend.LibraryProvider):
return self.subsonic_api.get_artists_as_refs()
def lookup_song(self, song_id):
return self.subsonic_api.find_song_by_id(song_id)
return self.subsonic_api.get_song_by_id(song_id)
def lookup_album(self, album_id):
return self.subsonic_api.find_album_by_id(album_id)
return self.subsonic_api.get_album_by_id(album_id)
def lookup_artist(self, artist_id):
return self.subsonic_api.find_artist_by_id(artist_id)
return self.subsonic_api.get_artist_by_id(artist_id)
def browse(self, browse_uri):
type = uri.get_type(browse_uri)
@ -34,7 +38,7 @@ class SubidyLibraryProvider(backend.LibraryProvider):
return self.browse_albums(uri.get_artist_id(browse_uri))
if type == uri.ALBUM:
return self.browse_songs(uri.get_album_id(browse_uri))
def lookup_one(self, lookup_uri):
type = uri.get_type(lookup_uri)
if type == uri.ARTIST:
@ -53,5 +57,25 @@ class SubidyLibraryProvider(backend.LibraryProvider):
def refresh(self, uri):
pass
def search_uri(self, query):
type = uri.get_type(lookup_uri)
if type == uri.ARTIST:
artist = self.lookup_artist(uri.get_artist_id(lookup_uri))
if artist is not None:
return SearchResult(artists=[artist])
elif type == uri.ALBUM:
album = self.lookup_album(uri.get_album_id(lookup_uri))
if album is not None:
return SearchResult(albums=[album])
elif type == uri.SONG:
song = self.lookup_song(uri.get_song_id(lookup_uri))
if song is not None:
return SearchResult(tracks=[song])
return None
def search(self, query=None, uris=None, exact=False):
pass
if 'uri' in query:
return self.search_uri(query.get('uri')[0])
if 'any' in query:
return self.subsonic_api.find_as_search_result(query.get('any')[0])