fix: don't send listenbrainz playing_now and submitted_at at the same time

fixes #168
This commit is contained in:
sentriz
2021-11-06 15:55:00 +00:00
parent 4781a744ca
commit b07b9a8be6

View File

@@ -27,26 +27,26 @@ var (
) )
type AdditionalInfo struct { type AdditionalInfo struct {
TrackNumber int `json:"tracknumber"` TrackNumber int `json:"tracknumber,omitempty"`
TrackMBID string `json:"track_mbid"` TrackMBID string `json:"track_mbid,omitempty"`
TrackLength int `json:"track_length"` TrackLength int `json:"track_length,omitempty"`
} }
type TrackMetadata struct { type TrackMetadata struct {
AdditionalInfo AdditionalInfo `json:"additional_info"` AdditionalInfo *AdditionalInfo `json:"additional_info"`
ArtistName string `json:"artist_name"` ArtistName string `json:"artist_name,omitempty"`
TrackName string `json:"track_name"` TrackName string `json:"track_name,omitempty"`
ReleaseName string `json:"release_name"` ReleaseName string `json:"release_name,omitempty"`
} }
type Payload struct { type Payload struct {
ListenedAt int `json:"listened_at"` ListenedAt int `json:"listened_at,omitempty"`
TrackMetadata TrackMetadata `json:"track_metadata"` TrackMetadata *TrackMetadata `json:"track_metadata"`
} }
type Scrobble struct { type Scrobble struct {
ListenType string `json:"listen_type"` ListenType string `json:"listen_type,omitempty"`
Payload []Payload `json:"payload"` Payload []*Payload `json:"payload"`
} }
type Scrobbler struct{} type Scrobbler struct{}
@@ -55,10 +55,9 @@ 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
} }
payload := Payload{ payload := &Payload{
ListenedAt: int(stamp.Unix()), TrackMetadata: &TrackMetadata{
TrackMetadata: TrackMetadata{ AdditionalInfo: &AdditionalInfo{
AdditionalInfo: AdditionalInfo{
TrackNumber: track.TagTrackNumber, TrackNumber: track.TagTrackNumber,
TrackMBID: track.TagBrainzID, TrackMBID: track.TagBrainzID,
TrackLength: track.Length, TrackLength: track.Length,
@@ -69,10 +68,12 @@ func (s *Scrobbler) Scrobble(user *db.User, track *db.Track, stamp time.Time, su
}, },
} }
scrobble := Scrobble{ scrobble := Scrobble{
ListenType: listenTypeSingle, Payload: []*Payload{payload},
Payload: []Payload{payload},
} }
if !submission { if submission && len(scrobble.Payload) > 0 {
scrobble.ListenType = listenTypeSingle
scrobble.Payload[0].ListenedAt = int(stamp.Unix())
} else {
scrobble.ListenType = listenTypePlayingNow scrobble.ListenType = listenTypePlayingNow
} }
payloadBuf := bytes.Buffer{} payloadBuf := bytes.Buffer{}