diff --git a/app.go b/app.go index ec86d12..3a59316 100644 --- a/app.go +++ b/app.go @@ -20,6 +20,7 @@ func (a *App) startup(ctx context.Context) { a.ctx = ctx } +// region food func (a *App) GetFood() WailsFood { data, err := foodService.GetRecent() if err != nil { @@ -42,4 +43,12 @@ func (a *App) UpdateFood(food Food) WailsFood1 { return WailsFood1{Success: false, Error: err.Error()} } return WailsFood1{Data: data, Success: true} +} + +// region settings +func (a *App) GetSettings() settings { + return Settings +} +func (a *App) SetSetting(key string, value any) settings { + return settingsService.Set(key, value) } \ No newline at end of file diff --git a/settingsservice.go b/settingsservice.go index 6378cb8..1555997 100644 --- a/settingsservice.go +++ b/settingsservice.go @@ -50,7 +50,7 @@ func (s *SettingsService) LoadSettings() error { log.Printf("error getting setting for key %s: %v; setting default", key, err) _, err := s.db.writeConn.Exec("INSERT INTO settings (key, value) VALUES (?, ?)", key, field.Tag.Get("default")) if err != nil { - log.Printf("error inserting setting for key %s: %v", key, err) + Error.Printf("error inserting setting for key %s: %v", key, err) continue } } @@ -60,3 +60,24 @@ func (s *SettingsService) LoadSettings() error { } return nil } +func (s *SettingsService) Set(key string, value any) settings { + 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)) + + // 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) + } + }() + + return Settings + } + } + return Settings +} \ No newline at end of file