add ReleaseTypes to the album model
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user