fix(front): consistent image urls generation in all sizes

This commit is contained in:
ArneBo 2025-02-21 10:27:06 +01:00
parent 3b1b707cff
commit 8cfead746d
9 changed files with 27 additions and 4 deletions

View File

@ -1398,6 +1398,7 @@ VERSATILEIMAGEFIELD_RENDITION_KEY_SETS = {
], ],
"attachment_square": [ "attachment_square": [
("original", "url"), ("original", "url"),
("small_square_crop", "crop__50x50"),
("medium_square_crop", "crop__200x200"), ("medium_square_crop", "crop__200x200"),
("large_square_crop", "crop__600x600"), ("large_square_crop", "crop__600x600"),
], ],

View File

@ -257,6 +257,13 @@ class Attachment(models.Model):
proxy_url = reverse("api:v1:attachments-proxy", kwargs={"uuid": self.uuid}) proxy_url = reverse("api:v1:attachments-proxy", kwargs={"uuid": self.uuid})
return federation_utils.full_url(proxy_url + "?next=original") return federation_utils.full_url(proxy_url + "?next=original")
@property
def download_url_small_square_crop(self):
if self.file:
return utils.media_url(self.file.crop["50x50"].url)
proxy_url = reverse("api:v1:attachments-proxy", kwargs={"uuid": self.uuid})
return federation_utils.full_url(proxy_url + "?next=small_square_crop")
@property @property
def download_url_medium_square_crop(self): def download_url_medium_square_crop(self):
if self.file: if self.file:

View File

@ -298,6 +298,7 @@ class AttachmentSerializer(serializers.Serializer):
urls = {} urls = {}
urls["source"] = o.url urls["source"] = o.url
urls["original"] = o.download_url_original urls["original"] = o.download_url_original
urls["small_square_crop"] = o.download_url_small_square_crop
urls["medium_square_crop"] = o.download_url_medium_square_crop urls["medium_square_crop"] = o.download_url_medium_square_crop
urls["large_square_crop"] = o.download_url_large_square_crop urls["large_square_crop"] = o.download_url_large_square_crop
return urls return urls

View File

@ -176,7 +176,12 @@ class AttachmentViewSet(
return r return r
size = request.GET.get("next", "original").lower() size = request.GET.get("next", "original").lower()
if size not in ["original", "medium_square_crop", "large_square_crop"]: if size not in [
"original",
"small_square_crop",
"medium_square_crop",
"large_square_crop",
]:
size = "original" size = "original"
try: try:

View File

@ -111,6 +111,9 @@ class GetArtistInfo2Serializer(serializers.Serializer):
if artist.mbid: if artist.mbid:
payload["musicBrainzId"] = TagValue(artist.mbid) payload["musicBrainzId"] = TagValue(artist.mbid)
if artist.attachment_cover: if artist.attachment_cover:
payload["smallImageUrl"] = TagValue(
artist.attachment_cover.download_url_small_square_crop
)
payload["mediumImageUrl"] = TagValue( payload["mediumImageUrl"] = TagValue(
artist.attachment_cover.download_url_medium_square_crop artist.attachment_cover.download_url_medium_square_crop
) )

View File

@ -195,6 +195,9 @@ def test_attachment_serializer_existing_file(factories, to_api_date):
"urls": { "urls": {
"source": attachment.url, "source": attachment.url,
"original": federation_utils.full_url(attachment.file.url), "original": federation_utils.full_url(attachment.file.url),
"small_square_crop": federation_utils.full_url(
attachment.file.crop["50x50"].url
),
"medium_square_crop": federation_utils.full_url( "medium_square_crop": federation_utils.full_url(
attachment.file.crop["200x200"].url attachment.file.crop["200x200"].url
), ),

View File

@ -156,6 +156,9 @@ def test_get_artist_info_2_serializer(factories):
expected = { expected = {
"musicBrainzId": artist.mbid, "musicBrainzId": artist.mbid,
"smallImageUrl": renderers.TagValue(
artist.attachment_cover.download_url_small_square_crop
),
"mediumImageUrl": renderers.TagValue( "mediumImageUrl": renderers.TagValue(
artist.attachment_cover.download_url_medium_square_crop artist.attachment_cover.download_url_medium_square_crop
), ),

View File

@ -32,7 +32,7 @@ const firstArtist = artist_credit.length > 0 ? artist_credit[0].artist : null
const store = useStore() const store = useStore()
const imageUrl = computed(() => props.album.cover?.urls.original const imageUrl = computed(() => props.album.cover?.urls.original
? store.getters['instance/absoluteUrl'](props.album.cover?.urls.large_square_crop) ? store.getters['instance/absoluteUrl'](props.album.cover?.urls.medium_square_crop)
: defaultCover : defaultCover
) )
</script> </script>

View File

@ -25,11 +25,11 @@ const cover = computed(() => {
const artistCover = artist.attachment_cover ?? undefined const artistCover = artist.attachment_cover ?? undefined
const albumCover = albums.value?.find( const albumCover = albums.value?.find(
(album: Album) => album.cover?.urls.medium_square_crop (album: Album) => album.cover?.urls
)?.cover )?.cover
const trackCover = tracks.value?.find( const trackCover = tracks.value?.find(
(track: Track) => track.cover (track: Track) => track.cover?.urls
)?.cover )?.cover
const fallback: Cover = { const fallback: Cover = {