From b7cbd50b17d15c9cbb570f7e6fc7d284673d8fed Mon Sep 17 00:00:00 2001 From: Molunerfinn Date: Sat, 25 Apr 2020 11:34:04 +0800 Subject: [PATCH] :hammer: Refactor: lifeCycle codes --- src/background.ts | 155 +------------------------- src/main/apis/app/uploader/index.ts | 34 +++--- src/main/lifeCycle/index.ts | 166 ++++++++++++++++++++++++++++ 3 files changed, 186 insertions(+), 169 deletions(-) create mode 100644 src/main/lifeCycle/index.ts diff --git a/src/background.ts b/src/background.ts index 127f23a..bec85b2 100644 --- a/src/background.ts +++ b/src/background.ts @@ -1,157 +1,6 @@ -import { - app, - globalShortcut, - protocol -} from 'electron' -import { - createProtocol, - installVueDevtools -} from 'vue-cli-plugin-electron-builder/lib' -import db from '#/datastore' -import { IWindowList } from 'apis/app/window/constants' -import windowManager from 'apis/app/window/windowManager' -import { - uploadChoosedFiles, - uploadClipboardFiles -} from 'apis/app/uploader/apis' -import beforeOpen from '~/main/utils/beforeOpen' -import updateChecker from '~/main/utils/updateChecker' -import ipcList from '~/main/events/ipcList' -import busEventList from '~/main/events/busEventList' -import fixPath from 'fix-path' -import { getUploadFiles } from '~/main/utils/handleArgv' -import bus from '@core/bus' -import { - updateShortKeyFromVersion212 -} from '~/main/migrate' -import shortKeyHandler from 'apis/app/shortKey/shortKeyHandler' -import server from '~/main/server/index' -import { - createTray -} from 'apis/app/system' +import { bootstrap } from '~/main/lifeCycle' -const isDevelopment = process.env.NODE_ENV !== 'production' -protocol.registerSchemesAsPrivileged([{ scheme: 'picgo', privileges: { secure: true, standard: true } }]) - -beforeOpen() - -// fix the $PATH in macOS -fixPath() - -ipcList.listen() -busEventList.listen() - -const gotTheLock = app.requestSingleInstanceLock() - -if (!gotTheLock) { - app.quit() -} else { - app.on('second-instance', (event, commandLine, workingDirectory) => { - let files = getUploadFiles(commandLine, workingDirectory) - if (files === null || files.length > 0) { // 如果有文件列表作为参数,说明是命令行启动 - if (files === null) { - uploadClipboardFiles() - } else { - const win = windowManager.getAvailableWindow() - uploadChoosedFiles(win.webContents, files) - } - } else { - if (windowManager.has(IWindowList.SETTING_WINDOW)) { - const settingWindow = windowManager.get(IWindowList.SETTING_WINDOW)! - if (settingWindow.isMinimized()) { - settingWindow.restore() - } - settingWindow.focus() - } - } - }) - if (process.platform === 'win32') { - app.setAppUserModelId('com.molunerfinn.picgo') - } - - if (process.env.XDG_CURRENT_DESKTOP && process.env.XDG_CURRENT_DESKTOP.includes('Unity')) { - process.env.XDG_CURRENT_DESKTOP = 'Unity' - } - - app.on('ready', async () => { - createProtocol('picgo') - if (isDevelopment && !process.env.IS_TEST) { - // Install Vue Devtools - try { - await installVueDevtools() - } catch (e) { - console.error('Vue Devtools failed to install:', e.toString()) - } - } - windowManager.create(IWindowList.TRAY_WINDOW) - windowManager.create(IWindowList.SETTING_WINDOW) - if (process.platform === 'darwin' || process.platform === 'win32') { - createTray() - } - db.set('needReload', false) - updateChecker() - // 不需要阻塞 - process.nextTick(() => { - updateShortKeyFromVersion212(db, db.get('settings.shortKey')) - shortKeyHandler.init() - }) - server.startup() - if (process.env.NODE_ENV !== 'development') { - let files = getUploadFiles() - if (files === null || files.length > 0) { // 如果有文件列表作为参数,说明是命令行启动 - if (files === null) { - uploadClipboardFiles() - } else { - const win = windowManager.getAvailableWindow() - uploadChoosedFiles(win.webContents, files) - } - } - } - }) - - app.on('window-all-closed', () => { - if (process.platform !== 'darwin') { - app.quit() - } - }) - - app.on('activate', () => { - createProtocol('picgo') - if (!windowManager.has(IWindowList.TRAY_WINDOW)) { - windowManager.create(IWindowList.TRAY_WINDOW) - } - if (!windowManager.has(IWindowList.SETTING_WINDOW)) { - windowManager.create(IWindowList.SETTING_WINDOW) - } - }) - - app.on('will-quit', () => { - globalShortcut.unregisterAll() - bus.removeAllListeners() - server.shutdown() - }) - - app.setLoginItemSettings({ - openAtLogin: db.get('settings.autoStart') || false - }) -} - -// Exit cleanly on request from parent process in development mode. -if (isDevelopment) { - if (process.platform === 'win32') { - process.on('message', data => { - if (data === 'graceful-exit') { - app.quit() - server.shutdown() - } - }) - } else { - process.on('SIGTERM', () => { - app.quit() - server.shutdown() - }) - } -} +bootstrap.launchApp() /** * Auto Updater diff --git a/src/main/apis/app/uploader/index.ts b/src/main/apis/app/uploader/index.ts index 44c0ab8..78db89f 100644 --- a/src/main/apis/app/uploader/index.ts +++ b/src/main/apis/app/uploader/index.ts @@ -62,22 +62,24 @@ class Uploader { handle: async ctx => { const rename = db.get('settings.rename') const autoRename = db.get('settings.autoRename') - await Promise.all(ctx.output.map(async (item, index) => { - let name: undefined | string | null - let fileName: string | undefined - if (autoRename) { - fileName = dayjs().add(index, 'second').format('YYYYMMDDHHmmss') + item.extname - } else { - fileName = item.fileName - } - if (rename) { - const window = windowManager.create(IWindowList.RENAME_WINDOW)! - await waitForShow(window.webContents) - window.webContents.send('rename', fileName, window.webContents.id) - name = await waitForRename(window, window.webContents.id) - } - item.fileName = name || fileName - })) + if (autoRename || rename) { + await Promise.all(ctx.output.map(async (item, index) => { + let name: undefined | string | null + let fileName: string | undefined + if (autoRename) { + fileName = dayjs().add(index, 'second').format('YYYYMMDDHHmmss') + item.extname + } else { + fileName = item.fileName + } + if (rename) { + const window = windowManager.create(IWindowList.RENAME_WINDOW)! + await waitForShow(window.webContents) + window.webContents.send('rename', fileName, window.webContents.id) + name = await waitForRename(window, window.webContents.id) + } + item.fileName = name || fileName + })) + } } }) } diff --git a/src/main/lifeCycle/index.ts b/src/main/lifeCycle/index.ts new file mode 100644 index 0000000..a9c77df --- /dev/null +++ b/src/main/lifeCycle/index.ts @@ -0,0 +1,166 @@ +import { + app, + globalShortcut, + protocol +} from 'electron' +import { + createProtocol, + installVueDevtools +} from 'vue-cli-plugin-electron-builder/lib' +import beforeOpen from '~/main/utils/beforeOpen' +import fixPath from 'fix-path' +import ipcList from '~/main/events/ipcList' +import busEventList from '~/main/events/busEventList' +import { IWindowList } from 'apis/app/window/constants' +import windowManager from 'apis/app/window/windowManager' +import { + updateShortKeyFromVersion212 +} from '~/main/migrate' +import { + uploadChoosedFiles, + uploadClipboardFiles +} from 'apis/app/uploader/apis' +import { + createTray +} from 'apis/app/system' +import server from '~/main/server/index' +import updateChecker from '~/main/utils/updateChecker' +import shortKeyHandler from 'apis/app/shortKey/shortKeyHandler' +import { getUploadFiles } from '~/main/utils/handleArgv' +import db from '#/datastore' +import bus from '@core/bus' + +const isDevelopment = process.env.NODE_ENV !== 'production' +class LifeCycle { + private beforeReady () { + protocol.registerSchemesAsPrivileged([{ scheme: 'picgo', privileges: { secure: true, standard: true } }]) + // fix the $PATH in macOS + fixPath() + beforeOpen() + ipcList.listen() + busEventList.listen() + updateShortKeyFromVersion212(db, db.get('settings.shortKey')) + } + private onReady () { + app.on('ready', async () => { + createProtocol('picgo') + if (isDevelopment && !process.env.IS_TEST) { + // Install Vue Devtools + try { + await installVueDevtools() + } catch (e) { + console.error('Vue Devtools failed to install:', e.toString()) + } + } + windowManager.create(IWindowList.TRAY_WINDOW) + windowManager.create(IWindowList.SETTING_WINDOW) + if (process.platform === 'darwin' || process.platform === 'win32') { + createTray() + } + db.set('needReload', false) + updateChecker() + // 不需要阻塞 + process.nextTick(() => { + shortKeyHandler.init() + }) + server.startup() + if (process.env.NODE_ENV !== 'development') { + let files = getUploadFiles() + if (files === null || files.length > 0) { // 如果有文件列表作为参数,说明是命令行启动 + if (files === null) { + uploadClipboardFiles() + } else { + const win = windowManager.getAvailableWindow() + uploadChoosedFiles(win.webContents, files) + } + } + } + }) + } + private onRunning () { + app.on('second-instance', (event, commandLine, workingDirectory) => { + let files = getUploadFiles(commandLine, workingDirectory) + if (files === null || files.length > 0) { // 如果有文件列表作为参数,说明是命令行启动 + if (files === null) { + uploadClipboardFiles() + } else { + const win = windowManager.getAvailableWindow() + uploadChoosedFiles(win.webContents, files) + } + } else { + if (windowManager.has(IWindowList.SETTING_WINDOW)) { + const settingWindow = windowManager.get(IWindowList.SETTING_WINDOW)! + if (settingWindow.isMinimized()) { + settingWindow.restore() + } + settingWindow.focus() + } + } + }) + app.on('activate', () => { + createProtocol('picgo') + if (!windowManager.has(IWindowList.TRAY_WINDOW)) { + windowManager.create(IWindowList.TRAY_WINDOW) + } + if (!windowManager.has(IWindowList.SETTING_WINDOW)) { + windowManager.create(IWindowList.SETTING_WINDOW) + } + }) + app.setLoginItemSettings({ + openAtLogin: db.get('settings.autoStart') || false + }) + if (process.platform === 'win32') { + app.setAppUserModelId('com.molunerfinn.picgo') + } + + if (process.env.XDG_CURRENT_DESKTOP && process.env.XDG_CURRENT_DESKTOP.includes('Unity')) { + process.env.XDG_CURRENT_DESKTOP = 'Unity' + } + } + private onQuit () { + app.on('window-all-closed', () => { + if (process.platform !== 'darwin') { + app.quit() + } + }) + + app.on('will-quit', () => { + globalShortcut.unregisterAll() + bus.removeAllListeners() + server.shutdown() + }) + // Exit cleanly on request from parent process in development mode. + if (isDevelopment) { + if (process.platform === 'win32') { + process.on('message', data => { + if (data === 'graceful-exit') { + app.quit() + server.shutdown() + } + }) + } else { + process.on('SIGTERM', () => { + app.quit() + server.shutdown() + }) + } + } + } + launchApp () { + const gotTheLock = app.requestSingleInstanceLock() + if (!gotTheLock) { + app.quit() + } else { + this.beforeReady() + this.onReady() + this.onRunning() + this.onQuit() + } + } +} + +const bootstrap = new LifeCycle() + +export { + bootstrap +}