From 76dad22268305c272fd19981f98978ab9a5df859 Mon Sep 17 00:00:00 2001 From: hhm Date: Tue, 28 Feb 2017 01:45:17 -0500 Subject: [PATCH] B"H browse artists too --- mopidy_subidy/library.py | 29 ++++++++++++++++++++++++----- mopidy_subidy/uri.py | 12 +++++++++++- 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/mopidy_subidy/library.py b/mopidy_subidy/library.py index 6d01ba3..e68fb77 100644 --- a/mopidy_subidy/library.py +++ b/mopidy_subidy/library.py @@ -12,14 +12,14 @@ class SubidyLibraryProvider(backend.LibraryProvider): 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_songs(self, album_id): + return [Ref.track(name=song.name, uri=song.uri) for song in 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) + return [Ref.directory(name=album.name, uri=album.uri) for album in self.subsonic_api.get_albums_as_refs(artist_id)] def browse_artists(self): - return self.subsonic_api.get_artists_as_refs() + return [Ref.directory(name=artist.name, uri=artist.uri) for artist in self.subsonic_api.get_artists_as_refs()] def browse_rootdirs(self): return self.subsonic_api.get_rootdirs_as_refs() @@ -37,10 +37,29 @@ class SubidyLibraryProvider(backend.LibraryProvider): return self.subsonic_api.get_artist_by_id(artist_id) def browse(self, browse_uri): + vdir_templates = [ + # ("root", ) + ("rootdirs", "Directories"), + ("artists", "Artists"), + ] + vdirs = dict((template[0], dict(id=template[0], name=template[1])) for template in vdir_templates) if browse_uri == uri.ROOT_URI: + root_vdirs = (vdirs[vdir_name] for vdir_name in ["rootdirs", "artists"]) + return [Ref.directory(name=vdir["name"], uri=uri.get_vdir_uri(vdir["id"])) for vdir in root_vdirs] + elif browse_uri == uri.get_vdir_uri("rootdirs"): return self.browse_rootdirs() + elif browse_uri == uri.get_vdir_uri("artists"): + return self.browse_artists() else: - return self.browse_diritems(uri.get_directory_id(browse_uri)) + uri_type = uri.get_type(browse_uri) + if uri_type == uri.DIRECTORY: + return self.browse_diritems(uri.get_directory_id(browse_uri)) + elif uri_type == uri.ARTIST: + return self.browse_albums(uri.get_artist_id(browse_uri)) + elif uri_type == uri.ALBUM: + return self.browse_songs(uri.get_album_id(browse_uri)) + else: + return [] def lookup_one(self, lookup_uri): type = uri.get_type(lookup_uri) diff --git a/mopidy_subidy/uri.py b/mopidy_subidy/uri.py index 667e584..d9216ce 100644 --- a/mopidy_subidy/uri.py +++ b/mopidy_subidy/uri.py @@ -5,11 +5,12 @@ ARTIST = 'artist' PLAYLIST = 'playlist' ALBUM = 'album' DIRECTORY = 'directory' +VDIR = 'vdir' PREFIX = 'subidy' ROOT = 'root' SEARCH = 'search' -ROOT_URI = '%s:%s' % (PREFIX, ROOT) +ROOT_URI = '%s:%s:%s' % (PREFIX, VDIR, ROOT) regex = re.compile(r'(\w+?):(\w+?)(?::|$)(.+?)?$') @@ -52,6 +53,12 @@ def get_directory_id(uri): return None return result.group(3) +def get_vdir_id(uri): + result = regex.match(uri) + if not is_id_result_valid(result, VDIR): + return None + return result.group(3) + def get_type(uri): result = regex.match(uri) if not is_type_result_valid(result): @@ -73,6 +80,9 @@ def get_song_uri(id): def get_directory_uri(id): return get_type_uri(DIRECTORY, id) +def get_vdir_uri(id): + return get_type_uri(VDIR, id) + def get_playlist_uri(id): return get_type_uri(PLAYLIST, id)