rubick/src/main/index.ts
muwoo bde5377282 🐛 修复 #264
 支持 db.postAttachment 和 db.getAttachment
♻️ 重构版本更新机制
2023-10-18 11:02:14 +08:00

148 lines
3.7 KiB
TypeScript

'use strict';
import electron, {
app,
globalShortcut,
protocol,
BrowserWindow,
} from 'electron';
import { main, guide } from './browsers';
import commonConst from '../common/utils/commonConst';
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
import API from './common/api';
import createTray from './common/tray';
import registerHotKey from './common/registerHotKey';
import localConfig from './common/initLocalConfig';
import {
getSearchFiles,
putFileToRubick,
macBeforeOpen,
} from './common/getSearchFiles';
import '../common/utils/localPlugin';
import registerySystemPlugin from './common/registerySystemPlugin';
import checkVersion from './common/versionHandler';
class App {
public windowCreator: { init: () => void; getWindow: () => BrowserWindow };
private systemPlugins: any;
constructor() {
protocol.registerSchemesAsPrivileged([
{ scheme: 'app', privileges: { secure: true, standard: true } },
]);
this.windowCreator = main();
const gotTheLock = app.requestSingleInstanceLock();
if (!gotTheLock) {
app.quit();
} else {
this.systemPlugins = registerySystemPlugin();
this.beforeReady();
this.onReady();
this.onRunning();
this.onQuit();
}
}
beforeReady() {
// 系统托盘
if (commonConst.macOS()) {
macBeforeOpen();
if (commonConst.production() && !app.isInApplicationsFolder()) {
app.moveToApplicationsFolder();
} else {
app.dock.hide();
}
} else {
app.disableHardwareAcceleration();
}
}
createWindow() {
this.windowCreator.init();
}
onReady() {
const readyFunction = async () => {
checkVersion();
await localConfig.init();
const config = await localConfig.getConfig();
if (!config.perf.common.guide) {
guide().init();
config.perf.common.guide = true;
localConfig.setConfig(config);
}
this.createWindow();
const mainWindow = this.windowCreator.getWindow();
API.init(mainWindow);
createTray(this.windowCreator.getWindow());
registerHotKey(this.windowCreator.getWindow());
this.systemPlugins.triggerReadyHooks(
Object.assign(electron, {
mainWindow: this.windowCreator.getWindow(),
API,
})
);
};
if (!app.isReady()) {
app.on('ready', readyFunction);
} else {
readyFunction();
}
}
onRunning() {
app.on('second-instance', (event, commandLine, workingDirectory) => {
const files = getSearchFiles(commandLine, workingDirectory);
const win = this.windowCreator.getWindow();
// 当运行第二个实例时,将会聚焦到myWindow这个窗口
// 如果有文件列表作为参数,说明是命令行启动
if (win) {
if (win.isMinimized()) {
win.restore();
}
win.focus();
if (files.length > 0) {
win.show();
putFileToRubick(win.webContents, files);
}
}
});
app.on('activate', () => {
if (!this.windowCreator.getWindow()) {
this.createWindow();
}
});
if (commonConst.windows()) {
// app.setAppUserModelId(pkg.build.appId)
}
}
onQuit() {
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit();
}
});
app.on('will-quit', () => {
globalShortcut.unregisterAll();
});
if (commonConst.dev()) {
if (process.platform === 'win32') {
process.on('message', (data) => {
if (data === 'graceful-exit') {
app.quit();
}
});
} else {
process.on('SIGTERM', () => {
app.quit();
});
}
}
}
}
export default new App();