B"H browse by albums

This commit is contained in:
hhm 2017-02-28 16:00:09 -05:00
parent 635c180c13
commit 17432857a6
2 changed files with 23 additions and 4 deletions

View file

@ -15,7 +15,7 @@ class SubidyLibraryProvider(backend.LibraryProvider):
def browse_songs(self, album_id): def browse_songs(self, album_id):
return self.subsonic_api.get_songs_as_refs(album_id) return self.subsonic_api.get_songs_as_refs(album_id)
def browse_albums(self, artist_id): def browse_albums(self, artist_id=None):
return [Ref.directory(name=album.name, uri=album.uri) for album in 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): def browse_artists(self):
@ -41,15 +41,18 @@ class SubidyLibraryProvider(backend.LibraryProvider):
# ("root", <no name>) # ("root", <no name>)
("rootdirs", "Directories"), ("rootdirs", "Directories"),
("artists", "Artists"), ("artists", "Artists"),
("albums", "Albums"),
] ]
vdirs = dict((template[0], dict(id=template[0], name=template[1])) for template in vdir_templates) vdirs = dict((template[0], dict(id=template[0], name=template[1])) for template in vdir_templates)
if browse_uri == uri.ROOT_URI: if browse_uri == uri.ROOT_URI:
root_vdirs = sorted((vdirs[vdir_name] for vdir_name in ["rootdirs", "artists"]), key=lambda a: a["name"]) root_vdirs = sorted((vdirs[vdir_name] for vdir_name in ["rootdirs", "artists", "albums"]), key=lambda a: a["name"])
return [Ref.directory(name=vdir["name"], uri=uri.get_vdir_uri(vdir["id"])) for vdir in root_vdirs] 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"): elif browse_uri == uri.get_vdir_uri("rootdirs"):
return self.browse_rootdirs() return self.browse_rootdirs()
elif browse_uri == uri.get_vdir_uri("artists"): elif browse_uri == uri.get_vdir_uri("artists"):
return self.browse_artists() return self.browse_artists()
elif browse_uri == uri.get_vdir_uri("albums"):
return self.browse_albums()
else: else:
uri_type = uri.get_type(browse_uri) uri_type = uri.get_type(browse_uri)
if uri_type == uri.DIRECTORY: if uri_type == uri.DIRECTORY:

View file

@ -13,6 +13,7 @@ UNKNOWN_SONG = u'Unknown Song'
UNKNOWN_ALBUM = u'Unknown Album' UNKNOWN_ALBUM = u'Unknown Album'
UNKNOWN_ARTIST = u'Unknown Artist' UNKNOWN_ARTIST = u'Unknown Artist'
MAX_SEARCH_RESULTS = 100 MAX_SEARCH_RESULTS = 100
MAX_LIST_RESULTS = 500
ref_sort_key = lambda ref: ref.name ref_sort_key = lambda ref: ref.name
@ -224,8 +225,23 @@ class SubsonicApi():
return songs return songs
return [] return []
def get_albums_as_refs(self, artist_id): def get_raw_album_list(self, ltype, size=MAX_LIST_RESULTS):
return [self.raw_album_to_ref(album) for album in self.get_raw_albums(artist_id)] try:
response = self.connection.getAlbumList2(ltype=ltype, size=size)
except Exception as e:
logger.warning('Connecting to subsonic failed when loading album list.')
return []
if response.get('status') != RESPONSE_OK:
logger.warning('Got non-okay status code from subsonic: %s' % response.get('status'))
return []
albums = response.get('albumList2').get('album')
if albums is not None:
return albums
return []
def get_albums_as_refs(self, artist_id=None):
albums = (self.get_raw_album_list('alphabeticalByName') if artist_id is None else self.get_raw_albums(artist_id))
return [self.raw_album_to_ref(album) for album in albums]
def get_albums_as_albums(self, artist_id): def get_albums_as_albums(self, artist_id):
return [self.raw_album_to_album(album) for album in self.get_raw_albums(artist_id)] return [self.raw_album_to_album(album) for album in self.get_raw_albums(artist_id)]