create scrobbleopts
This commit is contained in:
@@ -55,15 +55,18 @@ func (c *Controller) ServeScrobble(r *http.Request) *spec.Response {
|
||||
Preload("Artist").
|
||||
First(track, id)
|
||||
// scrobble with above info
|
||||
opts := lastfm.ScrobbleOpts{
|
||||
Track: track,
|
||||
// clients will provide time in miliseconds, so use that or
|
||||
// instead convert UnixNano to miliseconds
|
||||
StampMili: params.GetIntOr("time", int(time.Now().UnixNano()/1e6)),
|
||||
Submission: params.GetOr("submission", "true") != "false",
|
||||
}
|
||||
err = lastfm.Scrobble(
|
||||
c.DB.GetSetting("lastfm_api_key"),
|
||||
c.DB.GetSetting("lastfm_secret"),
|
||||
user.LastFMSession,
|
||||
track,
|
||||
// clients will provide time in miliseconds, so use that or
|
||||
// instead convert UnixNano to miliseconds
|
||||
params.GetIntOr("time", int(time.Now().UnixNano()/1e6)),
|
||||
params.GetOr("submission", "true") != "false",
|
||||
opts,
|
||||
)
|
||||
if err != nil {
|
||||
return spec.NewError(0, "error when submitting: %v", err)
|
||||
|
||||
@@ -23,42 +23,6 @@ var (
|
||||
}
|
||||
)
|
||||
|
||||
func GetSession(apiKey, secret, token string) (string, error) {
|
||||
params := url.Values{}
|
||||
params.Add("method", "auth.getSession")
|
||||
params.Add("api_key", apiKey)
|
||||
params.Add("token", token)
|
||||
params.Add("api_sig", getParamSignature(params, secret))
|
||||
resp, err := makeRequest("GET", params)
|
||||
if err != nil {
|
||||
return "", errors.Wrap(err, "making session GET")
|
||||
}
|
||||
return resp.Session.Key, nil
|
||||
}
|
||||
|
||||
func Scrobble(apiKey, secret, session string, track *model.Track,
|
||||
stampMili int, submission bool) error {
|
||||
params := url.Values{}
|
||||
if submission {
|
||||
params.Add("method", "track.Scrobble")
|
||||
// last.fm wants the timestamp in seconds
|
||||
params.Add("timestamp", strconv.Itoa(stampMili/1e3))
|
||||
} else {
|
||||
params.Add("method", "track.updateNowPlaying")
|
||||
}
|
||||
params.Add("api_key", apiKey)
|
||||
params.Add("sk", session)
|
||||
params.Add("artist", track.TagTrackArtist)
|
||||
params.Add("track", track.TagTitle)
|
||||
params.Add("trackNumber", strconv.Itoa(track.TagTrackNumber))
|
||||
params.Add("album", track.Album.TagTitle)
|
||||
params.Add("mbid", track.Album.TagBrainzID)
|
||||
params.Add("albumArtist", track.Artist.Name)
|
||||
params.Add("api_sig", getParamSignature(params, secret))
|
||||
_, err := makeRequest("POST", params)
|
||||
return err
|
||||
}
|
||||
|
||||
func getParamSignature(params url.Values, secret string) string {
|
||||
// the parameters must be in order before hashing
|
||||
paramKeys := make([]string, 0)
|
||||
@@ -95,3 +59,44 @@ func makeRequest(method string, params url.Values) (*LastFM, error) {
|
||||
}
|
||||
return lastfm, nil
|
||||
}
|
||||
|
||||
func GetSession(apiKey, secret, token string) (string, error) {
|
||||
params := url.Values{}
|
||||
params.Add("method", "auth.getSession")
|
||||
params.Add("api_key", apiKey)
|
||||
params.Add("token", token)
|
||||
params.Add("api_sig", getParamSignature(params, secret))
|
||||
resp, err := makeRequest("GET", params)
|
||||
if err != nil {
|
||||
return "", errors.Wrap(err, "making session GET")
|
||||
}
|
||||
return resp.Session.Key, nil
|
||||
}
|
||||
|
||||
type ScrobbleOpts struct {
|
||||
Track *model.Track
|
||||
StampMili int
|
||||
Submission bool
|
||||
}
|
||||
|
||||
func Scrobble(apiKey, secret, session string, opts ScrobbleOpts) error {
|
||||
params := url.Values{}
|
||||
if opts.Submission {
|
||||
params.Add("method", "track.Scrobble")
|
||||
// last.fm wants the timestamp in seconds
|
||||
params.Add("timestamp", strconv.Itoa(opts.StampMili/1e3))
|
||||
} else {
|
||||
params.Add("method", "track.updateNowPlaying")
|
||||
}
|
||||
params.Add("api_key", apiKey)
|
||||
params.Add("sk", session)
|
||||
params.Add("artist", opts.Track.TagTrackArtist)
|
||||
params.Add("track", opts.Track.TagTitle)
|
||||
params.Add("trackNumber", strconv.Itoa(opts.Track.TagTrackNumber))
|
||||
params.Add("album", opts.Track.Album.TagTitle)
|
||||
params.Add("mbid", opts.Track.Album.TagBrainzID)
|
||||
params.Add("albumArtist", opts.Track.Artist.Name)
|
||||
params.Add("api_sig", getParamSignature(params, secret))
|
||||
_, err := makeRequest("POST", params)
|
||||
return err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user