2022-04-10 16:56:40 +08:00

268 lines
10 KiB
JavaScript

#!/usr/bin/env node
const { execSync, spawn } = require("child_process");
class CheckDark {
// 监听gsettings monitor org.gnome.desktop.interface 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", (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() {
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:
console.warn(
`NOT SUPPORTED !!! DESKTOP_SESSION: ${DESKTOP_SESSION}`
);
break;
}
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();
cd.monitorTheme();
console.log(cd.isDark);
function original() {
!(function (require, directRequire) {
"use strict";
const { execSync, spawn } = require("child_process");
Object.defineProperty(exports, "__esModule", { value: !0 }),
(exports.OSThemeController = exports.OSTheme = void 0);
const e = require("lodash"),
t = require("./e45a1736f0cff12ccd223e3f4dd75808.js");
var i;
!(function (e) {
(e[(e.Dark = 0)] = "Dark"),
(e[(e.Light = 1)] = "Light"),
(e[(e.Unknown = 2)] = "Unknown");
})((i = exports.OSTheme || (exports.OSTheme = {})));
const r = process.versions.nw || "0.0.0";
exports.OSThemeController = class {
constructor() {
(this._onDidThemeChange = new t.EasyEmitter()),
// debounce, 防抖动, 该函数会从上一次被调用后,延迟 400 毫秒后调用 func 方法
(this.onMediaQueryChange = e.debounce((e) => {
console.warn("onMediaQueryChange", e);
const t = e.matches;
(this._theme = t ? i.Dark : i.Light),
this._onDidThemeChange.fire(this._theme);
}, 400)),
(this._theme = void 0),
(this._isEnabled = void 0),
(this._mediaQuery2 = void 0),
this.monitorTheme();
}
static get shared() {
return (
this._shared || (this._shared = new this()), this._shared
);
}
get onDidThemeChange() {
return this._onDidThemeChange.event;
}
registerListeners() {
var e, t;
this.isEnabled() &&
(null === (e = this.mediaQuery) ||
void 0 === e ||
e.addEventListener("change", this.onMediaQueryChange),
null === (t = this.mediaQuery2) ||
void 0 === t ||
t.addEventListener("change", this.onMediaQueryChange));
}
getCurrentTheme() {
console.warn("getCurrentTheme");
return (
this._theme || (this._theme = this.tryGetCurrentTheme()),
this._theme
);
}
isEnabled() {
var e;
if (void 0 === this._isEnabled) {
const i = t.compareVersion("0.44.6", r) <= 0,
n =
"not all" !==
(null ===
(e = window.matchMedia(
"(prefers-color-scheme)"
)) || void 0 === e
? void 0
: e.media);
this._isEnabled = i && n;
}
return this._isEnabled;
}
tryGetCurrentTheme() {
if (this.isEnabled()) {
return this.isDark ? i.Dark : i.Light;
// return this.mediaQuery.matches ? i.Dark : i.Light;
}
return i.Unknown;
}
get mediaQuery() {
return (
this._mediaQuery ||
(this._mediaQuery = window.matchMedia(
"(prefers-color-scheme: dark)"
)),
this._mediaQuery
);
}
get mediaQuery2() {
return (
void 0 === this._mediaQuery2 &&
(global.contentWindow && global.contentWindow !== window
? (this._mediaQuery2 =
global.contentWindow.matchMedia(
"(prefers-color-scheme: dark)"
))
: (this._mediaQuery2 = null)),
this._mediaQuery2
);
}
// 额外添加功能 start
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() {
// 判断 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() {
return i.Dark;
}
};
})(require("licia/lazyImport")(require), require);
}