Merge branch 'library-albums' into 'master'
Add support for browsing albums (#7) See merge request funkwhale/mopidy!10main
commit
8adc50aaef
|
@ -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("Albums", "albums"))
|
||||||
self.add_to_vfs(new_folder("Libraries", "libraries"))
|
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']))
|
||||||
|
@ -123,8 +124,60 @@ class FunkwhaleLibraryProvider(backend.LibraryProvider):
|
||||||
return tracks, True
|
return tracks, True
|
||||||
return [], False
|
return [], False
|
||||||
|
|
||||||
def browse_albums(self, uri_prefix, remaining):
|
def browse_albums(self, remaining, uri_prefix=""):
|
||||||
logger.debug("Handling albums route: %s", remaining)
|
logger.debug("Handling albums route: %s", remaining)
|
||||||
|
if remaining == []:
|
||||||
|
return (
|
||||||
|
[
|
||||||
|
new_folder("Recent", "albums:recent"),
|
||||||
|
new_folder("By name", "albums:by-name"),
|
||||||
|
new_folder("Own Content", "albums:scope-me"),
|
||||||
|
],
|
||||||
|
False,
|
||||||
|
)
|
||||||
|
|
||||||
|
if remaining == ["recent"]:
|
||||||
|
# list recent albums
|
||||||
|
payload = self.backend.client.list_albums(
|
||||||
|
{"ordering": "-creation_date", "page_size": 50, "playable": "true"}
|
||||||
|
)
|
||||||
|
|
||||||
|
uri_prefix = "funkwhale:directory:albums:recent"
|
||||||
|
albums = [
|
||||||
|
convert_to_album(row, uri_prefix=uri_prefix, ref=True)
|
||||||
|
for row in self.backend.client.load_all(payload, max=1)
|
||||||
|
]
|
||||||
|
|
||||||
|
return albums, True
|
||||||
|
|
||||||
|
if remaining == ["by-name"]:
|
||||||
|
# list all albums sorted by name
|
||||||
|
payload = self.backend.client.list_albums(
|
||||||
|
{"ordering": "title", "page_size": 50, "playable": "true"}
|
||||||
|
)
|
||||||
|
|
||||||
|
uri_prefix = "funkwhale:directory:albums:by-name"
|
||||||
|
albums = [
|
||||||
|
convert_to_album(row, uri_prefix=uri_prefix, ref=True)
|
||||||
|
for row in self.backend.client.load_all(payload)
|
||||||
|
]
|
||||||
|
|
||||||
|
return albums, True
|
||||||
|
|
||||||
|
if remaining == ["scope-me"]:
|
||||||
|
# list all albums self uploaded
|
||||||
|
payload = self.backend.client.list_albums(
|
||||||
|
{"ordering": "title", "page_size": 50, "scope": "me"}
|
||||||
|
)
|
||||||
|
|
||||||
|
uri_prefix = "funkwhale:directory:albums:scope-me"
|
||||||
|
albums = [
|
||||||
|
convert_to_album(row, uri_prefix=uri_prefix, ref=True)
|
||||||
|
for row in self.backend.client.load_all(payload)
|
||||||
|
]
|
||||||
|
|
||||||
|
return albums, True
|
||||||
|
|
||||||
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(
|
||||||
|
@ -139,7 +192,7 @@ class FunkwhaleLibraryProvider(backend.LibraryProvider):
|
||||||
convert_to_track(row, ref=True, cache=self.cache)
|
convert_to_track(row, ref=True, cache=self.cache)
|
||||||
for row in self.backend.client.load_all(payload)
|
for row in self.backend.client.load_all(payload)
|
||||||
]
|
]
|
||||||
return tracks
|
return tracks, True
|
||||||
else:
|
else:
|
||||||
artist, album = remaining[0], None
|
artist, album = remaining[0], None
|
||||||
payload = self.backend.client.list_albums(
|
payload = self.backend.client.list_albums(
|
||||||
|
@ -154,7 +207,7 @@ class FunkwhaleLibraryProvider(backend.LibraryProvider):
|
||||||
convert_to_album(row, uri_prefix=uri_prefix, ref=True)
|
convert_to_album(row, uri_prefix=uri_prefix, ref=True)
|
||||||
for row in self.backend.client.load_all(payload)
|
for row in self.backend.client.load_all(payload)
|
||||||
]
|
]
|
||||||
return albums
|
return albums, True
|
||||||
|
|
||||||
def browse_artists(self, remaining):
|
def browse_artists(self, remaining):
|
||||||
logger.debug("Handling artist route: %s", remaining)
|
logger.debug("Handling artist route: %s", remaining)
|
||||||
|
@ -176,10 +229,8 @@ class FunkwhaleLibraryProvider(backend.LibraryProvider):
|
||||||
if root == "recent":
|
if root == "recent":
|
||||||
if end:
|
if end:
|
||||||
# list albums
|
# list albums
|
||||||
return (
|
return self.browse_albums(uri_prefix=albums_uri_prefix, remaining=end)
|
||||||
self.browse_albums(uri_prefix=albums_uri_prefix, remaining=end),
|
|
||||||
True,
|
|
||||||
)
|
|
||||||
# list recent artists
|
# list recent artists
|
||||||
payload = self.backend.client.list_artists(
|
payload = self.backend.client.list_artists(
|
||||||
{"ordering": "-creation_date", "page_size": 50, "playable": "true"}
|
{"ordering": "-creation_date", "page_size": 50, "playable": "true"}
|
||||||
|
@ -195,10 +246,8 @@ class FunkwhaleLibraryProvider(backend.LibraryProvider):
|
||||||
if root == "by-name":
|
if root == "by-name":
|
||||||
if end:
|
if end:
|
||||||
# list albums
|
# list albums
|
||||||
return (
|
return self.browse_albums(uri_prefix=albums_uri_prefix, remaining=end)
|
||||||
self.browse_albums(uri_prefix=albums_uri_prefix, remaining=end),
|
|
||||||
True,
|
|
||||||
)
|
|
||||||
# list recent artists
|
# list recent artists
|
||||||
payload = self.backend.client.list_artists(
|
payload = self.backend.client.list_artists(
|
||||||
{"ordering": "name", "page_size": 50, "playable": "true"}
|
{"ordering": "name", "page_size": 50, "playable": "true"}
|
||||||
|
@ -213,10 +262,8 @@ class FunkwhaleLibraryProvider(backend.LibraryProvider):
|
||||||
if root == "scope-me":
|
if root == "scope-me":
|
||||||
if end:
|
if end:
|
||||||
# list albums
|
# list albums
|
||||||
return (
|
return self.browse_albums(uri_prefix=albums_uri_prefix, remaining=end)
|
||||||
self.browse_albums(uri_prefix=albums_uri_prefix, remaining=end),
|
|
||||||
True
|
|
||||||
)
|
|
||||||
payload = self.backend.client.list_artists(
|
payload = self.backend.client.list_artists(
|
||||||
{"ordering": "name", "page_size": 50, "scope": "me"}
|
{"ordering": "name", "page_size": 50, "scope": "me"}
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in New Issue