Skip to content

Commit 396271e

Browse files
committed
add settings.go
1 parent 41c29f0 commit 396271e

File tree

1 file changed

+76
-0
lines changed

1 file changed

+76
-0
lines changed

cmd/goose/settings.go

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
// Package main - settings.go provides persistent settings storage.
2+
package main
3+
4+
import (
5+
"encoding/json"
6+
"log"
7+
"os"
8+
"path/filepath"
9+
)
10+
11+
// Settings represents persistent user settings.
12+
type Settings struct {
13+
EnableAudioCues bool `json:"enable_audio_cues"`
14+
EnableReminders bool `json:"enable_reminders"`
15+
HideStale bool `json:"hide_stale"`
16+
}
17+
18+
// loadSettings loads settings from disk or returns defaults.
19+
func (app *App) loadSettings() {
20+
settingsPath := filepath.Join(app.cacheDir, "settings.json")
21+
22+
data, err := os.ReadFile(settingsPath)
23+
if err != nil {
24+
if !os.IsNotExist(err) {
25+
log.Printf("Failed to read settings: %v", err)
26+
}
27+
// Use defaults
28+
app.enableAudioCues = true
29+
app.enableReminders = true
30+
app.hideStaleIncoming = true
31+
return
32+
}
33+
34+
var settings Settings
35+
if err := json.Unmarshal(data, &settings); err != nil {
36+
log.Printf("Failed to parse settings: %v", err)
37+
// Use defaults
38+
app.enableAudioCues = true
39+
app.enableReminders = true
40+
app.hideStaleIncoming = true
41+
return
42+
}
43+
44+
app.enableAudioCues = settings.EnableAudioCues
45+
app.enableReminders = settings.EnableReminders
46+
app.hideStaleIncoming = settings.HideStale
47+
log.Printf("Loaded settings: audio_cues=%v, reminders=%v, hide_stale=%v",
48+
app.enableAudioCues, app.enableReminders, app.hideStaleIncoming)
49+
}
50+
51+
// saveSettings saves current settings to disk.
52+
func (app *App) saveSettings() {
53+
app.mu.RLock()
54+
settings := Settings{
55+
EnableAudioCues: app.enableAudioCues,
56+
EnableReminders: app.enableReminders,
57+
HideStale: app.hideStaleIncoming,
58+
}
59+
app.mu.RUnlock()
60+
61+
settingsPath := filepath.Join(app.cacheDir, "settings.json")
62+
63+
data, err := json.MarshalIndent(settings, "", " ")
64+
if err != nil {
65+
log.Printf("Failed to marshal settings: %v", err)
66+
return
67+
}
68+
69+
if err := os.WriteFile(settingsPath, data, 0o600); err != nil {
70+
log.Printf("Failed to save settings: %v", err)
71+
return
72+
}
73+
74+
log.Printf("Saved settings: audio_cues=%v, reminders=%v, hide_stale=%v",
75+
settings.EnableAudioCues, settings.EnableReminders, settings.HideStale)
76+
}

0 commit comments

Comments
 (0)