feat(subsonic): update track play stats on scrobble instead of stream

This commit is contained in:
sentriz
2023-09-28 20:58:59 +01:00
parent 6b322e4a1f
commit e0b1603c00
10 changed files with 178 additions and 165 deletions

View File

@@ -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{

View File

@@ -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,
)