Skip to content

安装新主题之后,不应该始终取消外观模式“跟随系统” #16990

@TCOTC

Description

@TCOTC

后端在安装主题的时候会取消“跟随系统”(代码在提交7b66693中添加):

siyuan/kernel/api/bazaar.go

Lines 533 to 535 in d5d10dd

// 安装集市主题后不跟随系统切换外观模式
model.Conf.Appearance.ModeOS = false
model.Conf.Save()

实际效果见录屏:

video.webm

需要取消“跟随系统”的情况应该只有:

  • 当前是跟随系统、明亮模式,新安装仅支持暗黑模式的主题 → 取消“跟随系统”、切换到暗黑模式
  • 当前是跟随系统、暗黑模式,新安装仅支持明亮模式的主题 → 取消“跟随系统”、切换到明亮模式

后端取消“跟随系统”之后,前端的 window.siyuan.config.appearance.modeOS 实际上还是 true ,需要刷新一下界面之后 window.siyuan.config.appearance.modeOS 才会变成 false,这是因为后端在修改配置文件并保存之后没有调用 util.BroadcastByType("main", "setAppearance", 0, "", Conf.Appearance)

取消“跟随系统”应该移动到这个地方,跟修改外观模式一起执行:

if !update {
// 更新主题后不需要对该主题进行切换 https://github.com/siyuan-note/siyuan/issues/4966
if 0 == mode {
Conf.Appearance.ThemeLight = themeName
} else {
Conf.Appearance.ThemeDark = themeName
}
Conf.Appearance.Mode = mode
Conf.Appearance.ThemeJS = gulu.File.IsExist(filepath.Join(installPath, "theme.js"))
Conf.Save()
}
InitAppearance()
util.BroadcastByType("main", "setAppearance", 0, "", Conf.Appearance)


要解决这个问题的话,需要前后端一起修改:

  • 前端对当前模式进行判断,然后调用接口时传递 mode 和 modeOS 两个参数

    p.s. 前端在安装新主题时传递了 mode 参数,还需要一个 modeOS 参数:

    mode: dataObj.themeMode === "dark" ? 1 : 0,

  • 后端接受到参数之后就修改外观配置并保存(没参数就不修改),然后推送 setAppearance 到各个前端实例

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions