node-ddk
Version:
1,303 lines (1,302 loc) • 40.2 kB
JavaScript
var tt = Object.defineProperty;
var nt = (e, t, n) => t in e ? tt(e, t, { enumerable: !0, configurable: !0, writable: !0, value: n }) : e[t] = n;
var b = (e, t, n) => nt(e, typeof t != "symbol" ? t + "" : t, n);
import { session as oe, ipcMain as q, BrowserWindow as K, nativeImage as S, Tray as it, Menu as se, app as f, Notification as ot, desktopCapturer as st, shell as me, dialog as re, safeStorage as he } from "electron";
import L from "os";
import A from "node:path";
import P from "node:fs";
import V from "node:url";
import ge from "node:os";
const c = {};
let N;
const ye = () => N || (N = oe.defaultSession, N), ae = (e) => oe.fromPartition(e), rt = (e) => oe.fromPartition("persist:" + e);
let $;
const at = () => ($ || ($ = ae("ddk-local-file")), $);
let G;
const lt = () => (G || (G = ae("ddk-http")), G);
let Ae = {
getDefaultSession: ye,
getPartitionSession: ae,
getPersistPartitionSession: rt,
getFileSession: at,
getHttpSession: lt
};
const dt = () => {
ye();
}, C = {
init: dt,
...Ae
}, ut = (e) => {
let t = parseInt(e);
return isNaN(t) ? 0 : t;
}, le = () => (/* @__PURE__ */ new Date()).getTime();
let fe = 1;
const ct = () => (fe++, le() + "_" + fe);
function ft(e, t) {
let n, i = null, o = 0;
return function() {
n = this, i = arguments;
let s = le();
if (s - o > t) {
o = s, e.apply(n, i), n = i = null;
return;
}
};
}
const wt = async (e) => new Promise((t) => {
setTimeout(() => {
t("");
}, e);
}), pt = (e) => {
let t = {
status: "OK",
type: "other",
size: 0,
ctime: 0,
mtime: 0
};
try {
const n = P.statSync(e);
n.isFile() ? t.type = "file" : n.isDirectory() && (t.type = "directory"), t.size = n.size, t.ctime = n.ctime.getTime(), t.mtime = n.mtime.getTime();
} catch (n) {
n.code === "ENOENT" ? t.status = "none" : t.status = "error";
}
return t;
}, m = {
parseInt: ut,
getTime: le,
getId: ct,
debounce: ft,
sleep: wt,
getInfo: pt
};
let v = {}, I = {}, mt = 1, ht = (/* @__PURE__ */ new Date()).getTime();
function gt() {
function e() {
let n = {};
K.getAllWindows().forEach(function(o) {
n[o.webContents.id] = !0;
});
let i = Object.keys(I);
for (let o = 0; o < i.length; o++) {
let a = i[o], s = I[a];
if (!s)
continue;
if (!s.webContentsId || s.webContentsId in n)
return;
delete I[a];
let r = {
status: "DDK:NOWINDOW",
data: {}
};
s.resolve(r);
}
}
function t() {
e(), setTimeout(() => {
t();
}, 3e3);
}
setTimeout(() => {
t();
}, 1e4);
}
const yt = async (e) => ({
status: "DDK:NOMODULE",
data: {
desc: "cmdDefault"
}
}), At = (e, t) => {
v[e] = t, q.handle(e + "^ddk-module", async (n, i) => {
i = { ...i };
let o = i.sn + "", a = n.sender.id, s = { ...i, notify: null };
return s.webContentsId = a, s.fromWindowUniqueId = d.getUniqueIdByWebContentsId(n.sender.id), s.notify = (r) => {
let u = d.getWindowByWebContentsId(a);
if (!u || u.isDestroyed())
return;
let p = {
sn: o,
data: r
};
u.webContents.send("moduleMessageReceiverChannel^ddk-message", p);
}, new Promise((r) => {
t(s).then((u) => {
let p = {
sn: o,
status: u.status || "OK",
data: u.data
};
r(p);
});
});
});
}, Dt = () => {
q.on("rendererResponseChannel^ddk-proxy", (e, t) => {
let n = { ...t }, i = n.sn + "", o = I[i];
o && (delete I[i], n.fromWindowUniqueId = d.getUniqueIdByWebContentsId(e.sender.id), o.resolve(n));
});
}, _t = () => {
q.handle("rendererProxyChannel^ddk-proxy", async (e, t) => {
let n = { ...t };
n.fromWindowUniqueId = d.getUniqueIdByWebContentsId(e.sender.id);
let i = n.sn + "";
return new Promise((o) => {
let a = {
sn: n.sn,
status: "",
data: {}
}, s = d.getWindowByUniqueId(n.toWindowUniqueId + "");
if (!s || s.isDestroyed()) {
a.status = "DDK:NOWINDOW", o(a);
return;
}
I[i] = {
resolve: o,
stamp: m.getTime(),
webContentsId: s.webContents.id,
sn: n.sn
}, s.webContents.send("rendererRequestChannel^ddk-module", n);
});
});
}, Wt = () => {
q.on("app-quit^ddk-system", (e, t) => {
d.appQuit();
}), q.on("ondragstart^ddk-system", (e, t) => {
const n = {};
t.length && t.length === 1 && (n.file = t[0]), t.length > 1 && (n.files = t), n.icon = A.join(__dirname, "../static/icons", "32x32.png"), e.sender.startDrag(n);
}), q.on("open-dev-tools^ddk-system", (e, t) => {
t && t.open ? e.sender.openDevTools() : e.sender.closeDevTools();
});
}, bt = async (e) => (e = { ...e }, new Promise((t) => {
let n = e.module, i = e.toWindowUniqueId;
if (i) {
let o = "R" + ht + "_" + mt++;
I[o] = {
resolve: t,
stamp: m.getTime(),
webContentsId: 0,
sn: o
};
let a = d.getWindowByUniqueId(i + "");
if (!a || a.isDestroyed()) {
t({
sn: o,
status: "DDK:NOWINDOW",
data: {}
});
return;
}
let s = {
module: e.module,
data: e.data,
timeout: e.data,
sn: o
};
a.webContents.send("rendererRequestChannel^ddk-module", s);
} else {
let o = yt;
v[n] ? o = v[n] : v.default && (o = v.default);
let a = {
module: e.module,
data: e.data,
timeout: e.timeout || 0,
notify: (s) => {
e.notify && e.notify(s);
}
};
o(a).then((s) => {
let r = {
status: s.status || "OK",
data: s.data
};
t(r);
});
}
})), It = (e, t) => {
De(null, e, t);
}, De = (e, t, n) => {
let i = {
sn: t,
status: "OK",
data: n
};
e || (e = c.app_main_window), typeof e == "string" && (e = d.getWindowByUniqueId(e)), !(!e || e.isDestroyed()) && e.webContents.send("messageReceiverChannel^ddk-message", i);
};
Dt(), _t(), Wt(), gt();
const Ft = () => {
};
let _e = {
registerListenModule: At,
request: bt,
sendMessage: It,
sendMessageToWindow: De
};
const l = {
init: Ft,
..._e
};
let g, y, Q, X, T, M = "NODE-DDK";
const Mt = () => g, qt = (e) => {
try {
y = S.createFromPath(e);
} catch {
}
}, We = () => {
if (!g || !Array.isArray(X))
return;
const e = se.buildFromTemplate(X);
g.setContextMenu(e), L.type() == "Darwin" && f.dock.setMenu(e);
}, St = (e) => {
X = [...e], We();
}, be = (e) => {
M = e + "", M == "" && (M = " "), g && g.setToolTip(M);
}, Ct = (e) => {
T = e;
}, Tt = () => {
T = async () => {
try {
let e = c.app_main_window;
if (!e || e.isDestroyed())
return;
e.showInactive(), e.show();
} catch {
}
};
}, vt = () => {
T = async () => {
try {
let e = c.app_main_window;
if (!e || e.isDestroyed())
return;
e.hide();
} catch {
}
};
}, xt = () => {
T = async () => {
try {
let e = c.app_main_window;
if (!e || e.isDestroyed())
return;
e.isVisible() ? e.hide() : (e.showInactive(), e.show());
} catch {
}
};
};
let we = !1;
function kt() {
if (!we) {
if (we = !0, !y) {
try {
y = S.createFromPath(c.generalFavicon);
} catch {
}
y || (y = S.createEmpty());
}
g.setToolTip(M), g.on("click", m.debounce(() => {
if (T)
try {
T();
} catch {
}
}, 300)), We();
}
}
const Ie = () => {
g.setImage(y);
}, Pt = () => {
g.setImage(Q);
};
let B, U = !0;
const Fe = () => {
clearInterval(B), U = !0, Ie(), g.setToolTip(M);
}, Ot = async (e) => {
let n = { ...e }.data, i = n.period, o = 0;
i > 0 && (o = m.getTime() + i);
let a = n.speed;
a === void 0 && (a = 500);
let s = n.tooltip;
return B && clearInterval(B), B = setInterval(() => {
U ? Pt() : Ie(), U = !U, o > 0 && m.getTime() > o && Fe();
}, a), s && g.setToolTip(s + ""), { data: {} };
}, Kt = async (e) => (Fe(), { data: {} }), Lt = async (e) => {
let i = { ...e }.data.tooltip + "";
return be(i), { data: {} };
}, zt = () => {
if (!y) {
try {
y = S.createFromPath(c.generalFavicon);
} catch {
}
y || (y = S.createEmpty());
}
Q || (Q = S.createFromDataURL("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAQAAAD2e2DtAAAAAmJLR0QAAKqNIzIAAACVSURBVHja7cEBAQAAAICQ/q/uCAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAqgEBHgABvBu5bwAAAABJRU5ErkJggg==")), g = new it(y), l.registerListenModule("DDK:startTrayFlashing", Ot), l.registerListenModule("DDK:stopTrayFlashing", Kt), l.registerListenModule("DDK:setToolTip", Lt);
};
let Me = {
getTray: Mt,
setDefaultImage: qt,
setContextMenu: St,
setToolTip: be,
setOnClick: Ct,
setShowMainWindowOnClick: Tt,
setHideMainWindowOnClick: vt,
setShowHideSwitchMainWindowOnClick: xt,
activeTray: kt
};
const qe = {
init: zt,
...Me
};
let Se = {}, de;
const Ce = (e, t) => {
Se[e] = t || null;
}, Rt = (e) => {
Ce(e);
}, Nt = (e) => {
de = e;
}, Bt = () => {
de = void 0;
}, Ut = (e, t) => {
let n = Se[e.type] || de;
if (!n) {
t.removeMenu();
return;
}
try {
const i = se.buildFromTemplate(n);
t.setMenu(i);
} catch {
console.error("设置自定义菜单失败");
}
}, Et = async (e) => {
let t = e.data;
t = { ...t };
let n = t.menuId, i = c.___getWindowByUniqueId(e.fromWindowUniqueId);
if (!i)
return { data: {} };
function o(s) {
return s = [...s], s.forEach((r) => {
r.submenu && (r.submenu = o(r.submenu));
let u = r.clickId;
if (u) {
let p = (_, R, W) => {
!i || i.isDestroyed() || l.sendMessageToWindow(i, "DDK:systemMenuEvent", {
menuId: n,
clickId: u,
ctrlKey: W.ctrlKey,
metaKey: W.metaKey,
shiftKey: W.shiftKey,
altKey: W.altKey,
triggeredByAccelerator: W.triggeredByAccelerator
});
};
r.click = p;
}
}), s;
}
let a = o(t.menus);
try {
if (!i.isDestroyed()) {
const s = se.buildFromTemplate(a);
let r, u;
t.position && (r = t.position.x, u = t.position.y, r !== void 0 && (r = Math.ceil(r), u = Math.ceil(u || 0))), s.popup({
x: r,
y: u,
callback: () => {
!i || i.isDestroyed() || l.sendMessageToWindow(i, "DDK:systemMenuEvent", { menuId: n, clickId: "afterClose" });
}
});
}
} catch {
console.error("设置右键菜单失败");
}
return { data: {} };
};
l.registerListenModule("DDK:systemMenuEvent", Et), f.applicationMenu = null;
let Te = {
setMenuByWindowType: Ce,
removeMenuByWindowType: Rt,
setGlobalMenu: Nt,
removeGlobalMenu: Bt
};
const jt = () => {
}, ve = {
init: jt,
setMenu: Ut,
...Te
}, xe = (e) => (e = A.join(c._sessionData, "ddk-data", e), P.existsSync(e) || P.mkdirSync(e, { recursive: !0 }), e);
class Ht {
constructor(t) {
b(this, "changed");
b(this, "pathId");
b(this, "id");
b(this, "pathname");
b(this, "jsdata");
b(this, "maxItem");
t = { ...t }, this.changed = !1, this.pathId = t.pathId || "cache_data", this.id = t.id, this.pathname = "", this.jsdata = {}, this.maxItem = t.maxItem || 0;
}
load() {
let t = xe(this.pathId);
this.pathname = A.join(t, this.id);
let n = {};
try {
n = require(this.pathname), JSON.stringify(n).startsWith("{") && this.maxItem && Object.keys(n).length > this.maxItem && (n = {});
} catch {
n = {};
}
this.jsdata = { ...n }, this.timeout_save(3e3);
}
getData() {
return this.jsdata;
}
setChanged() {
this.changed = !0;
}
async save() {
let t = this;
if (!t.changed)
return;
t.changed = !1;
let n = JSON.stringify(t.jsdata);
return new Promise((i) => {
try {
P.writeFile(t.pathname, n, () => {
i("");
});
} catch {
i("");
}
});
}
timeout_save(t) {
let n = this;
setTimeout(async () => {
await n.save(), n.timeout_save(1e3);
}, t);
}
}
const Zt = (e) => new Ht(e);
let $t = {
getDataDirPath: xe,
getJsonCachedFile: Zt
};
const ke = {
...$t
};
let h = {};
const Y = () => {
c.app_true_quit_flag = !0, c.app_main_window = null, f.quit(), setTimeout(() => {
f.exit();
}, 100);
};
let k = {}, D = {};
const Gt = (e) => {
e || (e = [
{
type: "main",
minWidth: 100,
minHeight: 100
}
]), e = [...e], e.push({
type: "DDK_desktopCapturerScreenshot",
frame: !1,
// fullscreenable: true,
// fullscreen: true,
alwaysOnTop: !0,
transparent: !0,
skipTaskbar: !0,
kiosk: !0,
width: 1e4,
height: 1e4
}), D.default = [], e.forEach((t) => {
t = { ...t }, t.minWidth === void 0 && (t.minWidth = 100), t.minHeight === void 0 && (t.minHeight = 100), k[t.type] = t, t.frame === !1 ? D["noframe," + t.minWidth + "," + t.minHeight] = [] : D["frame," + t.minWidth + "," + t.minHeight] = [];
}), Object.keys(D).length > 5 && console.warn("(minWith x minHeight) X (frame/onframe) 种类(" + Object.keys(D).length + ") > 5, 可能会严重消耗系统资源"), k.main || (console.error('窗口的 type 必须有一个是 "main"'), process.exit(1));
};
function Jt(e, t) {
let n = t.webContents.id;
t.on("closed", (i) => {
try {
delete h[n];
} catch {
}
t == c.app_main_window && Y();
}), t.on("close", (i) => {
if (c.app_true_quit_flag || t.isDestroyed())
return;
let o = !1, a = h[t.webContents.id];
if (a && a.beforeunloadFlag == !0 && (o = !0), !o) {
t == c.app_main_window && Y();
return;
}
i.preventDefault(), l.sendMessageToWindow(t, "DDK:beforeunloadOnce", {});
});
}
function Vt(e, t) {
t.webContents.on("will-prevent-unload", (n) => {
n.preventDefault();
});
}
function Qt(e, t) {
if (e.navigate === !1)
return;
let n = t.webContents;
n.on("new-window", (i, o) => {
i.preventDefault();
}), n.on("will-navigate", (i, o) => {
i.preventDefault();
});
}
function Xt(e, t) {
e = { ...e }, t.webContents.setWindowOpenHandler(({ url: n, features: i }) => {
let o = "";
function a() {
if (!i || t.isDestroyed())
return !1;
let _ = i.split("_NODE_DDK_20240811_=");
return _.length < 2 ? !1 : (o = _[1], !0);
}
if (!a())
return { action: "deny" };
let s = {
parent: t,
modal: !0,
webPreferences: {
preload: A.join(__dirname, "preload.js")
}
}, r = H(o);
s.frame = r.frame !== !1, s.alwaysOnTop = r.alwaysOnTop === !0, s.transparent = r.transparent === !0, s.fullscreenable = r.fullscreenable === !0, s.fullscreen = r.fullscreen === !0, Number.isInteger(r.width) && (s.width = r.width, s.height = r.height), s.skipTaskbar = r.skipTaskbar === !0, s.kiosk = r.kiosk === !0, r.menu || (s.autoHideMenuBar = !0);
let u = s.webPreferences || {};
return r.devTools || (u.devTools = !1), {
action: "allow",
overrideBrowserWindowOptions: s
};
});
}
function Yt(e, t) {
e = { ...e }, t.webContents.on("found-in-page", (n, i) => {
let o = c.findInPageSet, a = i.requestId, s = o[a];
delete o[a], s && s({ data: { result: { matches: i.matches, sn: i.activeMatchOrdinal - 1 } } });
});
}
let ee = ke.getJsonCachedFile({ id: "window_states.json" });
function en(e, t) {
if (e.windowStateType === void 0)
return;
let n = e.windowStateType + "", i = ee.getData(), o = i[n];
o && (o.x !== void 0 && t.setBounds({ x: o.x, y: o.y, width: o.w, height: o.h }), o.maximize && t.maximize());
let a = m.getTime(), s;
function r() {
let u = {}, p;
if (m.getTime() - a < 1e3) {
s || (s = setTimeout(() => {
a = 0, r();
}, 1e3));
return;
}
s && (clearTimeout(s), s = void 0), !t.isDestroyed() && (a = m.getTime(), u.maximize = t.isMaximized() ? 1 : 0, p = t.getPosition(), u.x = p[0], u.y = p[1], p = t.getSize(), u.w = p[0], u.h = p[1], i[n] = u, ee.setChanged());
}
t.on("resize", (u) => {
r();
}), t.on("move", (u) => {
r();
}), t.on("maximize", (u) => {
r();
}), t.on("unmaximize", (u) => {
r();
});
}
function tn(e, t) {
c.generalFavicon && t.setIcon(c.generalFavicon), e.width !== void 0 && e.height !== void 0 && t.setSize(e.width, e.height), e.zoomFactor !== void 0 && t.webContents.setZoomFactor(e.zoomFactor), e.hasShadow === !1 && t.setHasShadow(!1), e.backgroundColor !== void 0 && t.setBackgroundColor(e.backgroundColor), e.maximize ? t.maximize() : e.minimize && t.minimize(), e.needCenter && t.center(), e.autoDevTools && t.webContents.openDevTools();
}
function nn(e, t) {
let n = {};
K.getAllWindows().forEach(function(i) {
n[i.webContents.id] = !0;
}), Object.keys(h).forEach(function(i) {
n[i] || delete h[i];
}), h[t.webContents.id] = e;
}
function on(e) {
let t = ue(e);
if (!t)
return null;
let n = z(t.webContentsId);
return !n || n.isDestroyed() ? (delete h[t.webContentsId], null) : n;
}
function Pe(e, t) {
ve.setMenu(e, t), qe.activeTray(), Jt(e, t), Vt(e, t), Qt(e, t), Xt(e, t), Yt(e, t), en(e, t), tn(e, t), nn(e, t);
}
const sn = (e) => {
let t = z(e.webContentsId);
!t || t.isDestroyed() || Pe(e, t);
}, Oe = (e) => {
let t = e.split(","), n = {
show: !1,
minWidth: m.parseInt(t[1]),
minHeight: m.parseInt(t[2]),
webPreferences: {
// offscreen: true,
session: C.getDefaultSession(),
preload: A.join(__dirname, "preload.js"),
webSecurity: !0,
contextIsolation: !0,
nodeIntegration: !1,
nodeIntegrationInWorker: !0,
allowRunningInsecureContent: !1,
disableHtmlFullscreenWindowResize: !1,
spellcheck: !1
}
};
t[0] == "noframe" && (n.frame = !1);
let i = new K(n);
return f.isPackaged ? i.loadFile(A.join(__dirname, "../dist/index.html")) : i.loadURL("http://localhost:3000/index.html"), i;
}, Ke = () => {
for (let e of Object.keys(D)) {
let t = D[e];
if (t.length > 1)
continue;
let n = Oe(e);
t.push(n);
}
setTimeout(async () => {
Ke();
}, 1e3);
}, rn = (e) => {
c.__window_pool_mail == null && (c.__window_pool_mail = [], c.__window_pool_other = []);
let t = H(e.type), n = "frame";
t.frame === !1 && (n = "noframe"), n += "," + t.minWidth + "," + t.minHeight;
let o = D[n].shift();
return o || (o = Oe(n), o);
};
function an(e, t, n) {
let i = JSON.stringify(n);
t.webContents.executeJavaScript("window.___NODE_DDK_WINDOW_INFO___=" + i + ";if(window.___NODE_DDK_WINDOW_INFO_DEAL___)window.___NODE_DDK_WINDOW_INFO_DEAL___();", !0);
}
let ln = "minWidth,minHeight,resizable,minimizable,minimize,maximizable,maximize,fullscreenable,fullscreen,alwaysOnTop,frame,menu,skipTaskbar,kiosk,focus,needCenter,x,y,width,height,homePage,hide,backgroundColor,navigate,devTools,autoDevTools,transparent,zoomFactor,hasShadow,windowStateType", dn = ln.split(",");
const Le = (e) => {
let t = {
webContentsId: -1,
appName: f.getName(),
appVersion: f.getVersion(),
devMode: process.env.NODE_ENV === "development",
...e
}, n = H(e.type);
dn.forEach((o) => {
e[o] === void 0 && (t[o] = n[o]);
}), t.args = t.args || {};
let i = on(t.uniqueId);
return i ? (i.show(), i.focus(), i) : (i = rn(e), t.menu || i.removeMenu(), e.uniqueId == "main" && (c.app_main_window = i), t.webContentsId = i.webContents.id, an(e, i, t), Pe(t, i), t.hide ? i.hide() : i.show(), i);
}, un = (e = -1) => h[e] || null, cn = (e = -1) => {
let t = h[e];
return t ? t.uniqueId : "";
}, ue = (e) => {
let t = Object.keys(h).find((n) => h[n].uniqueId == e);
return t ? h[t] : null;
}, z = (e) => {
let t = null;
return K.getAllWindows().forEach(function(n) {
t || n.webContents.id == e && (t = n);
}), t;
}, j = (e) => {
let t = ue(e + "");
return t ? z(t.webContentsId) : null;
}, fn = async () => {
Le({
type: "main",
uniqueId: "main",
args: {}
});
}, wn = () => {
let e = c.app_main_window;
return !e || e.isDestroyed() ? null : e;
}, pn = () => {
let e = c.app_main_window;
return e || null;
}, H = (e) => {
let t = k[e];
return t || (t = k[Object.keys(k)[0]]), t;
}, mn = (e) => {
let t;
if (e.toWindowUniqueId !== void 0 && e.toWindowUniqueId != "" ? t = j(e.toWindowUniqueId) : (t = j(e.fromWindowUniqueId), t || (t = z(e.webContentsId))), !(!t || t.isDestroyed()))
return t;
}, hn = async () => {
f.on("browser-window-created", (e, t) => {
});
}, gn = () => {
c.___getWindowByUniqueId = j, hn(), ee.load(), setTimeout(() => {
Ke();
}, 2e3);
};
let ze = {
setWindowTypes: Gt,
createWindow: Le,
getWindowInfoByWebContentsId: un,
getWindowInfoByUniqueId: ue,
getWindowByWebContentsId: z,
getWindowByUniqueId: j,
getUniqueIdByWebContentsId: cn,
getMainWindow: wn,
getMainRawWindow: pn,
getWindowFromModuleRequest: mn
};
const d = {
init: gn,
appQuit: Y,
get_window_caches: () => h,
windowOpen_init: sn,
getWindowType: H,
createMainWindow: fn,
...ze
};
let w = { data: {} };
const yn = async (e) => {
let n = { ...e }.data, i = n.uniqueId;
return i === void 0 && (i = m.getId()), new Promise((o) => {
d.createWindow({
type: n.type,
uniqueId: i,
args: n.args || {}
}), o(w);
});
}, An = async (e) => {
let t = { ...e }, n = d.getWindowFromModuleRequest(t);
return n && n.close(), w;
}, Dn = async (e) => {
let t = { ...e }, n = d.getWindowFromModuleRequest(t);
if (n) {
let i = d.getWindowInfoByWebContentsId(n.webContents.id);
i && (i.beforeunloadFlag = !1), n.close(), setTimeout(() => {
n.isDestroyed() || n.destroy();
}, 1);
}
return w;
}, _n = async (e) => {
let t = { ...e }, i = t.data.steps || [], o = d.getWindowFromModuleRequest(t);
if (!o)
return w;
for (let a = 0; a < i.length; a++) {
let s = i[a], r = s.type;
try {
if (r == "sleep") {
await m.sleep(s.sleep);
continue;
}
if (o.isDestroyed())
break;
if (r == "show")
o.show();
else if (r == "hide")
o.hide();
else if (r == "rectangle")
o.setBounds(s);
else if (r == "position")
o.setPosition(s.x, s.y);
else if (r == "size")
o.setSize(s.width, s.height);
else if (r == "center")
o.center();
else if (r == "maximize")
o.maximize();
else if (r == "unmaximize")
o.unmaximize();
else if (r == "minimize")
o.minimize();
else if (r == "fullscreen")
o.setFullScreen(!0);
else if (r == "unfullscreen")
o.setFullScreen(!1);
else if (r == "alwaysOnTop")
o.setAlwaysOnTop(!0);
else if (r == "unalwaysOnTop")
o.setAlwaysOnTop(!1);
else if (r == "setZoomFactor")
o.webContents.setZoomFactor(s.factor);
else if (r == "increaseZoomFactor") {
let u = o.webContents.getZoomFactor();
u += s.factor, u > 10 ? u = 10 : u < 0.1 && (u = 0.1), o.webContents.setZoomFactor(u);
}
} catch {
}
}
return w;
}, Wn = async (e) => {
let t = { ...e }, n = t.data, i = d.getWindowFromModuleRequest(t);
return i && (n.x !== void 0 && n.width !== void 0 ? i.setBounds(n) : (n.x !== void 0 && i.setPosition(n.x, n.y), n.width !== void 0 && i.setSize(n.width, n.height))), w;
}, bn = async (e) => {
let t = { ...e }, n = d.getWindowFromModuleRequest(t), i = {
x: 0,
y: 0,
width: 0,
height: 0
};
return n && (i = n.getBounds()), { data: i };
}, In = async (e) => {
let t = { ...e };
t.data;
let n = d.getWindowFromModuleRequest(t);
return n && n.center(), w;
}, Fn = async (e) => {
let t = { ...e }, n = d.getWindowFromModuleRequest(t);
return n && (n.blurWebView(), n.blur(), n.minimize()), w;
}, Mn = async (e) => {
let t = { ...e }, n = d.getWindowFromModuleRequest(t);
return n && n.maximize(), w;
}, qn = async (e) => {
let t = { ...e }, n = d.getWindowFromModuleRequest(t);
return n && n.unmaximize(), w;
}, Sn = async (e) => {
let t = { ...e }, n = d.getWindowFromModuleRequest(t), i = !1;
return n && (n.isMaximized() ? (n.unmaximize(), i = !1) : (n.maximize(), i = !0)), { data: { isMaximized: i } };
}, Cn = async (e) => {
let t = { ...e }, n = d.getWindowFromModuleRequest(t);
return n && (n.setFullScreenable(!0), n.setFullScreen(!0)), w;
}, Tn = async (e) => {
let t = { ...e }, n = d.getWindowFromModuleRequest(t);
return n && n.setFullScreen(!1), w;
}, vn = async (e) => {
let t = { ...e }, n = d.getWindowFromModuleRequest(t);
return n && n.setAlwaysOnTop(!0), w;
}, xn = async (e) => {
let t = { ...e }, n = d.getWindowFromModuleRequest(t);
return n && n.setAlwaysOnTop(!1), w;
}, kn = async (e) => {
let t = 0, n = 0, i = 0;
return K.getAllWindows().forEach((o) => {
o.isDestroyed() || (o.isMinimized() ? t++ : o.isFocused() ? n++ : i++);
}), { data: { minimized: t, focused: n, other: i } };
}, Pn = async (e) => {
let t = { ...e }, n = d.getWindowFromModuleRequest(t);
return n && (n.show(), n.focus()), w;
}, On = async (e) => {
let t = { ...e }, n = t.data.factor, i = d.getWindowFromModuleRequest(t);
return i ? (i.webContents.setZoomFactor(n), { data: { factor: n } }) : w;
}, Kn = async (e) => {
let t = { ...e }, n = t.data.factor, i = d.getWindowFromModuleRequest(t);
if (!i)
return w;
let o = i.webContents.getZoomFactor();
return o += n, o > 10 ? o = 10 : o < 0.1 && (o = 0.1), i.webContents.setZoomFactor(o), { data: { factor: o } };
}, Ln = async (e) => {
let t = { ...e }, n = d.getWindowFromModuleRequest(t), i = 1;
return n && (i = n.webContents.getZoomFactor()), { data: { factor: i } };
}, zn = async (e) => {
let t = { ...e }, n = d.getWindowFromModuleRequest(t);
return n && n.hide(), w;
}, Rn = async (e) => {
let t = { ...e }, n = d.getWindowFromModuleRequest(t);
return n && n.show(), w;
}, Nn = async (e) => {
let t = { ...e }, n = d.getWindowFromModuleRequest(t);
return n && n.flashFrame(!0), w;
}, Bn = async (e) => {
let t = { ...e }, n = d.getWindowFromModuleRequest(t);
return n && n.flashFrame(!1), w;
}, Un = async (e) => {
let t = { ...e }, n = d.getWindowFromModuleRequest(t);
return n && n.setTitle(t.data.title + ""), w;
}, En = async (e) => {
let t = { ...e }, n = d.getWindowFromModuleRequest(t), i = "";
return n && (i = n.getTitle() + ""), { data: { title: i } };
}, jn = async (e) => {
let t = { ...e }, n = d.getWindowFromModuleRequest(t);
if (n) {
let i = d.getWindowInfoByWebContentsId(n.webContents.id);
i && (i.beforeunloadFlag = !0);
}
return w;
}, Hn = async (e) => {
let t = { ...e }, n = d.getWindowFromModuleRequest(t);
function i() {
let o = !1;
n && !n.isDestroyed() && n.isMaximized() && (o = !0), l.sendMessageToWindow(n || null, "DDK:maximizeState", { isMaximized: o });
}
return n ? (n.on("maximize", (o) => {
i();
}), n.on("unmaximize", (o) => {
i();
}), { data: { isMaximized: n.isMaximized() } }) : { data: { isMaximized: !1 } };
}, Zn = async (e) => {
let t = { ...e }, n = t.data, i = d.getWindowType(t.data.type);
return i = { ...i }, i.webContentsId = t.webContentsId, i.type = n.type, i.uniqueId = n.uniqueId, i.args = {}, d.windowOpen_init(i), w;
};
l.registerListenModule("DDK:createWindow", yn), l.registerListenModule("DDK:closeWindow", An), l.registerListenModule("DDK:forcedCloseWindow", Dn), l.registerListenModule("DDK:operateWindowStepByStep", _n), l.registerListenModule("DDK:hideWindow", zn), l.registerListenModule("DDK:showWindow", Rn), l.registerListenModule("DDK:startFlashWindow", Nn), l.registerListenModule("DDK:stopFlashWindow", Bn), l.registerListenModule("DDK:getTitle", En), l.registerListenModule("DDK:setTitle", Un), l.registerListenModule("DDK:minimizeWindow", Fn), l.registerListenModule("DDK:maximizeWindow", Mn), l.registerListenModule("DDK:unmaximizeWindow", qn), l.registerListenModule("DDK:maximizeSwitchWindow", Sn), l.registerListenModule("DDK:setWindowFullscreen", Cn), l.registerListenModule("DDK:unsetWindowFullscreen", Tn), l.registerListenModule("DDK:setWindowAlwaysOnTop", vn), l.registerListenModule("DDK:unsetWindowAlwaysOnTop", xn), l.registerListenModule("DDK:setWindowRectangle", Wn), l.registerListenModule("DDK:setWindowCenter", In), l.registerListenModule("DDK:getWindowSize", bn), l.registerListenModule("DDK:getAllWindowStatistics", kn), l.registerListenModule("DDK:activeWindowAndFocus", Pn), l.registerListenModule("DDK:setWindowZoomFactor", On), l.registerListenModule("DDK:increaseWindowZoomFactor", Kn), l.registerListenModule("DDK:getWindowZoomFactor", Ln), l.registerListenModule("DDK:registerBeforeunloadOnce", jn), l.registerListenModule("DDK:registerMaximizeState", Hn), l.registerListenModule("DDK:registerWindowOpen", Zn);
let Re;
const $n = (e) => {
Re = e + "";
}, Gn = async (e) => {
let t = null;
const i = { ...e }.data;
let o = i.title + "", a = i.body + "", s = i.silent === !0, r = {}, u = Re;
u || (u = c.generalFavicon), u || (u = void 0), t = new ot({
title: o,
silent: s,
body: a,
icon: u
});
let p;
function _(R) {
if (p) {
let W = p;
p = null, W(R);
}
}
return new Promise((R) => {
p = R, t.on("click", () => {
r.type = "click", _({ data: r });
}), t.on("close", () => {
r.type = "cancle", _({ data: r });
}), t.on("failed", () => {
r.type = "cancle", _({ data: r });
}), t.show();
});
};
l.registerListenModule("DDK:systemNotification", Gn);
let Ne = {
setIcon: $n
};
const Jn = () => {
}, Vn = {
init: Jn,
...Ne
}, Qn = async (e) => {
({ ...e });
let t = {
types: ["screen"],
thumbnailSize: { width: 0, height: 0 }
};
return new Promise((n) => {
st.getSources(t).then((i) => {
let o = i[0].id;
n({ data: { sourceId: o } });
}).catch(() => {
n({ data: {} });
});
});
};
l.registerListenModule("DDK:desktopCapturerScreenshot", Qn);
let Xn = ge.type() == "Windows_NT";
const Yn = () => {
let e = A.join(__dirname, "../dist").replaceAll("\\", "/");
e = e[0].toUpperCase() + e.substring(1);
function t(o) {
o = new V.URL(o).pathname, Xn && o.startsWith("/") && (o = o.substring(1)), o = o.replaceAll("\\", "/");
let s = "";
do {
if (o.indexOf("../") > -1 || !o.startsWith(e))
break;
s = o;
} while (!1);
return s;
}
let n = C.getDefaultSession().protocol, i = n;
i.handle ? i.handle("file", (o) => {
let a = t(o.url), s = "";
return a && (s = V.pathToFileURL(a).toString()), C.getFileSession().fetch(s);
}) : n.interceptFileProtocol("file", (o, a) => {
let s = t(o.url);
a({ path: s });
});
};
let E = {};
const ei = (e) => {
e = { ...e }, Ue ? Be(e) : E[e.protocol] = e;
}, Be = (e) => {
e = { ...e };
let t = C.getDefaultSession().protocol, n = t;
n.handle ? n.handle(e.protocol, async (i) => {
let o = await e.realpath({ path: i.url });
if (o) {
let a = "";
return a = V.pathToFileURL(o).toString(), C.getFileSession().fetch(a);
} else
return;
}) : t.registerFileProtocol(e.protocol, async (i, o) => {
let a = await e.realpath({ path: i.url });
o({ path: a });
});
}, ti = () => {
Object.keys(E).forEach((e) => {
Be(E[e]);
}), E = {};
};
let Ue = !1;
f.whenReady().then(() => {
Ue = !0, Yn(), ti();
});
let Ee = {
registerFileProtocol: ei
};
const ni = () => {
}, ii = {
init: ni,
...Ee
};
let te;
const je = async (e) => {
let t = !1;
do {
if (!te)
break;
t = await te(e);
} while (!1);
return t ? (me.openPath(e.path), !0) : !1;
}, oi = (e) => {
te = e;
};
let ne;
const He = async (e) => {
let t = !1;
do {
if (!ne)
break;
t = await ne(e);
} while (!1);
return t ? (me.openExternal(e.url), !0) : !1;
}, si = (e) => {
ne = e;
}, ri = async (e) => {
const n = { ...e }.data;
return { data: { status: await je(n) ? "OK" : "error" } };
}, ai = async (e) => {
const n = { ...e }.data;
return { data: { status: await He(n) ? "OK" : "error" } };
};
l.registerListenModule("DDK:openLocalFile", ri), l.registerListenModule("DDK:openUrl", ai);
let Ze = {
registerOpenLocalFileChecker: oi,
registerOpenUrlChecker: si,
openLocalFile: je,
openUrl: He
};
const li = () => {
}, di = {
init: li,
...Ze
};
let O = ke.getJsonCachedFile({ id: "dialog_state.json" });
const ui = async (e) => {
let t = m.getInfo(e);
return !(t.status != "OK" || t.type != "directory");
}, ci = async (e, t) => {
let n = O.getData(), i = e;
if (!await ui(e)) {
let o = e.lastIndexOf("/");
if (o < 0)
return;
i = e.substring(0, o);
}
n[t] = i, O.setChanged();
};
let J = !1;
const $e = async (e, t) => {
if (!t)
return;
let n = t + "";
Array.isArray(e) || (e = [e]), !(e.length < 1) && (J || (J = !0, await ci(e[0], n), J = !1));
}, fi = async (e) => {
let n = { ...e }.data;
n = { ...n };
let i = O.getData();
n.dirGroup && (n.defaultPath = i[n.dirGroup]);
const o = [];
return n.openFile && o.push("openFile"), n.openDirectory && o.push("openDirectory"), n.multiSelections && o.push("multiSelections"), n.showHiddenFiles && o.push("showHiddenFiles"), o.push("createDirectory"), new Promise((a) => {
re.showOpenDialog({
title: n.title,
buttonLabel: n.buttonLabel,
defaultPath: n.defaultPath,
filters: n.filters,
properties: o
}).then((s) => {
let r = s.filePaths;
r = [...r], $e(r, n.dirGroup), a({ data: { fileList: r } });
}).catch((s) => {
a({ data: { fileList: [] } });
});
});
}, wi = async (e) => {
let n = { ...e }.data;
n = { ...n };
let i = O.getData();
n.defaultPath = "", n.dirGroup && (n.defaultPath = i[n.dirGroup] || ""), n.filename && (n.defaultPath && (n.defaultPath += "/"), n.defaultPath += n.filename);
const o = [];
return n.showHiddenFiles && o.push("showHiddenFiles"), o.push("createDirectory"), o.push("showOverwriteConfirmation"), new Promise((a) => {
re.showSaveDialog({
title: n.title,
buttonLabel: n.buttonLabel,
defaultPath: n.defaultPath,
filters: n.filters,
properties: o
}).then((s) => {
let r = s.filePath;
$e(r || "", n.dirGroup), a({ data: { filePath: r } });
}).catch((s) => {
a({ data: { filePath: "" } });
});
});
}, pi = async (e) => {
let t = { ...e }, n = d.getWindowFromModuleRequest(t);
if (!n)
return { data: { response: 0, checkboxChecked: !1 } };
let i = t.data;
i = { ...i };
let o = await re.showMessageBox(n, i);
return o || (o = { response: 0, checkboxChecked: !1 }), { data: o };
};
l.registerListenModule("DDK:showOpenDialog", fi), l.registerListenModule("DDK:showSaveDialog", wi), l.registerListenModule("DDK:showMessageBox", pi);
const mi = () => {
O.load();
}, hi = {
init: mi
}, gi = async (e) => {
let i = { ...e }.data.filePath + "";
return { data: { fileInfo: m.getInfo(i) } };
}, yi = async (e) => {
let i = { ...e }.data.filePathList;
Array.isArray(i) || (i = []);
let o = {};
return i.forEach((a) => {
o[a] = m.getInfo(a);
}), { data: { fileInfos: o } };
};
l.registerListenModule("DDK:getFileInfo", gi), l.registerListenModule("DDK:getFileInfoList", yi);
c.findInPageSet = {};
let ie = c.findInPageSet;
const Ai = (e) => {
let t = ie[e];
t && (delete ie[e], t({ data: { result: { matches: 0, sn: -1 } } }));
}, Di = async (e) => {
let t = { ...e }, n = t.data, i = n.text + "";
i || (i = "nothingToFind");
let o = d.getWindowFromModuleRequest(t);
return o ? new Promise((a) => {
let s = o.webContents.findInPage(i, {
findNext: n.findNext !== !1,
forward: n.forward === !0,
matchCase: n.matchCase === !0
});
ie[s] = a, setTimeout(() => {
Ai(s);
}, 10 * 1e3);
}) : { data: { result: { matches: 0, sn: -1 } } };
}, _i = async (e) => {
let t = { ...e }, n = d.getWindowFromModuleRequest(t);
return n && n.webContents.stopFindInPage("clearSelection"), { data: {} };
};
l.registerListenModule("DDK:findInPage", Di), l.registerListenModule("DDK:stopFindInPage", _i);
let Ge = "";
const Wi = () => {
Ge == "Windows_NT" || process.env.TZ || P.readlinkSync("/etc/localtime").toLowerCase().indexOf("beijing") < 0 || (process.env.TZ = "Asia/Shanghai");
}, bi = () => {
Ge = ge.type();
try {
Wi();
} catch {
}
}, Ii = {
run: bi
};
process.env.ELECTRON_DISABLE_SECURITY_WARNINGS = "true";
f.commandLine.appendSwitch("disable-web-security");
f.commandLine.appendSwitch("disable-features", "OutOfBlinkCors");
f.commandLine.appendSwitch("ignore-certificate-errors", "true");
const pe = async (e, t) => {
let n = "";
t && e.length > 1 && (n = e[e.length - 1]), e.includes("--allow-file-access-from-files") && (n = e[e.length - 1]), n !== "" && n[0] !== "-" && n !== "AUTOSTART" && c._my_app_openFile(n);
};
async function Fi() {
f.on("second-instance", (e, t, n) => {
if (c.app_main_window) {
const i = c.app_main_window;
i.isDestroyed() || (i.isMinimized() && i.unmaximize(), i.show(), i.focus(), pe(t, !1));
}
}), f.on("activate", (e, t) => {
if (c.app_main_window) {
const n = c.app_main_window;
n && !n.isDestroyed() && (n.isMinimized() && n.unmaximize(), n.show(), n.focus());
}
}), f.on("window-all-closed", () => {
process.platform !== "darwin" && f.quit();
}), f.on("before-quit", () => {
c.app_true_quit_flag = !0;
}), f.on("will-finish-launching", (e) => {
f.on("open-file", (t, n) => {
t.preventDefault();
});
}), await f.whenReady(), l.init(), C.init(), d.init(), qe.init(), ve.init(), d.createMainWindow(), Vn.init(), ii.init(), di.init(), hi.init(), c._my_app_init(), process.platform !== "darwin" && await pe(process.argv, !0);
}
const Mi = async () => {
Ii.run(), f.requestSingleInstanceLock() ? await Fi() : process.platform !== "darwin" && d.appQuit();
}, qi = {
appStart: Mi
};
let Z = "Other", Je = !1, Ve = !1, Qe = !1;
L.type() == "Windows_NT" && (Je = !0, Z = "Windows");
L.type() == "Darwin" && (Ve = !0, Z = "Darwin");
L.type() == "Linux" && (Qe = !0, Z = "Linux");
let Si = process.env.NODE_ENV === "development", Ci = L.homedir() + "/", ce = "";
{
let e = "../public";
f && f.isPackaged && (e = "../dist"), ce = A.join(__dirname, e);
}
const Ti = () => ce, vi = () => Ci, xi = () => Si, ki = () => Z, Pi = () => Ve, Oi = () => Je, Ki = () => Qe, Li = (e) => {
c.generalFavicon = e + "";
}, zi = (e) => A.join(ce, e);
let F = "", x = "";
const Ri = (e) => {
x = e.path;
}, Ni = (e) => {
F = e.path;
}, Bi = () => f.getPath("userData"), Ui = () => f.getAppPath(), Ei = () => f.getName(), ji = (e) => {
f.setName(e);
}, Hi = () => f.getPath("appData"), Xe = (e) => he.encryptString(e).toString("hex"), Ye = (e) => he.decryptString(Buffer.from(e, "hex")), Zi = async (e) => ({ data: { result: Xe(e.data.text) } }), $i = async (e) => ({ data: { result: Ye(e.data.text) } }), Gi = async () => {
F ? f.setPath("userData", F) : F = f.getPath("userData"), x || (x = A.join(F, "ddk-session")), f.setPath("sessionData", x), c._sessionData = f.getPath("sessionData"), F = void 0, x = void 0, await qi.appStart();
};
c._my_app_openFile = (e) => {
};
const Ji = (e) => {
c._my_app_openFile = e;
};
c._my_app_init = () => {
l.registerListenModule("DDK:encryptString", Zi), l.registerListenModule("DDK:decryptString", $i);
};
let et = {
isPackaged: f && f.isPackaged,
getHomeDir: vi,
getPublicDir: Ti,
osType: ki,
osIsDarwin: Pi,
osIsWindows: Oi,
osIsLinux: Ki,
setOpenFile: Ji,
start: Gi,
quit: d.appQuit,
setFavicon: Li,
getPathInPublic: zi,
getDevMode: xi,
setSessionPath: Ri,
setDataPath: Ni,
getDataPath: Bi,
getAppPath: Ui,
getAppName: Ei,
setAppName: ji,
getSystemAppDataPath: Hi,
encryptString: Xe,
decryptString: Ye
};
({
...et
});
const io = {
app: et,
session: Ae,
ipc: _e,
window: ze,
menu: Te,
tray: Me,
systemNotification: Ne,
shell: Ze,
protocol: Ee
};
export {
io as default
};