Fully implement settings
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
"fmt"
|
||||
"log"
|
||||
"reflect"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type (
|
||||
@@ -60,24 +61,27 @@ func (s *SettingsService) LoadSettings() error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (s *SettingsService) Set(key string, value any) settings {
|
||||
func (s *SettingsService) Set(key string, value int64) (settings, error) {
|
||||
if s == nil || s.db == nil || !s.db.Ready {
|
||||
return Settings, fmt.Errorf("cannot set setting, db is nil or is not ready")
|
||||
}
|
||||
|
||||
key = strings.ToLower(key)
|
||||
fields := reflect.ValueOf(&Settings).Elem()
|
||||
for i := 0; i < fields.NumField(); i++ {
|
||||
field := fields.Type().Field(i)
|
||||
if field.Name == key {
|
||||
fields.Field(i).SetInt(value.(int64))
|
||||
fieldName := strings.ToLower(field.Name)
|
||||
if fieldName == key {
|
||||
fields.Field(i).SetInt(value)
|
||||
|
||||
// This could cause desync between client and server
|
||||
// But we can just refresh, I think it's fine
|
||||
go func() {
|
||||
_, err := s.db.writeConn.Exec("UPDATE settings SET value = ? WHERE key = ?", value, key)
|
||||
if err != nil {
|
||||
Error.Printf("error updating setting for key %s: %v", key)
|
||||
}
|
||||
}()
|
||||
_, err := s.db.writeConn.Exec("UPDATE settings SET value = ? WHERE key = ?", value, key)
|
||||
if err != nil {
|
||||
Error.Printf("error updating setting for key %s: %v", key, err)
|
||||
return Settings, err
|
||||
}
|
||||
|
||||
return Settings
|
||||
return Settings, nil
|
||||
}
|
||||
}
|
||||
return Settings
|
||||
}
|
||||
return Settings, fmt.Errorf("key %s not found", key)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user