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