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) First(track, id.Value)
// clients will provide time in miliseconds, so use that or // clients will provide time in miliseconds, so use that or
// instead convert UnixNano to miliseconds // 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) optSubmission := params.GetOrBool("submission", true)
var scrobbleErrs multierr.Err var scrobbleErrs multierr.Err
for _, scrobbler := range c.Scrobblers { 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) scrobbleErrs.Add(err)
} }
} }

View File

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

View File

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

View File

@@ -1,9 +1,11 @@
package scrobble package scrobble
import ( import (
"time"
"go.senan.xyz/gonic/server/db" "go.senan.xyz/gonic/server/db"
) )
type Scrobbler interface { 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
} }