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.
103 lines
1.8 KiB
Go
103 lines
1.8 KiB
Go
2 years ago
|
package settings
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"strconv"
|
||
|
|
||
|
"github.com/synctv-org/synctv/internal/db"
|
||
|
"github.com/synctv-org/synctv/internal/model"
|
||
|
)
|
||
|
|
||
|
type Int64Setting interface {
|
||
|
Setting
|
||
|
Set(int64) error
|
||
|
Get() int64
|
||
|
Default() int64
|
||
|
Parse(string) (int64, error)
|
||
|
Stringify(int64) string
|
||
|
}
|
||
|
|
||
|
var _ Int64Setting = (*Int64)(nil)
|
||
|
|
||
|
type Int64 struct {
|
||
|
setting
|
||
|
defaultValue int64
|
||
|
value int64
|
||
|
}
|
||
|
|
||
|
func NewInt64(name string, value int64, group model.SettingGroup) *Int64 {
|
||
|
i := &Int64{
|
||
|
setting: setting{
|
||
|
name: name,
|
||
|
group: group,
|
||
|
},
|
||
|
defaultValue: value,
|
||
|
value: value,
|
||
|
}
|
||
|
return i
|
||
|
}
|
||
|
|
||
|
func (i *Int64) Parse(value string) (int64, error) {
|
||
|
return strconv.ParseInt(value, 10, 64)
|
||
|
}
|
||
|
|
||
|
func (i *Int64) Stringify(value int64) string {
|
||
|
return strconv.FormatInt(value, 10)
|
||
|
}
|
||
|
|
||
|
func (i *Int64) Init(value string) error {
|
||
|
v, err := i.Parse(value)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
i.value = v
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (i *Int64) Default() int64 {
|
||
|
return i.defaultValue
|
||
|
}
|
||
|
|
||
|
func (i *Int64) DefaultRaw() string {
|
||
|
return strconv.FormatInt(i.defaultValue, 10)
|
||
|
}
|
||
|
|
||
|
func (i *Int64) DefaultInterface() any {
|
||
|
return i.defaultValue
|
||
|
}
|
||
|
|
||
|
func (i *Int64) Raw() string {
|
||
|
return i.Stringify(i.value)
|
||
|
}
|
||
|
|
||
|
func (i *Int64) SetRaw(value string) error {
|
||
|
err := i.Init(value)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
return db.UpdateSettingItemValue(i.Name(), i.Raw())
|
||
|
}
|
||
|
|
||
|
func (i *Int64) Set(value int64) error {
|
||
|
return i.SetRaw(strconv.FormatInt(value, 10))
|
||
|
}
|
||
|
|
||
|
func (i *Int64) Get() int64 {
|
||
|
return i.value
|
||
|
}
|
||
|
|
||
|
func (i *Int64) Interface() any {
|
||
|
return i.Get()
|
||
|
}
|
||
|
|
||
|
func newInt64Setting(k string, v int64, g model.SettingGroup) *Int64 {
|
||
|
_, loaded := Settings[k]
|
||
|
if loaded {
|
||
|
panic(fmt.Sprintf("setting %s already exists", k))
|
||
|
}
|
||
|
i := NewInt64(k, v, g)
|
||
|
Settings[k] = i
|
||
|
GroupSettings[g] = append(GroupSettings[g], i)
|
||
|
return i
|
||
|
}
|