use time.Time in scrobbler interface

This commit is contained in:
sentriz
2021-10-13 06:29:49 +01:00
parent df85d82137
commit c31b3b8d1f
4 changed files with 11 additions and 7 deletions

View File

@@ -52,11 +52,11 @@ func (c *Controller) ServeScrobble(r *http.Request) *spec.Response {
First(track, id.Value)
// clients will provide time in miliseconds, so use that or
// instead convert UnixNano to miliseconds
optStampMili := params.GetOrInt("time", int(time.Now().UnixNano()/1e6))
optStamp := params.GetOrTime("time", time.Now())
optSubmission := params.GetOrBool("submission", true)
var scrobbleErrs multierr.Err
for _, scrobbler := range c.Scrobblers {
if err := scrobbler.Scrobble(user, track, optStampMili, optSubmission); err != nil {
if err := scrobbler.Scrobble(user, track, optStamp, optSubmission); err != nil {
scrobbleErrs.Add(err)
}
}

View File

@@ -10,6 +10,7 @@ import (
"net/url"
"sort"
"strconv"
"time"
"go.senan.xyz/gonic/server/db"
"go.senan.xyz/gonic/server/scrobble"
@@ -141,7 +142,7 @@ type Scrobbler struct {
DB *db.DB
}
func (s *Scrobbler) Scrobble(user *db.User, track *db.Track, stampMili int, submission bool) error {
func (s *Scrobbler) Scrobble(user *db.User, track *db.Track, stamp time.Time, submission bool) error {
if user.LastFMSession == "" {
return nil
}
@@ -155,7 +156,7 @@ func (s *Scrobbler) Scrobble(user *db.User, track *db.Track, stampMili int, subm
if submission {
params.Add("method", "track.Scrobble")
// last.fm wants the timestamp in seconds
params.Add("timestamp", strconv.Itoa(stampMili/1e3))
params.Add("timestamp", strconv.Itoa(int(stamp.Unix())))
} else {
params.Add("method", "track.updateNowPlaying")
}

View File

@@ -6,6 +6,7 @@ import (
"errors"
"fmt"
"net/http"
"time"
"go.senan.xyz/gonic/server/db"
"go.senan.xyz/gonic/server/scrobble"
@@ -48,12 +49,12 @@ type Scrobble struct {
type Scrobbler struct{}
func (s *Scrobbler) Scrobble(user *db.User, track *db.Track, stampMili int, submission bool) error {
func (s *Scrobbler) Scrobble(user *db.User, track *db.Track, stamp time.Time, submission bool) error {
if user.ListenBrainzURL == "" || user.ListenBrainzToken == "" {
return nil
}
payload := Payload{
ListenedAt: stampMili / 1e3,
ListenedAt: int(stamp.Unix()),
TrackMetadata: TrackMetadata{
AdditionalInfo: AdditionalInfo{
TrackNumber: track.TagTrackNumber,

View File

@@ -1,9 +1,11 @@
package scrobble
import (
"time"
"go.senan.xyz/gonic/server/db"
)
type Scrobbler interface {
Scrobble(user *db.User, track *db.Track, stampMili int, submission bool) error
Scrobble(user *db.User, track *db.Track, stamp time.Time, submission bool) error
}