From 8ee357b0217eeeebbee954111e17e4d29ac09c91 Mon Sep 17 00:00:00 2001 From: sentriz Date: Sat, 8 Oct 2022 16:08:40 +0100 Subject: [PATCH] fix(listenbrainz): submit track recording ID instead of track ID closes #240 --- scanner/tags/tags.go | 6 ++++-- scrobble/listenbrainz/listenbrainz.go | 24 +++++++++++++----------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/scanner/tags/tags.go b/scanner/tags/tags.go index 1175d8d9..66b3180a 100644 --- a/scanner/tags/tags.go +++ b/scanner/tags/tags.go @@ -37,12 +37,14 @@ func (t *Tagger) firstInt(sep string, keys ...string) int { return 0 } +// https://picard-docs.musicbrainz.org/downloads/MusicBrainz_Picard_Tag_Map.html + func (t *Tagger) Title() string { return t.first("title") } -func (t *Tagger) BrainzID() string { return t.first("musicbrainz_trackid") } +func (t *Tagger) BrainzID() string { return t.first("musicbrainz_trackid") } // musicbrainz recording ID func (t *Tagger) Artist() string { return t.first("artist") } func (t *Tagger) Album() string { return t.first("album") } func (t *Tagger) AlbumArtist() string { return t.first("albumartist", "album artist") } -func (t *Tagger) AlbumBrainzID() string { return t.first("musicbrainz_albumid") } +func (t *Tagger) AlbumBrainzID() string { return t.first("musicbrainz_albumid") } // musicbrainz release ID func (t *Tagger) Genre() string { return t.first("genre") } func (t *Tagger) TrackNumber() int { return t.firstInt("/" /* eg. 5/12 */, "tracknumber") } func (t *Tagger) DiscNumber() int { return t.firstInt("/" /* eg. 1/2 */, "discnumber") } diff --git a/scrobble/listenbrainz/listenbrainz.go b/scrobble/listenbrainz/listenbrainz.go index 6f171674..b6ceb557 100644 --- a/scrobble/listenbrainz/listenbrainz.go +++ b/scrobble/listenbrainz/listenbrainz.go @@ -26,10 +26,17 @@ var ( ErrListenBrainz = errors.New("listenbrainz error") ) +// https://listenbrainz.readthedocs.io/en/latest/users/json.html#submission-json +type Payload struct { + ListenedAt int `json:"listened_at,omitempty"` + TrackMetadata *TrackMetadata `json:"track_metadata"` +} + type AdditionalInfo struct { - TrackNumber int `json:"tracknumber,omitempty"` - TrackMBID string `json:"track_mbid,omitempty"` - TrackLength int `json:"track_length,omitempty"` + TrackNumber int `json:"tracknumber,omitempty"` + TrackMBID string `json:"track_mbid,omitempty"` + RecordingMBID string `json:"recording_mbid,omitempty"` + TrackLength int `json:"track_length,omitempty"` } type TrackMetadata struct { @@ -39,11 +46,6 @@ type TrackMetadata struct { ReleaseName string `json:"release_name,omitempty"` } -type Payload struct { - ListenedAt int `json:"listened_at,omitempty"` - TrackMetadata *TrackMetadata `json:"track_metadata"` -} - type Scrobble struct { ListenType string `json:"listen_type,omitempty"` Payload []*Payload `json:"payload"` @@ -58,9 +60,9 @@ func (s *Scrobbler) Scrobble(user *db.User, track *db.Track, stamp time.Time, su payload := &Payload{ TrackMetadata: &TrackMetadata{ AdditionalInfo: &AdditionalInfo{ - TrackNumber: track.TagTrackNumber, - TrackMBID: track.TagBrainzID, - TrackLength: track.Length, + TrackNumber: track.TagTrackNumber, + RecordingMBID: track.TagBrainzID, + TrackLength: track.Length, }, ArtistName: track.TagTrackArtist, TrackName: track.TagTitle,