use time.Time in scrobbler interface
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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")
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user