Files
Seewo-HugoAura/src/aura/init/main/ipcHandler.js
2025-06-05 00:35:50 +08:00

89 lines
2.0 KiB
JavaScript
Executable File

// @ts-check
const __SCOPE = "main";
/**
*
* @param {import("electron")} electron
*/
const buildIpcMain = (electron) => {
const { app } = electron;
/**
* @type {import("../../types/main/electron").AuraIPCMain}
*/
// @ts-expect-error
const ipcMain = electron.ipcMain;
/**
*
* @param {string} windowKey
* @param {string} channel
* @param {any} data
* @param {import("electron").WebContents?} grep
*/
ipcMain.send = (windowKey, channel, data, grep = null) => {
/**
*
* @param {string} key
* @param {string} chan
* @param {any} targetData
*/
if (!global.__HUGO_AURA__.hookedWindows) {
return {
success: false,
};
}
const sendDataToWebContents = (key, chan, targetData) => {
const webContents =
// @ts-expect-error
global.__HUGO_AURA__.hookedWindows.get(key)?.webContents;
if (!webContents) {
console.error(
`[HugoAura / Main / IPC / ERROR] Failed sending data to ${key}: WebContents not found`
);
return {
success: false,
};
}
if (grep !== webContents) {
webContents.send(chan, targetData);
}
return {
success: true,
};
};
if (windowKey === "*") {
for (const perWindow of global.__HUGO_AURA__.hookedWindows.keys()) {
sendDataToWebContents(perWindow, channel, data);
}
} else {
const isWindowValid = global.__HUGO_AURA__.hookedWindows.has(windowKey);
if (!isWindowValid) {
throw new Error(
`[HugoAura / Main / IPC / ERROR] Unknown windowKey: ${windowKey}`
);
}
sendDataToWebContents(windowKey, channel, data);
}
};
const { applyConfigIpcHandler } = require("./ipcModules/configIpcHandler");
const { applyPlsIpcHandler } = require("./ipcModules/plsIpcHandler");
ipcMain.handle("$aura.base.restartApplication", async () => {
app.relaunch();
app.exit(0);
});
applyConfigIpcHandler(ipcMain);
applyPlsIpcHandler(ipcMain);
};
module.exports = { buildIpcMain };