ソースを参照

Merge remote-tracking branch 'origin/dev' into dev

Vanessa 9 ヶ月 前
コミット
f5e0da0ac1

+ 5 - 0
kernel/api/system.go

@@ -230,6 +230,11 @@ func exportConf(c *gin.Context) {
 		return
 	}
 
+	if nil != clonedConf.Appearance {
+		clonedConf.Appearance.DarkThemes = nil
+		clonedConf.Appearance.LightThemes = nil
+		clonedConf.Appearance.Icons = nil
+	}
 	if nil != clonedConf.Editor {
 		clonedConf.Editor.Emoji = []string{}
 	}

+ 21 - 16
kernel/conf/appearance.go

@@ -17,22 +17,22 @@
 package conf
 
 type Appearance struct {
-	Mode                int      `json:"mode"`                // 模式:0:明亮,1:暗黑
-	ModeOS              bool     `json:"modeOS"`              // 模式是否跟随系统
-	DarkThemes          []string `json:"darkThemes"`          // 暗黑模式外观主题列表
-	LightThemes         []string `json:"lightThemes"`         // 明亮模式外观主题列表
-	ThemeDark           string   `json:"themeDark"`           // 选择的暗黑模式外观主题
-	ThemeLight          string   `json:"themeLight"`          // 选择的明亮模式外观主题
-	ThemeVer            string   `json:"themeVer"`            // 选择的主题版本
-	Icons               []string `json:"icons"`               // 图标列表
-	Icon                string   `json:"icon"`                // 选择的图标
-	IconVer             string   `json:"iconVer"`             // 选择的图标版本
-	CodeBlockThemeLight string   `json:"codeBlockThemeLight"` // 明亮模式下代码块主题
-	CodeBlockThemeDark  string   `json:"codeBlockThemeDark"`  // 暗黑模式下代码块主题
-	Lang                string   `json:"lang"`                // 选择的界面语言,同 AppConf.Lang
-	ThemeJS             bool     `json:"themeJS"`             // 是否启用了主题 JavaScript
-	CloseButtonBehavior int      `json:"closeButtonBehavior"` // 关闭按钮行为,0:退出,1:最小化到托盘
-	HideStatusBar       bool     `json:"hideStatusBar"`       // 是否隐藏底部状态栏
+	Mode                int                `json:"mode"`                // 模式:0:明亮,1:暗黑
+	ModeOS              bool               `json:"modeOS"`              // 模式是否跟随系统
+	DarkThemes          []*AppearanceTheme `json:"darkThemes"`          // 暗黑模式外观主题列表
+	LightThemes         []*AppearanceTheme `json:"lightThemes"`         // 明亮模式外观主题列表
+	ThemeDark           string             `json:"themeDark"`           // 选择的暗黑模式外观主题
+	ThemeLight          string             `json:"themeLight"`          // 选择的明亮模式外观主题
+	ThemeVer            string             `json:"themeVer"`            // 选择的主题版本
+	Icons               []string           `json:"icons"`               // 图标列表
+	Icon                string             `json:"icon"`                // 选择的图标
+	IconVer             string             `json:"iconVer"`             // 选择的图标版本
+	CodeBlockThemeLight string             `json:"codeBlockThemeLight"` // 明亮模式下代码块主题
+	CodeBlockThemeDark  string             `json:"codeBlockThemeDark"`  // 暗黑模式下代码块主题
+	Lang                string             `json:"lang"`                // 选择的界面语言,同 AppConf.Lang
+	ThemeJS             bool               `json:"themeJS"`             // 是否启用了主题 JavaScript
+	CloseButtonBehavior int                `json:"closeButtonBehavior"` // 关闭按钮行为,0:退出,1:最小化到托盘
+	HideStatusBar       bool               `json:"hideStatusBar"`       // 是否隐藏底部状态栏
 }
 
 func NewAppearance() *Appearance {
@@ -49,3 +49,8 @@ func NewAppearance() *Appearance {
 		HideStatusBar:       false,
 	}
 }
+
+type AppearanceTheme struct {
+	Name  string `json:"name"`  // daylight
+	Label string `json:"label"` // i18n display name
+}

+ 37 - 4
kernel/model/appearance.go

