45 lines
1.0 KiB
Go
45 lines
1.0 KiB
Go
package core
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
// AppSettings represents persistent application settings.
|
|
type AppSettings struct {
|
|
RunOnStartup bool `json:"RunOnStartup"`
|
|
AutoConnect bool `json:"AutoConnect"`
|
|
AutoReconnect bool `json:"AutoReconnect"`
|
|
LastConfigID string `json:"LastConfigId,omitempty"`
|
|
}
|
|
|
|
func settingsPath() string {
|
|
appData, _ := os.UserConfigDir()
|
|
return filepath.Join(appData, "kettuRay", "settings.json")
|
|
}
|
|
|
|
// LoadSettings loads settings from disk, returning defaults on error.
|
|
func LoadSettings() *AppSettings {
|
|
data, err := os.ReadFile(settingsPath())
|
|
if err != nil {
|
|
return &AppSettings{}
|
|
}
|
|
var s AppSettings
|
|
if err := json.Unmarshal(data, &s); err != nil {
|
|
return &AppSettings{}
|
|
}
|
|
return &s
|
|
}
|
|
|
|
// Save writes settings to disk.
|
|
func (s *AppSettings) Save() error {
|
|
path := settingsPath()
|
|
_ = os.MkdirAll(filepath.Dir(path), 0o755)
|
|
data, err := json.MarshalIndent(s, "", " ")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return os.WriteFile(path, data, 0o644)
|
|
}
|