mirror of
https://github.com/notion-enhancer/notion-enhancer.git
synced 2025-04-06 05:29:02 +00:00
108 lines
3.1 KiB
JavaScript
108 lines
3.1 KiB
JavaScript
/*
|
|
* notion-enhancer: tray
|
|
* (c) 2021 dragonwocky <thedragonring.bod@gmail.com> (https://dragonwocky.me/)
|
|
* (https://notion-enhancer.github.io/) under the MIT license
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
let tray;
|
|
|
|
module.exports = async function ({ env, registry }, db, __exports, __eval) {
|
|
const electron = require('electron'),
|
|
path = require('path'),
|
|
enhancerIcon = path.resolve(`${__dirname}/../../media/colour-x16.png`),
|
|
hotkey = await db.get(['hotkey']),
|
|
openAtStartup = await db.get(['startup']),
|
|
runInBackground = await db.get(['run_in_background']),
|
|
menuHotkey = await (
|
|
await registry.db('a6621988-551d-495a-97d8-3c568bca2e9e')
|
|
).get(['hotkey']);
|
|
|
|
const toggleWindows = (checkFocus = true) => {
|
|
const windows = electron.BrowserWindow.getAllWindows();
|
|
if (runInBackground) {
|
|
// hide
|
|
if (windows.some((win) => (checkFocus ? win.isFocused() : true) && win.isVisible())) {
|
|
windows.forEach((win) => [win.isFocused() && win.blur(), win.hide()]);
|
|
} else windows.forEach((win) => win.show());
|
|
} else {
|
|
// minimize
|
|
if (windows.some((win) => (checkFocus ? win.isFocused() : true) && !win.isMinimized())) {
|
|
windows.forEach((win) => win.minimize());
|
|
} else windows.forEach((win) => win.restore());
|
|
}
|
|
};
|
|
|
|
await electron.app.whenReady();
|
|
electron.app.setLoginItemSettings({ openAtLogin: openAtStartup, args: ['--startup'] });
|
|
|
|
tray = new electron.Tray(enhancerIcon);
|
|
tray.setToolTip('notion-enhancer');
|
|
tray.on('click', () => toggleWindows(false));
|
|
electron.globalShortcut.register(hotkey, toggleWindows);
|
|
|
|
// connects to client hotkey listener
|
|
// manually forces new window creation
|
|
// since notion's default is broken by
|
|
// duplicate window prevention
|
|
const createWindow = () => {
|
|
const { createWindow } = env.notionRequire('main/createWindow.js');
|
|
createWindow('', null, true);
|
|
};
|
|
electron.ipcMain.on(`notion-enhancer:create-new-window`, createWindow);
|
|
|
|
const contextMenu = electron.Menu.buildFromTemplate([
|
|
{
|
|
type: 'normal',
|
|
label: 'notion-enhancer',
|
|
icon: enhancerIcon,
|
|
enabled: false,
|
|
},
|
|
{ type: 'separator' },
|
|
{
|
|
type: 'normal',
|
|
label: 'docs',
|
|
click: () => electron.shell.openExternal('https://notion-enhancer.github.io/'),
|
|
},
|
|
{
|
|
type: 'normal',
|
|
label: 'source code',
|
|
click: () => electron.shell.openExternal('https://github.com/notion-enhancer/'),
|
|
},
|
|
{
|
|
type: 'normal',
|
|
label: 'community',
|
|
click: () => electron.shell.openExternal('https://discord.gg/sFWPXtA'),
|
|
},
|
|
{
|
|
type: 'normal',
|
|
label: 'enhancements menu',
|
|
accelerator: menuHotkey,
|
|
click: env.focusMenu,
|
|
},
|
|
{ type: 'separator' },
|
|
{
|
|
type: 'normal',
|
|
label: 'toggle visibility',
|
|
accelerator: hotkey,
|
|
click: toggleWindows,
|
|
},
|
|
{
|
|
type: 'normal',
|
|
label: 'new window',
|
|
click: createWindow,
|
|
accelerator: 'CmdOrCtrl+Shift+N',
|
|
},
|
|
{
|
|
label: 'relaunch',
|
|
click: env.reload,
|
|
},
|
|
{
|
|
label: 'quit',
|
|
role: 'quit',
|
|
},
|
|
]);
|
|
tray.setContextMenu(contextMenu);
|
|
};
|