@@ -29,6 +29,7 @@ import (
 	"github.com/siyuan-note/filelock"
 	"github.com/siyuan-note/logging"
 	"github.com/siyuan-note/siyuan/kernel/bazaar"
+	"github.com/siyuan-note/siyuan/kernel/conf"
 	"github.com/siyuan-note/siyuan/kernel/util"
 )
 
@@ -49,11 +50,11 @@ func InitAppearance() {
 	}
 	loadThemes()
 
-	if !gulu.Str.Contains(Conf.Appearance.ThemeDark, Conf.Appearance.DarkThemes) {
+	if !containTheme(Conf.Appearance.ThemeDark, Conf.Appearance.DarkThemes) {
 		Conf.Appearance.ThemeDark = "midnight"
 		Conf.Appearance.ThemeJS = false
 	}
-	if !gulu.Str.Contains(Conf.Appearance.ThemeLight, Conf.Appearance.LightThemes) {
+	if !containTheme(Conf.Appearance.ThemeLight, Conf.Appearance.LightThemes) {
 		Conf.Appearance.ThemeLight = "daylight"
 		Conf.Appearance.ThemeJS = false
 	}
@@ -66,6 +67,15 @@ func InitAppearance() {
 	Conf.Save()
 }
 
+func containTheme(name string, themes []*conf.AppearanceTheme) bool {
+	for _, t := range themes {
+		if t.Name == name {
+			return true
+		}
+	}
+	return false
+}
+
 var themeWatchers = sync.Map{} // [string]*fsnotify.Watcher{}
 
 func closeThemeWatchers() {
@@ -118,10 +128,33 @@ func loadThemes() {
 
 		modes := themeConf.Modes
 		for _, mode := range modes {
+			t := &conf.AppearanceTheme{Name: name}
+			if "zh_CN" == util.Lang {
+				if "midnight" == name {
+					t.Label = name + "(默认主题)"
+				} else if "daylight" == name {
+					t.Label = name + "(默认主题)"
+				} else {
+					if nil != themeConf.DisplayName && "" != themeConf.DisplayName.ZhCN && name != themeConf.DisplayName.ZhCN {
+						t.Label = themeConf.DisplayName.ZhCN + "(" + name + ")"
+					} else {
+						t.Label = name
+					}
+				}
+			} else {
+				if "midnight" == name {
+					t.Label = name + " (Default)"
+				} else if "daylight" == name {
+					t.Label = name + " (Default)"
+				} else {
+					t.Label = name
+				}
+			}
+
 			if "dark" == mode {
-				Conf.Appearance.DarkThemes = append(Conf.Appearance.DarkThemes, name)
+				Conf.Appearance.DarkThemes = append(Conf.Appearance.DarkThemes, t)
 			} else if "light" == mode {
-				Conf.Appearance.LightThemes = append(Conf.Appearance.LightThemes, name)
+				Conf.Appearance.LightThemes = append(Conf.Appearance.LightThemes, t)
 			}
 		}
 

+ 1 - 1
kernel/model/bazzar.go

@@ -376,7 +376,7 @@ func BazaarThemes(keyword string) (ret []*bazaar.Theme) {
 	installs = append(installs, Conf.Appearance.LightThemes...)
 	for _, installed := range installs {
 		for _, theme := range ret {
-			if installed == theme.Name {
+			if installed.Name == theme.Name {
 				theme.Installed = true
 				if themeConf, err := bazaar.ThemeJSON(theme.Name); err == nil {
 					theme.Outdated = 0 > semver.Compare("v"+themeConf.Version, "v"+theme.Version)

+ 1 - 1
kernel/model/file.go

@@ -184,7 +184,7 @@ func SearchDocsByKeyword(keyword string, flashcard bool) (ret []map[string]strin
 	var rootBlocks []*sql.Block
 	if 0 < len(keywords) {
 		for _, box := range boxes {
-			if util.ContainsSubStr(box.Name, keywords) {
+			if gulu.Str.Contains(box.Name, keywords) {
 				if flashcard {
 					newFlashcardCount, dueFlashcardCount, flashcardCount := countBoxFlashcard(box.ID, deck, deckBlockIDs)
 					if 0 < flashcardCount {