mirror of
https://git.sr.ht/~phw/scotty
synced 2025-04-18 19:19:28 +02:00
Support disc numbers
This commit is contained in:
parent
d810fc9cac
commit
0e3061e837
12 changed files with 32 additions and 0 deletions
|
@ -151,6 +151,7 @@ func (l Listening) ToListen() models.Listen {
|
||||||
ReleaseName: track.Album.Title,
|
ReleaseName: track.Album.Title,
|
||||||
ArtistNames: []string{track.Artist.Name},
|
ArtistNames: []string{track.Artist.Name},
|
||||||
TrackNumber: track.Position,
|
TrackNumber: track.Position,
|
||||||
|
DiscNumber: track.DiscNumber,
|
||||||
RecordingMbid: models.MBID(track.RecordingMbid),
|
RecordingMbid: models.MBID(track.RecordingMbid),
|
||||||
ReleaseMbid: models.MBID(track.Album.ReleaseMbid),
|
ReleaseMbid: models.MBID(track.Album.ReleaseMbid),
|
||||||
ArtistMbids: []models.MBID{models.MBID(track.Artist.ArtistMbid)},
|
ArtistMbids: []models.MBID{models.MBID(track.Artist.ArtistMbid)},
|
||||||
|
@ -184,6 +185,7 @@ func (f FavoriteTrack) ToLove() models.Love {
|
||||||
ReleaseName: track.Album.Title,
|
ReleaseName: track.Album.Title,
|
||||||
ArtistNames: []string{track.Artist.Name},
|
ArtistNames: []string{track.Artist.Name},
|
||||||
TrackNumber: track.Position,
|
TrackNumber: track.Position,
|
||||||
|
DiscNumber: track.DiscNumber,
|
||||||
RecordingMbid: recordingMbid,
|
RecordingMbid: recordingMbid,
|
||||||
ReleaseMbid: models.MBID(track.Album.ReleaseMbid),
|
ReleaseMbid: models.MBID(track.Album.ReleaseMbid),
|
||||||
ArtistMbids: []models.MBID{models.MBID(track.Artist.ArtistMbid)},
|
ArtistMbids: []models.MBID{models.MBID(track.Artist.ArtistMbid)},
|
||||||
|
|
|
@ -70,6 +70,7 @@ func TestFunkwhaleListeningToListen(t *testing.T) {
|
||||||
assert.Equal(fwListen.Track.Album.Title, listen.ReleaseName)
|
assert.Equal(fwListen.Track.Album.Title, listen.ReleaseName)
|
||||||
assert.Equal([]string{fwListen.Track.Artist.Name}, listen.ArtistNames)
|
assert.Equal([]string{fwListen.Track.Artist.Name}, listen.ArtistNames)
|
||||||
assert.Equal(fwListen.Track.Position, listen.Track.TrackNumber)
|
assert.Equal(fwListen.Track.Position, listen.Track.TrackNumber)
|
||||||
|
assert.Equal(fwListen.Track.DiscNumber, listen.Track.DiscNumber)
|
||||||
assert.Equal(fwListen.Track.Tags, listen.Track.Tags)
|
assert.Equal(fwListen.Track.Tags, listen.Track.Tags)
|
||||||
// assert.Equal(backends.FunkwhaleClientName, listen.AdditionalInfo["disc_number"])
|
// assert.Equal(backends.FunkwhaleClientName, listen.AdditionalInfo["disc_number"])
|
||||||
assert.Equal(models.MBID(fwListen.Track.RecordingMbid), listen.RecordingMbid)
|
assert.Equal(models.MBID(fwListen.Track.RecordingMbid), listen.RecordingMbid)
|
||||||
|
@ -114,6 +115,7 @@ func TestFunkwhaleFavoriteTrackToLove(t *testing.T) {
|
||||||
assert.Equal(favorite.Track.Album.Title, love.ReleaseName)
|
assert.Equal(favorite.Track.Album.Title, love.ReleaseName)
|
||||||
assert.Equal([]string{favorite.Track.Artist.Name}, love.ArtistNames)
|
assert.Equal([]string{favorite.Track.Artist.Name}, love.ArtistNames)
|
||||||
assert.Equal(favorite.Track.Position, love.Track.TrackNumber)
|
assert.Equal(favorite.Track.Position, love.Track.TrackNumber)
|
||||||
|
assert.Equal(favorite.Track.DiscNumber, love.Track.DiscNumber)
|
||||||
assert.Equal(favorite.Track.Tags, love.Track.Tags)
|
assert.Equal(favorite.Track.Tags, love.Track.Tags)
|
||||||
assert.Equal(models.MBID(favorite.Track.RecordingMbid), love.RecordingMbid)
|
assert.Equal(models.MBID(favorite.Track.RecordingMbid), love.RecordingMbid)
|
||||||
assert.Equal(models.MBID(favorite.Track.RecordingMbid), love.Track.RecordingMbid)
|
assert.Equal(models.MBID(favorite.Track.RecordingMbid), love.Track.RecordingMbid)
|
||||||
|
|
|
@ -207,6 +207,7 @@ func (lbListen Listen) ToListen() models.Listen {
|
||||||
ArtistNames: []string{track.ArtistName},
|
ArtistNames: []string{track.ArtistName},
|
||||||
Duration: track.Duration(),
|
Duration: track.Duration(),
|
||||||
TrackNumber: track.TrackNumber(),
|
TrackNumber: track.TrackNumber(),
|
||||||
|
DiscNumber: track.DiscNumber(),
|
||||||
RecordingMbid: models.MBID(track.RecordingMbid()),
|
RecordingMbid: models.MBID(track.RecordingMbid()),
|
||||||
ReleaseMbid: models.MBID(track.ReleaseMbid()),
|
ReleaseMbid: models.MBID(track.ReleaseMbid()),
|
||||||
ReleaseGroupMbid: models.MBID(track.ReleaseGroupMbid()),
|
ReleaseGroupMbid: models.MBID(track.ReleaseGroupMbid()),
|
||||||
|
|
|
@ -47,6 +47,7 @@ func TestListenBrainzListenToListen(t *testing.T) {
|
||||||
"foo": "bar",
|
"foo": "bar",
|
||||||
"isrc": "DES561620801",
|
"isrc": "DES561620801",
|
||||||
"tracknumber": 5,
|
"tracknumber": 5,
|
||||||
|
"discnumber": 1,
|
||||||
"recording_mbid": "c0a1fc94-5f04-4a5f-bc09-e5de0c49cd12",
|
"recording_mbid": "c0a1fc94-5f04-4a5f-bc09-e5de0c49cd12",
|
||||||
"release_group_mbid": "80aca1ee-aa51-41be-9f75-024710d92ff4",
|
"release_group_mbid": "80aca1ee-aa51-41be-9f75-024710d92ff4",
|
||||||
"release_mbid": "d7f22677-9803-4d21-ba42-081b633a6f68",
|
"release_mbid": "d7f22677-9803-4d21-ba42-081b633a6f68",
|
||||||
|
@ -61,6 +62,7 @@ func TestListenBrainzListenToListen(t *testing.T) {
|
||||||
assert.Equal(t, lbListen.TrackMetadata.ReleaseName, listen.ReleaseName)
|
assert.Equal(t, lbListen.TrackMetadata.ReleaseName, listen.ReleaseName)
|
||||||
assert.Equal(t, []string{lbListen.TrackMetadata.ArtistName}, listen.ArtistNames)
|
assert.Equal(t, []string{lbListen.TrackMetadata.ArtistName}, listen.ArtistNames)
|
||||||
assert.Equal(t, 5, listen.TrackNumber)
|
assert.Equal(t, 5, listen.TrackNumber)
|
||||||
|
assert.Equal(t, 1, listen.DiscNumber)
|
||||||
assert.Equal(t, models.MBID("c0a1fc94-5f04-4a5f-bc09-e5de0c49cd12"), listen.RecordingMbid)
|
assert.Equal(t, models.MBID("c0a1fc94-5f04-4a5f-bc09-e5de0c49cd12"), listen.RecordingMbid)
|
||||||
assert.Equal(t, models.MBID("d7f22677-9803-4d21-ba42-081b633a6f68"), listen.ReleaseMbid)
|
assert.Equal(t, models.MBID("d7f22677-9803-4d21-ba42-081b633a6f68"), listen.ReleaseMbid)
|
||||||
assert.Equal(t, models.MBID("80aca1ee-aa51-41be-9f75-024710d92ff4"), listen.ReleaseGroupMbid)
|
assert.Equal(t, models.MBID("80aca1ee-aa51-41be-9f75-024710d92ff4"), listen.ReleaseGroupMbid)
|
||||||
|
|
|
@ -136,6 +136,14 @@ func (t Track) TrackNumber() int {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t Track) DiscNumber() int {
|
||||||
|
value, ok := tryGetInteger[int](t.AdditionalInfo, "discnumber")
|
||||||
|
if ok {
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
func (t Track) Isrc() string {
|
func (t Track) Isrc() string {
|
||||||
return tryGetValueOrEmpty[string](t.AdditionalInfo, "isrc")
|
return tryGetValueOrEmpty[string](t.AdditionalInfo, "isrc")
|
||||||
}
|
}
|
||||||
|
|
|
@ -111,6 +111,16 @@ func TestTrackTrackNumber(t *testing.T) {
|
||||||
assert.Equal(t, expected, track.TrackNumber())
|
assert.Equal(t, expected, track.TrackNumber())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestTrackDiscNumber(t *testing.T) {
|
||||||
|
expected := 7
|
||||||
|
track := listenbrainz.Track{
|
||||||
|
AdditionalInfo: map[string]any{
|
||||||
|
"discnumber": expected,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
assert.Equal(t, expected, track.DiscNumber())
|
||||||
|
}
|
||||||
|
|
||||||
func TestTrackTrackNumberString(t *testing.T) {
|
func TestTrackTrackNumberString(t *testing.T) {
|
||||||
track := listenbrainz.Track{
|
track := listenbrainz.Track{
|
||||||
AdditionalInfo: map[string]any{
|
AdditionalInfo: map[string]any{
|
||||||
|
|
|
@ -45,6 +45,8 @@ func TestRecentlyPlayedResult(t *testing.T) {
|
||||||
require.Len(t, result.Items, 3)
|
require.Len(t, result.Items, 3)
|
||||||
track1 := result.Items[0].Track
|
track1 := result.Items[0].Track
|
||||||
assert.Equal("Evidence", track1.Name)
|
assert.Equal("Evidence", track1.Name)
|
||||||
|
assert.Equal(11, track1.TrackNumber)
|
||||||
|
assert.Equal(1, track1.DiscNumber)
|
||||||
assert.Equal("Viva Emptiness", track1.Album.Name)
|
assert.Equal("Viva Emptiness", track1.Album.Name)
|
||||||
require.Len(t, track1.Artists, 1)
|
require.Len(t, track1.Artists, 1)
|
||||||
assert.Equal("Katatonia", track1.Artists[0].Name)
|
assert.Equal("Katatonia", track1.Artists[0].Name)
|
||||||
|
|
|
@ -221,6 +221,7 @@ func (t Track) ToTrack() models.Track {
|
||||||
ArtistNames: make([]string, 0, len(t.Artists)),
|
ArtistNames: make([]string, 0, len(t.Artists)),
|
||||||
Duration: time.Duration(t.DurationMs * int(time.Millisecond)),
|
Duration: time.Duration(t.DurationMs * int(time.Millisecond)),
|
||||||
TrackNumber: t.TrackNumber,
|
TrackNumber: t.TrackNumber,
|
||||||
|
DiscNumber: t.DiscNumber,
|
||||||
Isrc: t.ExternalIds.ISRC,
|
Isrc: t.ExternalIds.ISRC,
|
||||||
AdditionalInfo: map[string]any{},
|
AdditionalInfo: map[string]any{},
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,6 +42,7 @@ func TestSpotifyListenToListen(t *testing.T) {
|
||||||
assert.Equal(t, "Here Now, There Then", listen.ReleaseName)
|
assert.Equal(t, "Here Now, There Then", listen.ReleaseName)
|
||||||
assert.Equal(t, []string{"Dool"}, listen.ArtistNames)
|
assert.Equal(t, []string{"Dool"}, listen.ArtistNames)
|
||||||
assert.Equal(t, 5, listen.TrackNumber)
|
assert.Equal(t, 5, listen.TrackNumber)
|
||||||
|
assert.Equal(t, 1, listen.DiscNumber)
|
||||||
assert.Equal(t, "DES561620801", listen.Isrc)
|
assert.Equal(t, "DES561620801", listen.Isrc)
|
||||||
info := listen.AdditionalInfo
|
info := listen.AdditionalInfo
|
||||||
assert.Equal(t, "spotify.com", info["music_service"])
|
assert.Equal(t, "spotify.com", info["music_service"])
|
||||||
|
|
|
@ -87,6 +87,7 @@ func SongToLove(song subsonic.Child, username string) models.Love {
|
||||||
ReleaseName: song.Album,
|
ReleaseName: song.Album,
|
||||||
ArtistNames: []string{song.Artist},
|
ArtistNames: []string{song.Artist},
|
||||||
TrackNumber: song.Track,
|
TrackNumber: song.Track,
|
||||||
|
DiscNumber: song.DiscNumber,
|
||||||
Tags: []string{song.Genre},
|
Tags: []string{song.Genre},
|
||||||
AdditionalInfo: map[string]any{},
|
AdditionalInfo: map[string]any{},
|
||||||
Duration: time.Duration(song.Duration * int(time.Second)),
|
Duration: time.Duration(song.Duration * int(time.Second)),
|
||||||
|
|
|
@ -55,5 +55,6 @@ func TestSongToLove(t *testing.T) {
|
||||||
assert.Equal(song.Album, love.ReleaseName)
|
assert.Equal(song.Album, love.ReleaseName)
|
||||||
assert.Equal([]string{song.Artist}, love.ArtistNames)
|
assert.Equal([]string{song.Artist}, love.ArtistNames)
|
||||||
assert.Equal(song.Track, love.Track.TrackNumber)
|
assert.Equal(song.Track, love.Track.TrackNumber)
|
||||||
|
assert.Equal(song.DiscNumber, love.Track.DiscNumber)
|
||||||
assert.Equal([]string{song.Genre}, love.Track.Tags)
|
assert.Equal([]string{song.Genre}, love.Track.Tags)
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,6 +35,7 @@ type Track struct {
|
||||||
ReleaseName string
|
ReleaseName string
|
||||||
ArtistNames []string
|
ArtistNames []string
|
||||||
TrackNumber int
|
TrackNumber int
|
||||||
|
DiscNumber int
|
||||||
Duration time.Duration
|
Duration time.Duration
|
||||||
Isrc string
|
Isrc string
|
||||||
RecordingMbid MBID
|
RecordingMbid MBID
|
||||||
|
|
Loading…
Add table
Reference in a new issue