Merge branch 'dev'

This commit is contained in:
Sora39831 2026-04-02 22:25:54 +08:00
commit 54975d4bd1

View file

@ -111,6 +111,7 @@ var defaultValueMap = map[string]string{
// loadSettings reads the JSON settings file into a map. // loadSettings reads the JSON settings file into a map.
// If the file doesn't exist, it creates one from defaultValueMap (excluding xrayTemplateConfig). // If the file doesn't exist, it creates one from defaultValueMap (excluding xrayTemplateConfig).
// If the file exists, missing keys from defaultValueMap are merged in (supports new fields added after install).
func loadSettings() (map[string]string, error) { func loadSettings() (map[string]string, error) {
path := config.GetSettingPath() path := config.GetSettingPath()
data, err := os.ReadFile(path) data, err := os.ReadFile(path)
@ -131,6 +132,22 @@ func loadSettings() (map[string]string, error) {
if err := json.Unmarshal(data, &settings); err != nil { if err := json.Unmarshal(data, &settings); err != nil {
return nil, fmt.Errorf("failed to parse settings file %s: %w", path, err) return nil, fmt.Errorf("failed to parse settings file %s: %w", path, err)
} }
// Merge missing keys from defaults so new fields are picked up on upgrade
needsSave := false
for k, v := range defaultValueMap {
if k == "xrayTemplateConfig" {
continue
}
if _, exists := settings[k]; !exists {
settings[k] = v
needsSave = true
}
}
if needsSave {
if err := saveSettings(settings); err != nil {
return nil, fmt.Errorf("failed to save merged settings: %w", err)
}
}
return settings, nil return settings, nil
} }