From 3df2253ae9cd57774a795b497a209a4856368d62 Mon Sep 17 00:00:00 2001 From: Molunerfinn Date: Fri, 10 Apr 2020 23:28:46 +0800 Subject: [PATCH] :hammer: Refactor: improved code structure for greater clarity and understanding --- src/background.ts | 16 ++-- src/main/apis/README.md | 13 ++++ .../{ => app}/shortKey/shortKeyHandler.ts | 8 +- .../{ => app}/shortKey/shortKeyService.ts | 2 +- src/main/apis/app/{ => system}/index.ts | 8 +- .../{uploader/api.ts => app/uploader/apis.ts} | 6 +- src/main/apis/{ => app}/uploader/index.ts | 6 +- src/main/apis/{ => app}/window/constants.ts | 0 src/main/apis/{ => app}/window/windowList.ts | 32 ++++---- .../apis/{ => app}/window/windowManager.ts | 2 +- .../apis/{bus/index.ts => core/bus/apis.ts} | 2 +- src/main/apis/{ => core}/bus/constants.ts | 0 .../eventBus.ts => apis/core/bus/index.ts} | 0 src/main/apis/{ => core}/picgo/index.ts | 0 src/main/apis/core/picgo/logger.ts | 5 ++ src/main/apis/gui/index.ts | 4 +- .../eventCenter => events}/busEventList.ts | 12 +-- .../{apis/eventCenter => events}/ipcList.ts | 12 +-- .../eventCenter => events}/picgoCoreIPC.ts | 6 +- src/main/server/index.ts | 4 +- src/main/server/routerManager.ts | 4 +- src/main/utils/getPicBeds.ts | 2 +- src/main/utils/logger.ts | 76 ------------------- src/universal/types/electron.d.ts | 4 +- tsconfig.json | 6 ++ vue.config.js | 2 + 26 files changed, 91 insertions(+), 141 deletions(-) create mode 100644 src/main/apis/README.md rename src/main/apis/{ => app}/shortKey/shortKeyHandler.ts (97%) rename src/main/apis/{ => app}/shortKey/shortKeyService.ts (93%) rename src/main/apis/app/{ => system}/index.ts (96%) rename src/main/apis/{uploader/api.ts => app/uploader/apis.ts} (94%) rename src/main/apis/{ => app}/uploader/index.ts (95%) rename src/main/apis/{ => app}/window/constants.ts (100%) rename src/main/apis/{ => app}/window/windowList.ts (87%) rename src/main/apis/{ => app}/window/windowManager.ts (98%) rename src/main/apis/{bus/index.ts => core/bus/apis.ts} (97%) rename src/main/apis/{ => core}/bus/constants.ts (100%) rename src/main/{utils/eventBus.ts => apis/core/bus/index.ts} (100%) rename src/main/apis/{ => core}/picgo/index.ts (100%) create mode 100644 src/main/apis/core/picgo/logger.ts rename src/main/{apis/eventCenter => events}/busEventList.ts (85%) rename src/main/{apis/eventCenter => events}/ipcList.ts (93%) rename src/main/{apis/eventCenter => events}/picgoCoreIPC.ts (98%) delete mode 100644 src/main/utils/logger.ts diff --git a/src/background.ts b/src/background.ts index 907554e..203590c 100644 --- a/src/background.ts +++ b/src/background.ts @@ -8,27 +8,27 @@ import { installVueDevtools } from 'vue-cli-plugin-electron-builder/lib' import db from '#/datastore' -import { IWindowList } from '~/main/apis/window/constants' -import windowManager from '~/main/apis/window/windowManager' +import { IWindowList } from 'apis/app/window/constants' +import windowManager from 'apis/app/window/windowManager' import { uploadChoosedFiles, uploadClipboardFiles -} from '~/main/apis/uploader/api' +} from 'apis/app/uploader/apis' import beforeOpen from '~/main/utils/beforeOpen' import updateChecker from '~/main/utils/updateChecker' -import ipcList from '~/main/apis/eventCenter/ipcList' -import busEventList from '~/main/apis/eventCenter/busEventList' +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 '~/main/utils/eventBus' +import bus from '@core/bus' import { updateShortKeyFromVersion212 } from '~/main/migrate' -import shortKeyHandler from '~/main/apis/shortKey/shortKeyHandler' +import shortKeyHandler from 'apis/app/shortKey/shortKeyHandler' import server from '~/main/server/index' import { createTray -} from '~/main/apis/app' +} from 'apis/app/system' const isDevelopment = process.env.NODE_ENV !== 'production' protocol.registerSchemesAsPrivileged([{ scheme: 'picgo', privileges: { secure: true, standard: true } }]) diff --git a/src/main/apis/README.md b/src/main/apis/README.md new file mode 100644 index 0000000..ed7a325 --- /dev/null +++ b/src/main/apis/README.md @@ -0,0 +1,13 @@ +# apis folder + +## core + +The lowest level APIs that are not dependent on each other. The upper APIs depend on them. + +## app + +Provide key API interfaces for PicGo application, including uploader, window management, shortcut key system, etc + +## gui + +GuiApi for PicGo plugins. diff --git a/src/main/apis/shortKey/shortKeyHandler.ts b/src/main/apis/app/shortKey/shortKeyHandler.ts similarity index 97% rename from src/main/apis/shortKey/shortKeyHandler.ts rename to src/main/apis/app/shortKey/shortKeyHandler.ts index 5e895a2..51661d8 100644 --- a/src/main/apis/shortKey/shortKeyHandler.ts +++ b/src/main/apis/app/shortKey/shortKeyHandler.ts @@ -1,4 +1,4 @@ -import bus from '../../utils/eventBus' +import bus from '@core/bus' import PicGoCore from '~/universal/types/picgo' import path from 'path' import { @@ -6,11 +6,11 @@ import { globalShortcut, BrowserWindow } from 'electron' -import logger from '../../utils/logger' -import GuiApi from '../gui' +import logger from '@core/picgo/logger' +import GuiApi from '../../gui' import db from '#/datastore' import shortKeyService from './shortKeyService' -import picgo from '../picgo' +import picgo from '@core/picgo' class ShortKeyHandler { private isInModifiedMode: boolean = false diff --git a/src/main/apis/shortKey/shortKeyService.ts b/src/main/apis/app/shortKey/shortKeyService.ts similarity index 93% rename from src/main/apis/shortKey/shortKeyService.ts rename to src/main/apis/app/shortKey/shortKeyService.ts index 675b6a9..e760598 100644 --- a/src/main/apis/shortKey/shortKeyService.ts +++ b/src/main/apis/app/shortKey/shortKeyService.ts @@ -1,4 +1,4 @@ -import logger from '../../utils/logger' +import logger from '@core/picgo/logger' class ShortKeyService { private commandList: Map = new Map() registerCommand (command: string, handler: IShortKeyHandler) { diff --git a/src/main/apis/app/index.ts b/src/main/apis/app/system/index.ts similarity index 96% rename from src/main/apis/app/index.ts rename to src/main/apis/app/system/index.ts index 615def1..61738d2 100644 --- a/src/main/apis/app/index.ts +++ b/src/main/apis/app/system/index.ts @@ -7,12 +7,12 @@ import { systemPreferences, Notification } from 'electron' -import uploader from '~/main/apis/uploader' +import uploader from 'apis/app/uploader' import getPicBeds from '~/main/utils/getPicBeds' import db from '#/datastore' -import windowManager from '~/main/apis/window/windowManager' -import { IWindowList } from '~/main/apis/window/constants' -import picgo from '~/main/apis/picgo' +import windowManager from 'apis/app/window/windowManager' +import { IWindowList } from 'apis/app/window/constants' +import picgo from '@core/picgo' import pasteTemplate from '#/utils/pasteTemplate' import pkg from 'root/package.json' import { handleCopyUrl } from '~/main/utils/common' diff --git a/src/main/apis/uploader/api.ts b/src/main/apis/app/uploader/apis.ts similarity index 94% rename from src/main/apis/uploader/api.ts rename to src/main/apis/app/uploader/apis.ts index 92efb6a..41e23d5 100644 --- a/src/main/apis/uploader/api.ts +++ b/src/main/apis/app/uploader/apis.ts @@ -2,9 +2,9 @@ import { Notification, WebContents } from 'electron' -import windowManager from '~/main/apis/window/windowManager' -import { IWindowList } from '~/main/apis/window/constants' -import uploader from './' +import windowManager from 'apis/app/window/windowManager' +import { IWindowList } from 'apis/app/window/constants' +import uploader from '.' import pasteTemplate from '#/utils/pasteTemplate' import db from '#/datastore' import { handleCopyUrl } from '~/main/utils/common' diff --git a/src/main/apis/uploader/index.ts b/src/main/apis/app/uploader/index.ts similarity index 95% rename from src/main/apis/uploader/index.ts rename to src/main/apis/app/uploader/index.ts index bff0222..44c0ab8 100644 --- a/src/main/apis/uploader/index.ts +++ b/src/main/apis/app/uploader/index.ts @@ -6,10 +6,10 @@ import { WebContents } from 'electron' import dayjs from 'dayjs' -import picgo from '~/main/apis/picgo' +import picgo from '@core/picgo' import db from '#/datastore' -import windowManager from '~/main/apis/window/windowManager' -import { IWindowList } from '~/main/apis/window/constants' +import windowManager from 'apis/app/window/windowManager' +import { IWindowList } from 'apis/app/window/constants' const waitForShow = (webcontent: WebContents) => { return new Promise((resolve, reject) => { diff --git a/src/main/apis/window/constants.ts b/src/main/apis/app/window/constants.ts similarity index 100% rename from src/main/apis/window/constants.ts rename to src/main/apis/app/window/constants.ts diff --git a/src/main/apis/window/windowList.ts b/src/main/apis/app/window/windowList.ts similarity index 87% rename from src/main/apis/window/windowList.ts rename to src/main/apis/app/window/windowList.ts index 5c12e70..1741c67 100644 --- a/src/main/apis/window/windowList.ts +++ b/src/main/apis/app/window/windowList.ts @@ -8,11 +8,11 @@ import { RENAME_WINDOW_URL } from './constants' import { IWindowListItem } from '#/types/electron' -import bus from '~/main/utils/eventBus' +import bus from '@core/bus' import db from '#/datastore' -import { getWindowId } from '~/main/apis/bus' +import { getWindowId } from '@core/bus/apis' import { BrowserWindow, app } from 'electron' -import { CREATE_APP_MENU } from '~/main/apis/bus/constants' +import { CREATE_APP_MENU } from '@core/bus/constants' const windowList = new Map() @@ -37,14 +37,14 @@ windowList.set(IWindowList.TRAY_WINDOW, { } }, callback (window) { - const id = window!.id - window!.loadURL(TRAY_WINDOW_URL) - window!.on('closed', () => { + const id = window.id + window.loadURL(TRAY_WINDOW_URL) + window.on('closed', () => { bus.emit(DELETE_WINDOW_EVENT, id) }) - window!.on('blur', () => { - window!.hide() + window.on('blur', () => { + window.hide() }) } }) @@ -82,9 +82,9 @@ windowList.set(IWindowList.SETTING_WINDOW, { return options }, callback (window) { - const id = window!.id - window!.loadURL(SETTING_WINDOW_URL) - window!.on('closed', () => { + const id = window.id + window.loadURL(SETTING_WINDOW_URL) + window.on('closed', () => { bus.emit('toggleShortKeyModifiedMode', false) bus.emit(DELETE_WINDOW_EVENT, id) if (process.platform === 'linux') { @@ -125,9 +125,9 @@ windowList.set(IWindowList.MINI_WINDOW, { return obj }, callback (window) { - const id = window!.id - window!.loadURL(MINI_WINDOW_URL) - window!.on('closed', () => { + const id = window.id + window.loadURL(MINI_WINDOW_URL) + window.on('closed', () => { bus.emit(DELETE_WINDOW_EVENT, id) }) } @@ -159,7 +159,7 @@ windowList.set(IWindowList.RENAME_WINDOW, { return options }, async callback (window) { - window!.loadURL(RENAME_WINDOW_URL) + window.loadURL(RENAME_WINDOW_URL) const currentWindowId = await getWindowId() const currentWindow = BrowserWindow.fromId(currentWindowId) if (currentWindow && currentWindow.isVisible()) { @@ -173,7 +173,7 @@ windowList.set(IWindowList.RENAME_WINDOW, { } else { // if is the miniWindow positionY = bounds.y + bounds.height / 2 } - window!.setPosition(positionX, positionY, false) + window.setPosition(positionX, positionY, false) } } }) diff --git a/src/main/apis/window/windowManager.ts b/src/main/apis/app/window/windowManager.ts similarity index 98% rename from src/main/apis/window/windowManager.ts rename to src/main/apis/app/window/windowManager.ts index b4ec24f..1cecb16 100644 --- a/src/main/apis/window/windowManager.ts +++ b/src/main/apis/app/window/windowManager.ts @@ -8,7 +8,7 @@ import { DELETE_WINDOW_EVENT, CREATE_WINDOW_EVENT } from './constants' -import bus from '~/main/utils/eventBus' +import bus from '@core/bus' class WindowManager implements IWindowManager { private windowMap: Map = new Map() diff --git a/src/main/apis/bus/index.ts b/src/main/apis/core/bus/apis.ts similarity index 97% rename from src/main/apis/bus/index.ts rename to src/main/apis/core/bus/apis.ts index 95d5b09..c2b6eb3 100644 --- a/src/main/apis/bus/index.ts +++ b/src/main/apis/core/bus/apis.ts @@ -1,4 +1,4 @@ -import bus from '../../utils/eventBus' +import bus from '.' import { UPLOAD_WITH_FILES, UPLOAD_WITH_FILES_RESPONSE, diff --git a/src/main/apis/bus/constants.ts b/src/main/apis/core/bus/constants.ts similarity index 100% rename from src/main/apis/bus/constants.ts rename to src/main/apis/core/bus/constants.ts diff --git a/src/main/utils/eventBus.ts b/src/main/apis/core/bus/index.ts similarity index 100% rename from src/main/utils/eventBus.ts rename to src/main/apis/core/bus/index.ts diff --git a/src/main/apis/picgo/index.ts b/src/main/apis/core/picgo/index.ts similarity index 100% rename from src/main/apis/picgo/index.ts rename to src/main/apis/core/picgo/index.ts diff --git a/src/main/apis/core/picgo/logger.ts b/src/main/apis/core/picgo/logger.ts new file mode 100644 index 0000000..7a45303 --- /dev/null +++ b/src/main/apis/core/picgo/logger.ts @@ -0,0 +1,5 @@ +import picgo from '.' + +const logger = picgo.log + +export default logger diff --git a/src/main/apis/gui/index.ts b/src/main/apis/gui/index.ts index 8c8a367..ab6ff8e 100644 --- a/src/main/apis/gui/index.ts +++ b/src/main/apis/gui/index.ts @@ -6,13 +6,13 @@ import { ipcMain } from 'electron' import db from '#/datastore' -import uploader from '../uploader' +import uploader from 'apis/app/uploader' import pasteTemplate from '#/utils/pasteTemplate' import { handleCopyUrl } from '~/main/utils/common' import { getWindowId, getSettingWindowId -} from '~/main/apis/bus' +} from '@core/bus/apis' import { SHOW_INPUT_BOX } from '~/universal/events/constants' diff --git a/src/main/apis/eventCenter/busEventList.ts b/src/main/events/busEventList.ts similarity index 85% rename from src/main/apis/eventCenter/busEventList.ts rename to src/main/events/busEventList.ts index f5c69d3..5217e38 100644 --- a/src/main/apis/eventCenter/busEventList.ts +++ b/src/main/events/busEventList.ts @@ -1,13 +1,13 @@ -import bus from '~/main/utils/eventBus' +import bus from '@core/bus' import { uploadClipboardFiles, uploadChoosedFiles -} from '~/main/apis/uploader/api' +} from 'apis/app/uploader/apis' import { createMenu -} from '~/main/apis/app' -import { IWindowList } from '~/main/apis/window/constants' -import windowManager from '~/main/apis/window/windowManager' +} from 'apis/app/system' +import { IWindowList } from 'apis/app/window/constants' +import windowManager from 'apis/app/window/windowManager' import { UPLOAD_WITH_FILES, UPLOAD_WITH_FILES_RESPONSE, @@ -18,7 +18,7 @@ import { GET_SETTING_WINDOW_ID, GET_SETTING_WINDOW_ID_RESPONSE, CREATE_APP_MENU -} from '~/main/apis/bus/constants' +} from '@core/bus/constants' function initEventCenter () { const eventList: any = { 'picgo:upload': uploadClipboardFiles, diff --git a/src/main/apis/eventCenter/ipcList.ts b/src/main/events/ipcList.ts similarity index 93% rename from src/main/apis/eventCenter/ipcList.ts rename to src/main/events/ipcList.ts index 9791624..3e14cc4 100644 --- a/src/main/apis/eventCenter/ipcList.ts +++ b/src/main/events/ipcList.ts @@ -5,19 +5,19 @@ import { Notification, IpcMainEvent } from 'electron' -import windowManager from '~/main/apis/window/windowManager' -import { IWindowList } from '~/main/apis/window/constants' -import uploader from '~/main/apis/uploader' +import windowManager from 'apis/app/window/windowManager' +import { IWindowList } from 'apis/app/window/constants' +import uploader from 'apis/app/uploader' import pasteTemplate from '#/utils/pasteTemplate' import db from '#/datastore' import server from '~/main/server' import getPicBeds from '~/main/utils/getPicBeds' -import shortKeyHandler from '~/main/apis/shortKey/shortKeyHandler' -import bus from '~/main/utils/eventBus' +import shortKeyHandler from 'apis/app/shortKey/shortKeyHandler' +import bus from '@core/bus' import { uploadClipboardFiles, uploadChoosedFiles -} from '~/main/apis/uploader/api' +} from '~/main/apis/app/uploader/apis' import picgoCoreIPC from './picgoCoreIPC' import { handleCopyUrl } from '~/main/utils/common' diff --git a/src/main/apis/eventCenter/picgoCoreIPC.ts b/src/main/events/picgoCoreIPC.ts similarity index 98% rename from src/main/apis/eventCenter/picgoCoreIPC.ts rename to src/main/events/picgoCoreIPC.ts index b7834c4..7f96cfd 100644 --- a/src/main/apis/eventCenter/picgoCoreIPC.ts +++ b/src/main/events/picgoCoreIPC.ts @@ -1,5 +1,5 @@ import path from 'path' -import GuiApi from '../gui' +import GuiApi from 'apis/gui' import { dialog, shell, @@ -9,8 +9,8 @@ import { } from 'electron' import PicGoCore from '~/universal/types/picgo' import { IPicGoHelperType } from '#/types/enum' -import shortKeyHandler from '../shortKey/shortKeyHandler' -import picgo from '~/main/apis/picgo' +import shortKeyHandler from '../apis/app/shortKey/shortKeyHandler' +import picgo from '@core/picgo' // eslint-disable-next-line const requireFunc = typeof __webpack_require__ === 'function' ? __non_webpack_require__ : require diff --git a/src/main/server/index.ts b/src/main/server/index.ts index b7f988f..7963dbd 100644 --- a/src/main/server/index.ts +++ b/src/main/server/index.ts @@ -4,8 +4,8 @@ import { handleResponse, ensureHTTPLink } from './utils' -import picgo from '~/main/apis/picgo' -import logger from '~/main/utils/logger' +import picgo from '@core/picgo' +import logger from '@core/picgo/logger' import axios from 'axios' class Server { diff --git a/src/main/server/routerManager.ts b/src/main/server/routerManager.ts index a82a1e4..bb48f02 100644 --- a/src/main/server/routerManager.ts +++ b/src/main/server/routerManager.ts @@ -2,11 +2,11 @@ import router from './router' import { uploadWithClipboardFiles, uploadWithFiles -} from '~/main/apis/bus/index' +} from '@core/bus/apis' import { handleResponse } from './utils' -import logger from '../utils/logger' +import logger from '@core/picgo/logger' router.post('/upload', async ({ response, diff --git a/src/main/utils/getPicBeds.ts b/src/main/utils/getPicBeds.ts index e6f4ed1..953f74d 100644 --- a/src/main/utils/getPicBeds.ts +++ b/src/main/utils/getPicBeds.ts @@ -1,4 +1,4 @@ -import picgo from '../apis/picgo' +import picgo from '@core/picgo' const getPicBeds = () => { const picBedTypes = picgo.helper.uploader.getIdList() diff --git a/src/main/utils/logger.ts b/src/main/utils/logger.ts deleted file mode 100644 index 7572a01..0000000 --- a/src/main/utils/logger.ts +++ /dev/null @@ -1,76 +0,0 @@ -import chalk from 'chalk' -import dayjs from 'dayjs' -import fs from 'fs-extra' -import path from 'path' -import util from 'util' -import db from '#/datastore' -import { app } from 'electron' -import { IChalkType } from '#/types/enum' -const baseDir = app.getPath('userData') - -class Logger { - private level = { - success: IChalkType.success, - info: IChalkType.info, - warn: IChalkType.warn, - error: IChalkType.error - } - protected handleLog (type: ILogType, msg: ILoggerType): ILoggerType { - // if configPath is invalid then this.ctx.config === undefined - // if not then check config.silent - const log = chalk[this.level[type]](`[PicGo ${type.toUpperCase()}]:`) - console.log(log, msg) - process.nextTick(() => { - this.handleWriteLog(type, msg) - }) - return msg - } - - protected handleWriteLog (type: string, msg: ILoggerType): void { - try { - const logLevel = db.get('settings.logLevel') - const logPath = db.get('settings.logPath') || path.join(baseDir, './picgo.log') - if (this.checkLogLevel(type, logLevel)) { - const picgoLog = fs.createWriteStream(logPath, { flags: 'a', encoding: 'utf8' }) - let log = `${dayjs().format('YYYY-MM-DD HH:mm:ss')} [PicGo ${type.toUpperCase()}] ${msg}` - const logger = new console.Console(picgoLog) - if (typeof msg === 'object' && type === 'error') { - log += `\n------Error Stack Begin------\n${util.format(msg.stack)}\n-------Error Stack End-------` - } - logger.log(log) - picgoLog.destroy() - } - } catch (e) { - console.log(e) - } - } - - protected checkLogLevel (type: string, level: undefined | string | string[]): boolean { - if (level === undefined || level === 'all') { - return true - } - if (Array.isArray(level)) { - return level.some((item: string) => (item === type || item === 'all')) - } else { - return type === level - } - } - - success (msg: ILoggerType): ILoggerType { - return this.handleLog('success', msg) - } - - info (msg: ILoggerType): ILoggerType { - return this.handleLog('info', msg) - } - - error (msg: ILoggerType): ILoggerType { - return this.handleLog('error', msg) - } - - warn (msg: ILoggerType): ILoggerType { - return this.handleLog('warn', msg) - } -} - -export default new Logger() diff --git a/src/universal/types/electron.d.ts b/src/universal/types/electron.d.ts index 201d567..e436747 100644 --- a/src/universal/types/electron.d.ts +++ b/src/universal/types/electron.d.ts @@ -3,13 +3,13 @@ import { } from 'electron' import { IWindowList -} from '~/main/apis/window/constants' +} from 'apis/app/window/constants' declare interface IWindowListItem { isValid: boolean multiple: boolean options: () => IBrowserWindowOptions, - callback: (window: BrowserWindow | null) => void + callback: (window: BrowserWindow) => void } declare interface IWindowManager { diff --git a/tsconfig.json b/tsconfig.json index 5ab1d8d..199a2ec 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -30,6 +30,12 @@ ], "#/*": [ "src/universal/*" + ], + "apis/*": [ + "src/main/apis/*" + ], + "@core/*": [ + "src/main/apis/core/*" ] }, "lib": [ diff --git a/vue.config.js b/vue.config.js index e786776..4a70a89 100644 --- a/vue.config.js +++ b/vue.config.js @@ -20,6 +20,8 @@ module.exports = { .set('~', resolve('src')) .set('root', resolve('./')) .set('#', resolve('src/universal')) + .set('apis', resolve('src/main/apis')) + .set('@core', resolve('src/main/apis/core')) }, builderOptions: { productName: 'PicGo',