navidrome/core/artwork/reader_mediafile.go

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

65 lines
1.4 KiB
Go
Raw Normal View History

2022-12-27 17:36:23 +01:00
package artwork
import (
"context"
2023-01-18 02:37:10 +01:00
"fmt"
2022-12-27 17:36:23 +01:00
"io"
"time"
2023-01-18 02:37:10 +01:00
"github.com/navidrome/navidrome/conf"
2022-12-27 17:36:23 +01:00
"github.com/navidrome/navidrome/model"
)
type mediafileArtworkReader struct {
2022-12-27 22:36:13 +01:00
cacheKey
2022-12-27 17:36:23 +01:00
a *artwork
mediafile model.MediaFile
album model.Album
}
func newMediafileArtworkReader(ctx context.Context, artwork *artwork, artID model.ArtworkID) (*mediafileArtworkReader, error) {
mf, err := artwork.ds.MediaFile(ctx).Get(artID.ID)
if err != nil {
return nil, err
}
al, err := artwork.ds.Album(ctx).Get(mf.AlbumID)
if err != nil {
return nil, err
}
a := &mediafileArtworkReader{
a: artwork,
mediafile: *mf,
album: *al,
}
2022-12-27 22:36:13 +01:00
a.cacheKey.artID = artID
if al.UpdatedAt.After(mf.UpdatedAt) {
a.cacheKey.lastUpdate = al.UpdatedAt
} else {
a.cacheKey.lastUpdate = mf.UpdatedAt
}
2022-12-27 17:36:23 +01:00
return a, nil
}
2023-01-18 02:37:10 +01:00
func (a *mediafileArtworkReader) Key() string {
return fmt.Sprintf(
"%s.%t",
a.cacheKey.Key(),
conf.Server.EnableMediaFileCoverArt,
)
}
2022-12-27 17:36:23 +01:00
func (a *mediafileArtworkReader) LastUpdated() time.Time {
return a.lastUpdate
2022-12-27 17:36:23 +01:00
}
func (a *mediafileArtworkReader) Reader(ctx context.Context) (io.ReadCloser, string, error) {
var ff []sourceFunc
if a.mediafile.CoverArtID().Kind == model.KindMediaFileArtwork {
ff = []sourceFunc{
fromTag(a.mediafile.Path),
fromFFmpegTag(ctx, a.a.ffmpeg, a.mediafile.Path),
}
}
ff = append(ff, fromAlbum(ctx, a.a, a.mediafile.AlbumCoverArtID()))
2022-12-28 16:19:52 +01:00
return selectImageReader(ctx, a.artID, ff...)
2022-12-27 17:36:23 +01:00
}