From 7f9c685d1df49a8a36bfc219ec64ce6919f4fd02 Mon Sep 17 00:00:00 2001 From: hhm Date: Mon, 27 Mar 2017 16:46:53 -0400 Subject: [PATCH 1/8] B"H add album songs retrieval - rebased --- mopidy_subidy/library.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mopidy_subidy/library.py b/mopidy_subidy/library.py index cd29d53..acc228b 100644 --- a/mopidy_subidy/library.py +++ b/mopidy_subidy/library.py @@ -59,7 +59,7 @@ class SubidyLibraryProvider(backend.LibraryProvider): return self.subsonic_api.get_song_by_id(song_id) def lookup_album(self, album_id): - return self.subsonic_api.get_album_by_id(album_id) + return self.subsonic_api.get_songs_as_tracks(album_id) def lookup_artist(self, artist_id): return self.subsonic_api.get_artist_by_id(artist_id) @@ -94,13 +94,13 @@ class SubidyLibraryProvider(backend.LibraryProvider): 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)) + 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] + return dict((uri, self.lookup_one(uri)) for uri in uris) if uri is not None: - return [self.lookup_one(uri)] + return self.lookup_one(uri) return None def refresh(self, uri): From 9ac788b69b46ced398100cf66c7efd06e2a87585 Mon Sep 17 00:00:00 2001 From: hhm Date: Mon, 27 Mar 2017 16:47:38 -0400 Subject: [PATCH 2/8] B"H lookup artists - rebase --- mopidy_subidy/library.py | 2 +- mopidy_subidy/subsonic_api.py | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/mopidy_subidy/library.py b/mopidy_subidy/library.py index acc228b..859c5a0 100644 --- a/mopidy_subidy/library.py +++ b/mopidy_subidy/library.py @@ -62,7 +62,7 @@ class SubidyLibraryProvider(backend.LibraryProvider): return self.subsonic_api.get_songs_as_tracks(album_id) def lookup_artist(self, artist_id): - return self.subsonic_api.get_artist_by_id(artist_id) + return self.subsonic_api.get_artist_songs_as_tracks(artist_id) def browse(self, browse_uri): if browse_uri == uri.get_vdir_uri('root'): diff --git a/mopidy_subidy/subsonic_api.py b/mopidy_subidy/subsonic_api.py index adc886e..d37b62f 100644 --- a/mopidy_subidy/subsonic_api.py +++ b/mopidy_subidy/subsonic_api.py @@ -289,6 +289,12 @@ class SubsonicApi(): return None return [self.raw_song_to_ref(song) for song in playlist.get('entry')] + def get_artist_songs_as_tracks(self, artist_id): + albums = self.get_raw_albums(artist_id) + if albums is None: + return None + return [self.raw_song_to_track(song) for album in albums for song in self.get_raw_songs(album.get('id'))] + def raw_song_to_ref(self, song): if song is None: return None From 127cd030d8bcc701c3dda3c26673952dfebe7637 Mon Sep 17 00:00:00 2001 From: hhm Date: Wed, 15 Feb 2017 17:16:15 -0500 Subject: [PATCH 3/8] B"H lookup directory - rebased --- mopidy_subidy/library.py | 5 +++++ mopidy_subidy/subsonic_api.py | 3 +++ 2 files changed, 8 insertions(+) diff --git a/mopidy_subidy/library.py b/mopidy_subidy/library.py index 859c5a0..6cd58c3 100644 --- a/mopidy_subidy/library.py +++ b/mopidy_subidy/library.py @@ -64,6 +64,9 @@ class SubidyLibraryProvider(backend.LibraryProvider): def lookup_artist(self, artist_id): return self.subsonic_api.get_artist_songs_as_tracks(artist_id) + def lookup_directory(self, directory_id): + return self.subsonic_api.get_diritems_as_tracks(directory_id) + def browse(self, browse_uri): if browse_uri == uri.get_vdir_uri('root'): root_vdir_names = ["rootdirs", "artists", "albums"] @@ -93,6 +96,8 @@ class SubidyLibraryProvider(backend.LibraryProvider): 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.DIRECTORY: + return self.lookup_directory(uri.get_directory_id(lookup_uri)) if type == uri.SONG: return [self.lookup_song(uri.get_song_id(lookup_uri))] diff --git a/mopidy_subidy/subsonic_api.py b/mopidy_subidy/subsonic_api.py index d37b62f..68a6e12 100644 --- a/mopidy_subidy/subsonic_api.py +++ b/mopidy_subidy/subsonic_api.py @@ -271,6 +271,9 @@ class SubsonicApi(): def get_diritems_as_refs(self, directory_id): return [(self.raw_directory_to_ref(diritem) if diritem.get('isDir') else self.raw_song_to_ref(diritem)) for diritem in self.get_raw_dir(directory_id)] + def get_diritems_as_tracks(self, directory_id): + return [self.raw_song_to_track(diritem) for diritem in self.get_raw_dir(directory_id) if not diritem.get('isDir')] + def get_artists_as_artists(self): return [self.raw_artist_to_artist(artist) for artist in self.get_raw_artists()] From 5bfe185ef06bca4ae2bc9e5ecac3db57a300d106 Mon Sep 17 00:00:00 2001 From: hhm Date: Wed, 15 Feb 2017 17:24:12 -0500 Subject: [PATCH 4/8] B"H use consistent name (same as playlist_as_songs) - rebase --- mopidy_subidy/library.py | 2 +- mopidy_subidy/subsonic_api.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mopidy_subidy/library.py b/mopidy_subidy/library.py index 6cd58c3..5a2593d 100644 --- a/mopidy_subidy/library.py +++ b/mopidy_subidy/library.py @@ -62,7 +62,7 @@ class SubidyLibraryProvider(backend.LibraryProvider): return self.subsonic_api.get_songs_as_tracks(album_id) def lookup_artist(self, artist_id): - return self.subsonic_api.get_artist_songs_as_tracks(artist_id) + return self.subsonic_api.get_artist_as_songs_as_tracks(artist_id) def lookup_directory(self, directory_id): return self.subsonic_api.get_diritems_as_tracks(directory_id) diff --git a/mopidy_subidy/subsonic_api.py b/mopidy_subidy/subsonic_api.py index 68a6e12..0e804e1 100644 --- a/mopidy_subidy/subsonic_api.py +++ b/mopidy_subidy/subsonic_api.py @@ -292,7 +292,7 @@ class SubsonicApi(): return None return [self.raw_song_to_ref(song) for song in playlist.get('entry')] - def get_artist_songs_as_tracks(self, artist_id): + def get_artist_as_songs_as_tracks(self, artist_id): albums = self.get_raw_albums(artist_id) if albums is None: return None From 634efc4de4b184f88bf69b00623da7aa7c7a7571 Mon Sep 17 00:00:00 2001 From: hhm Date: Wed, 15 Feb 2017 17:27:23 -0500 Subject: [PATCH 5/8] B"H add library lookup playlist TODO - rebase --- mopidy_subidy/library.py | 1 + 1 file changed, 1 insertion(+) diff --git a/mopidy_subidy/library.py b/mopidy_subidy/library.py index 5a2593d..fe94d8e 100644 --- a/mopidy_subidy/library.py +++ b/mopidy_subidy/library.py @@ -100,6 +100,7 @@ class SubidyLibraryProvider(backend.LibraryProvider): return self.lookup_directory(uri.get_directory_id(lookup_uri)) if type == uri.SONG: return [self.lookup_song(uri.get_song_id(lookup_uri))] + # TODO: uri.PLAYLIST def lookup(self, uri=None, uris=None): if uris is not None: From 64938a8c7e96b5a5d7650348ec87a9e200e165ea Mon Sep 17 00:00:00 2001 From: hhm Date: Thu, 16 Feb 2017 01:25:03 -0500 Subject: [PATCH 6/8] B"H lookup return subdir songs too, artist lookup fn to iter - rebase --- mopidy_subidy/library.py | 4 ++-- mopidy_subidy/subsonic_api.py | 22 ++++++++++++++++------ 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/mopidy_subidy/library.py b/mopidy_subidy/library.py index fe94d8e..10a3e03 100644 --- a/mopidy_subidy/library.py +++ b/mopidy_subidy/library.py @@ -62,10 +62,10 @@ class SubidyLibraryProvider(backend.LibraryProvider): return self.subsonic_api.get_songs_as_tracks(album_id) def lookup_artist(self, artist_id): - return self.subsonic_api.get_artist_as_songs_as_tracks(artist_id) + return list(self.subsonic_api.get_artist_as_songs_as_tracks_iter(artist_id)) def lookup_directory(self, directory_id): - return self.subsonic_api.get_diritems_as_tracks(directory_id) + return list(self.subsonic_api.get_recursive_dir_as_songs_as_tracks_iter(directory_id)) def browse(self, browse_uri): if browse_uri == uri.get_vdir_uri('root'): diff --git a/mopidy_subidy/subsonic_api.py b/mopidy_subidy/subsonic_api.py index 0e804e1..6ff7d42 100644 --- a/mopidy_subidy/subsonic_api.py +++ b/mopidy_subidy/subsonic_api.py @@ -271,9 +271,6 @@ class SubsonicApi(): def get_diritems_as_refs(self, directory_id): return [(self.raw_directory_to_ref(diritem) if diritem.get('isDir') else self.raw_song_to_ref(diritem)) for diritem in self.get_raw_dir(directory_id)] - def get_diritems_as_tracks(self, directory_id): - return [self.raw_song_to_track(diritem) for diritem in self.get_raw_dir(directory_id) if not diritem.get('isDir')] - def get_artists_as_artists(self): return [self.raw_artist_to_artist(artist) for artist in self.get_raw_artists()] @@ -292,11 +289,24 @@ class SubsonicApi(): return None return [self.raw_song_to_ref(song) for song in playlist.get('entry')] - def get_artist_as_songs_as_tracks(self, artist_id): + def get_artist_as_songs_as_tracks_iter(self, artist_id): albums = self.get_raw_albums(artist_id) if albums is None: - return None - return [self.raw_song_to_track(song) for album in albums for song in self.get_raw_songs(album.get('id'))] + return + for album in albums: + for song in self.get_raw_songs(album.get('id')): + yield self.raw_song_to_track(song) + + def get_recursive_dir_as_songs_as_tracks_iter(self, directory_id): + diritems = self.get_raw_dir(directory_id) + if diritems is None: + return + for item in diritems: + if item.get('isDir'): + for song in self.get_recursive_dir_as_songs_as_tracks_iter(item.get('id')): + yield song + else: + yield self.raw_song_to_track(item) def raw_song_to_ref(self, song): if song is None: From 1f19ffcb75f0b054d6de7c5b30ed91ff7c6d3b62 Mon Sep 17 00:00:00 2001 From: hhm Date: Mon, 27 Mar 2017 16:48:48 -0400 Subject: [PATCH 7/8] B"H lookup_song return list, add search query dir uri - rebased --- mopidy_subidy/library.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/mopidy_subidy/library.py b/mopidy_subidy/library.py index 10a3e03..8f74daf 100644 --- a/mopidy_subidy/library.py +++ b/mopidy_subidy/library.py @@ -56,7 +56,11 @@ class SubidyLibraryProvider(backend.LibraryProvider): return self.subsonic_api.get_diritems_as_refs(directory_id) def lookup_song(self, song_id): - return self.subsonic_api.get_song_by_id(song_id) + song = self.subsonic_api.get_song_by_id(song_id) + if song is None: + return [] + else: + return [song] def lookup_album(self, album_id): return self.subsonic_api.get_songs_as_tracks(album_id) @@ -99,7 +103,7 @@ class SubidyLibraryProvider(backend.LibraryProvider): if type == uri.DIRECTORY: return self.lookup_directory(uri.get_directory_id(lookup_uri)) if type == uri.SONG: - return [self.lookup_song(uri.get_song_id(lookup_uri))] + return self.lookup_song(uri.get_song_id(lookup_uri)) # TODO: uri.PLAYLIST def lookup(self, uri=None, uris=None): From aec8b0248433ff6a730f6ed74a9b60a46ac7fec5 Mon Sep 17 00:00:00 2001 From: hhm Date: Tue, 28 Feb 2017 16:16:52 -0500 Subject: [PATCH 8/8] B"H lookup playlists - rebased --- mopidy_subidy/library.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/mopidy_subidy/library.py b/mopidy_subidy/library.py index 8f74daf..2695534 100644 --- a/mopidy_subidy/library.py +++ b/mopidy_subidy/library.py @@ -71,6 +71,9 @@ class SubidyLibraryProvider(backend.LibraryProvider): def lookup_directory(self, directory_id): return list(self.subsonic_api.get_recursive_dir_as_songs_as_tracks_iter(directory_id)) + def lookup_playlist(self, playlist_id): + return self.subsonic_api.get_playlist_as_playlist(playlist_id).tracks + def browse(self, browse_uri): if browse_uri == uri.get_vdir_uri('root'): root_vdir_names = ["rootdirs", "artists", "albums"] @@ -104,7 +107,8 @@ class SubidyLibraryProvider(backend.LibraryProvider): return self.lookup_directory(uri.get_directory_id(lookup_uri)) if type == uri.SONG: return self.lookup_song(uri.get_song_id(lookup_uri)) - # TODO: uri.PLAYLIST + if type == uri.PLAYLIST: + return self.lookup_playlist(uri.get_playlist_id(lookup_uri)) def lookup(self, uri=None, uris=None): if uris is not None: