photoprism/internal/search/geojson_result_viewer.go

43 lines
2.1 KiB
Go

package search
import (
"encoding/json"
"github.com/photoprism/photoprism/internal/entity"
"github.com/photoprism/photoprism/internal/thumb"
"github.com/photoprism/photoprism/internal/viewer"
)
// NewViewerResult creates a new photo viewer result.
func NewViewerResult(p GeoResult, contentUri, apiUri, previewToken, downloadToken string) viewer.Result {
return viewer.Result{
UID: p.PhotoUID,
Title: p.PhotoTitle,
Taken: p.TakenAtLocal,
Description: p.PhotoDescription,
Favorite: p.PhotoFavorite,
Playable: p.PhotoType == entity.TypeVideo || p.PhotoType == entity.TypeLive,
DownloadUrl: viewer.DownloadUrl(p.FileHash, apiUri, downloadToken),
OriginalW: p.FileWidth,
OriginalH: p.FileHeight,
Fit720: viewer.NewThumb(p.FileWidth, p.FileHeight, p.FileHash, thumb.Sizes[thumb.Fit720], contentUri, previewToken),
Fit1280: viewer.NewThumb(p.FileWidth, p.FileHeight, p.FileHash, thumb.Sizes[thumb.Fit1280], contentUri, previewToken),
Fit1920: viewer.NewThumb(p.FileWidth, p.FileHeight, p.FileHash, thumb.Sizes[thumb.Fit1920], contentUri, previewToken),
Fit2048: viewer.NewThumb(p.FileWidth, p.FileHeight, p.FileHash, thumb.Sizes[thumb.Fit2048], contentUri, previewToken),
Fit2560: viewer.NewThumb(p.FileWidth, p.FileHeight, p.FileHash, thumb.Sizes[thumb.Fit2560], contentUri, previewToken),
Fit3840: viewer.NewThumb(p.FileWidth, p.FileHeight, p.FileHash, thumb.Sizes[thumb.Fit3840], contentUri, previewToken),
Fit4096: viewer.NewThumb(p.FileWidth, p.FileHeight, p.FileHash, thumb.Sizes[thumb.Fit4096], contentUri, previewToken),
Fit7680: viewer.NewThumb(p.FileWidth, p.FileHeight, p.FileHash, thumb.Sizes[thumb.Fit7680], contentUri, previewToken),
}
}
// ViewerJSON returns the results as photo viewer JSON.
func (photos GeoResults) ViewerJSON(contentUri, apiUri, previewToken, downloadToken string) ([]byte, error) {
results := make(viewer.Results, 0, len(photos))
for _, p := range photos {
results = append(results, NewViewerResult(p, contentUri, apiUri, previewToken, downloadToken))
}
return json.Marshal(results)
}