Skip to content

Commit

Permalink
🎨 Improve appearance setting theme name display siyuan-note#10903
Browse files Browse the repository at this point in the history
  • Loading branch information
88250 committed Sep 26, 2024
1 parent 0c450d9 commit d58d967
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 21 deletions.
37 changes: 21 additions & 16 deletions kernel/conf/appearance.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -49,3 +49,8 @@ func NewAppearance() *Appearance {
HideStatusBar: false,
}
}

type AppearanceTheme struct {
Name string `json:"name"` // daylight
Label string `json:"label"` // i18n display name
}
41 changes: 37 additions & 4 deletions kernel/model/appearance.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
)

Expand All @@ -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
}
Expand All @@ -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() {
Expand Down Expand Up @@ -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)
}
}

Expand Down
2 changes: 1 addition & 1 deletion kernel/model/bazzar.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down

0 comments on commit d58d967

Please sign in to comment.