Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion mopidy_subidy/library.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ def __create_vdirs():
dict(id="albums", name="Albums"),
dict(id="rootdirs", name="Directories"),
dict(id="random", name="Random"),
dict(id="randomalbum", name="Random Albums"),
]
# Create a dict with the keys being the `id`s in `vdir_templates`
# and the values being objects containing the vdir `id`,
Expand Down Expand Up @@ -56,6 +57,9 @@ def browse_rootdirs(self):
def browse_random_songs(self):
return self.subsonic_api.get_random_songs_as_refs()

def browse_random_albums(self):
return self.subsonic_api.get_random_albums_as_refs()

def browse_diritems(self, directory_id):
return self.subsonic_api.get_diritems_as_refs(directory_id)

Expand Down Expand Up @@ -86,7 +90,7 @@ def lookup_playlist(self, playlist_id):

def browse(self, browse_uri):
if browse_uri == uri.get_vdir_uri("root"):
root_vdir_names = ["rootdirs", "artists", "albums", "random"]
root_vdir_names = ["rootdirs", "artists", "albums", "random", "randomalbum"]
root_vdirs = [
self._vdirs[vdir_name] for vdir_name in root_vdir_names
]
Expand All @@ -102,6 +106,8 @@ def browse(self, browse_uri):
return self.browse_albums()
elif browse_uri == uri.get_vdir_uri("random"):
return self.browse_random_songs()
elif browse_uri == uri.get_vdir_uri("randomalbum"):
return self.browse_random_albums()

else:
uri_type = uri.get_type(browse_uri)
Expand Down
36 changes: 36 additions & 0 deletions mopidy_subidy/subsonic_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -429,6 +429,27 @@ def get_raw_random_song(self, size=MAX_LIST_RESULTS):
return songs
return []

def get_raw_random_album(self, size=MAX_LIST_RESULTS):
try:
response = self.connection.getAlbumList2(
ltype='random', size=size, offset=0
)
except Exception:
logger.warning(
"Connecting to subsonic failed when loading random 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_more_albums(self, ltype, size=MAX_LIST_RESULTS, offset=0):
try:
response = self.connection.getAlbumList2(
Expand Down Expand Up @@ -519,6 +540,11 @@ def get_random_songs_as_refs(self):
self.raw_song_to_ref(song) for song in self.get_raw_random_song(75)
]

def get_random_albums_as_refs(self):
return [
self.raw_album_to_ref_with_artist(album) for album in self.get_raw_random_album(20)
]

def get_random_songs_as_tracks(self):
return [
self.raw_song_to_track(song) for song in self.get_raw_random_song()
Expand Down Expand Up @@ -615,6 +641,16 @@ def raw_album_to_ref(self, album):
uri=uri.get_album_uri(album.get("id")),
)

def raw_album_to_ref_with_artist(self, album):
if album is None:
return None
return Ref.album(
name=album.get("artist") + " - " + album.get("title")
or album.get("artist") + " - " + album.get("name")
or UNKNOWN_ALBUM,
uri=uri.get_album_uri(album.get("id")),
)

def raw_album_to_album(self, album):
if album is None:
return None
Expand Down