add ReleaseTypes to the album model

This commit is contained in:
Drew Weymouth
2023-12-16 13:44:16 -08:00
parent becb34cd4a
commit 1521c0c4ba
5 changed files with 94 additions and 13 deletions
@@ -440,6 +440,7 @@ func fillAlbum(a *jellyfin.Album, album *mediaprovider.Album) {
album.TrackCount = a.ChildCount
album.Genres = a.Genres
album.Favorite = a.UserData.IsFavorite
album.ReleaseTypes = mediaprovider.ReleaseTypeAlbum
}
func (j *jellyfinMediaProvider) toPlaylist(p *jellyfin.Playlist) *mediaprovider.Playlist {
+41 -10
View File
@@ -1,16 +1,47 @@
package mediaprovider
// Bit field flag for the ReleaseTypes property
type ReleaseType = int32
// Bit field of release types
type ReleaseTypes = int32
// Set of possible release types
// Taken from Picard:
//
// (a) https://picard-docs.musicbrainz.org/en/config/options_releases.html
// (b) https://musicbrainz.org/doc/Release_Group/Type
const (
ReleaseTypeAlbum ReleaseType = 0x0001
ReleaseTypeAudiobook ReleaseType = 0x0002
ReleaseTypeAudioDrama ReleaseType = 0x0004
ReleaseTypeBroadcast ReleaseType = 0x0008
ReleaseTypeCompilation ReleaseType = 0x0010
ReleaseTypeDemo ReleaseType = 0x0020
ReleaseTypeDJMix ReleaseType = 0x0040
ReleaseTypeEP ReleaseType = 0x0080
ReleaseTypeFieldRecording ReleaseType = 0x0100
ReleaseTypeInterview ReleaseType = 0x0200
ReleaseTypeLive ReleaseType = 0x0400
ReleaseTypeMixtape ReleaseType = 0x0800
ReleaseTypeRemix ReleaseType = 0x1000
ReleaseTypeSingle ReleaseType = 0x2000
ReleaseTypeSoundtrack ReleaseType = 0x4000
ReleaseTypeSpokenWord ReleaseType = 0x8000
)
type Album struct {
ID string
CoverArtID string
Name string
Duration int
ArtistIDs []string
ArtistNames []string
Year int
Genres []string
TrackCount int
Favorite bool
ID string
CoverArtID string
Name string
Duration int
ArtistIDs []string
ArtistNames []string
Year int
Genres []string
TrackCount int
Favorite bool
ReleaseTypes ReleaseTypes
}
type AlbumWithTracks struct {
@@ -6,6 +6,7 @@ import (
"io"
"math"
"strconv"
"strings"
"sync"
"time"
@@ -404,6 +405,54 @@ func fillAlbum(subAlbum *subsonic.AlbumID3, album *mediaprovider.Album) {
album.TrackCount = subAlbum.SongCount
album.Genres = genres
album.Favorite = !subAlbum.Starred.IsZero()
album.ReleaseTypes = normalizeReleaseTypes(subAlbum.ReleaseTypes)
if subAlbum.IsCompilation {
album.ReleaseTypes |= mediaprovider.ReleaseTypeCompilation
}
}
func normalizeReleaseTypes(releaseTypes []string) mediaprovider.ReleaseTypes {
var mpReleaseTypes mediaprovider.ReleaseTypes
for _, t := range releaseTypes {
switch strings.ToLower(strings.ReplaceAll(t, " ", "")) {
case "album":
mpReleaseTypes |= mediaprovider.ReleaseTypeAlbum
case "audiobook":
mpReleaseTypes |= mediaprovider.ReleaseTypeAudiobook
case "audiodrama":
mpReleaseTypes |= mediaprovider.ReleaseTypeAudioDrama
case "broadcast":
mpReleaseTypes |= mediaprovider.ReleaseTypeBroadcast
case "compilation":
mpReleaseTypes |= mediaprovider.ReleaseTypeCompilation
case "demo":
mpReleaseTypes |= mediaprovider.ReleaseTypeDemo
case "djmix":
mpReleaseTypes |= mediaprovider.ReleaseTypeDJMix
case "ep":
mpReleaseTypes |= mediaprovider.ReleaseTypeEP
case "fieldrecording":
mpReleaseTypes |= mediaprovider.ReleaseTypeFieldRecording
case "interview":
mpReleaseTypes |= mediaprovider.ReleaseTypeInterview
case "live":
mpReleaseTypes |= mediaprovider.ReleaseTypeLive
case "mixtape":
mpReleaseTypes |= mediaprovider.ReleaseTypeMixtape
case "remix":
mpReleaseTypes |= mediaprovider.ReleaseTypeRemix
case "single":
mpReleaseTypes |= mediaprovider.ReleaseTypeSingle
case "soundtrack":
mpReleaseTypes |= mediaprovider.ReleaseTypeSoundtrack
case "spokenword":
mpReleaseTypes |= mediaprovider.ReleaseTypeSpokenWord
}
}
if mpReleaseTypes == 0 {
return mediaprovider.ReleaseTypeAlbum
}
return mpReleaseTypes
}
func toArtistFromID3(ar *subsonic.ArtistID3) *mediaprovider.Artist {