worklog-reminder
92 строки · 2.3 Кб
1import path from 'path';2import { app, Menu, Tray } from 'electron';3import os from 'os';4import About from 'electron-about';5import config from '../../app.config.main';6import OpenInShellHandler from '../Event/RendererHandler/OpenInShellHandler';7import pkg from '../../../package.json';8
9class AppTray {10/**11* @param {WindowManager} windowManager
12*/
13constructor(windowManager) {14this.windowManager = windowManager;15this.tray = new Tray(this._resolveIcon());16this.tray.setContextMenu(this._createContextMenu());17this.tray.closeContextMenu();18}19
20setHandlers() {21this.tray.on('double-click', this._toggleWindow.bind(this));22this.tray.on('click', (event) => {23if (process.platform === 'darwin') {24this.tray.setContextMenu(null);25}26
27this._showMainWindow(event);28});29
30this.tray.on('right-click', () => {31if (process.platform === 'darwin') {32this.tray.setContextMenu(this._createContextMenu());33}34this.tray.popUpContextMenu();35});36}37
38_showMainWindow(event) {39const mainWindow = this.windowManager.getMainWindow();40
41this._toggleWindow();42
43if (mainWindow.isVisible() && process.defaultApp && event.metaKey) {44mainWindow.openDevTools({ mode: 'detach' });45}46}47
48_createContextMenu() {49const menuItems = [50About.makeMenuItem('', {51icon: 'https://github.com/Doka-NT/worklog-reminder/raw/main/static/appIconColored.png',52appName: pkg.productName,53version: `Version ${pkg.version}`,54copyright: `© ${pkg.author.name}`,55}),56{57label: 'Help',58click: () => {59new OpenInShellHandler().handle({ payload: 'https://github.com/Doka-NT/worklog-reminder' });60},61},62{ label: 'Quit', click: () => app.quit() },63];64
65if (process.platform === 'linux') {66menuItems.unshift({67label: 'Toggle Window',68click: (event) => {69this._showMainWindow(event);70},71});72}73
74return Menu.buildFromTemplate(menuItems);75}76
77_resolveIcon() {78let iconPath = 'appIcon.png';79
80if (os.platform() === 'darwin') {81iconPath = 'appIconTemplate.png';82}83
84return path.join(config.assetsDir, iconPath);85}86
87_toggleWindow() {88this.windowManager.getMainWindow().toggle();89}90}
91
92export default AppTray;93