From c31b3b8d1f4780f4211186ef745ed36d5fdebc3c Mon Sep 17 00:00:00 2001 From: sentriz Date: Wed, 13 Oct 2021 06:29:49 +0100 Subject: [PATCH] use time.Time in scrobbler interface --- server/ctrlsubsonic/handlers_common.go | 4 ++-- server/scrobble/lastfm/lastfm.go | 5 +++-- server/scrobble/listenbrainz/listenbrainz.go | 5 +++-- server/scrobble/scrobble.go | 4 +++- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/server/ctrlsubsonic/handlers_common.go b/server/ctrlsubsonic/handlers_common.go index e655752..167e61d 100644 --- a/server/ctrlsubsonic/handlers_common.go +++ b/server/ctrlsubsonic/handlers_common.go @@ -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) } } diff --git a/server/scrobble/lastfm/lastfm.go b/server/scrobble/lastfm/lastfm.go index f51e884..851929f 100644 --- a/server/scrobble/lastfm/lastfm.go +++ b/server/scrobble/lastfm/lastfm.go @@ -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") } diff --git a/server/scrobble/listenbrainz/listenbrainz.go b/server/scrobble/listenbrainz/listenbrainz.go index 6a22a53..2752f1a 100644 --- a/server/scrobble/listenbrainz/listenbrainz.go +++ b/server/scrobble/listenbrainz/listenbrainz.go @@ -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, diff --git a/server/scrobble/scrobble.go b/server/scrobble/scrobble.go index 431b374..6b47f2a 100644 --- a/server/scrobble/scrobble.go +++ b/server/scrobble/scrobble.go @@ -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 }