add some logging to ServeScrobble
This commit is contained in:
@@ -37,33 +37,34 @@ func (c *Controller) ServePing(r *http.Request) *spec.Response {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *Controller) ServeScrobble(r *http.Request) *spec.Response {
|
func (c *Controller) ServeScrobble(r *http.Request) *spec.Response {
|
||||||
|
user := r.Context().Value(CtxUser).(*db.User)
|
||||||
params := r.Context().Value(CtxParams).(params.Params)
|
params := r.Context().Value(CtxParams).(params.Params)
|
||||||
|
|
||||||
id, err := params.GetID("id")
|
id, err := params.GetID("id")
|
||||||
if err != nil || id.Type != specid.Track {
|
if err != nil || id.Type != specid.Track {
|
||||||
return spec.NewError(10, "please provide an valid `id` track parameter")
|
return spec.NewError(10, "please provide an valid `id` track parameter")
|
||||||
}
|
}
|
||||||
// fetch user to get lastfm session
|
|
||||||
user := r.Context().Value(CtxUser).(*db.User)
|
|
||||||
// fetch track for getting info to send to last.fm function
|
|
||||||
track := &db.Track{}
|
track := &db.Track{}
|
||||||
c.DB.
|
if err := c.DB.Preload("Album").Preload("Artist").First(track, id.Value).Error; err != nil {
|
||||||
Preload("Album").
|
return spec.NewError(0, "error finding track: %v", err)
|
||||||
Preload("Artist").
|
}
|
||||||
First(track, id.Value)
|
|
||||||
// clients will provide time in miliseconds, so use that or
|
|
||||||
// instead convert UnixNano to miliseconds
|
|
||||||
optStamp := params.GetOrTime("time", time.Now())
|
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, optStamp, optSubmission); err != nil {
|
if err := scrobbler.Scrobble(user, track, optStamp, optSubmission); err != nil {
|
||||||
scrobbleErrs.Add(err)
|
scrobbleErrs.Add(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if scrobbleErrs.Len() > 0 {
|
if scrobbleErrs.Len() > 0 {
|
||||||
log.Printf("error when submitting: %v", scrobbleErrs)
|
log.Printf("error when submitting: %v", scrobbleErrs)
|
||||||
return spec.NewError(0, "error when submitting: %v", scrobbleErrs)
|
return spec.NewError(0, "error when submitting: %v", scrobbleErrs)
|
||||||
}
|
}
|
||||||
|
|
||||||
return spec.NewResponse()
|
return spec.NewResponse()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -88,9 +89,10 @@ func (c *Controller) ServeStartScan(r *http.Request) *spec.Response {
|
|||||||
|
|
||||||
func (c *Controller) ServeGetScanStatus(r *http.Request) *spec.Response {
|
func (c *Controller) ServeGetScanStatus(r *http.Request) *spec.Response {
|
||||||
var trackCount int
|
var trackCount int
|
||||||
c.DB.
|
if err := c.DB.Model(db.Track{}).Count(&trackCount).Error; err != nil {
|
||||||
Model(db.Track{}).
|
return spec.NewError(0, "error finding track count: %v", err)
|
||||||
Count(&trackCount)
|
}
|
||||||
|
|
||||||
sub := spec.NewResponse()
|
sub := spec.NewResponse()
|
||||||
sub.ScanStatus = &spec.ScanStatus{
|
sub.ScanStatus = &spec.ScanStatus{
|
||||||
Scanning: scanner.IsScanning(),
|
Scanning: scanner.IsScanning(),
|
||||||
@@ -103,6 +105,7 @@ func (c *Controller) ServeGetUser(r *http.Request) *spec.Response {
|
|||||||
user := r.Context().Value(CtxUser).(*db.User)
|
user := r.Context().Value(CtxUser).(*db.User)
|
||||||
hasLastFM := user.LastFMSession != ""
|
hasLastFM := user.LastFMSession != ""
|
||||||
hasListenBrainz := user.ListenBrainzToken != ""
|
hasListenBrainz := user.ListenBrainzToken != ""
|
||||||
|
|
||||||
sub := spec.NewResponse()
|
sub := spec.NewResponse()
|
||||||
sub.User = &spec.User{
|
sub.User = &spec.User{
|
||||||
Username: user.Name,
|
Username: user.Name,
|
||||||
|
|||||||
@@ -81,14 +81,17 @@ func (s *Scrobbler) Scrobble(user *db.User, track *db.Track, stamp time.Time, su
|
|||||||
authHeader := fmt.Sprintf("Token %s", user.ListenBrainzToken)
|
authHeader := fmt.Sprintf("Token %s", user.ListenBrainzToken)
|
||||||
req, _ := http.NewRequest(http.MethodPost, submitURL, &payloadBuf)
|
req, _ := http.NewRequest(http.MethodPost, submitURL, &payloadBuf)
|
||||||
req.Header.Add("Authorization", authHeader)
|
req.Header.Add("Authorization", authHeader)
|
||||||
res, err := http.DefaultClient.Do(req)
|
resp, err := http.DefaultClient.Do(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("http post: %w", err)
|
return fmt.Errorf("http post: %w", err)
|
||||||
}
|
}
|
||||||
if res.StatusCode == http.StatusUnauthorized {
|
defer resp.Body.Close()
|
||||||
return fmt.Errorf("unathorized error scrobbling to listenbrainz %w", ErrListenBrainz)
|
switch {
|
||||||
|
case resp.StatusCode == http.StatusUnauthorized:
|
||||||
|
return fmt.Errorf("unathorized: %w", ErrListenBrainz)
|
||||||
|
case resp.StatusCode >= 200:
|
||||||
|
return fmt.Errorf("non >= 400: %d: %w", resp.StatusCode, ErrListenBrainz)
|
||||||
}
|
}
|
||||||
res.Body.Close()
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user