quintodrome/model/artwork_id.go

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

83 lines
1.4 KiB
Go
Raw Normal View History

2022-12-19 09:59:24 -09:00
package model
import (
"errors"
"fmt"
"strings"
2022-12-27 13:05:40 -09:00
"golang.org/x/exp/slices"
2022-12-19 09:59:24 -09:00
)
type Kind struct{ prefix string }
var (
KindMediaFileArtwork = Kind{"mf"}
KindAlbumArtwork = Kind{"al"}
2022-12-27 13:05:40 -09:00
KindPlaylistArtwork = Kind{"pl"}
2022-12-19 09:59:24 -09:00
)
2022-12-27 13:05:40 -09:00
var artworkKindList = []string{
KindAlbumArtwork.prefix,
KindMediaFileArtwork.prefix,
KindPlaylistArtwork.prefix,
}
2022-12-19 09:59:24 -09:00
type ArtworkID struct {
2022-12-27 07:36:23 -09:00
Kind Kind
ID string
2022-12-19 09:59:24 -09:00
}
func (id ArtworkID) String() string {
2022-12-27 12:36:13 -09:00
if id.ID == "" {
return ""
}
2022-12-27 07:36:23 -09:00
return fmt.Sprintf("%s-%s", id.Kind.prefix, id.ID)
2022-12-19 09:59:24 -09:00
}
func NewArtworkID(kind Kind, id string) ArtworkID {
return ArtworkID{kind, id}
}
2022-12-19 09:59:24 -09:00
func ParseArtworkID(id string) (ArtworkID, error) {
2022-12-27 13:05:40 -09:00
parts := strings.SplitN(id, "-", 2)
2022-12-27 07:36:23 -09:00
if len(parts) != 2 {
2022-12-19 09:59:24 -09:00
return ArtworkID{}, errors.New("invalid artwork id")
}
2022-12-27 13:05:40 -09:00
if !slices.Contains(artworkKindList, parts[0]) {
2022-12-19 09:59:24 -09:00
return ArtworkID{}, errors.New("invalid artwork kind")
}
return ArtworkID{
2022-12-27 07:36:23 -09:00
Kind: Kind{parts[0]},
ID: parts[1],
2022-12-19 09:59:24 -09:00
}, nil
}
2022-12-20 07:27:40 -09:00
func MustParseArtworkID(id string) ArtworkID {
artID, err := ParseArtworkID(id)
if err != nil {
panic(artID)
}
return artID
}
2022-12-19 09:59:24 -09:00
func artworkIDFromAlbum(al Album) ArtworkID {
return ArtworkID{
2022-12-27 07:36:23 -09:00
Kind: KindAlbumArtwork,
ID: al.ID,
2022-12-19 09:59:24 -09:00
}
}
func artworkIDFromMediaFile(mf MediaFile) ArtworkID {
return ArtworkID{
2022-12-27 07:36:23 -09:00
Kind: KindMediaFileArtwork,
ID: mf.ID,
2022-12-19 09:59:24 -09:00
}
}
2022-12-28 09:37:13 -09:00
func artworkIDFromPlaylist(pls Playlist) ArtworkID {
return ArtworkID{
Kind: KindPlaylistArtwork,
ID: pls.ID,
}
}