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(() => {