mirror of https://github.com/synctv-org/synctv
Feat: add setting cmd
parent
ff6d2faa9f
commit
6d7ad91f13
@ -0,0 +1,47 @@
|
||||
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.SetString(s.DefaultString())
|
||||
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)
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
package setting
|
||||
|
||||
import "github.com/spf13/cobra"
|
||||
|
||||
var SettingCmd = &cobra.Command{
|
||||
Use: "setting",
|
||||
Short: "setting",
|
||||
Long: `you must first shut down the server, otherwise the changes will not take effect.`,
|
||||
}
|
@ -0,0 +1,47 @@
|
||||
package setting
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/synctv-org/synctv/internal/bootstrap"
|
||||
"github.com/synctv-org/synctv/internal/model"
|
||||
"github.com/synctv-org/synctv/internal/settings"
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
var ShowCmd = &cobra.Command{
|
||||
Use: "show",
|
||||
Short: "show setting",
|
||||
Long: `show 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 {
|
||||
m := make(map[model.SettingGroup]map[string]any)
|
||||
for g, s := range settings.GroupSettings {
|
||||
if _, ok := m[g]; !ok {
|
||||
m[g] = make(map[string]any)
|
||||
}
|
||||
for _, v := range s {
|
||||
i, err := v.Interface()
|
||||
if err != nil {
|
||||
fmt.Printf("parse setting %s error: %v\ntry to fix setting\n", v.Name(), err)
|
||||
return nil
|
||||
}
|
||||
m[g][v.Name()] = i
|
||||
}
|
||||
}
|
||||
return yaml.NewEncoder(os.Stdout).Encode(m)
|
||||
},
|
||||
}
|
||||
|
||||
func init() {
|
||||
SettingCmd.AddCommand(ShowCmd)
|
||||
}
|
@ -1,90 +0,0 @@
|
||||
package setting
|
||||
|
||||
import (
|
||||
log "github.com/sirupsen/logrus"
|
||||
"github.com/synctv-org/synctv/internal/db"
|
||||
"github.com/synctv-org/synctv/internal/model"
|
||||
)
|
||||
|
||||
type BoolSetting interface {
|
||||
Setting
|
||||
Set(bool) error
|
||||
Get() (bool, error)
|
||||
}
|
||||
|
||||
type Bool struct {
|
||||
name string
|
||||
value string
|
||||
group model.SettingGroup
|
||||
}
|
||||
|
||||
func NewBool(name, value string, group model.SettingGroup) *Bool {
|
||||
return &Bool{
|
||||
name: name,
|
||||
value: value,
|
||||
group: group,
|
||||
}
|
||||
}
|
||||
|
||||
func (b *Bool) Name() string {
|
||||
return b.name
|
||||
}
|
||||
|
||||
func (b *Bool) InitRaw(s string) {
|
||||
if b.value == s {
|
||||
return
|
||||
}
|
||||
b.value = s
|
||||
}
|
||||
|
||||
func (b *Bool) Set(value bool) error {
|
||||
if value {
|
||||
if b.value == "1" {
|
||||
return nil
|
||||
}
|
||||
b.value = "1"
|
||||
} else {
|
||||
if b.value == "0" {
|
||||
return nil
|
||||
}
|
||||
b.value = "0"
|
||||
}
|
||||
return db.UpdateSettingItemValue(b.name, b.value)
|
||||
}
|
||||
|
||||
func (b *Bool) Get() (bool, error) {
|
||||
return b.value == "1", nil
|
||||
}
|
||||
|
||||
func (b *Bool) Raw() string {
|
||||
return b.value
|
||||
}
|
||||
|
||||
func (b *Bool) Type() model.SettingType {
|
||||
return model.SettingTypeBool
|
||||
}
|
||||
|
||||
func (b *Bool) Group() model.SettingGroup {
|
||||
return b.group
|
||||
}
|
||||
|
||||
func (b *Bool) Interface() (any, error) {
|
||||
return b.Get()
|
||||
}
|
||||
|
||||
func newBoolSetting(k, v string, g model.SettingGroup) BoolSetting {
|
||||
if Settings == nil {
|
||||
Settings = make(map[string]Setting)
|
||||
}
|
||||
if GroupsSetting == nil {
|
||||
GroupsSetting = make(map[model.SettingGroup][]Setting)
|
||||
}
|
||||
_, loaded := Settings[k]
|
||||
if loaded {
|
||||
log.Fatalf("setting %s already exists", k)
|
||||
}
|
||||
b := NewBool(k, v, g)
|
||||
Settings[k] = b
|
||||
GroupsSetting[g] = append(GroupsSetting[g], b)
|
||||
return b
|
||||
}
|
@ -1,7 +0,0 @@
|
||||
package setting
|
||||
|
||||
import "github.com/synctv-org/synctv/internal/model"
|
||||
|
||||
var (
|
||||
DisableCreateRoom = newBoolSetting("disable_create_room", "0", model.SettingGroupRoom)
|
||||
)
|
@ -0,0 +1,115 @@
|
||||
package settings
|
||||
|
||||
import (
|
||||
log "github.com/sirupsen/logrus"
|
||||
"github.com/synctv-org/synctv/internal/db"
|
||||
"github.com/synctv-org/synctv/internal/model"
|
||||
)
|
||||
|
||||
type BoolSetting interface {
|
||||
Setting
|
||||
Set(bool) error
|
||||
Get() (bool, error)
|
||||
Default() bool
|
||||
}
|
||||
|
||||
type Bool struct {
|
||||
name string
|
||||
value string
|
||||
defaultValue bool
|
||||
group model.SettingGroup
|
||||
}
|
||||
|
||||
func NewBool(name string, value bool, group model.SettingGroup) *Bool {
|
||||
b := &Bool{
|
||||
name: name,
|
||||
group: group,
|
||||
defaultValue: value,
|
||||
}
|
||||
if value {
|
||||
b.value = "1"
|
||||
} else {
|
||||
b.value = "0"
|
||||
}
|
||||
return b
|
||||
}
|
||||
|
||||
func (b *Bool) Name() string {
|
||||
return b.name
|
||||
}
|
||||
|
||||
func (b *Bool) Init(s string) {
|
||||
if b.value == s {
|
||||
return
|
||||
}
|
||||
b.value = s
|
||||
}
|
||||
|
||||
func (b *Bool) Default() bool {
|
||||
return b.defaultValue
|
||||
}
|
||||
|
||||
func (b *Bool) DefaultString() string {
|
||||
if b.defaultValue {
|
||||
return "1"
|
||||
} else {
|
||||
return "0"
|
||||
}
|
||||
}
|
||||
|
||||
func (b *Bool) DefaultInterface() any {
|
||||
return b.Default()
|
||||
}
|
||||
|
||||
func (b *Bool) SetString(value string) error {
|
||||
if b.value == value {
|
||||
return nil
|
||||
}
|
||||
b.value = value
|
||||
return db.UpdateSettingItemValue(b.name, value)
|
||||
}
|
||||
|
||||
func (b *Bool) Set(value bool) error {
|
||||
if value {
|
||||
return b.SetString("1")
|
||||
} else {
|
||||
return b.SetString("0")
|
||||
}
|
||||
}
|
||||
|
||||
func (b *Bool) Get() (bool, error) {
|
||||
return b.value == "1", nil
|
||||
}
|
||||
|
||||
func (b *Bool) String() string {
|
||||
return b.value
|
||||
}
|
||||
|
||||
func (b *Bool) Type() model.SettingType {
|
||||
return model.SettingTypeBool
|
||||
}
|
||||
|
||||
func (b *Bool) Group() model.SettingGroup {
|
||||
return b.group
|
||||
}
|
||||
|
||||
func (b *Bool) Interface() (any, error) {
|
||||
return b.Get()
|
||||
}
|
||||
|
||||
func newBoolSetting(k string, v bool, g model.SettingGroup) BoolSetting {
|
||||
if Settings == nil {
|
||||
Settings = make(map[string]Setting)
|
||||
}
|
||||
if GroupSettings == nil {
|
||||
GroupSettings = make(map[model.SettingGroup][]Setting)
|
||||
}
|
||||
_, loaded := Settings[k]
|
||||
if loaded {
|
||||
log.Fatalf("setting %s already exists", k)
|
||||
}
|
||||
b := NewBool(k, v, g)
|
||||
Settings[k] = b
|
||||
GroupSettings[g] = append(GroupSettings[g], b)
|
||||
return b
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
package settings
|
||||
|
||||
import "github.com/synctv-org/synctv/internal/model"
|
||||
|
||||
var (
|
||||
DisableCreateRoom = newBoolSetting("disable_create_room", false, model.SettingGroupRoom)
|
||||
)
|
Loading…
Reference in New Issue