From 4e3fa28be668e72707b27f4ea6f1cc242729af65 Mon Sep 17 00:00:00 2001 From: Molunerfinn Date: Fri, 20 Dec 2019 18:45:26 +0800 Subject: [PATCH] :bug: Fix: enum type error --- src/main/utils/logger.ts | 76 ++++++++++++++++++++++++++++ src/main/utils/picgoCoreIPC.ts | 7 +-- src/universal/types/enum.ts | 22 ++++++++ src/universal/types/types.d.ts | 15 +----- src/universal/utils/pasteTemplate.ts | 3 +- 5 files changed, 105 insertions(+), 18 deletions(-) create mode 100644 src/main/utils/logger.ts create mode 100644 src/universal/types/enum.ts diff --git a/src/main/utils/logger.ts b/src/main/utils/logger.ts new file mode 100644 index 0000000..6832a6e --- /dev/null +++ b/src/main/utils/logger.ts @@ -0,0 +1,76 @@ +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: string | Error): string | Error | undefined { + // 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: string | Error): 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: string | Error): string | Error | undefined { + return this.handleLog('success', msg) + } + + info (msg: string | Error): string | Error | undefined { + return this.handleLog('info', msg) + } + + error (msg: string | Error): string | Error | undefined { + return this.handleLog('error', msg) + } + + warn (msg: string | Error): string | Error | undefined { + return this.handleLog('warn', msg) + } +} + +export default new Logger() diff --git a/src/main/utils/picgoCoreIPC.ts b/src/main/utils/picgoCoreIPC.ts index e409d56..b5e53cd 100644 --- a/src/main/utils/picgoCoreIPC.ts +++ b/src/main/utils/picgoCoreIPC.ts @@ -3,6 +3,7 @@ import GuiApi from './guiApi' import { dialog, shell, IpcMain, IpcMainEvent, App } from 'electron' import db from '#/datastore' import PicGoCore from '~/universal/types/picgo' +import { IPicGoHelperType } from '#/types/enum' // eslint-disable-next-line const requireFunc = typeof __webpack_require__ === 'function' ? __non_webpack_require__ : require @@ -20,7 +21,7 @@ interface GuiMenuItem { } // get uploader or transformer config -const getConfig = (name: string, type: PicGoHelperType, ctx: PicGoCore) => { +const getConfig = (name: string, type: IPicGoHelperType, ctx: PicGoCore) => { let config: any[] = [] if (name === '') { return config @@ -82,11 +83,11 @@ const handleGetPluginList = (ipcMain: IpcMain, STORE_PATH: string, CONFIG_PATH: }, uploader: { name: uploaderName, - config: handleConfigWithFunction(getConfig(uploaderName, PicGoHelperType.uploader, picgo)) + config: handleConfigWithFunction(getConfig(uploaderName, IPicGoHelperType.uploader, picgo)) }, transformer: { name: transformerName, - config: handleConfigWithFunction(getConfig(uploaderName, PicGoHelperType.transformer, picgo)) + config: handleConfigWithFunction(getConfig(uploaderName, IPicGoHelperType.transformer, picgo)) } }, enabled: picgo.getConfig(`picgoPlugins.${pluginList[i]}`), diff --git a/src/universal/types/enum.ts b/src/universal/types/enum.ts new file mode 100644 index 0000000..6e2fb3b --- /dev/null +++ b/src/universal/types/enum.ts @@ -0,0 +1,22 @@ +export enum IChalkType { + success = 'green', + info = 'blue', + warn = 'yellow', + error = 'red' +} + +export enum IPicGoHelperType { + afterUploadPlugins = 'afterUploadPlugins', + beforeTransformPlugins = 'beforeTransformPlugins', + beforeUploadPlugins = 'beforeUploadPlugins', + uploader = 'uploader', + transformer = 'transformer' +} + +export enum IPasteStyle { + MARKDOWN = 'markdown', + HTML = 'HTML', + URL = 'URL', + UBB = 'UBB', + CUSTOM = 'Custom' +} diff --git a/src/universal/types/types.d.ts b/src/universal/types/types.d.ts index fa8b1fc..4f54865 100644 --- a/src/universal/types/types.d.ts +++ b/src/universal/types/types.d.ts @@ -77,25 +77,12 @@ interface Bounds { y: number } -declare enum PasteStyle { - MARKDOWN = 'markdown', - HTML = 'HTML', - URL = 'URL', - UBB = 'UBB', - CUSTOM = 'Custom' -} +declare type ILogType = 'success' | 'info' | 'warn' | 'error' // global value declare var __static: string // PicGo Types -declare enum PicGoHelperType { - afterUploadPlugins = 'afterUploadPlugins', - beforeTransformPlugins = 'beforeTransformPlugins', - beforeUploadPlugins = 'beforeUploadPlugins', - uploader = 'uploader', - transformer = 'transformer' -} interface IPicGoPlugin { name: string diff --git a/src/universal/utils/pasteTemplate.ts b/src/universal/utils/pasteTemplate.ts index 09f723c..72c09fb 100644 --- a/src/universal/utils/pasteTemplate.ts +++ b/src/universal/utils/pasteTemplate.ts @@ -1,4 +1,5 @@ import db from '#/datastore' +import { IPasteStyle } from '#/types/enum' const formatCustomLink = (customLink: string, item: ImgInfo) => { let fileName = item.fileName!.replace(new RegExp(`\\${item.extname}$`), '') @@ -17,7 +18,7 @@ const formatCustomLink = (customLink: string, item: ImgInfo) => { return customLink } -export default (style: PasteStyle, item: ImgInfo) => { +export default (style: IPasteStyle, item: ImgInfo) => { let url = item.url || item.imgUrl const customLink = db.get('settings.customLink') || '$url' const tpl = {