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.
synctv/internal/settings/int64.go

103 lines
1.8 KiB
Go

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
}