mirror of https://github.com/synctv-org/synctv
Refector: setting
parent
20ca7352b5
commit
12b90a15f2
@ -1,47 +0,0 @@
|
||||
package setting
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/synctv-org/synctv/internal/bootstrap"
|
||||
"github.com/synctv-org/synctv/internal/settings"
|
||||
)
|
||||
|
||||
var FixCmd = &cobra.Command{
|
||||
Use: "fix",
|
||||
Short: "fix setting",
|
||||
Long: `fix setting`,
|
||||
PersistentPreRunE: func(cmd *cobra.Command, args []string) error {
|
||||
return bootstrap.New(bootstrap.WithContext(cmd.Context())).Add(
|
||||
bootstrap.InitDiscardLog,
|
||||
bootstrap.InitConfig,
|
||||
bootstrap.InitDatabase,
|
||||
bootstrap.InitSetting,
|
||||
).Run()
|
||||
},
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
count := 0
|
||||
errorCount := 0
|
||||
for k, s := range settings.Settings {
|
||||
_, err := s.Interface()
|
||||
if err != nil {
|
||||
fmt.Printf("setting %s, interface error: %v\n", k, err)
|
||||
err = s.SetRaw(s.DefaultRaw())
|
||||
if err != nil {
|
||||
errorCount++
|
||||
fmt.Printf("setting %s fix error: %v\n", k, err)
|
||||
} else {
|
||||
count++
|
||||
fmt.Printf("setting %s fix success\n", k)
|
||||
}
|
||||
}
|
||||
}
|
||||
fmt.Printf("fix success: %d, fix error: %d\n", count, errorCount)
|
||||
return nil
|
||||
},
|
||||
}
|
||||
|
||||
func init() {
|
||||
SettingCmd.AddCommand(FixCmd)
|
||||
}
|
@ -1,13 +0,0 @@
|
||||
package conf
|
||||
|
||||
type RoomConfig struct {
|
||||
MustPassword bool `yaml:"must_password" hc:"must input password to create room" env:"ROOM_MUST_PASSWORD"`
|
||||
TTL string `yaml:"ttl" hc:"set how long the room will be inactive before the memory will be reclaimed"`
|
||||
}
|
||||
|
||||
func DefaultRoomConfig() RoomConfig {
|
||||
return RoomConfig{
|
||||
MustPassword: false,
|
||||
TTL: "48h",
|
||||
}
|
||||
}
|
@ -0,0 +1,102 @@
|
||||
package settings
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
|
||||
"github.com/synctv-org/synctv/internal/db"
|
||||
"github.com/synctv-org/synctv/internal/model"
|
||||
)
|
||||
|
||||
type Float64Setting interface {
|
||||
Setting
|
||||
Set(float64) error
|
||||
Get() float64
|
||||
Default() float64
|
||||
Parse(string) (float64, error)
|
||||
Stringify(float64) string
|
||||
}
|
||||
|
||||
var _ Float64Setting = (*Float64)(nil)
|
||||
|
||||
type Float64 struct {
|
||||
setting
|
||||
defaultValue float64
|
||||
value float64
|
||||
}
|
||||
|
||||
func NewFloat64(name string, value float64, group model.SettingGroup) *Float64 {
|
||||
f := &Float64{
|
||||
setting: setting{
|
||||
name: name,
|
||||
group: group,
|
||||
},
|
||||
defaultValue: value,
|
||||
value: value,
|
||||
}
|
||||
return f
|
||||
}
|
||||
|
||||
func (f *Float64) Parse(value string) (float64, error) {
|
||||
return strconv.ParseFloat(value, 64)
|
||||
}
|
||||
|
||||
func (f *Float64) Stringify(value float64) string {
|
||||
return strconv.FormatFloat(value, 'f', -1, 64)
|
||||
}
|
||||
|
||||
func (f *Float64) Init(value string) error {
|
||||
v, err := f.Parse(value)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
f.value = v
|
||||
return nil
|
||||
}
|
||||
|
||||
func (f *Float64) Raw() string {
|
||||
return f.Stringify(f.value)
|
||||
}
|
||||
|
||||
func (f *Float64) Default() float64 {
|
||||
return f.defaultValue
|
||||
}
|
||||
|
||||
func (f *Float64) DefaultRaw() string {
|
||||
return f.Stringify(f.defaultValue)
|
||||
}
|
||||
|
||||
func (f *Float64) DefaultInterface() any {
|
||||
return f.Default()
|
||||
}
|
||||
|
||||
func (f *Float64) SetRaw(value string) error {
|
||||
err := f.Init(value)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return db.UpdateSettingItemValue(f.Name(), f.Raw())
|
||||
}
|
||||
|
||||
func (f *Float64) Set(value float64) error {
|
||||
return f.SetRaw(f.Stringify(value))
|
||||
}
|
||||
|
||||
func (f *Float64) Get() float64 {
|
||||
return f.value
|
||||
}
|
||||
|
||||
func (f *Float64) Interface() any {
|
||||
return f.Get()
|
||||
}
|
||||
|
||||
func newFloat64Setting(k string, v float64, g model.SettingGroup) *Float64 {
|
||||
_, loaded := Settings[k]
|
||||
if loaded {
|
||||
panic(fmt.Sprintf("setting %s already exists", k))
|
||||
}
|
||||
f := NewFloat64(k, v, g)
|
||||
Settings[k] = f
|
||||
GroupSettings[g] = append(GroupSettings[g], f)
|
||||
return f
|
||||
}
|
@ -0,0 +1,102 @@
|
||||
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
|
||||
}
|
@ -0,0 +1,101 @@
|
||||
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
|
||||
}
|
Loading…
Reference in New Issue