diff --git a/listenbrainz/listenbrainz.go b/listenbrainz/listenbrainz.go index d28e354..61db7e5 100644 --- a/listenbrainz/listenbrainz.go +++ b/listenbrainz/listenbrainz.go @@ -47,6 +47,7 @@ func (c *Client) Scrobble(user db.User, track scrobble.Track, stamp time.Time, s AdditionalInfo: &AdditionalInfo{ TrackNumber: int(track.TrackNumber), RecordingMBID: track.MusicBrainzID, + ReleaseMBID: track.MusicBrainzReleaseID, Duration: int(track.Duration.Seconds()), SubmissionClient: gonic.Name, }, diff --git a/listenbrainz/listenbrainz_test.go b/listenbrainz/listenbrainz_test.go index bab5caf..f53fcb5 100644 --- a/listenbrainz/listenbrainz_test.go +++ b/listenbrainz/listenbrainz_test.go @@ -38,12 +38,13 @@ func TestScrobble(t *testing.T) { err := client.Scrobble( db.User{ListenBrainzURL: "https://listenbrainz.org", ListenBrainzToken: "token1"}, scrobble.Track{ - Track: "title", - Artist: "artist", - Album: "album", - TrackNumber: 1, - Duration: 242 * time.Second, - MusicBrainzID: "00000000-0000-0000-0000-000000000000", + Track: "title", + Artist: "artist", + Album: "album", + TrackNumber: 1, + Duration: 242 * time.Second, + MusicBrainzID: "00000000-0000-0000-0000-000000000000", + MusicBrainzReleaseID: "00000000-0000-0000-0000-000000000001", }, time.Unix(1683804525, 0), true, diff --git a/listenbrainz/model.go b/listenbrainz/model.go index 89ee918..0727404 100644 --- a/listenbrainz/model.go +++ b/listenbrainz/model.go @@ -12,6 +12,7 @@ type ( TrackNumber int `json:"tracknumber,omitempty"` TrackMBID string `json:"track_mbid,omitempty"` RecordingMBID string `json:"recording_mbid,omitempty"` + ReleaseMBID string `json:"release_mbid,omitempty"` Duration int `json:"duration,omitempty"` SubmissionClient string `json:"submission_client,omitempty"` } diff --git a/listenbrainz/testdata/submit_listens_request.json b/listenbrainz/testdata/submit_listens_request.json index d67703e..c69c2d0 100644 --- a/listenbrainz/testdata/submit_listens_request.json +++ b/listenbrainz/testdata/submit_listens_request.json @@ -8,6 +8,7 @@ "tracknumber": 1, "duration": 242, "recording_mbid": "00000000-0000-0000-0000-000000000000", + "release_mbid": "00000000-0000-0000-0000-000000000001", "submission_client": "gonic" }, "artist_name": "artist", diff --git a/scrobble/scrobble.go b/scrobble/scrobble.go index 8b8c9f6..6c53763 100644 --- a/scrobble/scrobble.go +++ b/scrobble/scrobble.go @@ -7,13 +7,14 @@ import ( ) type Track struct { - Track string - Artist string - Album string - AlbumArtist string - TrackNumber uint - Duration time.Duration - MusicBrainzID string + Track string + Artist string + Album string + AlbumArtist string + TrackNumber uint + Duration time.Duration + MusicBrainzID string + MusicBrainzReleaseID string } type Scrobbler interface { diff --git a/server/ctrlsubsonic/handlers_common.go b/server/ctrlsubsonic/handlers_common.go index 69c091d..ca9adb6 100644 --- a/server/ctrlsubsonic/handlers_common.go +++ b/server/ctrlsubsonic/handlers_common.go @@ -78,6 +78,9 @@ func (c *Controller) ServeScrobble(r *http.Request) *spec.Response { if _, err := uuid.Parse(track.TagBrainzID); err == nil { scrobbleTrack.MusicBrainzID = track.TagBrainzID } + if _, err := uuid.Parse(track.Album.TagBrainzID); err == nil { + scrobbleTrack.MusicBrainzReleaseID = track.Album.TagBrainzID + } if err := scrobbleStatsUpdateTrack(c.dbc, &track, user.ID, optStamp); err != nil { return spec.NewError(0, "error updating stats: %v", err)