Format with Black
This commit is contained in:
parent
b067352a00
commit
1b04266d92
7 changed files with 466 additions and 207 deletions
|
@ -3,8 +3,10 @@ from mopidy.models import Ref, SearchResult
|
|||
from mopidy_subidy import uri
|
||||
|
||||
import logging
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class SubidyLibraryProvider(backend.LibraryProvider):
|
||||
def __create_vdirs():
|
||||
vdir_templates = [
|
||||
|
@ -20,7 +22,7 @@ class SubidyLibraryProvider(backend.LibraryProvider):
|
|||
for template in vdir_templates:
|
||||
vdir = template.copy()
|
||||
vdir.update(uri=uri.get_vdir_uri(vdir["id"]))
|
||||
vdirs[template['id']] = vdir
|
||||
vdirs[template["id"]] = vdir
|
||||
return vdirs
|
||||
|
||||
_vdirs = __create_vdirs()
|
||||
|
@ -28,11 +30,9 @@ class SubidyLibraryProvider(backend.LibraryProvider):
|
|||
def __raw_vdir_to_ref(vdir):
|
||||
if vdir is None:
|
||||
return None
|
||||
return Ref.directory(
|
||||
name=vdir['name'],
|
||||
uri=vdir['uri'])
|
||||
return Ref.directory(name=vdir["name"], uri=vdir["uri"])
|
||||
|
||||
root_directory = __raw_vdir_to_ref(_vdirs['root'])
|
||||
root_directory = __raw_vdir_to_ref(_vdirs["root"])
|
||||
|
||||
_raw_vdir_to_ref = staticmethod(__raw_vdir_to_ref)
|
||||
|
||||
|
@ -66,19 +66,29 @@ class SubidyLibraryProvider(backend.LibraryProvider):
|
|||
return self.subsonic_api.get_songs_as_tracks(album_id)
|
||||
|
||||
def lookup_artist(self, artist_id):
|
||||
return list(self.subsonic_api.get_artist_as_songs_as_tracks_iter(artist_id))
|
||||
return list(
|
||||
self.subsonic_api.get_artist_as_songs_as_tracks_iter(artist_id)
|
||||
)
|
||||
|
||||
def lookup_directory(self, directory_id):
|
||||
return list(self.subsonic_api.get_recursive_dir_as_songs_as_tracks_iter(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'):
|
||||
if browse_uri == uri.get_vdir_uri("root"):
|
||||
root_vdir_names = ["rootdirs", "artists", "albums"]
|
||||
root_vdirs = [self._vdirs[vdir_name] for vdir_name in root_vdir_names]
|
||||
sorted_root_vdirs = sorted(root_vdirs, key=lambda vdir: vdir["name"])
|
||||
root_vdirs = [
|
||||
self._vdirs[vdir_name] for vdir_name in root_vdir_names
|
||||
]
|
||||
sorted_root_vdirs = sorted(
|
||||
root_vdirs, key=lambda vdir: vdir["name"]
|
||||
)
|
||||
return [self._raw_vdir_to_ref(vdir) for vdir in sorted_root_vdirs]
|
||||
elif browse_uri == uri.get_vdir_uri("rootdirs"):
|
||||
return self.browse_rootdirs()
|
||||
|
@ -136,39 +146,52 @@ class SubidyLibraryProvider(backend.LibraryProvider):
|
|||
return SearchResult(tracks=[song])
|
||||
return None
|
||||
|
||||
def search_by_artist_album_and_track(self, artist_name, album_name, track_name):
|
||||
def search_by_artist_album_and_track(
|
||||
self, artist_name, album_name, track_name
|
||||
):
|
||||
tracks = self.search_by_artist_and_album(artist_name, album_name)
|
||||
track = next(item for item in tracks.tracks if track_name in item.name)
|
||||
return SearchResult(tracks=[track])
|
||||
|
||||
def search_by_artist_and_album(self, artist_name, album_name):
|
||||
artists = self.subsonic_api.get_raw_artists()
|
||||
artist = next(item for item in artists if artist_name in item.get('name'))
|
||||
albums = self.subsonic_api.get_raw_albums(artist.get('id'))
|
||||
album = next(item for item in albums if album_name in item.get('title'))
|
||||
return SearchResult(tracks=self.subsonic_api.get_songs_as_tracks(album.get('id')))
|
||||
artist = next(
|
||||
item for item in artists if artist_name in item.get("name")
|
||||
)
|
||||
albums = self.subsonic_api.get_raw_albums(artist.get("id"))
|
||||
album = next(item for item in albums if album_name in item.get("title"))
|
||||
return SearchResult(
|
||||
tracks=self.subsonic_api.get_songs_as_tracks(album.get("id"))
|
||||
)
|
||||
|
||||
def get_distinct(self, field, query):
|
||||
search_result = self.search(query)
|
||||
if not search_result:
|
||||
return []
|
||||
if field == 'track' or field == 'title':
|
||||
if field == "track" or field == "title":
|
||||
return [track.name for track in (search_result.tracks or [])]
|
||||
if field == 'album':
|
||||
if field == "album":
|
||||
return [album.name for album in (search_result.albums or [])]
|
||||
if field == 'artist':
|
||||
if field == "artist":
|
||||
if not search_result.artists:
|
||||
return [artist.name for artist in self.browse_artists()]
|
||||
return [artist.name for artist in search_result.artists]
|
||||
|
||||
def search(self, query=None, uris=None, exact=False):
|
||||
if 'artist' in query and 'album' in query and 'track_name' in query:
|
||||
return self.search_by_artist_album_and_track(query.get('artist')[0], query.get('album')[0], query.get('track_name')[0])
|
||||
if 'artist' in query and 'album' in query:
|
||||
return self.search_by_artist_and_album(query.get('artist')[0], query.get('album')[0])
|
||||
if 'artist' in query:
|
||||
return self.subsonic_api.find_as_search_result(query.get('artist')[0])
|
||||
if 'any' in query:
|
||||
return self.subsonic_api.find_as_search_result(query.get('any')[0])
|
||||
if "artist" in query and "album" in query and "track_name" in query:
|
||||
return self.search_by_artist_album_and_track(
|
||||
query.get("artist")[0],
|
||||
query.get("album")[0],
|
||||
query.get("track_name")[0],
|
||||
)
|
||||
if "artist" in query and "album" in query:
|
||||
return self.search_by_artist_and_album(
|
||||
query.get("artist")[0], query.get("album")[0]
|
||||
)
|
||||
if "artist" in query:
|
||||
return self.subsonic_api.find_as_search_result(
|
||||
query.get("artist")[0]
|
||||
)
|
||||
if "any" in query:
|
||||
return self.subsonic_api.find_as_search_result(query.get("any")[0])
|
||||
return SearchResult(artists=self.subsonic_api.get_artists_as_artists())
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue