diff --git a/internal/bootstrap/data/setting.go b/internal/bootstrap/data/setting.go index a4c09c0a..da38d59d 100644 --- a/internal/bootstrap/data/setting.go +++ b/internal/bootstrap/data/setting.go @@ -123,12 +123,12 @@ func InitialSettings() []model.SettingItem { Type: conf.TypeText, Group: model.GLOBAL, Flag: model.PRIVATE}, {Key: conf.OcrApi, Value: "https://api.nn.ci/ocr/file/json", Type: conf.TypeString, Group: model.GLOBAL}, {Key: conf.FilenameCharMapping, Value: `{"/": "|"}`, Type: conf.TypeText, Group: model.GLOBAL}, - {Key: conf.SearchIndex, Value: "none", Type: conf.TypeSelect, Options: "database,bleve,none", Group: model.GLOBAL}, // aria2 settings {Key: conf.Aria2Uri, Value: "http://localhost:6800/jsonrpc", Type: conf.TypeString, Group: model.ARIA2, Flag: model.PRIVATE}, {Key: conf.Aria2Secret, Value: "", Type: conf.TypeString, Group: model.ARIA2, Flag: model.PRIVATE}, // single settings {Key: conf.Token, Value: token, Type: conf.TypeString, Group: model.SINGLE, Flag: model.PRIVATE}, + {Key: conf.SearchIndex, Value: "none", Type: conf.TypeSelect, Options: "database,bleve,none", Group: model.SINGLE}, {Key: conf.IndexProgress, Value: "{}", Type: conf.TypeText, Group: model.SINGLE, Flag: model.PRIVATE}, } if flags.Dev { diff --git a/internal/db/settingitem.go b/internal/db/settingitem.go index da8b102b..6cb88b40 100644 --- a/internal/db/settingitem.go +++ b/internal/db/settingitem.go @@ -4,44 +4,43 @@ import ( "fmt" "github.com/alist-org/alist/v3/internal/model" + "github.com/alist-org/alist/v3/pkg/generic_sync" "github.com/pkg/errors" log "github.com/sirupsen/logrus" ) -var settingsMap map[string]string -var publicSettingsMap map[string]string +var settingsMap generic_sync.MapOf[string, string] +var publicSettingsMap generic_sync.MapOf[string, string] func settingsUpdate() { - settingsMap = nil - publicSettingsMap = nil + settingsMap.Clear() + publicSettingsMap.Clear() } func GetPublicSettingsMap() map[string]string { - if publicSettingsMap == nil { - publicSettingsMap = make(map[string]string) + if publicSettingsMap.Empty() { settingItems, err := GetPublicSettingItems() if err != nil { log.Errorf("failed to get settingItems: %+v", err) } for _, settingItem := range settingItems { - publicSettingsMap[settingItem.Key] = settingItem.Value + publicSettingsMap.Store(settingItem.Key, settingItem.Value) } } - return publicSettingsMap + return publicSettingsMap.ToMap() } -func GetSettingsMap() map[string]string { - if settingsMap == nil { - settingsMap = make(map[string]string) +func GetSettingsMap() *generic_sync.MapOf[string, string] { + if settingsMap.Empty() { settingItems, err := GetSettingItems() if err != nil { log.Errorf("failed to get settingItems: %+v", err) } for _, settingItem := range settingItems { - settingsMap[settingItem.Key] = settingItem.Value + settingsMap.Store(settingItem.Key, settingItem.Value) } } - return settingsMap + return &settingsMap } func GetSettingItems() ([]model.SettingItem, error) { diff --git a/internal/setting/setting.go b/internal/setting/setting.go index 5cfd3e2d..2861380a 100644 --- a/internal/setting/setting.go +++ b/internal/setting/setting.go @@ -7,7 +7,7 @@ import ( ) func GetStr(key string, defaultValue ...string) string { - val, ok := db.GetSettingsMap()[key] + val, ok := db.GetSettingsMap().Load(key) if !ok { if len(defaultValue) > 0 { return defaultValue[0] diff --git a/pkg/generic_sync/map.go b/pkg/generic_sync/map.go index c7be9719..b963602c 100644 --- a/pkg/generic_sync/map.go +++ b/pkg/generic_sync/map.go @@ -347,6 +347,23 @@ func (m *MapOf[K, V]) Values() []V { return values } +func (m *MapOf[K, V]) Count() int { + return len(m.dirty) +} + +func (m *MapOf[K, V]) Empty() bool { + return m.Count() == 0 +} + +func (m *MapOf[K, V]) ToMap() map[K]V { + ans := make(map[K]V) + m.Range(func(key K, value V) bool { + ans[key] = value + return true + }) + return ans +} + func (m *MapOf[K, V]) Clear() { m.Range(func(key K, value V) bool { m.Delete(key)