Use MBID type from go.uploadedlobster.com/mbtypes

This commit is contained in:
Philipp Wolfer 2025-04-03 14:56:39 +02:00
parent 04eddfda33
commit 8fff19ceac
No known key found for this signature in database
GPG key ID: 8FDF744D4919943B
12 changed files with 82 additions and 188 deletions

View file

@ -20,6 +20,7 @@ import (
"sort"
"time"
"go.uploadedlobster.com/mbtypes"
"go.uploadedlobster.com/scotty/internal/config"
"go.uploadedlobster.com/scotty/internal/i18n"
"go.uploadedlobster.com/scotty/internal/models"
@ -188,7 +189,7 @@ func (f FavoriteTrack) AsLove() models.Love {
}
func (t Track) AsTrack() models.Track {
recordingMbid := models.MBID(t.RecordingMbid)
recordingMbid := mbtypes.MBID(t.RecordingMbid)
track := models.Track{
TrackName: t.Title,
ReleaseName: t.Album.Title,
@ -196,8 +197,8 @@ func (t Track) AsTrack() models.Track {
TrackNumber: t.Position,
DiscNumber: t.DiscNumber,
RecordingMbid: recordingMbid,
ReleaseMbid: models.MBID(t.Album.ReleaseMbid),
ArtistMbids: []models.MBID{models.MBID(t.Artist.ArtistMbid)},
ReleaseMbid: mbtypes.MBID(t.Album.ReleaseMbid),
ArtistMbids: []mbtypes.MBID{mbtypes.MBID(t.Artist.ArtistMbid)},
Tags: t.Tags,
AdditionalInfo: map[string]any{
"media_player": FunkwhaleClientName,

View file

@ -23,9 +23,9 @@ import (
"github.com/spf13/viper"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.uploadedlobster.com/mbtypes"
"go.uploadedlobster.com/scotty/internal/backends/funkwhale"
"go.uploadedlobster.com/scotty/internal/config"
"go.uploadedlobster.com/scotty/internal/models"
)
func TestFromConfig(t *testing.T) {
@ -75,9 +75,9 @@ func TestFunkwhaleListeningAsListen(t *testing.T) {
assert.Equal(fwListen.Track.DiscNumber, listen.Track.DiscNumber)
assert.Equal(fwListen.Track.Tags, listen.Track.Tags)
// assert.Equal(backends.FunkwhaleClientName, listen.AdditionalInfo["disc_number"])
assert.Equal(models.MBID(fwListen.Track.RecordingMbid), listen.RecordingMbid)
assert.Equal(models.MBID(fwListen.Track.Album.ReleaseMbid), listen.ReleaseMbid)
assert.Equal(models.MBID(fwListen.Track.Artist.ArtistMbid), listen.ArtistMbids[0])
assert.Equal(mbtypes.MBID(fwListen.Track.RecordingMbid), listen.RecordingMbid)
assert.Equal(mbtypes.MBID(fwListen.Track.Album.ReleaseMbid), listen.ReleaseMbid)
assert.Equal(mbtypes.MBID(fwListen.Track.Artist.ArtistMbid), listen.ArtistMbids[0])
assert.Equal(funkwhale.FunkwhaleClientName, listen.AdditionalInfo["media_player"])
}
@ -119,10 +119,10 @@ func TestFunkwhaleFavoriteTrackAsLove(t *testing.T) {
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(models.MBID(favorite.Track.RecordingMbid), love.RecordingMbid)
assert.Equal(models.MBID(favorite.Track.RecordingMbid), love.Track.RecordingMbid)
assert.Equal(models.MBID(favorite.Track.Album.ReleaseMbid), love.ReleaseMbid)
assert.Equal(mbtypes.MBID(favorite.Track.RecordingMbid), love.RecordingMbid)
assert.Equal(mbtypes.MBID(favorite.Track.RecordingMbid), love.Track.RecordingMbid)
assert.Equal(mbtypes.MBID(favorite.Track.Album.ReleaseMbid), love.ReleaseMbid)
require.Len(t, love.Track.ArtistMbids, 1)
assert.Equal(models.MBID(favorite.Track.Artist.ArtistMbid), love.ArtistMbids[0])
assert.Equal(mbtypes.MBID(favorite.Track.Artist.ArtistMbid), love.ArtistMbids[0])
assert.Equal(funkwhale.FunkwhaleClientName, love.AdditionalInfo["media_player"])
}

View file

@ -23,6 +23,7 @@ import (
"time"
"github.com/shkh/lastfm-go/lastfm"
"go.uploadedlobster.com/mbtypes"
"go.uploadedlobster.com/scotty/internal/auth"
"go.uploadedlobster.com/scotty/internal/config"
"go.uploadedlobster.com/scotty/internal/i18n"
@ -140,16 +141,16 @@ out:
TrackName: scrobble.Name,
ArtistNames: []string{},
ReleaseName: scrobble.Album.Name,
RecordingMbid: models.MBID(scrobble.Mbid),
ArtistMbids: []models.MBID{},
ReleaseMbid: models.MBID(scrobble.Album.Mbid),
RecordingMbid: mbtypes.MBID(scrobble.Mbid),
ArtistMbids: []mbtypes.MBID{},
ReleaseMbid: mbtypes.MBID(scrobble.Album.Mbid),
},
}
if scrobble.Artist.Name != "" {
listen.Track.ArtistNames = []string{scrobble.Artist.Name}
}
if scrobble.Artist.Mbid != "" {
listen.Track.ArtistMbids = []models.MBID{models.MBID(scrobble.Artist.Mbid)}
listen.Track.ArtistMbids = []mbtypes.MBID{mbtypes.MBID(scrobble.Artist.Mbid)}
}
listens = append(listens, listen)
} else {
@ -294,12 +295,12 @@ out:
love := models.Love{
Created: time.Unix(timestamp, 0),
UserName: result.User,
RecordingMbid: models.MBID(track.Mbid),
RecordingMbid: mbtypes.MBID(track.Mbid),
Track: models.Track{
TrackName: track.Name,
ArtistNames: []string{track.Artist.Name},
RecordingMbid: models.MBID(track.Mbid),
ArtistMbids: []models.MBID{models.MBID(track.Artist.Mbid)},
RecordingMbid: mbtypes.MBID(track.Mbid),
ArtistMbids: []mbtypes.MBID{mbtypes.MBID(track.Artist.Mbid)},
AdditionalInfo: models.AdditionalInfo{
"lastfm_url": track.Url,
},

View file

@ -21,6 +21,7 @@ import (
"sort"
"time"
"go.uploadedlobster.com/mbtypes"
"go.uploadedlobster.com/scotty/internal/config"
"go.uploadedlobster.com/scotty/internal/i18n"
"go.uploadedlobster.com/scotty/internal/models"
@ -323,7 +324,7 @@ func (lbListen Listen) AsListen() models.Listen {
}
func (f Feedback) AsLove() models.Love {
recordingMbid := models.MBID(f.RecordingMbid)
recordingMbid := mbtypes.MBID(f.RecordingMbid)
track := f.TrackMetadata
if track == nil {
track = &Track{}
@ -350,16 +351,16 @@ func (t Track) AsTrack() models.Track {
Duration: t.Duration(),
TrackNumber: t.TrackNumber(),
DiscNumber: t.DiscNumber(),
RecordingMbid: models.MBID(t.RecordingMbid()),
ReleaseMbid: models.MBID(t.ReleaseMbid()),
ReleaseGroupMbid: models.MBID(t.ReleaseGroupMbid()),
RecordingMbid: mbtypes.MBID(t.RecordingMbid()),
ReleaseMbid: mbtypes.MBID(t.ReleaseMbid()),
ReleaseGroupMbid: mbtypes.MBID(t.ReleaseGroupMbid()),
ISRC: t.ISRC(),
AdditionalInfo: t.AdditionalInfo,
}
if t.MbidMapping != nil && len(track.ArtistMbids) == 0 {
for _, artistMbid := range t.MbidMapping.ArtistMbids {
track.ArtistMbids = append(track.ArtistMbids, models.MBID(artistMbid))
track.ArtistMbids = append(track.ArtistMbids, mbtypes.MBID(artistMbid))
}
}

View file

@ -23,9 +23,9 @@ import (
"github.com/spf13/viper"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.uploadedlobster.com/mbtypes"
"go.uploadedlobster.com/scotty/internal/backends/listenbrainz"
"go.uploadedlobster.com/scotty/internal/config"
"go.uploadedlobster.com/scotty/internal/models"
)
func TestFromConfig(t *testing.T) {
@ -65,9 +65,9 @@ func TestListenBrainzListenAsListen(t *testing.T) {
assert.Equal(t, []string{lbListen.TrackMetadata.ArtistName}, listen.ArtistNames)
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("d7f22677-9803-4d21-ba42-081b633a6f68"), listen.ReleaseMbid)
assert.Equal(t, models.MBID("80aca1ee-aa51-41be-9f75-024710d92ff4"), listen.ReleaseGroupMbid)
assert.Equal(t, mbtypes.MBID("c0a1fc94-5f04-4a5f-bc09-e5de0c49cd12"), listen.RecordingMbid)
assert.Equal(t, mbtypes.MBID("d7f22677-9803-4d21-ba42-081b633a6f68"), listen.ReleaseMbid)
assert.Equal(t, mbtypes.MBID("80aca1ee-aa51-41be-9f75-024710d92ff4"), listen.ReleaseGroupMbid)
assert.Equal(t, "DES561620801", listen.ISRC)
assert.Equal(t, lbListen.TrackMetadata.AdditionalInfo["foo"], listen.AdditionalInfo["foo"])
}
@ -99,11 +99,11 @@ func TestListenBrainzFeedbackAsLove(t *testing.T) {
assert.Equal(feedback.TrackMetadata.TrackName, love.TrackName)
assert.Equal(feedback.TrackMetadata.ReleaseName, love.ReleaseName)
assert.Equal([]string{feedback.TrackMetadata.ArtistName}, love.ArtistNames)
assert.Equal(models.MBID(recordingMbid), love.RecordingMbid)
assert.Equal(models.MBID(recordingMbid), love.Track.RecordingMbid)
assert.Equal(models.MBID(releaseMbid), love.Track.ReleaseMbid)
assert.Equal(mbtypes.MBID(recordingMbid), love.RecordingMbid)
assert.Equal(mbtypes.MBID(recordingMbid), love.Track.RecordingMbid)
assert.Equal(mbtypes.MBID(releaseMbid), love.Track.ReleaseMbid)
require.Len(t, love.Track.ArtistMbids, 1)
assert.Equal(models.MBID(artistMbid), love.Track.ArtistMbids[0])
assert.Equal(mbtypes.MBID(artistMbid), love.Track.ArtistMbids[0])
}
func TestListenBrainzPartialFeedbackAsLove(t *testing.T) {
@ -116,7 +116,7 @@ func TestListenBrainzPartialFeedbackAsLove(t *testing.T) {
love := feedback.AsLove()
assert := assert.New(t)
assert.Equal(time.Unix(1699859066, 0).Unix(), love.Created.Unix())
assert.Equal(models.MBID(recordingMbid), love.RecordingMbid)
assert.Equal(models.MBID(recordingMbid), love.Track.RecordingMbid)
assert.Equal(mbtypes.MBID(recordingMbid), love.RecordingMbid)
assert.Equal(mbtypes.MBID(recordingMbid), love.Track.RecordingMbid)
assert.Empty(love.Track.TrackName)
}

View file

@ -30,6 +30,7 @@ import (
"strings"
"time"
"go.uploadedlobster.com/mbtypes"
"go.uploadedlobster.com/scotty/internal/models"
)
@ -203,7 +204,7 @@ func rowToListen(row []string, client string) (models.Listen, error) {
}
if len(row) > 7 {
listen.Track.RecordingMbid = models.MBID(row[7])
listen.Track.RecordingMbid = mbtypes.MBID(row[7])
}
return listen, nil

View file

@ -30,6 +30,7 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.uploadedlobster.com/mbtypes"
"go.uploadedlobster.com/scotty/internal/backends/scrobblerlog"
"go.uploadedlobster.com/scotty/internal/models"
)
@ -60,10 +61,10 @@ func TestParser(t *testing.T) {
assert.Equal(time.Duration(306*time.Second), listen1.Duration)
assert.Equal("L", listen1.AdditionalInfo["rockbox_rating"])
assert.Equal(time.Unix(1260342084, 0), listen1.ListenedAt)
assert.Equal(models.MBID(""), listen1.RecordingMbid)
assert.Equal(mbtypes.MBID(""), listen1.RecordingMbid)
listen4 := result.Listens[3]
assert.Equal("S", listen4.AdditionalInfo["rockbox_rating"])
assert.Equal(models.MBID("385ba9e9-626d-4750-a607-58e541dca78e"), listen4.RecordingMbid)
assert.Equal(mbtypes.MBID("385ba9e9-626d-4750-a607-58e541dca78e"), listen4.RecordingMbid)
}
func TestParserExcludeSkipped(t *testing.T) {
@ -74,7 +75,7 @@ func TestParserExcludeSkipped(t *testing.T) {
assert.Len(result.Listens, 4)
listen4 := result.Listens[3]
assert.Equal("L", listen4.AdditionalInfo["rockbox_rating"])
assert.Equal(models.MBID("1262beaf-19f8-4534-b9ed-7eef9ca8e83f"), listen4.RecordingMbid)
assert.Equal(mbtypes.MBID("1262beaf-19f8-4534-b9ed-7eef9ca8e83f"), listen4.RecordingMbid)
}
func TestWrite(t *testing.T) {
@ -93,7 +94,7 @@ func TestWrite(t *testing.T) {
TrackName: "Reign",
TrackNumber: 1,
Duration: 271 * time.Second,
RecordingMbid: models.MBID("b59cf4e7-caee-4019-a844-79d2c58d4dff"),
RecordingMbid: mbtypes.MBID("b59cf4e7-caee-4019-a844-79d2c58d4dff"),
AdditionalInfo: models.AdditionalInfo{"rockbox_rating": "L"},
},
},

View file

@ -24,9 +24,10 @@ package models
import (
"strings"
"time"
"go.uploadedlobster.com/mbtypes"
)
type MBID string
type Entity string
const (
@ -44,11 +45,11 @@ type Track struct {
DiscNumber int
Duration time.Duration
ISRC string
RecordingMbid MBID
ReleaseMbid MBID
ReleaseGroupMbid MBID
ArtistMbids []MBID
WorkMbids []MBID
RecordingMbid mbtypes.MBID
ReleaseMbid mbtypes.MBID
ReleaseGroupMbid mbtypes.MBID
ArtistMbids []mbtypes.MBID
WorkMbids []mbtypes.MBID
Tags []string
AdditionalInfo AdditionalInfo
}
@ -110,8 +111,8 @@ type Love struct {
Track
Created time.Time
UserName string
RecordingMbid MBID
RecordingMsid MBID
RecordingMbid mbtypes.MBID
RecordingMsid mbtypes.MBID
}
type ListensList []Listen

View file

@ -28,6 +28,7 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.uploadedlobster.com/mbtypes"
"go.uploadedlobster.com/scotty/internal/models"
)
@ -44,11 +45,11 @@ func TestTrackArtistName(t *testing.T) {
func TestTrackFillAdditionalInfo(t *testing.T) {
track := models.Track{
RecordingMbid: models.MBID("c0a1fc94-5f04-4a5f-bc09-e5de0c49cd12"),
ReleaseGroupMbid: models.MBID("80aca1ee-aa51-41be-9f75-024710d92ff4"),
ReleaseMbid: models.MBID("aa1ea1ac-7ec4-4542-a494-105afbfe547d"),
ArtistMbids: []models.MBID{"24412926-c7bd-48e8-afad-8a285b42e131"},
WorkMbids: []models.MBID{"c0a1fc94-5f04-4a5f-bc09-e5de0c49cd12"},
RecordingMbid: mbtypes.MBID("c0a1fc94-5f04-4a5f-bc09-e5de0c49cd12"),
ReleaseGroupMbid: mbtypes.MBID("80aca1ee-aa51-41be-9f75-024710d92ff4"),
ReleaseMbid: mbtypes.MBID("aa1ea1ac-7ec4-4542-a494-105afbfe547d"),
ArtistMbids: []mbtypes.MBID{"24412926-c7bd-48e8-afad-8a285b42e131"},
WorkMbids: []mbtypes.MBID{"c0a1fc94-5f04-4a5f-bc09-e5de0c49cd12"},
TrackNumber: 5,
DiscNumber: 1,
Duration: time.Duration(413787 * time.Millisecond),

View file

@ -20,6 +20,7 @@ import (
"testing"
"github.com/stretchr/testify/assert"
"go.uploadedlobster.com/mbtypes"
"go.uploadedlobster.com/scotty/internal/models"
"go.uploadedlobster.com/scotty/internal/similarity"
)
@ -74,13 +75,13 @@ func TestCompareTracksSameMBID(t *testing.T) {
t1 := models.Track{
ArtistNames: []string{"Paradise Lost"},
TrackName: "Forever After",
RecordingMbid: models.MBID("2886d15c-09b0-43c6-af56-932f70dde164"),
RecordingMbid: mbtypes.MBID("2886d15c-09b0-43c6-af56-932f70dde164"),
}
t2 := models.Track{
ArtistNames: []string{"Paradise Lost"},
TrackName: "Forever Failure (radio edit)",
ReleaseName: "Draconian Times",
RecordingMbid: models.MBID("2886d15c-09b0-43c6-af56-932f70dde164"),
RecordingMbid: mbtypes.MBID("2886d15c-09b0-43c6-af56-932f70dde164"),
}
assert.Equal(t, 1.0, similarity.CompareTracks(t1, t2))
}