update: 优化主题监听

This commit is contained in:
msojocs 2022-04-18 22:58:45 +08:00
parent c9a5f824a8
commit 98b155b83d
3 changed files with 137 additions and 115 deletions

View File

@ -1,3 +1,7 @@
# 1.05.2203070-10 / 2022-04-
- fix: 修正命令行入口
- update: 优化主题监听
# 1.05.2203070-8 / 2022-04-10 # 1.05.2203070-8 / 2022-04-10
- fix: 国内网络vscode-ripgrep安装失败的问题 - fix: 国内网络vscode-ripgrep安装失败的问题
- fix: 内部的更新检查界面无法正常使用(这个更新用处不大,仅用于让维护者知道存在更新) - fix: 内部的更新检查界面无法正常使用(这个更新用处不大,仅用于让维护者知道存在更新)

View File

@ -4,70 +4,79 @@ const { execSync, spawn } = require("child_process");
class CheckDark { class CheckDark {
// 监听gsettings monitor org.gnome.desktop.interface gtk-theme // 监听gsettings monitor org.gnome.desktop.interface gtk-theme
monitorTheme() { monitorTheme() {
let monitor = null; try {
const { DESKTOP_SESSION } = process.env; let monitor = null;
switch (DESKTOP_SESSION) { const { DESKTOP_SESSION } = process.env;
case "deepin": switch (DESKTOP_SESSION) {
monitor = spawn("gsettings", [ case "deepin":
"monitor", monitor = spawn("gsettings", [
"com.deepin.dde.appearance", "monitor",
"gtk-theme", "com.deepin.dde.appearance",
]); "gtk-theme",
break; ]);
case "gnome": break;
case "gnome-classic": case "gnome":
monitor = spawn("gsettings", [ case "gnome-classic":
"monitor", monitor = spawn("gsettings", [
"org.gnome.desktop.interface", "monitor",
this.gnomeScheme, "org.gnome.desktop.interface",
]); this.gnomeScheme,
break; ]);
default: break;
console.warn( default:
`NOT SUPPORTED !!! DESKTOP_SESSION: ${DESKTOP_SESSION}` console.warn(
); `NOT SUPPORTED !!! DESKTOP_SESSION: ${DESKTOP_SESSION}`
break; );
break;
}
monitor &&
monitor.on("error", (err) => {
console.error("monitorTheme", err);
});
monitor &&
monitor.stdout.on("data", (chunk) => {
// TODO: 防抖动包装
const data = chunk.toString();
const t = data.toLowerCase().includes("dark");
console.log(data);
console.log("dark", t);
// (this._theme = t ? i.Dark : i.Light),
// this._onDidThemeChange.fire(this._theme);
});
} catch (err) {
console.error("尝试监听主题失败!", err);
} }
monitor &&
monitor.on("error", (err) => {
console.error("monitorTheme", err);
});
monitor &&
monitor.stdout.on("data", (chunk) => {
// TODO: 防抖动包装
const data = chunk.toString();
const t = data.toLowerCase().includes("dark");
console.log(data);
console.log("dark", t);
// (this._theme = t ? i.Dark : i.Light),
// this._onDidThemeChange.fire(this._theme);
});
} }
get isDark() { get isDark() {
const { DESKTOP_SESSION } = process.env; try {
console.log(DESKTOP_SESSION); const { DESKTOP_SESSION } = process.env;
let theme = ""; console.log(DESKTOP_SESSION);
switch (DESKTOP_SESSION) { let theme = "";
case "deepin": switch (DESKTOP_SESSION) {
theme = execSync( case "deepin":
`gsettings get com.deepin.dde.appearance gtk-theme` theme = execSync(
); `gsettings get com.deepin.dde.appearance gtk-theme`
break; );
case "gnome": break;
case "gnome-classic": case "gnome":
theme = execSync( case "gnome-classic":
`gsettings get org.gnome.desktop.interface ${this.gnomeScheme}` theme = execSync(
); `gsettings get org.gnome.desktop.interface ${this.gnomeScheme}`
break; );
break;
default: default:
console.warn( console.warn(
`NOT SUPPORTED !!! DESKTOP_SESSION: ${DESKTOP_SESSION}` `NOT SUPPORTED !!! DESKTOP_SESSION: ${DESKTOP_SESSION}`
); );
break; break;
}
console.log(theme.toString());
return theme.toString().toLowerCase().includes("dark");
} catch (error) {
console.error("尝试获取主题信息失败,使用默认暗色");
return true;
} }
console.log(theme.toString());
return theme.toString().toLowerCase().includes("dark");
} }
get gnomeScheme() { get gnomeScheme() {
// 判断 Gnome-Shell 版本 // 判断 Gnome-Shell 版本
@ -185,26 +194,31 @@ function original() {
} }
// 额外添加功能 start // 额外添加功能 start
get isDark() { get isDark() {
const { DESKTOP_SESSION } = process.env; try {
console.log(DESKTOP_SESSION); const { DESKTOP_SESSION } = process.env;
let theme = ""; console.log(DESKTOP_SESSION);
switch (DESKTOP_SESSION) { let theme = "";
case "deepin": switch (DESKTOP_SESSION) {
theme = execSync( case "deepin":
`gsettings get com.deepin.dde.appearance gtk-theme` theme = execSync(
); `gsettings get com.deepin.dde.appearance gtk-theme`
break; );
case "gnome": break;
case "gnome-classic": case "gnome":
theme = execSync( case "gnome-classic":
`gsettings get org.gnome.desktop.interface ${this.gnomeScheme}` theme = execSync(
); `gsettings get org.gnome.desktop.interface ${this.gnomeScheme}`
break; );
break;
default: default:
break; break;
}
return theme.includes("dark");
} catch (err) {
console.error("尝试获取主题信息失败,使用默认暗色", err);
return true;
} }
return theme.includes("dark");
} }
get gnomeScheme() { get gnomeScheme() {
// 判断 Gnome-Shell 版本 // 判断 Gnome-Shell 版本
@ -217,46 +231,50 @@ function original() {
return gnomeVersionNum >= 42 ? "color-scheme" : "gtk-theme"; return gnomeVersionNum >= 42 ? "color-scheme" : "gtk-theme";
} }
monitorTheme() { monitorTheme() {
let monitor = null; try {
const { DESKTOP_SESSION } = process.env; let monitor = null;
switch (DESKTOP_SESSION) { const { DESKTOP_SESSION } = process.env;
case "deepin": switch (DESKTOP_SESSION) {
monitor = spawn("gsettings", [ case "deepin":
"monitor", monitor = spawn("gsettings", [
"com.deepin.dde.appearance", "monitor",
"gtk-theme", "com.deepin.dde.appearance",
]); "gtk-theme",
break; ]);
case "gnome": break;
case "gnome-classic": case "gnome":
monitor = spawn("gsettings", [ case "gnome-classic":
"monitor", monitor = spawn("gsettings", [
"org.gnome.desktop.interface", "monitor",
this.gnomeScheme, "org.gnome.desktop.interface",
]); this.gnomeScheme,
break; ]);
break;
default: default:
console.warn( console.warn(
`NOT SUPPORTED !!! DESKTOP_SESSION: ${DESKTOP_SESSION}` `NOT SUPPORTED !!! DESKTOP_SESSION: ${DESKTOP_SESSION}`
);
break;
}
monitor &&
monitor.on("error", (err) => {
console.error("monitorTheme", err);
});
monitor &&
monitor.stdout.on(
"data",
e.debounce((chunk) => {
// 防抖动包装 防抖动, 该函数会从上一次被调用后,延迟 400 毫秒后调用 本方法
const data = chunk.toString();
const t = data.toLowerCase().includes("dark");
(this._theme = t ? i.Dark : i.Light),
this._onDidThemeChange.fire(this._theme);
}, 400)
); );
break; } catch (err) {
console.error("尝试监听主题失败!", err);
} }
monitor &&
monitor.on("error", (err) => {
console.error("monitorTheme", err);
});
monitor &&
monitor.stdout.on(
"data",
e.debounce((chunk) => {
// 防抖动包装 防抖动, 该函数会从上一次被调用后,延迟 400 毫秒后调用 本方法
const data = chunk.toString();
const t = data.toLowerCase().includes("dark");
(this._theme = t ? i.Dark : i.Light),
this._onDidThemeChange.fire(this._theme);
}, 400)
);
} }
// 额外添加功能 end // 额外添加功能 end
getDefaultTheme() { getDefaultTheme() {

View File

@ -79,7 +79,7 @@ sed -i 's/this.registerListeners()/this.monitorTheme()/' $find_result
# replace check func # replace check func
sed -i 's/mediaQuery.matches/isDark/' $find_result sed -i 's/mediaQuery.matches/isDark/' $find_result
# add functions # add functions
sed -i 's#}getDefaultTheme#}get isDark(){const{DESKTOP_SESSION}=process.env;console.log(DESKTOP_SESSION);let theme="";switch(DESKTOP_SESSION){case"deepin":theme=execSync(`gsettings get com.deepin.dde.appearance gtk-theme`);break;case"gnome":case"gnome-classic":theme=execSync(`gsettings get org.gnome.desktop.interface ${this.gnomeScheme}`);break;default:break}return theme.includes("dark")}get gnomeScheme(){const gnomeVersion=execSync(`gnome-shell --version`).toString().replace(/[\\r\\n]/g,"").split(" ");const gnomeVersionNum=gnomeVersion.length==3?Number(gnomeVersion[2]):0;return gnomeVersionNum>=42?"color-scheme":"gtk-theme"}monitorTheme(){let monitor=null;const{DESKTOP_SESSION}=process.env;switch(DESKTOP_SESSION){case"deepin":monitor=spawn("gsettings",["monitor","com.deepin.dde.appearance","gtk-theme",]);break;case"gnome":case"gnome-classic":monitor=spawn("gsettings",["monitor","org.gnome.desktop.interface",this.gnomeScheme,]);break;default:console.warn(`NOT SUPPORTED!!!DESKTOP_SESSION:${DESKTOP_SESSION}`);break}monitor\&\&monitor.on("error",(err)=>{console.error("monitorTheme",err)});monitor\&\&monitor.stdout.on("data",e.debounce((chunk)=>{const data=chunk.toString();const t=data.toLowerCase().includes("dark");(this._theme=t?i.Dark:i.Light),this._onDidThemeChange.fire(this._theme)},400))}getDefaultTheme#' $find_result sed -i 's#}getDefaultTheme#}get isDark(){try{const{DESKTOP_SESSION}=process.env;console.log(DESKTOP_SESSION);let theme="";switch(DESKTOP_SESSION){case"deepin":theme=execSync(`gsettings get com.deepin.dde.appearance gtk-theme`);break;case"gnome":case"gnome-classic":theme=execSync(`gsettings get org.gnome.desktop.interface ${this.gnomeScheme}`);break;default:break}return theme.includes("dark");}catch(err){console.error("尝试获取主题信息失败,使用默认暗色",err);return true;}}get gnomeScheme(){const gnomeVersion=execSync(`gnome-shell --version`).toString().replace(/[\\r\\n]/g,"").split(" ");const gnomeVersionNum=gnomeVersion.length==3?Number(gnomeVersion[2]):0;return gnomeVersionNum>=42?"color-scheme":"gtk-theme"}monitorTheme(){try{let monitor=null;const{DESKTOP_SESSION}=process.env;switch(DESKTOP_SESSION){case"deepin":monitor=spawn("gsettings",["monitor","com.deepin.dde.appearance","gtk-theme",]);break;case"gnome":case"gnome-classic":monitor=spawn("gsettings",["monitor","org.gnome.desktop.interface",this.gnomeScheme,]);break;default:console.warn(`NOT SUPPORTED!!!DESKTOP_SESSION:${DESKTOP_SESSION}`);break}monitor\&\&monitor.on("error",(err)=>{console.error("monitorTheme",err)});monitor\&\&monitor.stdout.on("data",e.debounce((chunk)=>{const data=chunk.toString();const t=data.toLowerCase().includes("dark");(this._theme=t?i.Dark:i.Light),this._onDidThemeChange.fire(this._theme)},400));}catch(err){console.error("尝试监听主题失败!", err);}}getDefaultTheme#' $find_result
# fix update check # fix update check
find_result=$( grep -lr "whatsnew.html" "$tmp_dir/core.wxvpkg" ) find_result=$( grep -lr "whatsnew.html" "$tmp_dir/core.wxvpkg" )