ai-gate

Форк
0
/
main.js 
193 строки · 4.5 Кб
1
const { app, BrowserWindow, ipcMain, globalShortcut } = require("electron");
2
const path = require("path");
3

4
app.allowRendererProcessReuse = true;
5

6
let mainWindow;
7
let dialogWindow;
8
const windows = {}; 
9

10
app.on("ready", () => {
11
  const window = require("./src/window");
12
  mainWindow = window.createBrowserWindow(app);
13
  mainWindow.setMenu(null);
14
  mainWindow.setTitle("Ai Gate");
15
  mainWindow.show(false);
16

17
  mainWindow.webContents.on("page-title-updated", (event, title) => {
18
    event.preventDefault();
19
    mainWindow.setTitle("Ai Gate");
20
  });
21

22
  registerShortcuts(); 
23

24
  const createCustomDialog = () => {
25
    dialogWindow = new BrowserWindow({
26
      parent: mainWindow,
27
      modal: true,
28
      show: false,
29
      width: 400,
30
      height: 630,
31
      backgroundColor: "#272829",
32
      webPreferences: {
33
        preload: path.join(__dirname, "preload.js"),
34
        nodeIntegration: false,
35
        contextIsolation: true,
36
      },
37
      frame: false,
38
      autoHideMenuBar: true,
39
    });
40

41
    dialogWindow.loadFile(path.join(__dirname, "select.html"));
42

43
    dialogWindow.once("ready-to-show", () => {
44
      dialogWindow.show();
45
    });
46

47
    ipcMain.on("dialog-response", (event, response) => {
48
      handleDialogResponse(response);
49
      dialogWindow.close();
50
    });
51

52
    dialogWindow.on("closed", () => {
53
      dialogWindow = null;
54
    });
55
  };
56

57
  const handleDialogResponse = (response) => {
58

59
    let selectedWindowName;
60
    let selectedURL;
61
    switch (response) {
62
      case 0:
63
        selectedWindowName = "ChatGPT";
64
        selectedURL = "https://chat.openai.com";
65
        break;
66
      case 1:
67
        selectedWindowName = "Gemini";
68
        selectedURL = "https://gemini.google.com/";
69
        break;
70
      case 2:
71
        selectedWindowName = "PerplexityAI";
72
        selectedURL = "https://perplexity.ai";
73
        break;
74
      case 3:
75
        selectedWindowName = "PerplexityChat";
76
        selectedURL = "https://labs.perplexity.ai";
77
        break;
78
      case 4:
79
        selectedWindowName = "Claude";
80
        selectedURL = "https://claude.ai";
81
        break;
82
      default:
83
        selectedWindowName = "SelectedURL";
84
        selectedURL = "https://aigate.inulute.com/";
85
    }
86

87

88
    if (windows[selectedWindowName]) {
89
      windows[selectedWindowName].focus();
90
    } else {
91

92
      createWindow(selectedWindowName, selectedURL);
93
    }
94

95

96
    mainWindow.loadURL("https://donate.inulute.com");
97
  };
98

99
  ipcMain.on("close-dialog", () => {
100
    if (dialogWindow) {
101
      mainWindow.loadURL("https://donate.inulute.com/");
102
      dialogWindow.close();
103
    }
104
  });
105

106

107
  createCustomDialog();
108
});
109

110
app.on("window-all-closed", () => {
111
  app.quit();
112
});
113

114
app.on("will-quit", () => {
115
  globalShortcut.unregister("CommandOrControl+1");
116
  globalShortcut.unregister("CommandOrControl+2");
117
  globalShortcut.unregister("CommandOrControl+3");
118
  globalShortcut.unregister("CommandOrControl+4");
119
  globalShortcut.unregister("CommandOrControl+5");
120
});
121

122
const registerShortcuts = () => {
123

124

125
  globalShortcut.register("CommandOrControl+1", () => {
126
    if (windows["ChatGPT"]) {
127
      windows["ChatGPT"].focus();
128
    } else {
129
      createWindow("ChatGPT", "https://chat.openai.com");
130
    }
131
  });
132

133

134
  globalShortcut.register("CommandOrControl+2", () => {
135
    if (windows["Gemini"]) {
136
      windows["Gemini"].focus();
137
    } else {
138
      createWindow("Gemini", "https://gemini.google.com/");
139
    }
140
  });
141

142
  globalShortcut.register("CommandOrControl+3", () => {
143
    if (windows["PerplexityAI"]) {
144
      windows["PerplexityAI"].focus();
145
    } else {
146
      createWindow("PerplexityAI", "https://perplexity.ai");
147
    }
148
  });
149

150
  globalShortcut.register("CommandOrControl+4", () => {
151
    if (windows["PerplexityChat"]) {
152
      windows["PerplexityChat"].focus();
153
    } else {
154
      createWindow("PerplexityChat", "https://labs.perplexity.ai");
155
    }
156
  });
157

158
  globalShortcut.register("CommandOrControl+5", () => {
159
    if (windows["Claude"]) {
160
      windows["Claude"].focus();
161
    } else {
162
      createWindow("Claude", "https://claude.ai");
163
    }
164
  });
165
};
166

167
const createWindow = (name, url) => {
168
  windows[name] = new BrowserWindow({
169
    parent: mainWindow,
170
    modal: false,
171
    show: false,
172
    width: 1010, 
173
    height: 700, 
174
    backgroundColor: "#272829", 
175
    webPreferences: {
176
      preload: path.join(__dirname, "preload.js"),
177
      nodeIntegration: false,
178
      contextIsolation: true,
179
    },
180
    frame: false,
181
    autoHideMenuBar: true,
182
  });
183

184
  windows[name].loadURL(url);
185

186
  windows[name].once("ready-to-show", () => {
187
    windows[name].show();
188
  });
189

190
  windows[name].on("closed", () => {
191
    delete windows[name];
192
  });
193
};
194

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.