From 1004e379b28f47b15657ab111ed0f889fa6cc2fb Mon Sep 17 00:00:00 2001 From: devgianlu Date: Sun, 30 Nov 2025 19:27:08 +0100 Subject: [PATCH] feat: choose closest album art size if requested is not available --- cmd/daemon/api_server.go | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/cmd/daemon/api_server.go b/cmd/daemon/api_server.go index 48dd87fb..c2cad313 100644 --- a/cmd/daemon/api_server.go +++ b/cmd/daemon/api_server.go @@ -153,12 +153,38 @@ func getBestImageIdForSize(images []*metadatapb.Image, size string) []byte { imageSize := metadatapb.Image_Size(metadatapb.Image_Size_value[strings.ToUpper(size)]) + dist := func(a metadatapb.Image_Size) int { + diff := int(a) - int(imageSize) + if diff < 0 { + return -diff + } + return diff + } + + // Find an image with the exact requested size. + // If no exact match, return the closest image to the requested size. + var bestImage *metadatapb.Image for _, img := range images { - if img.Size != nil && *img.Size == imageSize { + if img.Size == nil { + continue + } + + if *img.Size == imageSize { return img.FileId } + + // Find the image with the closest size. This logic works because the + // metadatapb.Image_Size enum values are ordered from smallest to largest. + if bestImage == nil || dist(*img.Size) < dist(*bestImage.Size) { + bestImage = img + } + } + + if bestImage != nil { + return bestImage.FileId } + // Fallback to the first image if none have size information. return images[0].FileId }