Use config.ServiceConfig across API

This commit is contained in:
Philipp Wolfer 2023-12-07 23:44:58 +01:00
parent 091b3c2f49
commit 9c363cc06d
No known key found for this signature in database
GPG key ID: 8FDF744D4919943B
27 changed files with 137 additions and 99 deletions

View file

@ -22,7 +22,6 @@ import (
"sort"
"strings"
"github.com/spf13/viper"
"go.uploadedlobster.com/scotty/internal/backends/deezer"
"go.uploadedlobster.com/scotty/internal/backends/dump"
"go.uploadedlobster.com/scotty/internal/backends/funkwhale"
@ -33,6 +32,7 @@ import (
"go.uploadedlobster.com/scotty/internal/backends/scrobblerlog"
"go.uploadedlobster.com/scotty/internal/backends/spotify"
"go.uploadedlobster.com/scotty/internal/backends/subsonic"
"go.uploadedlobster.com/scotty/internal/config"
"go.uploadedlobster.com/scotty/internal/models"
)
@ -62,8 +62,8 @@ func (l BackendList) Swap(i, j int) {
type Capability = string
func ResolveBackend[T interface{}](config *viper.Viper) (T, error) {
backendName, backend, err := backendWithConfig(config)
func ResolveBackend[T interface{}](config *config.ServiceConfig) (T, error) {
backend, err := backendWithConfig(config)
var result T
if err != nil {
return result, err
@ -72,7 +72,7 @@ func ResolveBackend[T interface{}](config *viper.Viper) (T, error) {
if implements {
result = backend.(T)
} else {
err = fmt.Errorf("backend %s does not implement %s", backendName, interfaceName)
err = fmt.Errorf("backend %s does not implement %s", config.Backend, interfaceName)
}
return result, err
@ -81,7 +81,7 @@ func ResolveBackend[T interface{}](config *viper.Viper) (T, error) {
func BackendByName(backendName string) (models.Backend, error) {
backendType := knownBackends[backendName]
if backendType == nil {
return nil, fmt.Errorf("unknown backend %s", backendName)
return nil, fmt.Errorf("unknown backend \"%s\"", backendName)
}
return backendType(), nil
}
@ -115,13 +115,12 @@ var knownBackends = map[string]func() models.Backend{
"subsonic": func() models.Backend { return &subsonic.SubsonicApiBackend{} },
}
func backendWithConfig(config *viper.Viper) (string, models.Backend, error) {
backendName := config.GetString("backend")
backend, err := BackendByName(backendName)
func backendWithConfig(config *config.ServiceConfig) (models.Backend, error) {
backend, err := BackendByName(config.Backend)
if err != nil {
return backendName, nil, err
return nil, err
}
return backendName, backend.FromConfig(config), nil
return backend.FromConfig(config), nil
}
func ImplementsInterface[T interface{}](backend *models.Backend) (bool, string) {