feat: 提升主题变化兼容性 #35

This commit is contained in:
msojocs 2022-04-10 16:56:40 +08:00
parent 2f18e2a178
commit 351c9a8613
4 changed files with 99 additions and 83 deletions

View File

@ -1,3 +1,7 @@
# 1.05.2203070-8 / 2022-04-10
- fix: 网络较差时vscode-ripgrep安装失败的问题
- feat: 主题深浅跟随系统变化感谢icepie的参与
# 1.05.2203070-7 / 2022-03-19 # 1.05.2203070-7 / 2022-03-19
- fix: cli - fix: cli
- 兼容ubuntu16.04 - 兼容ubuntu16.04

View File

@ -1,4 +1,5 @@
#!/bin/bash #!/bin/bash
# 此脚本用于使修改 core.wxvpkg 内的代码及时生效
set -e set -e
root_dir=$(cd `dirname $0`/.. && pwd -P) root_dir=$(cd `dirname $0`/.. && pwd -P)
a=$1 a=$1

View File

@ -16,21 +16,11 @@ class CheckDark {
break; break;
case "gnome": case "gnome":
case "gnome-classic": case "gnome-classic":
const gnomeVersion = execSync(`gnome-shell --version`).toString().replace(/[\r\n]/g, "").split(" ") monitor = spawn("gsettings", [
const gnomeVersionNum = gnomeVersion.length == 3 ? Number(gnomeVersion[2]) : 0 "monitor",
if (gnomeVersionNum >= 42) { "org.gnome.desktop.interface",
monitor = spawn("gsettings", [ this.gnomeScheme,
"monitor", ]);
"org.gnome.desktop.interface",
"color-scheme",
]);
} else {
monitor = spawn("gsettings", [
"monitor",
"org.gnome.desktop.interface",
"gtk-theme",
]);
}
break; break;
default: default:
console.warn( console.warn(
@ -46,7 +36,7 @@ class CheckDark {
monitor.stdout.on("data", (chunk) => { monitor.stdout.on("data", (chunk) => {
// TODO: 防抖动包装 // TODO: 防抖动包装
const data = chunk.toString(); const data = chunk.toString();
const t = data.includes("dark") || data.includes("Dark"); const t = data.toLowerCase().includes("dark");
console.log(data); console.log(data);
console.log("dark", t); console.log("dark", t);
// (this._theme = t ? i.Dark : i.Light), // (this._theme = t ? i.Dark : i.Light),
@ -65,24 +55,29 @@ class CheckDark {
break; break;
case "gnome": case "gnome":
case "gnome-classic": case "gnome-classic":
// 判断 Gnome-Shell 版本 theme = execSync(
const gnomeVersion = execSync(`gnome-shell --version`).toString().replace(/[\r\n]/g, "").split(" ") `gsettings get org.gnome.desktop.interface ${this.gnomeScheme}`
const gnomeVersionNum = gnomeVersion.length == 3 ? Number(gnomeVersion[2]) : 0 );
if (gnomeVersionNum >= 42) {
theme = execSync(
`gsettings get org.gnome.desktop.interface color-scheme`
);
} else {
theme = execSync(
`gsettings get org.gnome.desktop.interface gtk-theme`
);
}
break; break;
default: default:
console.warn(
`NOT SUPPORTED !!! DESKTOP_SESSION: ${DESKTOP_SESSION}`
);
break; break;
} }
return theme.includes("dark") || theme.includes("Dark"); console.log(theme.toString());
return theme.toString().toLowerCase().includes("dark");
}
get gnomeScheme() {
// 判断 Gnome-Shell 版本
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";
} }
} }
const cd = new CheckDark(); const cd = new CheckDark();
@ -127,54 +122,13 @@ function original() {
get onDidThemeChange() { get onDidThemeChange() {
return this._onDidThemeChange.event; return this._onDidThemeChange.event;
} }
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",
"gtk-theme",
]);
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) => {
// 防抖动包装 防抖动, 该函数会从上一次被调用后,延迟 400 毫秒后调用 本方法
const data = chunk.toString();
const t = data.includes("dark");
console.warn(data);
console.warn("dark", t);
(this._theme = t ? i.Dark : i.Light),
this._onDidThemeChange.fire(this._theme);
}, 400));
}
registerListeners() { registerListeners() {
var e, t; var e, t;
this.isEnabled() && this.isEnabled() &&
(null === (e = this.mediaQuery) || (null === (e = this.mediaQuery) ||
void 0 === e || void 0 === e ||
e.addEventListener("change", this.onMediaQueryChange), e.addEventListener("change", this.onMediaQueryChange),
null === (t = this.mediaQuery2) || null === (t = this.mediaQuery2) ||
void 0 === t || void 0 === t ||
t.addEventListener("change", this.onMediaQueryChange)); t.addEventListener("change", this.onMediaQueryChange));
} }
@ -211,24 +165,25 @@ function original() {
get mediaQuery() { get mediaQuery() {
return ( return (
this._mediaQuery || this._mediaQuery ||
(this._mediaQuery = window.matchMedia( (this._mediaQuery = window.matchMedia(
"(prefers-color-scheme: dark)" "(prefers-color-scheme: dark)"
)), )),
this._mediaQuery this._mediaQuery
); );
} }
get mediaQuery2() { get mediaQuery2() {
return ( return (
void 0 === this._mediaQuery2 && void 0 === this._mediaQuery2 &&
(global.contentWindow && global.contentWindow !== window (global.contentWindow && global.contentWindow !== window
? (this._mediaQuery2 = ? (this._mediaQuery2 =
global.contentWindow.matchMedia( global.contentWindow.matchMedia(
"(prefers-color-scheme: dark)" "(prefers-color-scheme: dark)"
)) ))
: (this._mediaQuery2 = null)), : (this._mediaQuery2 = null)),
this._mediaQuery2 this._mediaQuery2
); );
} }
// 额外添加功能 start
get isDark() { get isDark() {
const { DESKTOP_SESSION } = process.env; const { DESKTOP_SESSION } = process.env;
console.log(DESKTOP_SESSION); console.log(DESKTOP_SESSION);
@ -242,7 +197,7 @@ function original() {
case "gnome": case "gnome":
case "gnome-classic": case "gnome-classic":
theme = execSync( theme = execSync(
`gsettings get org.gnome.desktop.interface gtk-theme` `gsettings get org.gnome.desktop.interface ${this.gnomeScheme}`
); );
break; break;
@ -251,6 +206,59 @@ function original() {
} }
return theme.includes("dark"); return theme.includes("dark");
} }
get gnomeScheme() {
// 判断 Gnome-Shell 版本
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) => {
// 防抖动包装 防抖动, 该函数会从上一次被调用后,延迟 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
getDefaultTheme() { getDefaultTheme() {
return i.Dark; return i.Dark;
} }

View File

@ -72,11 +72,14 @@ fi
# fix theme # fix theme
find_result=$( grep -lr "OSThemeController=" "$tmp_dir/core.wxvpkg" ) find_result=$( grep -lr "OSThemeController=" "$tmp_dir/core.wxvpkg" )
echo "theme: $find_result" echo "theme: $find_result"
# require of child_process
sed -i 's/"use strict";O/"use strict";const {execSync,spawn}=require("child_process");O/' $find_result sed -i 's/"use strict";O/"use strict";const {execSync,spawn}=require("child_process");O/' $find_result
# replace listener to monitor
sed -i 's/this.registerListeners()/this.monitorTheme()/' $find_result sed -i 's/this.registerListeners()/this.monitorTheme()/' $find_result
sed -i 's/}registerListeners/}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","gtk-theme",]);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.includes("dark");console.warn(data);console.warn("dark",t);(this._theme=t?i.Dark:i.Light),this._onDidThemeChange.fire(this._theme)},400))}registerListeners/' $find_result # replace check func
sed -i 's/mediaQuery.matches/isDark/' $find_result sed -i 's/mediaQuery.matches/isDark/' $find_result
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 gtk-theme`);break;default:break}return theme.includes("dark")}getDefaultTheme/' $find_result # 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
# pack 路径 到 文件 # pack 路径 到 文件
echo "pack" echo "pack"