diff --git a/src/main/lifeCycle/index.ts b/src/main/lifeCycle/index.ts index 95cf39a..06a1997 100644 --- a/src/main/lifeCycle/index.ts +++ b/src/main/lifeCycle/index.ts @@ -31,8 +31,27 @@ import { getUploadFiles } from '~/main/utils/handleArgv' import db from '#/datastore' import bus from '@core/bus' import { privacyManager } from '~/main/utils/privacyManager' +import logger from 'apis/core/picgo/logger' const isDevelopment = process.env.NODE_ENV !== 'production' + +const handleStartUpFiles = (argv: string[], cwd: string) => { + const files = getUploadFiles(argv, cwd, logger) + if (files === null || files.length > 0) { // 如果有文件列表作为参数,说明是命令行启动 + if (files === null) { + logger.info('cli -> uploading file from clipboard') + uploadClipboardFiles() + } else { + logger.info('cli -> uploading files from cli', ...files.map(item => item.path)) + const win = windowManager.getAvailableWindow() + uploadChoosedFiles(win.webContents, files) + } + return true + } else { + return false + } +} + class LifeCycle { private beforeReady () { protocol.registerSchemesAsPrivileged([{ scheme: 'picgo', privileges: { secure: true, standard: true } }]) @@ -69,15 +88,7 @@ class LifeCycle { }) 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) - } - } + handleStartUpFiles(process.argv, process.cwd()) } if (global.notificationList?.length > 0) { @@ -91,15 +102,9 @@ class LifeCycle { } 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 { + logger.info('detect second instance') + const result = handleStartUpFiles(commandLine, workingDirectory) + if (!result) { if (windowManager.has(IWindowList.SETTING_WINDOW)) { const settingWindow = windowManager.get(IWindowList.SETTING_WINDOW)! if (settingWindow.isMinimized()) { diff --git a/src/main/migrate/index.ts b/src/main/migrate/index.ts index 3dd1dab..526f92b 100644 --- a/src/main/migrate/index.ts +++ b/src/main/migrate/index.ts @@ -20,6 +20,7 @@ const updateShortKeyFromVersion212 = (db: typeof DB, shortKeyConfig: IShortKeyCo name: 'upload', label: '快捷上传' } + // @ts-ignore delete shortKeyConfig.upload db.set('settings.shortKey', shortKeyConfig) return true diff --git a/src/main/utils/handleArgv.ts b/src/main/utils/handleArgv.ts index 8ed688b..9f04234 100644 --- a/src/main/utils/handleArgv.ts +++ b/src/main/utils/handleArgv.ts @@ -1,35 +1,55 @@ import path from 'path' import fs from 'fs-extra' -type ClipboardFileObject = { +import Logger from 'picgo/dist/src/lib/Logger' +interface IResultFileObject { path: string } -type Result = ClipboardFileObject[] -const getUploadFiles = (argv = process.argv, cwd = process.cwd()) => { - let files = argv.slice(1) - if (files.length > 0 && files[0] === 'upload') { - if (files.length === 1) { +type Result = IResultFileObject[] + +interface IHandleArgvResult { + success: boolean + fileList?: string[] +} + +const handleArgv = (argv: string[]): IHandleArgvResult => { + const uploadIndex = argv.indexOf('upload') + if (uploadIndex !== -1) { + const fileList = argv.slice(1 + uploadIndex) + return { + success: true, + fileList + } + } + return { + success: false + } +} + +const getUploadFiles = (argv = process.argv, cwd = process.cwd(), logger: Logger) => { + const { success, fileList } = handleArgv(argv) + if (!success) { + return [] + } else { + if (fileList?.length === 0) { return null // for uploading images in clipboard - } else if (files.length > 1) { - files = argv.slice(1) - let result: Result = [] - if (files.length > 0) { - result = files.map(item => { - if (path.isAbsolute(item)) { + } else if ((fileList?.length || 0) > 0) { + const result = fileList!.map(item => { + if (path.isAbsolute(item)) { + return { + path: item + } + } else { + let tempPath = path.join(cwd, item) + if (fs.existsSync(tempPath)) { return { - path: item + path: tempPath } } else { - let tempPath = path.join(cwd, item) - if (fs.existsSync(tempPath)) { - return { - path: tempPath - } - } else { - return null - } + logger.warn(`cli -> can't get file: ${tempPath}, invalid path`) + return null } - }).filter(item => item !== null) as Result - } + } + }).filter(item => item !== null) as Result return result } }