mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-06-07 13:44:24 +00:00
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.
This commit is contained in:
parent
26ef0745e7
commit
5729cebb8e
1 changed files with 17 additions and 0 deletions
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue