ai-gate
/
main.js
193 строки · 4.5 Кб
1const { app, BrowserWindow, ipcMain, globalShortcut } = require("electron");2const path = require("path");3
4app.allowRendererProcessReuse = true;5
6let mainWindow;7let dialogWindow;8const windows = {};9
10app.on("ready", () => {11const window = require("./src/window");12mainWindow = window.createBrowserWindow(app);13mainWindow.setMenu(null);14mainWindow.setTitle("Ai Gate");15mainWindow.show(false);16
17mainWindow.webContents.on("page-title-updated", (event, title) => {18event.preventDefault();19mainWindow.setTitle("Ai Gate");20});21
22registerShortcuts();23
24const createCustomDialog = () => {25dialogWindow = new BrowserWindow({26parent: mainWindow,27modal: true,28show: false,29width: 400,30height: 630,31backgroundColor: "#272829",32webPreferences: {33preload: path.join(__dirname, "preload.js"),34nodeIntegration: false,35contextIsolation: true,36},37frame: false,38autoHideMenuBar: true,39});40
41dialogWindow.loadFile(path.join(__dirname, "select.html"));42
43dialogWindow.once("ready-to-show", () => {44dialogWindow.show();45});46
47ipcMain.on("dialog-response", (event, response) => {48handleDialogResponse(response);49dialogWindow.close();50});51
52dialogWindow.on("closed", () => {53dialogWindow = null;54});55};56
57const handleDialogResponse = (response) => {58
59let selectedWindowName;60let selectedURL;61switch (response) {62case 0:63selectedWindowName = "ChatGPT";64selectedURL = "https://chat.openai.com";65break;66case 1:67selectedWindowName = "Gemini";68selectedURL = "https://gemini.google.com/";69break;70case 2:71selectedWindowName = "PerplexityAI";72selectedURL = "https://perplexity.ai";73break;74case 3:75selectedWindowName = "PerplexityChat";76selectedURL = "https://labs.perplexity.ai";77break;78case 4:79selectedWindowName = "Claude";80selectedURL = "https://claude.ai";81break;82default:83selectedWindowName = "SelectedURL";84selectedURL = "https://aigate.inulute.com/";85}86
87
88if (windows[selectedWindowName]) {89windows[selectedWindowName].focus();90} else {91
92createWindow(selectedWindowName, selectedURL);93}94
95
96mainWindow.loadURL("https://donate.inulute.com");97};98
99ipcMain.on("close-dialog", () => {100if (dialogWindow) {101mainWindow.loadURL("https://donate.inulute.com/");102dialogWindow.close();103}104});105
106
107createCustomDialog();108});109
110app.on("window-all-closed", () => {111app.quit();112});113
114app.on("will-quit", () => {115globalShortcut.unregister("CommandOrControl+1");116globalShortcut.unregister("CommandOrControl+2");117globalShortcut.unregister("CommandOrControl+3");118globalShortcut.unregister("CommandOrControl+4");119globalShortcut.unregister("CommandOrControl+5");120});121
122const registerShortcuts = () => {123
124
125globalShortcut.register("CommandOrControl+1", () => {126if (windows["ChatGPT"]) {127windows["ChatGPT"].focus();128} else {129createWindow("ChatGPT", "https://chat.openai.com");130}131});132
133
134globalShortcut.register("CommandOrControl+2", () => {135if (windows["Gemini"]) {136windows["Gemini"].focus();137} else {138createWindow("Gemini", "https://gemini.google.com/");139}140});141
142globalShortcut.register("CommandOrControl+3", () => {143if (windows["PerplexityAI"]) {144windows["PerplexityAI"].focus();145} else {146createWindow("PerplexityAI", "https://perplexity.ai");147}148});149
150globalShortcut.register("CommandOrControl+4", () => {151if (windows["PerplexityChat"]) {152windows["PerplexityChat"].focus();153} else {154createWindow("PerplexityChat", "https://labs.perplexity.ai");155}156});157
158globalShortcut.register("CommandOrControl+5", () => {159if (windows["Claude"]) {160windows["Claude"].focus();161} else {162createWindow("Claude", "https://claude.ai");163}164});165};166
167const createWindow = (name, url) => {168windows[name] = new BrowserWindow({169parent: mainWindow,170modal: false,171show: false,172width: 1010,173height: 700,174backgroundColor: "#272829",175webPreferences: {176preload: path.join(__dirname, "preload.js"),177nodeIntegration: false,178contextIsolation: true,179},180frame: false,181autoHideMenuBar: true,182});183
184windows[name].loadURL(url);185
186windows[name].once("ready-to-show", () => {187windows[name].show();188});189
190windows[name].on("closed", () => {191delete windows[name];192});193};194