feat(subsonic): update track play stats on scrobble instead of stream
This commit is contained in:
@@ -10,8 +10,8 @@ import (
|
||||
"net/http/httputil"
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"go.senan.xyz/gonic/db"
|
||||
"go.senan.xyz/gonic/scrobble"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -36,27 +36,21 @@ func NewClientCustom(httpClient *http.Client) *Client {
|
||||
return &Client{httpClient: httpClient}
|
||||
}
|
||||
|
||||
func (c *Client) IsUserAuthenticated(user *db.User) bool {
|
||||
func (c *Client) IsUserAuthenticated(user db.User) bool {
|
||||
return user.ListenBrainzURL != "" && user.ListenBrainzToken != ""
|
||||
}
|
||||
|
||||
func (c *Client) Scrobble(user *db.User, track *db.Track, stamp time.Time, submission bool) error {
|
||||
// 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
|
||||
}
|
||||
|
||||
func (c *Client) Scrobble(user db.User, track scrobble.Track, stamp time.Time, submission bool) error {
|
||||
payload := &Payload{
|
||||
TrackMetadata: &TrackMetadata{
|
||||
AdditionalInfo: &AdditionalInfo{
|
||||
TrackNumber: track.TagTrackNumber,
|
||||
RecordingMBID: trackMBID,
|
||||
TrackLength: track.Length,
|
||||
TrackNumber: int(track.TrackNumber),
|
||||
RecordingMBID: track.MusicBrainzID,
|
||||
TrackLength: int(track.Duration.Seconds()),
|
||||
},
|
||||
ArtistName: track.TagTrackArtist,
|
||||
TrackName: track.TagTitle,
|
||||
ReleaseName: track.Album.TagTitle,
|
||||
ArtistName: track.Artist,
|
||||
TrackName: track.Track,
|
||||
ReleaseName: track.Album,
|
||||
},
|
||||
}
|
||||
scrobble := Scrobble{
|
||||
|
||||
@@ -14,6 +14,7 @@ import (
|
||||
"github.com/stretchr/testify/require"
|
||||
"go.senan.xyz/gonic/db"
|
||||
"go.senan.xyz/gonic/listenbrainz"
|
||||
"go.senan.xyz/gonic/scrobble"
|
||||
)
|
||||
|
||||
func TestScrobble(t *testing.T) {
|
||||
@@ -35,8 +36,8 @@ func TestScrobble(t *testing.T) {
|
||||
)
|
||||
|
||||
err := client.Scrobble(
|
||||
&db.User{ListenBrainzURL: "https://listenbrainz.org", ListenBrainzToken: "token1"},
|
||||
&db.Track{Album: &db.Album{TagTitle: "album"}, TagTitle: "title", TagTrackArtist: "artist", TagTrackNumber: 1},
|
||||
db.User{ListenBrainzURL: "https://listenbrainz.org", ListenBrainzToken: "token1"},
|
||||
scrobble.Track{Track: "title", Artist: "artist", Album: "album", TrackNumber: 1},
|
||||
time.Unix(1683804525, 0),
|
||||
true,
|
||||
)
|
||||
@@ -59,8 +60,8 @@ func TestScrobbleUnauthorized(t *testing.T) {
|
||||
)
|
||||
|
||||
err := client.Scrobble(
|
||||
&db.User{ListenBrainzURL: "https://listenbrainz.org", ListenBrainzToken: "token1"},
|
||||
&db.Track{Album: &db.Album{TagTitle: "album"}, TagTitle: "title", TagTrackArtist: "artist", TagTrackNumber: 1},
|
||||
db.User{ListenBrainzURL: "https://listenbrainz.org", ListenBrainzToken: "token1"},
|
||||
scrobble.Track{Track: "title", Artist: "artist", Album: "album", TrackNumber: 1},
|
||||
time.Now(),
|
||||
true,
|
||||
)
|
||||
@@ -83,8 +84,8 @@ func TestScrobbleServerError(t *testing.T) {
|
||||
)
|
||||
|
||||
err := client.Scrobble(
|
||||
&db.User{ListenBrainzURL: "https://listenbrainz.org", ListenBrainzToken: "token1"},
|
||||
&db.Track{Album: &db.Album{TagTitle: "album"}, TagTitle: "title", TagTrackArtist: "artist", TagTrackNumber: 1},
|
||||
db.User{ListenBrainzURL: "https://listenbrainz.org", ListenBrainzToken: "token1"},
|
||||
scrobble.Track{Track: "title", Artist: "artist", Album: "album", TrackNumber: 1},
|
||||
time.Now(),
|
||||
true,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user