2016-09-18 04:33:46 +02:00
|
|
|
from mopidy import backend, models
|
2016-09-18 18:19:08 +02:00
|
|
|
from mopidy.models import Ref, SearchResult
|
2016-09-18 04:33:46 +02:00
|
|
|
from mopidy_subidy import uri
|
|
|
|
|
2016-09-18 18:19:08 +02:00
|
|
|
import logging
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
2016-09-18 04:33:46 +02:00
|
|
|
class SubidyLibraryProvider(backend.LibraryProvider):
|
2016-09-18 18:19:08 +02:00
|
|
|
root_directory = Ref.directory(uri=uri.ROOT_URI, name='Subsonic')
|
2016-09-18 04:33:46 +02:00
|
|
|
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
|
|
super(SubidyLibraryProvider, self).__init__(*args, **kwargs)
|
|
|
|
self.subsonic_api = self.backend.subsonic_api
|
|
|
|
|
|
|
|
def browse_songs(self,album_id):
|
|
|
|
return self.subsonic_api.get_songs_as_refs(album_id)
|
|
|
|
|
|
|
|
def browse_albums(self, artist_id):
|
|
|
|
return self.subsonic_api.get_albums_as_refs(artist_id)
|
|
|
|
|
|
|
|
def browse_artists(self):
|
|
|
|
return self.subsonic_api.get_artists_as_refs()
|
|
|
|
|
|
|
|
def lookup_song(self, song_id):
|
2016-09-18 18:19:08 +02:00
|
|
|
return self.subsonic_api.get_song_by_id(song_id)
|
2016-09-18 04:33:46 +02:00
|
|
|
|
|
|
|
def lookup_album(self, album_id):
|
2016-09-18 18:19:08 +02:00
|
|
|
return self.subsonic_api.get_album_by_id(album_id)
|
2016-09-18 04:33:46 +02:00
|
|
|
|
|
|
|
def lookup_artist(self, artist_id):
|
2016-09-18 18:19:08 +02:00
|
|
|
return self.subsonic_api.get_artist_by_id(artist_id)
|
2016-09-18 04:33:46 +02:00
|
|
|
|
|
|
|
def browse(self, browse_uri):
|
|
|
|
type = uri.get_type(browse_uri)
|
|
|
|
if browse_uri == uri.ROOT_URI:
|
|
|
|
return self.browse_artists()
|
|
|
|
if type == uri.ARTIST:
|
|
|
|
return self.browse_albums(uri.get_artist_id(browse_uri))
|
|
|
|
if type == uri.ALBUM:
|
|
|
|
return self.browse_songs(uri.get_album_id(browse_uri))
|
2016-09-18 18:19:08 +02:00
|
|
|
|
2016-09-18 04:33:46 +02:00
|
|
|
def lookup_one(self, lookup_uri):
|
|
|
|
type = uri.get_type(lookup_uri)
|
|
|
|
if type == uri.ARTIST:
|
|
|
|
return self.lookup_artist(uri.get_artist_id(lookup_uri))
|
|
|
|
if type == uri.ALBUM:
|
|
|
|
return self.lookup_album(uri.get_album_id(lookup_uri))
|
|
|
|
if type == uri.SONG:
|
|
|
|
return self.lookup_song(uri.get_song_id(lookup_uri))
|
|
|
|
|
|
|
|
def lookup(self, uri=None, uris=None):
|
|
|
|
if uris is not None:
|
|
|
|
return [self.lookup_one(uri) for uri in uris]
|
|
|
|
if uri is not None:
|
|
|
|
return [self.lookup_one(uri)]
|
|
|
|
return None
|
|
|
|
|
|
|
|
def refresh(self, uri):
|
|
|
|
pass
|
2016-09-18 18:19:08 +02:00
|
|
|
|
|
|
|
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
|
|
|
|
|
2016-09-18 04:33:46 +02:00
|
|
|
def search(self, query=None, uris=None, exact=False):
|
2016-09-18 18:19:08 +02:00
|
|
|
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])
|