/
main.js
114 lines (98 loc) · 3 KB
/
main.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
const { ipcMain, app, nativeTheme } = require('electron');
const { menubar } = require('menubar');
const { autoUpdater } = require('electron-updater');
const { onFirstRunMaybe } = require('./first-run');
const path = require('node:path');
require('@electron/remote/main').initialize();
app.setAppUserModelId('com.electron.gitify');
const iconIdle = path.join(
__dirname,
'assets',
'images',
'tray-idleTemplate.png',
);
const iconActive = path.join(__dirname, 'assets', 'images', 'tray-active.png');
const browserWindowOpts = {
width: 500,
height: 400,
minWidth: 500,
minHeight: 400,
resizable: false,
webPreferences: {
enableRemoteModule: true,
overlayScrollbars: true,
nodeIntegration: true,
contextIsolation: false,
},
};
app.on('ready', async () => {
await onFirstRunMaybe();
});
const menubarApp = menubar({
icon: iconIdle,
index: `file://${__dirname}/index.html`,
browserWindow: browserWindowOpts,
preloadWindow: true,
showDockIcon: false,
});
menubarApp.on('ready', () => {
// Force the window to retrieve its previous zoom factor
menubarApp.window.webContents.setZoomFactor(
menubarApp.window.webContents.getZoomFactor(),
);
menubarApp.tray.setIgnoreDoubleClickEvents(true);
autoUpdater.checkForUpdatesAndNotify();
nativeTheme.on('updated', () => {
if (nativeTheme.shouldUseDarkColors) {
menubarApp.window.webContents.send('update-native-theme', 'DARK');
} else {
menubarApp.window.webContents.send('update-native-theme', 'LIGHT');
}
});
ipcMain.handle('get-platform', async () => {
return process.platform;
});
ipcMain.handle('get-app-version', async () => {
return app.getVersion();
});
ipcMain.on('reopen-window', () => menubarApp.showWindow());
ipcMain.on('hide-window', () => menubarApp.hideWindow());
ipcMain.on('app-quit', () => menubarApp.app.quit());
ipcMain.on('update-icon', (_, arg) => {
if (!menubarApp.tray.isDestroyed()) {
if (arg === 'TrayActive') {
menubarApp.tray.setImage(iconActive);
} else {
menubarApp.tray.setImage(iconIdle);
}
}
});
ipcMain.on('update-title', (_, title) => {
if (!menubarApp.tray.isDestroyed()) {
menubarApp.tray.setTitle(title);
}
});
ipcMain.on('set-login-item-settings', (event, settings) => {
app.setLoginItemSettings(settings);
});
menubarApp.window.webContents.on('devtools-opened', () => {
menubarApp.window.setSize(800, 600);
menubarApp.window.center();
menubarApp.window.resizable = true;
});
menubarApp.window.webContents.on('devtools-closed', () => {
const trayBounds = menubarApp.tray.getBounds();
menubarApp.window.setSize(
browserWindowOpts.width,
browserWindowOpts.height,
);
menubarApp.positioner.move('trayCenter', trayBounds);
menubarApp.window.resizable = false;
});
menubarApp.window.webContents.on('before-input-event', (event, input) => {
if (input.key === 'Escape') {
menubarApp.window.hide();
event.preventDefault();
}
});
});