LoadSettings loads settings from disk. Returns defaults if file doesn't exist or if the JSON is corrupt, so the application can always start.
()
| 331 | // LoadSettings loads settings from disk. Returns defaults if file doesn't exist |
| 332 | // or if the JSON is corrupt, so the application can always start. |
| 333 | func LoadSettings() (*Settings, error) { |
| 334 | path := GetSettingsPath() |
| 335 | |
| 336 | data, err := os.ReadFile(path) |
| 337 | if err != nil { |
| 338 | if os.IsNotExist(err) { |
| 339 | return DefaultSettings(), nil |
| 340 | } |
| 341 | return nil, err |
| 342 | } |
| 343 | |
| 344 | settings := DefaultSettings() // Start with defaults to fill any missing fields |
| 345 | if err := json.Unmarshal(data, settings); err != nil { |
| 346 | utils.Debug("Warning: corrupt settings file %s: %v - using defaults", path, err) |
| 347 | defaults := DefaultSettings() |
| 348 | defaults.StartupWarnings = append(defaults.StartupWarnings, |
| 349 | fmt.Sprintf("Config: settings file is corrupt (%v) - all settings reset to defaults", err)) |
| 350 | return defaults, nil |
| 351 | } |
| 352 | |
| 353 | // Validate settings and roll back individual invalid fields to defaults |
| 354 | settings.Validate() |
| 355 | |
| 356 | return settings, nil |
| 357 | } |
| 358 | |
| 359 | // SettingMeta provides metadata for a single setting (for UI rendering). |
| 360 | type SettingMeta struct { |