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()
|
response.raise_for_status()
|
||||||
return response.json()
|
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):
|
def load_all(self, first_page, max=0):
|
||||||
for i in first_page["results"]:
|
for i in first_page["results"]:
|
||||||
yield i
|
yield i
|
||||||
|
|
|
@ -69,6 +69,7 @@ class FunkwhaleLibraryProvider(backend.LibraryProvider):
|
||||||
self.vfs = {"funkwhale:directory": collections.OrderedDict()}
|
self.vfs = {"funkwhale:directory": collections.OrderedDict()}
|
||||||
self.add_to_vfs(new_folder("Favorites", "favorites"))
|
self.add_to_vfs(new_folder("Favorites", "favorites"))
|
||||||
self.add_to_vfs(new_folder("Artists", "artists"))
|
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('Following', ['following']))
|
||||||
# self.add_to_vfs(new_folder('Sets', ['sets']))
|
# self.add_to_vfs(new_folder('Sets', ['sets']))
|
||||||
# self.add_to_vfs(new_folder('Stream', ['stream']))
|
# self.add_to_vfs(new_folder('Stream', ['stream']))
|
||||||
|
@ -123,6 +124,7 @@ class FunkwhaleLibraryProvider(backend.LibraryProvider):
|
||||||
return [], False
|
return [], False
|
||||||
|
|
||||||
def browse_albums(self, uri_prefix, remaining):
|
def browse_albums(self, uri_prefix, remaining):
|
||||||
|
logger.debug("Handling albums route: %s", remaining)
|
||||||
if len(remaining) == 2:
|
if len(remaining) == 2:
|
||||||
album = remaining[1]
|
album = remaining[1]
|
||||||
payload = self.backend.client.list_tracks(
|
payload = self.backend.client.list_tracks(
|
||||||
|
@ -225,8 +227,35 @@ class FunkwhaleLibraryProvider(backend.LibraryProvider):
|
||||||
]
|
]
|
||||||
return artists, True
|
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
|
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):
|
def search(self, query=None, uris=None, exact=False):
|
||||||
# TODO Support exact search
|
# TODO Support exact search
|
||||||
if not query:
|
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):
|
def to_ref(obj):
|
||||||
getter = getattr(models.Ref, obj.__class__.__name__.lower())
|
getter = getattr(models.Ref, obj.__class__.__name__.lower())
|
||||||
return getter(uri=obj.uri, name=obj.name)
|
return getter(uri=obj.uri, name=obj.name)
|
||||||
|
|
Loading…
Reference in New Issue