navidrome/model/artwork_id.go

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

66 lines
1.3 KiB
Go
Raw Normal View History

2022-12-19 19:59:24 +01:00
package model
import (
"errors"
"fmt"
"strconv"
"strings"
"time"
)
type Kind struct{ prefix string }
var (
KindMediaFileArtwork = Kind{"mf"}
KindAlbumArtwork = Kind{"al"}
)
type ArtworkID struct {
Kind Kind
ID string
2022-12-19 23:07:29 +01:00
LastUpdate time.Time
2022-12-19 19:59:24 +01:00
}
func (id ArtworkID) String() string {
2022-12-19 21:34:21 +01:00
s := fmt.Sprintf("%s-%s", id.Kind.prefix, id.ID)
2022-12-19 23:07:29 +01:00
if id.LastUpdate.Unix() < 0 {
2022-12-19 21:34:21 +01:00
return s + "-0"
}
2022-12-19 23:07:29 +01:00
return fmt.Sprintf("%s-%x", s, id.LastUpdate.Unix())
2022-12-19 19:59:24 +01:00
}
func ParseArtworkID(id string) (ArtworkID, error) {
parts := strings.Split(id, "-")
if len(parts) != 3 {
return ArtworkID{}, errors.New("invalid artwork id")
}
lastUpdate, err := strconv.ParseInt(parts[2], 16, 64)
if err != nil {
return ArtworkID{}, err
}
if parts[0] != KindAlbumArtwork.prefix && parts[0] != KindMediaFileArtwork.prefix {
return ArtworkID{}, errors.New("invalid artwork kind")
}
return ArtworkID{
Kind: Kind{parts[0]},
ID: parts[1],
2022-12-19 23:07:29 +01:00
LastUpdate: time.Unix(lastUpdate, 0),
2022-12-19 19:59:24 +01:00
}, nil
}
func artworkIDFromAlbum(al Album) ArtworkID {
return ArtworkID{
Kind: KindAlbumArtwork,
ID: al.ID,
2022-12-19 23:07:29 +01:00
LastUpdate: al.UpdatedAt,
2022-12-19 19:59:24 +01:00
}
}
func artworkIDFromMediaFile(mf MediaFile) ArtworkID {
return ArtworkID{
Kind: KindMediaFileArtwork,
ID: mf.ID,
2022-12-19 23:07:29 +01:00
LastUpdate: mf.UpdatedAt,
2022-12-19 19:59:24 +01:00
}
}