Merge branch 'browse_libs' into 'master'
Support library browsing See merge request funkwhale/mopidy!7main
commit
294903245d
|
@ -141,6 +141,11 @@ class APIClient(object):
|
|||
response.raise_for_status()
|
||||
return response.json()
|
||||
|
||||
def list_libraries(self, filters):
|
||||
response = self.session.get("libraries/", params=filters)
|
||||
response.raise_for_status()
|
||||
return response.json()
|
||||
|
||||
def load_all(self, first_page, max=0):
|
||||
for i in first_page["results"]:
|
||||
yield i
|
||||
|
|
|
@ -69,6 +69,7 @@ class FunkwhaleLibraryProvider(backend.LibraryProvider):
|
|||
self.vfs = {"funkwhale:directory": collections.OrderedDict()}
|
||||
self.add_to_vfs(new_folder("Favorites", "favorites"))
|
||||
self.add_to_vfs(new_folder("Artists", "artists"))
|
||||
self.add_to_vfs(new_folder("Libraries", "libraries"))
|
||||
# self.add_to_vfs(new_folder('Following', ['following']))
|
||||
# self.add_to_vfs(new_folder('Sets', ['sets']))
|
||||
# self.add_to_vfs(new_folder('Stream', ['stream']))
|
||||
|
@ -123,6 +124,7 @@ class FunkwhaleLibraryProvider(backend.LibraryProvider):
|
|||
return [], False
|
||||
|
||||
def browse_albums(self, uri_prefix, remaining):
|
||||
logger.debug("Handling albums route: %s", remaining)
|
||||
if len(remaining) == 2:
|
||||
album = remaining[1]
|
||||
payload = self.backend.client.list_tracks(
|
||||
|
@ -225,8 +227,35 @@ class FunkwhaleLibraryProvider(backend.LibraryProvider):
|
|||
]
|
||||
return artists, True
|
||||
|
||||
if root == "by-library":
|
||||
logger.debug("Handling artists by lib route: %s", end)
|
||||
if len(end) == 1:
|
||||
payload = self.backend.client.list_artists(
|
||||
{"ordering": "name", "page_size": 50, "library": end}
|
||||
)
|
||||
uri_prefix = "funkwhale:directory:artists:by-name"
|
||||
artists = [
|
||||
convert_to_artist(row, uri_prefix=uri_prefix, ref=True)
|
||||
for row in self.backend.client.load_all(payload)
|
||||
]
|
||||
return artists, True
|
||||
|
||||
return [], False
|
||||
|
||||
def browse_libraries(self, remaining):
|
||||
logger.debug("Handling libraries route: %s", remaining)
|
||||
|
||||
payload = self.backend.client.list_libraries(
|
||||
{"ordering": "name", "page_size": 50}
|
||||
)
|
||||
uri_prefix = "funkwhale:directory:artists:by-library"
|
||||
libraries = [
|
||||
convert_to_ref(row, uri_prefix=uri_prefix)
|
||||
for row in self.backend.client.load_all(payload)
|
||||
]
|
||||
return libraries, True
|
||||
|
||||
|
||||
def search(self, query=None, uris=None, exact=False):
|
||||
# TODO Support exact search
|
||||
if not query:
|
||||
|
@ -337,6 +366,17 @@ def convert_to_track(payload, uri_prefix="funkwhale:tracks"):
|
|||
)
|
||||
|
||||
|
||||
def convert_to_ref(payload, uri_prefix="funkwhale:libraries"):
|
||||
try:
|
||||
upload = payload["uploads"][0]
|
||||
except (KeyError, IndexError):
|
||||
upload = {}
|
||||
return models.Ref(
|
||||
uri=uri_prefix + ":%s" % payload["uuid"],
|
||||
name=payload["name"],
|
||||
)
|
||||
|
||||
|
||||
def to_ref(obj):
|
||||
getter = getattr(models.Ref, obj.__class__.__name__.lower())
|
||||
return getter(uri=obj.uri, name=obj.name)
|
||||
|
|
Loading…
Reference in New Issue