mirror of
https://code.eliotberriot.com/funkwhale/funkwhale.git
synced 2025-10-04 10:39:17 +02:00
See #170: cover on tracks and artists
This commit is contained in:
parent
db1cb30df8
commit
71b400a9b8
34 changed files with 582 additions and 254 deletions
|
@ -230,6 +230,13 @@ class Artist(APIModelMixin):
|
|||
description = models.ForeignKey(
|
||||
"common.Content", null=True, blank=True, on_delete=models.SET_NULL
|
||||
)
|
||||
attachment_cover = models.ForeignKey(
|
||||
"common.Attachment",
|
||||
null=True,
|
||||
blank=True,
|
||||
on_delete=models.SET_NULL,
|
||||
related_name="covered_artist",
|
||||
)
|
||||
|
||||
api = musicbrainz.api.artists
|
||||
objects = ArtistQuerySet.as_manager()
|
||||
|
@ -248,6 +255,10 @@ class Artist(APIModelMixin):
|
|||
kwargs.update({"name": name})
|
||||
return cls.objects.get_or_create(name__iexact=name, defaults=kwargs)
|
||||
|
||||
@property
|
||||
def cover(self):
|
||||
return self.attachment_cover
|
||||
|
||||
|
||||
def import_artist(v):
|
||||
a = Artist.get_or_create_from_api(mbid=v[0]["artist"]["id"])[0]
|
||||
|
@ -358,44 +369,6 @@ class Album(APIModelMixin):
|
|||
}
|
||||
objects = AlbumQuerySet.as_manager()
|
||||
|
||||
def get_image(self, data=None):
|
||||
from funkwhale_api.common import tasks as common_tasks
|
||||
|
||||
attachment = None
|
||||
if data:
|
||||
extensions = {"image/jpeg": "jpg", "image/png": "png", "image/gif": "gif"}
|
||||
extension = extensions.get(data["mimetype"], "jpg")
|
||||
attachment = common_models.Attachment(mimetype=data["mimetype"])
|
||||
f = None
|
||||
filename = "{}.{}".format(self.uuid, extension)
|
||||
if data.get("content"):
|
||||
# we have to cover itself
|
||||
f = ContentFile(data["content"])
|
||||
attachment.file.save(filename, f, save=False)
|
||||
elif data.get("url"):
|
||||
attachment.url = data.get("url")
|
||||
# we can fetch from a url
|
||||
try:
|
||||
common_tasks.fetch_remote_attachment(
|
||||
attachment, filename=filename, save=False
|
||||
)
|
||||
except Exception as e:
|
||||
logger.warn(
|
||||
"Cannot download cover at url %s: %s", data.get("url"), e
|
||||
)
|
||||
return
|
||||
|
||||
elif self.mbid:
|
||||
image_data = musicbrainz.api.images.get_front(str(self.mbid))
|
||||
f = ContentFile(image_data)
|
||||
attachment = common_models.Attachment(mimetype="image/jpeg")
|
||||
attachment.file.save("{0}.jpg".format(self.mbid), f, save=False)
|
||||
if attachment and attachment.file:
|
||||
attachment.save()
|
||||
self.attachment_cover = attachment
|
||||
self.save(update_fields=["attachment_cover"])
|
||||
return self.attachment_cover.file
|
||||
|
||||
@property
|
||||
def cover(self):
|
||||
return self.attachment_cover
|
||||
|
@ -518,6 +491,13 @@ class Track(APIModelMixin):
|
|||
description = models.ForeignKey(
|
||||
"common.Content", null=True, blank=True, on_delete=models.SET_NULL
|
||||
)
|
||||
attachment_cover = models.ForeignKey(
|
||||
"common.Attachment",
|
||||
null=True,
|
||||
blank=True,
|
||||
on_delete=models.SET_NULL,
|
||||
related_name="covered_track",
|
||||
)
|
||||
|
||||
federation_namespace = "tracks"
|
||||
musicbrainz_model = "recording"
|
||||
|
@ -572,6 +552,10 @@ class Track(APIModelMixin):
|
|||
except AttributeError:
|
||||
return "{} - {}".format(self.artist.name, self.title)
|
||||
|
||||
@property
|
||||
def cover(self):
|
||||
return self.attachment_cover
|
||||
|
||||
def get_activity_url(self):
|
||||
if self.mbid:
|
||||
return "https://musicbrainz.org/recording/{}".format(self.mbid)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue