151 lines
4.0 KiB
JavaScript
151 lines
4.0 KiB
JavaScript
const { app, globalShortcut, ipcMain } = require('electron');
|
|
const path = require('path');
|
|
const { Menu, Tray, Notification, dialog } = require('electron');
|
|
const { config, flushConfig } = require('./config');
|
|
const { toggleMainWindowVisibility } = require('./main');
|
|
const { toggleMiniWindowVisibility } = require('./mini');
|
|
|
|
|
|
let mainWindow, miniWindow, tray, currentNotification;
|
|
|
|
function initialSetup(_mainWindow, _miniWindow) {
|
|
mainWindow = _mainWindow;
|
|
miniWindow = _miniWindow;
|
|
}
|
|
//启用/禁用mini窗口快捷键
|
|
function toggleMiniShortcut(initial) {
|
|
let enabled = initial ? config.miniWindowEnabled : !config.miniWindowEnabled;
|
|
let success = true;
|
|
if (enabled) {
|
|
if (!globalShortcut.register(config.miniShortcut, () => toggleMiniWindowVisibility(miniWindow, mainWindow))) {
|
|
notify("快捷键注册失败,请检查设置的快捷键是否被其他软件占用。", "错误", {
|
|
type: 'error'
|
|
});
|
|
success = false;
|
|
}
|
|
}
|
|
else {
|
|
globalShortcut.unregister(config.miniShortcut);
|
|
}
|
|
if (success) {
|
|
config.miniWindowEnabled = enabled;
|
|
if (!initial) {
|
|
flushConfig();
|
|
}
|
|
}
|
|
return enabled;
|
|
}
|
|
|
|
//切换是否自动启动
|
|
function toggleAutoStart(initial) {
|
|
if (!initial) {
|
|
config.autoStart = !config.autoStart;
|
|
}
|
|
app.setLoginItemSettings({
|
|
openAtLogin: config.autoStart,
|
|
path: process.execPath,
|
|
openAsHidden: false,
|
|
args: [
|
|
'--autoStart'
|
|
]
|
|
});
|
|
if (config.autoStart) {
|
|
notify("已允许Google Translate Electron在您登录时自动启动。", "提示");
|
|
}
|
|
else {
|
|
notify("已禁止Google Translate Electron在您登录时自动启动。", "提示");
|
|
}
|
|
if (!initial) {
|
|
flushConfig();
|
|
}
|
|
return config.autoStart;
|
|
}
|
|
|
|
function notify(message, title, ops) {
|
|
const use = ops ? ops.use : 'auto';
|
|
if (use === 'dialog' || (!Notification.isSupported() && use !== 'notification')) {
|
|
let options = { message, title: title || "信息" };
|
|
if (ops && ops.messageType) {
|
|
options.type = ops.messageType;
|
|
}
|
|
dialog.showMessageBox(null, options);
|
|
return;
|
|
}
|
|
if (currentNotification) {
|
|
currentNotification.close();
|
|
}
|
|
let extName = process.platform === 'win32' ? 'ico' : 'png';
|
|
currentNotification = new Notification({
|
|
title: "Google Translate Electron",
|
|
body: message,
|
|
subtitle: ops && ops.subtitle,
|
|
icon: path.resolve(__dirname, './assets/icon.' + extName)
|
|
});
|
|
currentNotification.show();
|
|
if (ops && ops.clickCallback) {
|
|
currentNotification.on('click', ops.clickCallback);
|
|
}
|
|
}
|
|
|
|
function dismissNotify() {
|
|
currentNotification && currentNotification.close();
|
|
}
|
|
|
|
function setupTrayIcon() {
|
|
if (tray) { return; }
|
|
let extName = process.platform === 'win32' ? 'ico' : 'png';
|
|
tray = new Tray(path.resolve(__dirname, 'assets/icon.' + extName));
|
|
const contextMenu = Menu.buildFromTemplate([
|
|
{ label: "显示主界面", click: () => toggleMainWindowVisibility(mainWindow) },
|
|
{ label: "显示Mini窗口", click: () => toggleMiniWindowVisibility(miniWindow, mainWindow) },
|
|
{
|
|
type: 'checkbox',
|
|
label: "开机启动",
|
|
checked: config.autoStart,
|
|
click: menu => menu.checked = toggleAutoStart()
|
|
},
|
|
{
|
|
type: 'checkbox',
|
|
label: "启用MINI窗口快捷键",
|
|
checked: config.miniWindowEnabled,
|
|
click: menu => menu.checked = toggleMiniShortcut()
|
|
},
|
|
{ label: "退出", click: () => app.exit() }
|
|
]);
|
|
|
|
tray.setTitle("Google Translate Electron");
|
|
tray.setToolTip("Google Translate Electron");
|
|
tray.on('click', () => toggleMainWindowVisibility(mainWindow));
|
|
tray.setContextMenu(contextMenu);
|
|
}
|
|
function destroyTrayIcon() {
|
|
if (tray) {
|
|
tray.destroy();
|
|
}
|
|
tray = null;
|
|
}
|
|
function toggleTrayIcon(show) {
|
|
if (typeof show === 'boolean') {
|
|
config.skipTrayIcon = show;
|
|
}
|
|
else {
|
|
config.skipTrayIcon = !config.skipTrayIcon;
|
|
}
|
|
if (config.skipTrayIcon) {
|
|
destroyTrayIcon();
|
|
}
|
|
else {
|
|
setupTrayIcon();
|
|
}
|
|
flushConfig();
|
|
}
|
|
|
|
|
|
module.exports = {
|
|
initialSetup,
|
|
notify,
|
|
dismissNotify,
|
|
toggleTrayIcon,
|
|
toggleAutoStart,
|
|
toggleMiniShortcut,
|
|
} |