mirror of
https://github.com/photoprism/photoprism.git
synced 2025-10-05 08:47:12 +08:00
62 lines
1.7 KiB
Go
62 lines
1.7 KiB
Go
package thumb
|
|
|
|
import (
|
|
"reflect"
|
|
)
|
|
|
|
// Viewer represents thumbnail URLs for the photo/video viewer.
|
|
type Viewer struct {
|
|
Fit720 *Thumb `json:"fit_720"`
|
|
Fit1280 *Thumb `json:"fit_1280"`
|
|
Fit1920 *Thumb `json:"fit_1920"`
|
|
Fit2560 *Thumb `json:"fit_2560"`
|
|
Fit4096 *Thumb `json:"fit_4096"`
|
|
Fit5120 *Thumb `json:"fit_5120"`
|
|
Fit7680 *Thumb `json:"fit_7680"`
|
|
}
|
|
|
|
// ViewerThumbs creates and returns a Viewer struct pointer with the required thumbnail URLs for the photo/video viewer.
|
|
func ViewerThumbs(fileWidth, fileHeight int, fileHash, contentUri, previewToken string) *Viewer {
|
|
thumbs := &Viewer{}
|
|
|
|
// Get Viewer struct fields.
|
|
fields := reflect.ValueOf(thumbs).Elem()
|
|
|
|
// Remember the maximum allowed size and the maximum actual size.
|
|
var maxSize = MaxSize()
|
|
var largestSize Size
|
|
|
|
// Iterate through all Viewer struct fields and set the best matching thumb size.
|
|
for i := 0; i < fields.NumField(); i++ {
|
|
thumb := fields.Field(i)
|
|
|
|
// For simplicity, JSON value name is the same as the thumbnail size name.
|
|
size := Name(fields.Type().Field(i).Tag.Get("json"))
|
|
|
|
if size == "" {
|
|
continue
|
|
}
|
|
|
|
s := Sizes[size]
|
|
|
|
// Make sure not to process an invalid size.
|
|
if s.Name == "" {
|
|
continue
|
|
}
|
|
|
|
// Remember this as the largest size needed if the original size is smaller than the thumb size.
|
|
if largestSize.Name == "" && (s.Width >= fileWidth && s.Height >= fileHeight || s.Width >= maxSize) {
|
|
largestSize = s
|
|
}
|
|
|
|
// Set the field value to the current size or the maximum size, if any.
|
|
if largestSize.Name != "" {
|
|
thumb.Set(reflect.ValueOf(New(fileWidth, fileHeight, fileHash, largestSize, contentUri, previewToken)))
|
|
} else {
|
|
thumb.Set(reflect.ValueOf(New(fileWidth, fileHeight, fileHash, s, contentUri, previewToken)))
|
|
}
|
|
}
|
|
|
|
return thumbs
|
|
}
|