-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy pathelectron.ts
More file actions
112 lines (103 loc) · 2.56 KB
/
Copy pathelectron.ts
File metadata and controls
112 lines (103 loc) · 2.56 KB
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
import { app, Menu, nativeTheme, Tray } from 'electron'
import opener from 'opener'
import { openDashboardInBrowser, openEtherjotInBrowser } from './browser'
import { readConfigYaml } from './config'
import { runLauncher } from './launcher'
import { BeeManager } from './lifecycle'
import { getCurrentNetwork, toggleNetwork } from './network'
import { createNotification } from './notify'
import { getAssetPath, paths } from './path'
let tray: Tray
export function rebuildElectronTray() {
if (!tray) {
return
}
const contextMenu = Menu.buildFromTemplate([
{
label: 'Open Web UI',
click: openDashboardInBrowser,
},
{ type: 'separator' },
{
label: BeeManager.isRunning() ? 'Stop Bee' : 'Start Bee',
click: () => {
if (BeeManager.isRunning()) {
BeeManager.stop()
} else {
runLauncher()
}
},
},
{
label: getCurrentNetwork() === 'main' ? 'Switch to Testnet' : 'Switch to Mainnet',
click: () => {
toggleNetwork()
},
},
{ type: 'separator' },
{
type: 'submenu',
label: 'Apps',
submenu: [
{
label: 'Etherjot (demo)',
click: openEtherjotInBrowser,
},
],
},
{ type: 'separator' },
{
label: 'Logs',
click: async () => {
opener(paths.log)
},
},
{
label: 'Data Directory',
click: async () => {
const config = readConfigYaml()
if (typeof config['data-dir'] === 'string') {
opener(config['data-dir'])
}
},
},
{
label: 'Quit',
click: async () => {
BeeManager.stop()
await BeeManager.waitForSigtermToFinish()
app.quit()
},
},
])
tray.setContextMenu(contextMenu)
}
function getTrayIcon() {
if (process.platform === 'darwin') {
// on macOS the resolution and dark/light is managed automatically
return getAssetPath('trayTemplate.png')
}
const isDark = nativeTheme.shouldUseDarkColors
if (isDark) {
return getAssetPath('icon-inv.png')
}
return getAssetPath('icon.png')
}
export function runElectronTray() {
const gotTheLock = app.requestSingleInstanceLock()
if (!gotTheLock) {
app.quit()
} else {
app.on('second-instance', () => {
createNotification('Swarm is already running. Please close the previous instance first.')
})
}
app.whenReady().then(() => {
if (app.dock) {
app.dock.setIcon(getAssetPath('icon.png'))
app.dock.hide()
}
tray = new Tray(getTrayIcon())
rebuildElectronTray()
})
}