Skip to content

Commit 37b1898

Browse files
committed
feat: choose closest album art size if requested is not available
1 parent 98b5a86 commit 37b1898

1 file changed

Lines changed: 27 additions & 1 deletion

File tree

cmd/daemon/api_server.go

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,12 +153,38 @@ func getBestImageIdForSize(images []*metadatapb.Image, size string) []byte {
153153

154154
imageSize := metadatapb.Image_Size(metadatapb.Image_Size_value[strings.ToUpper(size)])
155155

156+
dist := func(a metadatapb.Image_Size) int {
157+
diff := int(a) - int(imageSize)
158+
if diff < 0 {
159+
return -diff
160+
}
161+
return diff
162+
}
163+
164+
// Find an image with the exact requested size.
165+
// If no exact match, return the closest image to the requested size.
166+
var bestImage *metadatapb.Image
156167
for _, img := range images {
157-
if img.Size != nil && *img.Size == imageSize {
168+
if img.Size == nil {
169+
continue
170+
}
171+
172+
if *img.Size == imageSize {
158173
return img.FileId
159174
}
175+
176+
// Find the image with the closest size. This logic works because the
177+
// metadatapb.Image_Size enum values are ordered from smallest to largest.
178+
if bestImage == nil || dist(*img.Size) < dist(*bestImage.Size) {
179+
bestImage = img
180+
}
181+
}
182+
183+
if bestImage != nil {
184+
return bestImage.FileId
160185
}
161186

187+
// Fallback to the first image if none have size information.
162188
return images[0].FileId
163189
}
164190

0 commit comments

Comments
 (0)