mirror of
https://github.com/navidrome/navidrome.git
synced 2026-01-03 06:15:22 +00:00
70 lines
2.0 KiB
Go
70 lines
2.0 KiB
Go
package plugins
|
|
|
|
import (
|
|
"context"
|
|
"sort"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"github.com/navidrome/navidrome/log"
|
|
"github.com/navidrome/navidrome/plugins/host"
|
|
)
|
|
|
|
// configServiceImpl implements the host.ConfigService interface.
|
|
// It provides access to plugin configuration values set in the Navidrome config file.
|
|
type configServiceImpl struct {
|
|
pluginName string
|
|
config map[string]string
|
|
}
|
|
|
|
// newConfigService creates a new configServiceImpl instance.
|
|
func newConfigService(pluginName string, config map[string]string) *configServiceImpl {
|
|
if config == nil {
|
|
config = make(map[string]string)
|
|
}
|
|
return &configServiceImpl{
|
|
pluginName: pluginName,
|
|
config: config,
|
|
}
|
|
}
|
|
|
|
// Get retrieves a configuration value as a string.
|
|
func (s *configServiceImpl) Get(ctx context.Context, key string) (string, bool) {
|
|
value, exists := s.config[key]
|
|
log.Trace(ctx, "Config.Get", "plugin", s.pluginName, "key", key, "exists", exists)
|
|
return value, exists
|
|
}
|
|
|
|
// GetInt retrieves a configuration value as an integer.
|
|
func (s *configServiceImpl) GetInt(ctx context.Context, key string) (int64, bool) {
|
|
value, exists := s.config[key]
|
|
if !exists {
|
|
log.Trace(ctx, "Config.GetInt", "plugin", s.pluginName, "key", key, "exists", false)
|
|
return 0, false
|
|
}
|
|
|
|
intValue, err := strconv.ParseInt(value, 10, 64)
|
|
if err != nil {
|
|
log.Trace(ctx, "Config.GetInt parse error", "plugin", s.pluginName, "key", key, "value", value, "error", err)
|
|
return 0, false
|
|
}
|
|
|
|
log.Trace(ctx, "Config.GetInt", "plugin", s.pluginName, "key", key, "value", intValue)
|
|
return intValue, true
|
|
}
|
|
|
|
// Keys returns configuration keys matching the given prefix.
|
|
func (s *configServiceImpl) Keys(ctx context.Context, prefix string) []string {
|
|
keys := make([]string, 0, len(s.config))
|
|
for k := range s.config {
|
|
if prefix == "" || strings.HasPrefix(k, prefix) {
|
|
keys = append(keys, k)
|
|
}
|
|
}
|
|
sort.Strings(keys)
|
|
log.Trace(ctx, "Config.Keys", "plugin", s.pluginName, "prefix", prefix, "keyCount", len(keys))
|
|
return keys
|
|
}
|
|
|
|
var _ host.ConfigService = (*configServiceImpl)(nil)
|