diff --git a/kernel/conf/appearance.go b/kernel/conf/appearance.go index 107abbac6e7..ebd1002acf9 100644 --- a/kernel/conf/appearance.go +++ b/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 +} diff --git a/kernel/model/appearance.go b/kernel/model/appearance.go index bc1a5686dd7..dccdb8c2886 100644 --- a/kernel/model/appearance.go +++ b/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) } } diff --git a/kernel/model/bazzar.go b/kernel/model/bazzar.go index 99660c3841e..6b3f41439f5 100644 --- a/kernel/model/bazzar.go +++ b/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)