mirror of
https://github.com/HugoAura/Seewo-HugoAura.git
synced 2026-06-20 23:14:28 +08:00
1. [-] 删除了对于 desktopAssistant 的 Hook 逻辑 2. [/] 现在不再使用 desktopAssistant 保活 WS 连接, 而是用一个单独的不可见窗口处理 WS (#25)
214 lines
6.3 KiB
JavaScript
Executable File
214 lines
6.3 KiB
JavaScript
Executable File
// @ts-check
|
|
|
|
if (!global.__HUGO_AURA__) {
|
|
const __HUGO_AURA__ = {
|
|
hookedWindows: new Map(),
|
|
configInit: false,
|
|
central: () => {},
|
|
ipcInit: false,
|
|
auraDir: "",
|
|
plsStats: null,
|
|
plsSettings: null,
|
|
plsRules: null,
|
|
uiHooks: new Map(),
|
|
windowHooks: new Map(),
|
|
version: require("./preload").__AURA_VERSION__,
|
|
};
|
|
global.__HUGO_AURA__ = __HUGO_AURA__;
|
|
}
|
|
|
|
if (!global.__HUGO_AURA_API__) {
|
|
/** @type {import("../aura/types/shared/global").GlobalHugoAuraApiInfo} */
|
|
const __HUGO_AURA_API__ = {
|
|
domains: [
|
|
"https://api-aura-projekts.delta.ooo",
|
|
"https://api-aura.asaka.site",
|
|
"https://api.hugoaura.dpdns.org",
|
|
"https://api-aura-projekts.minorice.moe",
|
|
"https://api.aura.vim.moe",
|
|
],
|
|
plsUpdate: "/api/getPLSLatestVersion",
|
|
auraUpdate: "/api/getAuraLatestVersion",
|
|
};
|
|
global.__HUGO_AURA_API__ = __HUGO_AURA_API__;
|
|
}
|
|
|
|
if (!global.__HUGO_AURA_CONFIG__) {
|
|
global.__HUGO_AURA_CONFIG__ = {};
|
|
}
|
|
|
|
const path = require("path");
|
|
const os = require("os");
|
|
|
|
const MainProcessHooksManager = require("../aura/init/main/windowHooksManager");
|
|
const RendererHooksManager = require("../aura/init/rendererHook/uiHooksManager");
|
|
const EventBus = require("../aura/utils/eventBus");
|
|
const NetworkHook = require("../aura/init/rendererHook/networkHook");
|
|
const ConfigManager = require("../aura/init/shared/configManager");
|
|
const RegistryManager = require("../aura/init/shared/registryManager");
|
|
const { buildIpcMain } = require("../aura/init/main/ipcHandler");
|
|
const plsUtils = require("../aura/utils/pls");
|
|
|
|
const { initLogger } = require("../aura/init/main/logger");
|
|
|
|
const getUserDocumentsDirPath = () => {
|
|
const registryManager = new RegistryManager();
|
|
const pathInfo = registryManager.readRegKeySync(
|
|
'"HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders"',
|
|
"Personal",
|
|
false,
|
|
true,
|
|
/REG_EXPAND_SZ\s+(.+)/
|
|
);
|
|
if (pathInfo.success && pathInfo.data) {
|
|
const resolvedPath = pathInfo.data.replace(
|
|
/%([^%]+)%/g,
|
|
(match, varName) => {
|
|
return process.env[varName] || match;
|
|
}
|
|
);
|
|
|
|
return resolvedPath;
|
|
} else {
|
|
console.error(
|
|
"[HugoAura / Init / Logger] Failed to get the path of documents dir, using default val."
|
|
);
|
|
return path.join(os.homedir(), "Documents");
|
|
}
|
|
};
|
|
|
|
/**
|
|
*
|
|
* @param {import("../aura/types/main/core").LauncherArgs} param0
|
|
* @returns
|
|
*/
|
|
const launcher = ({ central, windowName, config }) => {
|
|
// >>> Init STD <<< //
|
|
process.stdout.isTTY = true;
|
|
process.stderr.isTTY = true;
|
|
|
|
// >>> Basic Config <<< //
|
|
/** @type {Electron} */
|
|
const electron = central(1);
|
|
const app = electron.app;
|
|
if (!global.__HUGO_AURA__.central) global.__HUGO_AURA__.central = central;
|
|
|
|
global.reloadApp = () => {
|
|
app.relaunch({ args: process.argv.slice(1).concat(["--inspect 5858"]) });
|
|
app.exit(0);
|
|
};
|
|
|
|
global.__HUGO_AURA__.auraDir = path.join(
|
|
getUserDocumentsDirPath(),
|
|
"HugoAura"
|
|
);
|
|
|
|
// >>> Init Logger <<< //
|
|
initLogger(windowName);
|
|
|
|
console.log("[HugoAura / Loaded] Aura is loaded!");
|
|
console.debug(`[HugoAura / Debug] curWindowName: ${windowName}`);
|
|
|
|
// >>> Init EventBus <<< //
|
|
if (!global.__HUGO_AURA_EVENT_BUS__)
|
|
global.__HUGO_AURA_EVENT_BUS__ = new EventBus();
|
|
|
|
// >>> Init Config <<< //
|
|
const configManager = new ConfigManager();
|
|
configManager.side = "main";
|
|
configManager.migrateOldConfigFile();
|
|
configManager.ensureConfigExists();
|
|
const loadedConfig = configManager.loadConfig();
|
|
if (!global.__HUGO_AURA__.configInit) global.__HUGO_AURA__.configInit = true;
|
|
if (!global.__HUGO_AURA_CONFIG_MGR__)
|
|
global.__HUGO_AURA_CONFIG_MGR__ = configManager;
|
|
|
|
global.__HUGO_AURA_CONFIG__ = loadedConfig;
|
|
|
|
global.__HUGO_AURA_EVENT_BUS__.on("$aura.config.refreshConfig", () => {
|
|
global.__HUGO_AURA_CONFIG__ = configManager.loadConfig();
|
|
});
|
|
|
|
// >>> Init IPC Main <<< //
|
|
if (!global.__HUGO_AURA__.ipcInit) {
|
|
buildIpcMain(electron);
|
|
global.__HUGO_AURA__.ipcInit = true;
|
|
}
|
|
|
|
// >>> Init Main Process Hooks <<< //
|
|
const mainProcessHooksManager = new MainProcessHooksManager();
|
|
|
|
const _windowHooks = mainProcessHooksManager.loadHooks();
|
|
|
|
// >>> Init Renderer Process Hooks <<< //
|
|
const uiHooksManager = new RendererHooksManager();
|
|
|
|
const uiHooks = uiHooksManager.loadHooks();
|
|
|
|
// >>> Activate DevTools <<< //
|
|
if (loadedConfig.devTools && !config.canOpenDevTool) {
|
|
config.canOpenDevTool = true;
|
|
}
|
|
|
|
// >>> Create WebSocket KeepAlive Window <<< //
|
|
if (!global.__HUGO_AURA__.hookedWindows?.has("auraWsKeepAlive")) {
|
|
const wsKaWin = plsUtils.createWsWindow(electron);
|
|
// @ts-expect-error
|
|
global.__HUGO_AURA__.hookedWindows.set("auraWsKeepAlive", wsKaWin);
|
|
}
|
|
|
|
// >>> Listeners <<< //
|
|
|
|
/**
|
|
*
|
|
* @param {any} _event
|
|
* @param {import("electron").BrowserWindow} browserWindow
|
|
*/
|
|
const browserWindowCreatedListener = (_event, browserWindow) => {
|
|
mainProcessHooksManager.initHookForWindow(
|
|
windowName,
|
|
central,
|
|
app,
|
|
browserWindow
|
|
);
|
|
};
|
|
|
|
/**
|
|
*
|
|
* @param {any} _event
|
|
* @param {import("electron").WebContents} webContents
|
|
*/
|
|
const webContentsCreatedListener = (_event, webContents) => {
|
|
const hookConfig = uiHooks.get(windowName.split("_")[0]);
|
|
|
|
const initNetworkHook = () => {
|
|
const networkHook = new NetworkHook();
|
|
networkHook.installHook(webContents.session, loadedConfig);
|
|
|
|
console.debug(
|
|
`[HugoAura / Init / Done / NetworkHook] Network Hook for ${windowName} installed.`
|
|
);
|
|
};
|
|
|
|
initNetworkHook();
|
|
|
|
if (hookConfig) {
|
|
uiHooksManager.handleWindowHook(webContents, hookConfig, windowName);
|
|
} else {
|
|
console.log(
|
|
`[HugoAura / Init / RDH] Window ${windowName} has no corresponding ui hooks, ignoring...`
|
|
);
|
|
}
|
|
};
|
|
|
|
app.once("browser-window-created", browserWindowCreatedListener);
|
|
app.once("web-contents-created", webContentsCreatedListener);
|
|
|
|
return () => {
|
|
app.removeListener("browser-window-created", browserWindowCreatedListener);
|
|
app.removeListener("web-contents-created", webContentsCreatedListener);
|
|
};
|
|
};
|
|
|
|
module.exports = launcher;
|