From dd88c617f91dfa7d1bd91d8e31aefb72320312ee Mon Sep 17 00:00:00 2001 From: tiny-craft <137850705+tiny-craft@users.noreply.github.com> Date: Tue, 11 Jul 2023 18:06:44 +0800 Subject: [PATCH] feat: add preferencesStore to manager preferences --- backend/services/preferences_service.go | 51 +++++++++ backend/storage/preferences.go | 40 +++++-- frontend/src/AppContent.vue | 19 ++-- .../components/dialogs/PreferencesDialog.vue | 101 +++++------------- frontend/src/stores/preferences.js | 93 ++++++++++++++++ main.go | 12 +-- 6 files changed, 217 insertions(+), 99 deletions(-) create mode 100644 backend/services/preferences_service.go create mode 100644 frontend/src/stores/preferences.js diff --git a/backend/services/preferences_service.go b/backend/services/preferences_service.go new file mode 100644 index 0000000..85480d0 --- /dev/null +++ b/backend/services/preferences_service.go @@ -0,0 +1,51 @@ +package services + +import ( + "sync" + storage2 "tinyrdm/backend/storage" + "tinyrdm/backend/types" +) + +type preferencesService struct { + pref *storage2.PreferencesStorage +} + +var preferences *preferencesService +var oncePreferences sync.Once + +func Preferences() *preferencesService { + if preferences == nil { + oncePreferences.Do(func() { + preferences = &preferencesService{ + pref: storage2.NewPreferences(), + } + }) + } + return preferences +} + +func (p *preferencesService) GetPreferences() (resp types.JSResp) { + resp.Data = p.pref.GetPreferences() + resp.Success = true + return +} + +func (p *preferencesService) SetPreferences(values map[string]any) (resp types.JSResp) { + err := p.pref.SetPreferencesN(values) + if err != nil { + resp.Msg = err.Error() + return + } + + resp.Success = true + return +} + +func (p *preferencesService) RestorePreferences() (resp types.JSResp) { + defaultPref := p.pref.RestoreDefault() + resp.Data = map[string]any{ + "pref": defaultPref, + } + resp.Success = true + return +} diff --git a/backend/storage/preferences.go b/backend/storage/preferences.go index e2ee5f0..b0912cf 100644 --- a/backend/storage/preferences.go +++ b/backend/storage/preferences.go @@ -21,12 +21,12 @@ func NewPreferences() *PreferencesStorage { func (p *PreferencesStorage) DefaultPreferences() map[string]any { return map[string]any{ "general": map[string]any{ - "language": "en", - "font": "", - "font_size": 14, - "use_proxy": false, - "use_proxy_http": false, - "check_update": true, + "language": "en", + "font": "", + "font_size": 14, + "use_sys_proxy": false, + "use_sys_proxy_http": false, + "check_update": true, }, "editor": map[string]any{ "font": "", @@ -42,19 +42,41 @@ func (p *PreferencesStorage) getPreferences() (ret map[string]any) { return } - if err := yaml.Unmarshal(b, &ret); err != nil { + if err = yaml.Unmarshal(b, &ret); err != nil { ret = p.DefaultPreferences() return } return } +func (p *PreferencesStorage) flatPreferences(data map[string]any, prefix string) map[string]any { + flattened := make(map[string]any) + for key, value := range data { + newKey := key + if prefix != "" { + newKey = prefix + "." + key + } + + if nested, ok := value.(map[string]any); ok { + nestedFlattened := p.flatPreferences(nested, newKey) + for k, v := range nestedFlattened { + flattened[k] = v + } + } else { + flattened[newKey] = value + } + } + return flattened +} + // GetPreferences Get preferences from local func (p *PreferencesStorage) GetPreferences() (ret map[string]any) { p.mutex.Lock() defer p.mutex.Unlock() - return p.getPreferences() + pref := p.getPreferences() + ret = p.flatPreferences(pref, "") + return } func (p *PreferencesStorage) setPreferences(pf map[string]any, key string, value any) error { @@ -120,5 +142,5 @@ func (p *PreferencesStorage) SetPreferencesN(values map[string]any) error { func (p *PreferencesStorage) RestoreDefault() map[string]any { pf := p.DefaultPreferences() p.savePreferences(pf) - return pf + return p.flatPreferences(pf, "") } diff --git a/frontend/src/AppContent.vue b/frontend/src/AppContent.vue index bd45726..1598c30 100644 --- a/frontend/src/AppContent.vue +++ b/frontend/src/AppContent.vue @@ -1,15 +1,15 @@ @@ -120,33 +71,37 @@ const onClose = () => { - + - + - + - + {{ $t('use_system_proxy') }} - + {{ $t('use_system_proxy_http') }} - {{ $t('auto_check_update') }} + + {{ $t('auto_check_update') }} @@ -155,16 +110,16 @@ const onClose = () => { - + - + @@ -172,7 +127,7 @@ const onClose = () => {