PicList/src/background.ts

175 lines
4.8 KiB
TypeScript
Raw Normal View History

import {
app,
globalShortcut,
2019-12-19 06:17:21 -05:00
protocol
} from 'electron'
2019-12-19 06:17:21 -05:00
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'
2019-12-19 06:17:21 -05:00
import beforeOpen from '~/main/utils/beforeOpen'
import updateChecker from '~/main/utils/updateChecker'
import ipcList from '~/main/events/ipcList'
import busEventList from '~/main/events/busEventList'
2019-01-12 06:19:26 -05:00
import fixPath from 'fix-path'
2019-12-19 06:17:21 -05:00
import { getUploadFiles } from '~/main/utils/handleArgv'
import bus from '@core/bus'
2019-09-10 02:38:08 -04:00
import {
updateShortKeyFromVersion212
} from '~/main/migrate'
import shortKeyHandler from 'apis/app/shortKey/shortKeyHandler'
import server from '~/main/server/index'
import {
createTray
} from 'apis/app/system'
2019-12-19 06:17:21 -05:00
const isDevelopment = process.env.NODE_ENV !== 'production'
protocol.registerSchemesAsPrivileged([{ scheme: 'picgo', privileges: { secure: true, standard: true } }])
2019-12-19 06:17:21 -05:00
beforeOpen()
2017-11-27 19:21:12 -05:00
2019-01-12 06:19:26 -05:00
// fix the $PATH in macOS
fixPath()
ipcList.listen()
busEventList.listen()
2018-01-30 02:20:19 -05:00
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')
}
2018-01-10 03:51:09 -05:00
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) {
2019-12-19 06:17:21 -05:00
// Install Vue Devtools
try {
await installVueDevtools()
} catch (e) {
console.error('Vue Devtools failed to install:', e.toString())
}
2019-12-19 06:17:21 -05:00
}
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)
}
}
}
})
2017-11-27 19:21:12 -05:00
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit()
}
})
2017-11-27 19:21:12 -05:00
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)
}
})
2017-11-27 19:21:12 -05:00
app.on('will-quit', () => {
globalShortcut.unregisterAll()
bus.removeAllListeners()
server.shutdown()
})
app.setLoginItemSettings({
openAtLogin: db.get('settings.autoStart') || false
})
}
2018-05-02 05:17:55 -04:00
2019-12-19 06:17:21 -05:00
// 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()
2019-12-19 06:17:21 -05:00
}
})
} else {
process.on('SIGTERM', () => {
app.quit()
server.shutdown()
2019-12-19 06:17:21 -05:00
})
}
}
2017-11-27 19:21:12 -05:00
/**
* Auto Updater
*
* Uncomment the following code below and install `electron-updater` to
* support auto updating. Code Signing with a valid certificate is required.
* https://simulatedgreg.gitbooks.io/electron-vue/content/en/using-electron-builder.html#auto-updating
*/
// import { autoUpdater } from 'electron-updater'
// autoUpdater.on('update-downloaded', () => {
// autoUpdater.quitAndInstall()
// })
// app.on('ready', () => {
// if (process.env.NODE_ENV === 'production') {
// autoUpdater.checkForUpdates()
// }
// })