From 49435848ee36fffeb840de6aef43220ae2b3d106 Mon Sep 17 00:00:00 2001 From: tiny-craft <137850705+tiny-craft@users.noreply.github.com> Date: Wed, 12 Jul 2023 11:48:08 +0800 Subject: [PATCH] feat: add font style preferences support --- backend/services/preferences_service.go | 31 +++++++ frontend/src/AppContent.vue | 5 +- .../components/dialogs/PreferencesDialog.vue | 44 +++++----- frontend/src/langs/en.json | 1 + frontend/src/langs/zh-cn.json | 1 + frontend/src/stores/preferences.js | 84 ++++++++++++++++++- .../go/services/preferencesService.d.ts | 11 +++ .../wailsjs/go/services/preferencesService.js | 19 +++++ go.mod | 3 + go.sum | 7 ++ 10 files changed, 179 insertions(+), 27 deletions(-) create mode 100755 frontend/wailsjs/go/services/preferencesService.d.ts create mode 100755 frontend/wailsjs/go/services/preferencesService.js diff --git a/backend/services/preferences_service.go b/backend/services/preferences_service.go index 85480d0..1117399 100644 --- a/backend/services/preferences_service.go +++ b/backend/services/preferences_service.go @@ -1,9 +1,13 @@ package services import ( + "github.com/adrg/sysfont" + "sort" + "strings" "sync" storage2 "tinyrdm/backend/storage" "tinyrdm/backend/types" + "tinyrdm/backend/utils/coll" ) type preferencesService struct { @@ -49,3 +53,30 @@ func (p *preferencesService) RestorePreferences() (resp types.JSResp) { resp.Success = true return } + +type FontItem struct { + Name string `json:"name"` + Path string `json:"path"` +} + +func (p *preferencesService) GetFontList() (resp types.JSResp) { + finder := sysfont.NewFinder(nil) + fontSet := coll.NewSet[string]() + var fontList []FontItem + for _, font := range finder.List() { + if len(font.Family) > 0 && !strings.HasPrefix(font.Family, ".") && fontSet.Add(font.Family) { + fontList = append(fontList, FontItem{ + Name: font.Family, + Path: font.Filename, + }) + } + } + sort.Slice(fontList, func(i, j int) bool { + return fontList[i].Name < fontList[j].Name + }) + resp.Data = map[string]any{ + "fonts": fontList, + } + resp.Success = true + return +} diff --git a/frontend/src/AppContent.vue b/frontend/src/AppContent.vue index 1598c30..440e003 100644 --- a/frontend/src/AppContent.vue +++ b/frontend/src/AppContent.vue @@ -20,12 +20,13 @@ const data = reactive({ }) const tabStore = useTabStore() +const prefStore = usePreferencesStore() // const preferences = ref({}) // provide('preferences', preferences) const i18n = useI18n() onMounted(async () => { - const prefStore = usePreferencesStore() + await prefStore.loadFontList() await prefStore.loadPreferences() await nextTick(() => { i18n.locale.value = get(prefStore.general, 'language', 'en') @@ -67,7 +68,7 @@ const dragging = computed(() => {