diff --git a/kernel/api/system.go b/kernel/api/system.go index edbb590e0..4020cf1a0 100644 --- a/kernel/api/system.go +++ b/kernel/api/system.go @@ -548,7 +548,7 @@ func setFollowSystemLockScreen(c *gin.Context) { func getSysFonts(c *gin.Context) { ret := gulu.Ret.NewResult() defer c.JSON(http.StatusOK, ret) - ret.Data = util.GetSysFonts() + ret.Data = util.LoadSysFonts() } func version(c *gin.Context) { diff --git a/kernel/main.go b/kernel/main.go index 1addbca3f..80b6a3462 100644 --- a/kernel/main.go +++ b/kernel/main.go @@ -48,6 +48,8 @@ func main() { util.PushClearAllMsg() job.StartCron() + + go util.LoadSysFonts() go model.AutoGenerateFileHistory() go cache.LoadAssets() go util.CheckFileSysStatus() diff --git a/kernel/util/font.go b/kernel/util/font.go index 5cc3637e4..b01a7303a 100644 --- a/kernel/util/font.go +++ b/kernel/util/font.go @@ -20,6 +20,8 @@ import ( "os" "sort" "strings" + "sync" + "time" "github.com/88250/gulu" "github.com/ConradIrwin/font/sfnt" @@ -30,7 +32,20 @@ import ( "golang.org/x/text/transform" ) -func GetSysFonts() (ret []string) { +var ( + sysFonts []string + sysFontsLock = sync.Mutex{} +) + +func LoadSysFonts() (ret []string) { + sysFontsLock.Lock() + defer sysFontsLock.Unlock() + + if 0 < len(sysFonts) { + return sysFonts + } + + start := time.Now() fonts := loadFonts() ret = []string{} for _, font := range fonts { @@ -39,6 +54,8 @@ func GetSysFonts() (ret []string) { ret = gulu.Str.RemoveDuplicatedElem(ret) ret = removeUnusedFonts(ret) sort.Strings(ret) + sysFonts = ret + logging.LogInfof("loaded system fonts [%d] in [%dms]", len(sysFonts), time.Since(start).Milliseconds()) return }