diff --git a/lastfm/lastfm.go b/lastfm/lastfm.go index ed269f4..1214f68 100644 --- a/lastfm/lastfm.go +++ b/lastfm/lastfm.go @@ -74,11 +74,12 @@ func GetSession(apiKey, secret, token string) (string, error) { } func Scrobble(apiKey, secret, session string, - track *model.Track, stamp int, submission bool) error { + track *model.Track, stampMili int, submission bool) error { params := url.Values{} if submission { params.Add("method", "track.Scrobble") - params.Add("timestamp", strconv.Itoa(stamp)) + // last.fm wants the timestamp in seconds + params.Add("timestamp", strconv.Itoa(stampMili / 1e3)) } else { params.Add("method", "track.updateNowPlaying") } diff --git a/server/handler/handler_sub_common.go b/server/handler/handler_sub_common.go index c8a93d6..99c0a10 100644 --- a/server/handler/handler_sub_common.go +++ b/server/handler/handler_sub_common.go @@ -103,19 +103,16 @@ func (c *Controller) Scrobble(w http.ResponseWriter, r *http.Request) { Preload("Album"). Preload("AlbumArtist"). First(&track, id) - // get time from args or use now - time := getIntParamOr(r, "time", int(time.Now().Unix())) - // get submission, where the default is true. we will - // check if it's false later - submission := getStrParamOr(r, "submission", "true") // scrobble with above info err = lastfm.Scrobble( c.GetSetting("lastfm_api_key"), c.GetSetting("lastfm_secret"), user.LastFMSession, &track, - time, - submission != "false", + // clients will provide time in miliseconds, so use that or + // instead convert UnixNano to miliseconds + getIntParamOr(r, "time", int(time.Now().UnixNano() / 1e6)), + getStrParamOr(r, "submission", "true") != "false", ) if err != nil { respondError(w, r, 0, fmt.Sprintf("error when submitting: %v", err))