Fully implement settings

This commit is contained in:
2024-08-09 22:19:50 +02:00
parent 7b6108d0dd
commit 8119775084
16 changed files with 235 additions and 22 deletions

View File

@@ -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)
}