Files
live-stream-app/src/main/index.ts
2025-12-22 16:32:42 +08:00

107 lines
2.4 KiB
TypeScript

import { app, shell, BrowserWindow } from "electron";
import { setupLiveHandlers } from "./ipc/live";
import { setupWorkflowHandlers } from "./ipc/workflow";
import { preload, indexHtml, ELECTRON_RENDERER_URL } from "./config";
// 必须在 app ready 之前调用
app.commandLine.appendSwitch("disable-site-isolation-trials");
app.commandLine.appendSwitch(
"disable-features",
"IsolateOrigins,site-per-process",
);
// 简单的开发环境检测
const isDev = process.env.NODE_ENV === "development";
/**
* 创建主窗口
*/
function createWindow(): void {
const mainWindow = new BrowserWindow({
width: 1080,
height: 670,
show: false,
titleBarStyle: "hidden",
autoHideMenuBar: true,
webPreferences: {
preload,
sandbox: false,
},
});
mainWindow.on("ready-to-show", () => {
mainWindow.show();
});
mainWindow.webContents.openDevTools();
mainWindow.webContents.setWindowOpenHandler((details) => {
shell.openExternal(details.url);
return { action: "deny" };
});
// 窗口关闭时强制清理资源并退出应用
mainWindow.on("closed", () => {
// 清理所有资源
mainWindow.removeAllListeners();
// 强制退出应用
if (process.platform !== "darwin") {
app.quit();
}
});
if (isDev && ELECTRON_RENDERER_URL) {
mainWindow.loadURL(ELECTRON_RENDERER_URL);
} else {
mainWindow.loadFile(indexHtml);
}
}
/**
* 准备好后
*/
app.whenReady().then(() => {
app.setAppUserModelId("com.electron");
// 直播相关处理
setupLiveHandlers();
setupWorkflowHandlers();
createWindow();
app.on("activate", function () {
if (BrowserWindow.getAllWindows().length === 0) createWindow();
});
});
/**
* 退出应用
*/
app.on("window-all-closed", () => {
// 强制清理所有资源
if (process.platform !== "darwin") {
app.quit();
}
});
// 在开发环境中,确保进程正确退出
app.on("before-quit", () => {
// 清理所有资源
const windows = BrowserWindow.getAllWindows();
windows.forEach((window) => {
window.removeAllListeners();
window.close();
});
});
// 处理进程退出信号
process.on("SIGINT", () => {
app.quit();
});
process.on("SIGTERM", () => {
app.quit();
});