From 5729cebb8ea7c8cce66e01cc033708d641d8a520 Mon Sep 17 00:00:00 2001 From: Sora39831 <540587985@qq.com> Date: Thu, 2 Apr 2026 22:25:50 +0800 Subject: [PATCH] fix(setting): merge missing default keys into x-ui.json on load New fields added after initial install are now automatically merged into the existing x-ui.json file, so upgrades pick up defaults for newly added settings without requiring manual intervention. --- web/service/setting.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/web/service/setting.go b/web/service/setting.go index 5bc09e44..de3a1b9f 100644 --- a/web/service/setting.go +++ b/web/service/setting.go @@ -111,6 +111,7 @@ var defaultValueMap = map[string]string{ // 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 exists, missing keys from defaultValueMap are merged in (supports new fields added after install). func loadSettings() (map[string]string, error) { path := config.GetSettingPath() data, err := os.ReadFile(path) @@ -131,6 +132,22 @@ func loadSettings() (map[string]string, error) { if err := json.Unmarshal(data, &settings); err != nil { 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 }