Log more playback/queue errors
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
DataHoarder 2022-07-31 22:34:25 +02:00
parent 05a8ed380a
commit 6b4b100719
Signed by: DataHoarder
SSH key fingerprint: SHA256:OLTRf6Fl87G52SiR7sWLGNzlJt4WOX+tfI2yxo0z7xk

61
api.go
View file

@ -3,6 +3,7 @@ package main
import ( import (
"bytes" "bytes"
"encoding/json" "encoding/json"
"errors"
"fmt" "fmt"
"git.gammaspectra.live/S.O.N.G/Kirika/audio/queue" "git.gammaspectra.live/S.O.N.G/Kirika/audio/queue"
"io" "io"
@ -36,15 +37,15 @@ func (a *API) Wait() {
a.wg.Wait() a.wg.Wait()
} }
func (a *API) getQueueEntryFromBody(body []byte) *QueueTrackEntry { func (a *API) getQueueEntryFromBody(body []byte) (*QueueTrackEntry, error) {
entry := &QueueTrackEntry{} entry := &QueueTrackEntry{}
err := json.Unmarshal(body, &entry.original) err := json.Unmarshal(body, &entry.original)
if err != nil { if err != nil {
return nil return nil, err
} }
err = json.Unmarshal(body, &entry.Metadata) err = json.Unmarshal(body, &entry.Metadata)
if err != nil { if err != nil {
return nil return nil, err
} }
var val interface{} var val interface{}
@ -62,30 +63,30 @@ func (a *API) getQueueEntryFromBody(body []byte) *QueueTrackEntry {
} }
if len(entry.Path) > 0 { if len(entry.Path) > 0 {
return entry return entry, nil
} }
return nil return nil, errors.New("could not create queue entry")
} }
func (a *API) getFallbackTrack() *QueueTrackEntry { func (a *API) getFallbackTrack() (*QueueTrackEntry, error) {
m := make(map[string]interface{}) m := make(map[string]interface{})
m["path"] = a.config.Queue.FallbackPath m["path"] = a.config.Queue.FallbackPath
return &QueueTrackEntry{ return &QueueTrackEntry{
Path: a.config.Queue.FallbackPath, Path: a.config.Queue.FallbackPath,
original: m, original: m,
} }, nil
} }
func (a *API) getRandomTrack() *QueueTrackEntry { func (a *API) getRandomTrack() (*QueueTrackEntry, error) {
response, err := http.DefaultClient.Get(a.config.Queue.RandomSongApi) response, err := http.DefaultClient.Get(a.config.Queue.RandomSongApi)
if err != nil { if err != nil {
return nil return nil, err
} }
defer response.Body.Close() defer response.Body.Close()
body, err := io.ReadAll(response.Body) body, err := io.ReadAll(response.Body)
if err != nil { if err != nil {
return nil return nil, err
} }
return a.getQueueEntryFromBody(body) return a.getQueueEntryFromBody(body)
@ -111,20 +112,28 @@ func (a *API) handleQueue() {
defer close(a.queue.QueueEmpty) defer close(a.queue.QueueEmpty)
//TODO: close properly //TODO: close properly
for { for {
if e := a.getRandomTrack(); e != nil { if e, err := a.getRandomTrack(); e != nil {
//preload //preload
if err := e.Load(); err != nil { if err = e.Load(); err != nil {
log.Printf("random track loading error for %s: \"%s\"", e.Path, err)
continue continue
} }
a.setNowRandom(e) a.setNowRandom(e)
a.queue.QueueEmpty <- e a.queue.QueueEmpty <- e
} else if e = a.getFallbackTrack(); e != nil { } else {
//preload log.Printf("random track error: \"%s\"", err)
if err := e.Load(); err != nil {
continue if e, err = a.getFallbackTrack(); e != nil {
//preload
if err = e.Load(); err != nil {
log.Printf("fallback track loading error for %s: \"%s\"", e.Path, err)
continue
}
a.setNowRandom(e)
a.queue.QueueEmpty <- e
} else {
log.Printf("fallback track error: \"%s\"", err)
} }
a.setNowRandom(e)
a.queue.QueueEmpty <- e
} }
} }
}() }()
@ -233,15 +242,19 @@ func (a *API) listen() {
if request.Method == "POST" { if request.Method == "POST" {
result := queueResultResponse{} result := queueResultResponse{}
if body, err := io.ReadAll(request.Body); err == nil { if body, err := io.ReadAll(request.Body); err == nil {
if e := a.getQueueEntryFromBody(body); e != nil { if e, err := a.getQueueEntryFromBody(body); e != nil {
if err = a.queue.AddTrack(e, false); err == nil { if err = a.queue.AddTrack(e, false); err == nil {
result.Success = true result.Success = true
result.QueueId = e.QueueIdentifier result.QueueId = e.QueueIdentifier
} else { } else {
resultErr := err.Error() resultErr := err.Error()
result.Reason = &resultErr result.Reason = &resultErr
log.Printf("track addition error: \"%s\"", err) log.Printf("track addition error for %s: \"%s\"", e.Path, err)
} }
} else {
resultErr := err.Error()
result.Reason = &resultErr
log.Printf("track addition error: \"%s\"", err)
} }
} }
@ -265,15 +278,19 @@ func (a *API) listen() {
if request.Method == "POST" { if request.Method == "POST" {
result := queueResultResponse{} result := queueResultResponse{}
if body, err := io.ReadAll(request.Body); err == nil { if body, err := io.ReadAll(request.Body); err == nil {
if e := a.getQueueEntryFromBody(body); e != nil { if e, err := a.getQueueEntryFromBody(body); e != nil {
if err = a.queue.AddTrack(e, true); err == nil { if err = a.queue.AddTrack(e, true); err == nil {
result.Success = true result.Success = true
result.QueueId = e.QueueIdentifier result.QueueId = e.QueueIdentifier
} else { } else {
resultErr := err.Error() resultErr := err.Error()
result.Reason = &resultErr result.Reason = &resultErr
log.Printf("track addition error: \"%s\"", err) log.Printf("track addition error for %s: \"%s\"", e.Path, err)
} }
} else {
resultErr := err.Error()
result.Reason = &resultErr
log.Printf("track addition error: \"%s\"", err)
} }
} }