From 189bf9a9a875327a672b083b9af90dca4569be88 Mon Sep 17 00:00:00 2001 From: David Sn Date: Wed, 23 Sep 2020 19:19:04 +0200 Subject: [PATCH 1/3] Fix library not loading due to a bug with covers --- mopidy_funkwhale/library.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mopidy_funkwhale/library.py b/mopidy_funkwhale/library.py index cc24793..bf8dabd 100644 --- a/mopidy_funkwhale/library.py +++ b/mopidy_funkwhale/library.py @@ -333,7 +333,7 @@ def convert_to_artist(payload, uri_prefix="funkwhale:artists"): @cast_to_ref def convert_to_album(payload, uri_prefix="funkwhale:albums"): artist = convert_to_artist(payload["artist"]) - image = payload["cover"]["original"] if payload["cover"] else None + image = payload["cover"]["urls"]["original"] if payload["cover"] else None return models.Album( uri=uri_prefix + ":%s" % payload["id"], From 70c5319acb3fae54c682e0481f832af4ab3b8573 Mon Sep 17 00:00:00 2001 From: David Sn Date: Fri, 25 Sep 2020 05:26:05 +0200 Subject: [PATCH 2/3] Add support for cover art Signed-off-by: David Sn --- mopidy_funkwhale/library.py | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/mopidy_funkwhale/library.py b/mopidy_funkwhale/library.py index bf8dabd..bf4f160 100644 --- a/mopidy_funkwhale/library.py +++ b/mopidy_funkwhale/library.py @@ -255,6 +255,34 @@ class FunkwhaleLibraryProvider(backend.LibraryProvider): ] return libraries, True + def get_images(self, uris): + logger.debug("Handling get images: %s", uris) + result = {} + + # TODO Add cache + for uri in uris: + track_id = uri.split(":")[-1] + payload = self.backend.client.get_track(track_id) + + if not payload["album"]["cover"]: + continue + + result[uri] = [] + + for type, cover_url in payload["album"]["cover"]["urls"].items(): + if not cover_url: + continue + + if type == "large_square_crop": + image = models.Image(uri=cover_url, width=600, height=600) + elif type == "medium_square_crop": + image = models.Image(uri=cover_url, width=200, height=200) + else: + image = models.Image(uri=cover_url) + + result[uri].append(image) + + return result def search(self, query=None, uris=None, exact=False): # TODO Support exact search @@ -333,8 +361,6 @@ def convert_to_artist(payload, uri_prefix="funkwhale:artists"): @cast_to_ref def convert_to_album(payload, uri_prefix="funkwhale:albums"): artist = convert_to_artist(payload["artist"]) - image = payload["cover"]["urls"]["original"] if payload["cover"] else None - return models.Album( uri=uri_prefix + ":%s" % payload["id"], name=payload["title"], @@ -349,6 +375,7 @@ def convert_to_album(payload, uri_prefix="funkwhale:albums"): def convert_to_track(payload, uri_prefix="funkwhale:tracks"): artist = convert_to_artist(payload["artist"]) album = convert_to_album(payload["album"]) + try: upload = payload["uploads"][0] except (KeyError, IndexError): From d9cd25b555670a53ab048c9a68900591d7983930 Mon Sep 17 00:00:00 2001 From: David Sn Date: Fri, 25 Sep 2020 05:40:56 +0200 Subject: [PATCH 3/3] Support caching for cover art images Signed-off-by: David Sn --- mopidy_funkwhale/library.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/mopidy_funkwhale/library.py b/mopidy_funkwhale/library.py index bf4f160..4af2e47 100644 --- a/mopidy_funkwhale/library.py +++ b/mopidy_funkwhale/library.py @@ -259,11 +259,16 @@ class FunkwhaleLibraryProvider(backend.LibraryProvider): logger.debug("Handling get images: %s", uris) result = {} - # TODO Add cache for uri in uris: track_id = uri.split(":")[-1] - payload = self.backend.client.get_track(track_id) + cache_key = "funkwhale:images:%s" % track_id + from_cache = self.cache.get(cache_key) + if from_cache: + result[uri] = from_cache + continue + + payload = self.backend.client.get_track(track_id) if not payload["album"]["cover"]: continue @@ -282,6 +287,8 @@ class FunkwhaleLibraryProvider(backend.LibraryProvider): result[uri].append(image) + self.cache.set(cache_key, result[uri]) + return result def search(self, query=None, uris=None, exact=False):