feat(scrobble): only send musicbrainz id if it's a valid uuid

since some people may have a non musicbrainz uuid in the tag's place. eg with the discogs/lastfm plugins for beets.io
This commit is contained in:
Alex McGrath
2022-12-08 17:34:24 +00:00
committed by Senan Kelly
parent 4280700621
commit 2bc3f31554
2 changed files with 16 additions and 2 deletions

View File

@@ -14,6 +14,7 @@ import (
"strconv" "strconv"
"time" "time"
"github.com/google/uuid"
"go.senan.xyz/gonic/db" "go.senan.xyz/gonic/db"
"go.senan.xyz/gonic/scrobble" "go.senan.xyz/gonic/scrobble"
) )
@@ -260,10 +261,15 @@ func (s *Scrobbler) Scrobble(user *db.User, track *db.Track, stamp time.Time, su
params.Add("track", track.TagTitle) params.Add("track", track.TagTitle)
params.Add("trackNumber", strconv.Itoa(track.TagTrackNumber)) params.Add("trackNumber", strconv.Itoa(track.TagTrackNumber))
params.Add("album", track.Album.TagTitle) params.Add("album", track.Album.TagTitle)
params.Add("mbid", track.TagBrainzID)
params.Add("albumArtist", track.Artist.Name) params.Add("albumArtist", track.Artist.Name)
params.Add("duration", strconv.Itoa(track.Length)) params.Add("duration", strconv.Itoa(track.Length))
params.Add("api_sig", getParamSignature(params, secret)) params.Add("api_sig", getParamSignature(params, secret))
// make sure we provide a valid uuid, since some users may have an incorrect mbid in their tags
if _, err := uuid.Parse(track.TagBrainzID); err == nil {
params.Add("mbid", track.TagBrainzID)
}
_, err = makeRequest("POST", params) _, err = makeRequest("POST", params)
return err return err
} }

View File

@@ -10,6 +10,7 @@ import (
"net/http/httputil" "net/http/httputil"
"time" "time"
"github.com/google/uuid"
"go.senan.xyz/gonic/db" "go.senan.xyz/gonic/db"
"go.senan.xyz/gonic/scrobble" "go.senan.xyz/gonic/scrobble"
) )
@@ -57,11 +58,18 @@ func (s *Scrobbler) Scrobble(user *db.User, track *db.Track, stamp time.Time, su
if user.ListenBrainzURL == "" || user.ListenBrainzToken == "" { if user.ListenBrainzURL == "" || user.ListenBrainzToken == "" {
return nil return nil
} }
// make sure we provide a valid uuid, since some users may have an incorrect mbid in their tags
var trackMBID string
if _, err := uuid.Parse(track.TagBrainzID); err == nil {
trackMBID = track.TagBrainzID
}
payload := &Payload{ payload := &Payload{
TrackMetadata: &TrackMetadata{ TrackMetadata: &TrackMetadata{
AdditionalInfo: &AdditionalInfo{ AdditionalInfo: &AdditionalInfo{
TrackNumber: track.TagTrackNumber, TrackNumber: track.TagTrackNumber,
RecordingMBID: track.TagBrainzID, RecordingMBID: trackMBID,
TrackLength: track.Length, TrackLength: track.Length,
}, },
ArtistName: track.TagTrackArtist, ArtistName: track.TagTrackArtist,