server/lastfm: make a scrobbler interface and migrate lastfm to use it

This commit is contained in:
Alex McGrath
2021-01-08 13:09:42 +00:00
committed by Senan Kelly
parent cc93d61908
commit f4ff7e70f2
5 changed files with 38 additions and 12 deletions

View File

@@ -13,6 +13,7 @@ import (
"go.senan.xyz/gonic/server/ctrlsubsonic/params"
"go.senan.xyz/gonic/server/ctrlsubsonic/spec"
"go.senan.xyz/gonic/server/jukebox"
"go.senan.xyz/gonic/server/lastfm"
)
type CtxKey int
@@ -28,6 +29,7 @@ type Controller struct {
CachePath string
CoverCachePath string
Jukebox *jukebox.Jukebox
Scrobblers []lastfm.Scrobbler
}
type metaResponse struct {

View File

@@ -61,14 +61,16 @@ func (c *Controller) ServeScrobble(r *http.Request) *spec.Response {
StampMili: params.GetOrInt("time", int(time.Now().UnixNano()/1e6)),
Submission: params.GetOrBool("submission", true),
}
err = lastfm.Scrobble(
c.DB.GetSetting("lastfm_api_key"),
c.DB.GetSetting("lastfm_secret"),
user.LastFMSession,
opts,
)
if err != nil {
return spec.NewError(0, "error when submitting: %v", err)
scrobbleErrs := []error{}
for _, scrobbler := range c.Scrobblers {
if !scrobbler.Enabled(user) {
continue
}
err = scrobbler.Scrobble(user, opts)
scrobbleErrs = append(scrobbleErrs, err)
}
if len(scrobbleErrs) != 0 {
return spec.NewError(0, "error when submitting: %v", scrobbleErrs)
}
return spec.NewResponse()
}