From 93550c5734a04e1a604445daa871c4afec8009c0 Mon Sep 17 00:00:00 2001 From: Colin Powell Date: Sun, 29 Jan 2023 14:31:31 -0500 Subject: [PATCH] Allow looking up artwork by release group Historically we'd just fail if the specific MB release did not have artwork, but this is silly. If the release itself does not have artwork, we should also check the release group failing. --- vrobbler/apps/music/models.py | 40 ++++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/vrobbler/apps/music/models.py b/vrobbler/apps/music/models.py index c817e57..72f67ba 100644 --- a/vrobbler/apps/music/models.py +++ b/vrobbler/apps/music/models.py @@ -77,14 +77,38 @@ class Album(TimeStampedModel): for t in self.track_set.all(): self.artists.add(t.artist) - def fetch_artwork(self): - if not self.cover_image: - try: - img_data = musicbrainzngs.get_image_front(self.musicbrainz_id) - name = f"{self.name}_{self.uuid}.jpg" - self.cover_image = ContentFile(img_data, name=name) - except musicbrainzngs.ResponseError: - logger.warning(f'No cover art found for {self.name}') + def fetch_artwork(self, force=False): + if not self.cover_image and not force: + if self.musicbrainz_id: + try: + img_data = musicbrainzngs.get_image_front( + self.musicbrainz_id + ) + name = f"{self.name}_{self.uuid}.jpg" + self.cover_image = ContentFile(img_data, name=name) + logger.info(f'Setting image to {name}') + except musicbrainzngs.ResponseError: + logger.warning( + f'No cover art found for {self.name} by release' + ) + + if not self.cover_image and self.musicbrainz_releasegroup_id: + try: + img_data = musicbrainzngs.get_release_group_image_front( + self.musicbrainz_releasegroup_id + ) + name = f"{self.name}_{self.uuid}.jpg" + self.cover_image = ContentFile(img_data, name=name) + logger.info(f'Setting image to {name}') + except musicbrainzngs.ResponseError: + logger.warning( + f'No cover art found for {self.name} by release group' + ) + if not self.cover_image: + logger.debug( + f"No cover art found for release or release group for {self.name}, setting to default" + ) + # TODO Get a placeholder image in here self.cover_image = 'default-image-replace-me' self.save()