mirror of https://github.com/synctv-org/synctv
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
1.7 KiB
Go
102 lines
1.7 KiB
Go
1 year ago
|
package settings
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
|
||
|
"github.com/synctv-org/synctv/internal/db"
|
||
|
"github.com/synctv-org/synctv/internal/model"
|
||
|
)
|
||
|
|
||
|
type StringSetting interface {
|
||
|
Setting
|
||
|
Set(string) error
|
||
|
Get() string
|
||
|
Default() string
|
||
|
Parse(string) (string, error)
|
||
|
Stringify(string) string
|
||
|
}
|
||
|
|
||
|
var _ StringSetting = (*String)(nil)
|
||
|
|
||
|
type String struct {
|
||
|
setting
|
||
|
defaultValue string
|
||
|
value string
|
||
|
}
|
||
|
|
||
|
func NewString(name string, value string, group model.SettingGroup) *String {
|
||
|
s := &String{
|
||
|
setting: setting{
|
||
|
name: name,
|
||
|
group: group,
|
||
|
},
|
||
|
defaultValue: value,
|
||
|
value: value,
|
||
|
}
|
||
|
return s
|
||
|
}
|
||
|
|
||
|
func (s *String) Parse(value string) (string, error) {
|
||
|
return value, nil
|
||
|
}
|
||
|
|
||
|
func (s *String) Stringify(value string) string {
|
||
|
return value
|
||
|
}
|
||
|
|
||
|
func (s *String) Init(value string) error {
|
||
|
v, err := s.Parse(value)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
s.value = v
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (s *String) Default() string {
|
||
|
return s.defaultValue
|
||
|
}
|
||
|
|
||
|
func (s *String) DefaultRaw() string {
|
||
|
return s.defaultValue
|
||
|
}
|
||
|
|
||
|
func (s *String) DefaultInterface() any {
|
||
|
return s.Default()
|
||
|
}
|
||
|
|
||
|
func (s *String) Raw() string {
|
||
|
return s.Stringify(s.value)
|
||
|
}
|
||
|
|
||
|
func (s *String) SetRaw(value string) error {
|
||
|
err := s.Init(value)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
return db.UpdateSettingItemValue(s.Name(), s.Raw())
|
||
|
}
|
||
|
|
||
|
func (s *String) Set(value string) error {
|
||
|
return s.SetRaw(value)
|
||
|
}
|
||
|
|
||
|
func (s *String) Get() string {
|
||
|
return s.value
|
||
|
}
|
||
|
|
||
|
func (s *String) Interface() any {
|
||
|
return s.Get()
|
||
|
}
|
||
|
|
||
|
func newStringSetting(k string, v string, g model.SettingGroup) *String {
|
||
|
_, loaded := Settings[k]
|
||
|
if loaded {
|
||
|
panic(fmt.Sprintf("setting %s already exists", k))
|
||
|
}
|
||
|
s := NewString(k, v, g)
|
||
|
Settings[k] = s
|
||
|
GroupSettings[g] = append(GroupSettings[g], s)
|
||
|
return s
|
||
|
}
|