From cb131d5250f8c2700c3900b94dc4ef79cbb068e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=90=8C=E8=90=8C=E5=93=92=E8=B5=AB=E8=90=9D?= Date: Mon, 7 Aug 2023 01:36:27 -0700 Subject: [PATCH] :hammer: Refactor: refactored the import section of the code --- src/main.ts | 36 +++++++--- src/main/apis/app/remoteNotice/index.ts | 22 ++++-- src/main/apis/app/shortKey/shortKeyHandler.ts | 20 ++++-- src/main/apis/app/shortKey/shortKeyService.ts | 1 + src/main/apis/app/system/index.ts | 8 ++- src/main/apis/app/uploader/apis.ts | 13 ++-- src/main/apis/app/uploader/index.ts | 28 +++++--- src/main/apis/app/window/windowList.ts | 21 ++++-- src/main/apis/app/window/windowManager.ts | 11 ++- src/main/apis/core/datastore/dbChecker.ts | 22 ++++-- src/main/apis/core/datastore/index.ts | 11 +++ src/main/apis/core/picgo/index.ts | 13 +++- src/main/apis/gui/index.ts | 22 +++--- src/main/events/busEventList.ts | 12 +++- src/main/events/ipcList.ts | 2 +- src/main/events/picgoCoreIPC.ts | 24 ++++--- src/main/events/remotes/menu.ts | 35 +++++++--- src/main/events/rpc/index.ts | 13 +++- src/main/events/rpc/routes/config.ts | 8 ++- src/main/events/rpc/routes/system.ts | 7 +- .../routes/toolbox/checkClipboardUpload.ts | 13 +++- .../events/rpc/routes/toolbox/checkFile.ts | 15 +++- .../events/rpc/routes/toolbox/checkProxy.ts | 21 ++++-- src/main/fileServer/index.ts | 5 ++ src/main/i18n/index.ts | 9 +++ src/main/manage/apis/aliyun.ts | 2 +- src/main/manage/apis/api.ts | 8 +-- src/main/manage/apis/github.ts | 68 ++++++------------- src/main/manage/apis/imgur.ts | 44 +++++++----- src/main/manage/apis/tcyun.ts | 2 +- src/renderer/App.vue | 9 +++ src/renderer/apis/aliyun.ts | 2 +- src/renderer/apis/awss3.ts | 2 +- src/renderer/apis/github.ts | 2 +- src/renderer/apis/qiniu.ts | 2 +- src/renderer/apis/tcyun.ts | 2 +- src/renderer/apis/upyun.ts | 2 +- src/renderer/apis/webdav.ts | 2 +- src/renderer/components/InputBoxDialog.vue | 2 + src/renderer/components/ToolboxHandler.vue | 1 + src/renderer/components/ToolboxStatusIcon.vue | 1 + src/renderer/layouts/Main.vue | 29 +++++++- src/renderer/manage/pages/bucketPage.vue | 52 ++++++++++++-- src/renderer/manage/pages/logIn.vue | 23 +++++++ src/renderer/manage/pages/manageMain.vue | 19 ++++++ src/renderer/manage/pages/manageSetting.vue | 15 ++++ src/renderer/manage/utils/common.ts | 11 +++ src/renderer/pages/Gallery.vue | 24 +++++++ src/renderer/pages/MiniPage.vue | 19 +++++- src/renderer/pages/PicGoSetting.vue | 26 +++++++ src/renderer/pages/Plugin.vue | 23 +++++++ src/renderer/pages/RenamePage.vue | 20 ++++-- src/renderer/pages/ShortKey.vue | 11 +++ src/renderer/pages/Toolbox.vue | 13 ++++ src/renderer/pages/TrayPage.vue | 17 +++++ src/renderer/pages/Upload.vue | 29 ++++++-- src/renderer/pages/UploaderConfigPage.vue | 18 +++++ src/renderer/pages/picbeds/index.vue | 22 +++++- src/renderer/router/config.ts | 28 ++++---- src/renderer/utils/dataSender.ts | 9 +++ src/renderer/utils/db.ts | 12 ++++ src/renderer/utils/mainMixin.ts | 8 +++ src/renderer/utils/mixin.ts | 1 + src/universal/utils/static.ts | 1 + 64 files changed, 778 insertions(+), 195 deletions(-) diff --git a/src/main.ts b/src/main.ts index e3e08e9..dffeb3b 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,25 +1,43 @@ + +// Vue 相关 import { createApp } from 'vue' import App from './renderer/App.vue' import router from './renderer/router' import ElementUI from 'element-plus' import 'element-plus/dist/index.css' -import { webFrame } from 'electron' import VueLazyLoad from 'vue3-lazyload' -import axios from 'axios' -import { mainMixin } from './renderer/utils/mainMixin' -import { dragMixin } from '@/utils/mixin' -import db from './renderer/utils/db' -import { i18nManager, T } from './renderer/i18n/index' -import { getConfig, saveConfig, sendToMain, triggerRPC } from '@/utils/dataSender' -import { store } from '@/store' import vue3PhotoPreview from 'vue3-photo-preview' import 'vue3-photo-preview/dist/index.css' +import VueVideoPlayer from '@videojs-player/vue' + +// Electron 相关 +import { webFrame } from 'electron' + +// Axios +import axios from 'axios' + +// Mixins +import { mainMixin } from './renderer/utils/mainMixin' +import { dragMixin } from '@/utils/mixin' + +// 数据库 +import db from './renderer/utils/db' + +// 国际化 +import { i18nManager, T } from './renderer/i18n/index' + +// 工具函数 +import { getConfig, saveConfig, sendToMain, triggerRPC } from '@/utils/dataSender' + +// 状态管理 +import { store } from '@/store' import { createPinia } from 'pinia' import piniaPluginPersistedstate from 'pinia-plugin-persistedstate' + +// 代码高亮 import 'highlight.js/styles/atom-one-dark.css' import hljsVuePlugin from '@highlightjs/vue-plugin' import hljsCommon from 'highlight.js/lib/common' -import VueVideoPlayer from '@videojs-player/vue' import 'video.js/dist/video-js.css' webFrame.setVisualZoomLevelLimits(1, 1) diff --git a/src/main/apis/app/remoteNotice/index.ts b/src/main/apis/app/remoteNotice/index.ts index 521f5ae..9040024 100644 --- a/src/main/apis/app/remoteNotice/index.ts +++ b/src/main/apis/app/remoteNotice/index.ts @@ -1,15 +1,25 @@ -// get notice from remote -// such as some notices for users; some updates for users +// External dependencies +import axios from 'axios' import fs from 'fs-extra' -import { app, clipboard, dialog, shell } from 'electron' -import { IRemoteNoticeActionType, IRemoteNoticeTriggerCount, IRemoteNoticeTriggerHook } from '#/types/enum' -import { lte, gte } from 'semver' import path from 'path' -import axios from 'axios' +// Electron modules +import { app, clipboard, dialog, shell } from 'electron' + +// Custom modules and utilities import windowManager from '../window/windowManager' import { showNotification } from '~/main/utils/common' +// Custom types/enums +import { + IRemoteNoticeActionType, + IRemoteNoticeTriggerCount, + IRemoteNoticeTriggerHook +} from '#/types/enum' + +// External utility functions +import { gte, lte } from 'semver' + // for test const REMOTE_NOTICE_URL = 'https://release.piclist.cn/remote-notice.json' diff --git a/src/main/apis/app/shortKey/shortKeyHandler.ts b/src/main/apis/app/shortKey/shortKeyHandler.ts index 2dd7f64..c97aefc 100644 --- a/src/main/apis/app/shortKey/shortKeyHandler.ts +++ b/src/main/apis/app/shortKey/shortKeyHandler.ts @@ -1,14 +1,24 @@ -import bus from '@core/bus' +// External dependencies import { globalShortcut } from 'electron' -import logger from '@core/picgo/logger' -import GuiApi from '../../gui' + +import bus from '@core/bus' import db from '~/main/apis/core/datastore' -import { TOGGLE_SHORTKEY_MODIFIED_MODE } from '#/events/constants' -import shortKeyService from './shortKeyService' +import logger from '@core/picgo/logger' import picgo from '@core/picgo' +// Electron modules + +// Custom utilities and modules +import GuiApi from '../../gui' +import shortKeyService from './shortKeyService' + +// Custom types/enums + +// External utility functions +import { TOGGLE_SHORTKEY_MODIFIED_MODE } from '#/events/constants' + class ShortKeyHandler { private isInModifiedMode: boolean = false constructor () { diff --git a/src/main/apis/app/shortKey/shortKeyService.ts b/src/main/apis/app/shortKey/shortKeyService.ts index 528be29..c1e2b6c 100644 --- a/src/main/apis/app/shortKey/shortKeyService.ts +++ b/src/main/apis/app/shortKey/shortKeyService.ts @@ -1,4 +1,5 @@ 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/system/index.ts b/src/main/apis/app/system/index.ts index 65d1156..e267e2e 100644 --- a/src/main/apis/app/system/index.ts +++ b/src/main/apis/app/system/index.ts @@ -1,4 +1,8 @@ +// External dependencies import fs from 'fs-extra' +import { cloneDeep } from 'lodash' + +// Electron modules import { app, Menu, @@ -9,6 +13,8 @@ import { screen, nativeTheme } from 'electron' + +// Custom utilities and modules import uploader from 'apis/app/uploader' import db, { GalleryDB } from '~/main/apis/core/datastore' import windowManager from 'apis/app/window/windowManager' @@ -22,7 +28,7 @@ import { buildPicBedListMenu } from '~/main/events/remotes/menu' import clipboardPoll from '~/main/utils/clipboardPoll' import picgo from '../../core/picgo' import { uploadClipboardFiles } from '../uploader/apis' -import { cloneDeep } from 'lodash' + let contextMenu: Menu | null let tray: Tray | null diff --git a/src/main/apis/app/uploader/apis.ts b/src/main/apis/app/uploader/apis.ts index e8a600e..05f8e73 100644 --- a/src/main/apis/app/uploader/apis.ts +++ b/src/main/apis/app/uploader/apis.ts @@ -1,10 +1,15 @@ +// External dependencies +import fs from 'fs-extra' +import { cloneDeep } from 'lodash' + +// Electron modules import { Notification, WebContents } from 'electron' + +// Custom utilities and modules import windowManager from 'apis/app/window/windowManager' -import { IWindowList } from '#/types/enum' -import uploader from '.' import pasteTemplate from '~/main/utils/pasteTemplate' import db, { GalleryDB } from '~/main/apis/core/datastore' import { handleCopyUrl, handleUrlEncodeWithSetting } from '~/main/utils/common' @@ -12,8 +17,8 @@ import { T } from '~/main/i18n/index' import ALLApi from '@/apis/allApi' import picgo from '@core/picgo' import GuiApi from '../../gui' -import fs from 'fs-extra' -import { cloneDeep } from 'lodash' +import uploader from '.' +import { IWindowList } from '#/types/enum' const handleClipboardUploading = async (): Promise => { const useBuiltinClipboard = db.get('settings.useBuiltinClipboard') === undefined ? true : !!db.get('settings.useBuiltinClipboard') diff --git a/src/main/apis/app/uploader/index.ts b/src/main/apis/app/uploader/index.ts index 3940d7f..e45b75e 100644 --- a/src/main/apis/app/uploader/index.ts +++ b/src/main/apis/app/uploader/index.ts @@ -1,3 +1,11 @@ +// External dependencies +import dayjs from 'dayjs' +import util from 'util' +import path from 'path' +import writeFile from 'write-file-atomic' +import fse from 'fs-extra' + +// Electron modules import { Notification, BrowserWindow, @@ -5,22 +13,26 @@ import { WebContents, clipboard } from 'electron' -import dayjs from 'dayjs' + +// Custom utilities and modules import picgo from '@core/picgo' import db from '~/main/apis/core/datastore' import windowManager from 'apis/app/window/windowManager' -import { IWindowList } from '#/types/enum' -import util from 'util' -import { IPicGo } from 'piclist' import { showNotification, getClipboardFilePath } from '~/main/utils/common' -import { GET_RENAME_FILE_NAME, RENAME_FILE_NAME } from '~/universal/events/constants' import logger from '@core/picgo/logger' import { T } from '~/main/i18n' -import fse from 'fs-extra' -import path from 'path' -import writeFile from 'write-file-atomic' import { CLIPBOARD_IMAGE_FOLDER } from '~/universal/utils/static' +// Custom types/enums +import { IWindowList } from '#/types/enum' + +// External utility functions +import { IPicGo } from 'piclist' +import { + GET_RENAME_FILE_NAME, + RENAME_FILE_NAME +} from '~/universal/events/constants' + const waitForRename = (window: BrowserWindow, id: number): Promise => { return new Promise((resolve) => { const windowId = window.id diff --git a/src/main/apis/app/window/windowList.ts b/src/main/apis/app/window/windowList.ts index 0a5201a..1491ffd 100644 --- a/src/main/apis/app/window/windowList.ts +++ b/src/main/apis/app/window/windowList.ts @@ -1,3 +1,14 @@ +// External dependencies +import { app } from 'electron' + +// Electron modules + +// Custom utilities and modules +import bus from '@core/bus' +import db from '~/main/apis/core/datastore' +import picgo from '~/main/apis/core/picgo' +import { T } from '~/main/i18n' +import { remoteNoticeHandler } from '../remoteNotice' import { SETTING_WINDOW_URL, TRAY_WINDOW_URL, @@ -5,15 +16,13 @@ import { RENAME_WINDOW_URL, TOOLBOX_WINDOW_URL } from './constants' + +// Custom types/enums import { IRemoteNoticeTriggerHook, IWindowList } from '#/types/enum' -import bus from '@core/bus' + +// External utility functions import { CREATE_APP_MENU } from '@core/bus/constants' -import db from '~/main/apis/core/datastore' import { TOGGLE_SHORTKEY_MODIFIED_MODE } from '#/events/constants' -import { app } from 'electron' -import { remoteNoticeHandler } from '../remoteNotice' -import picgo from '~/main/apis/core/picgo' -import { T } from '~/main/i18n' const windowList = new Map() diff --git a/src/main/apis/app/window/windowManager.ts b/src/main/apis/app/window/windowManager.ts index d5f000f..5fdebf7 100644 --- a/src/main/apis/app/window/windowManager.ts +++ b/src/main/apis/app/window/windowManager.ts @@ -1,7 +1,12 @@ -import { - BrowserWindow -} from 'electron' +// External dependencies import windowList from './windowList' + +// Electron modules +import { BrowserWindow } from 'electron' + +// Custom utilities and modules + +// Custom types/enums import { IWindowList } from '#/types/enum' class WindowManager implements IWindowManager { diff --git a/src/main/apis/core/datastore/dbChecker.ts b/src/main/apis/core/datastore/dbChecker.ts index 6ab6fb0..c393a1c 100644 --- a/src/main/apis/core/datastore/dbChecker.ts +++ b/src/main/apis/core/datastore/dbChecker.ts @@ -1,10 +1,24 @@ +// External dependencies import fs from 'fs-extra' -import writeFile from 'write-file-atomic' -import path from 'path' -import { app } from 'electron' -import { getLogger } from '../utils/localLogger' import dayjs from 'dayjs' +import path from 'path' + +// Electron modules +import { app } from 'electron' + +// Custom utilities and modules +import { getLogger } from '../utils/localLogger' + +// Custom types/enums + +// External utility functions + +// External utility functions +import writeFile from 'write-file-atomic' + +// Custom types/enums import { T } from '~/main/i18n' + const STORE_PATH = app.getPath('userData') const configFilePath = path.join(STORE_PATH, 'data.json') const configFileBackupPath = path.join(STORE_PATH, 'data.bak.json') diff --git a/src/main/apis/core/datastore/index.ts b/src/main/apis/core/datastore/index.ts index abc4ad3..c2a69ff 100644 --- a/src/main/apis/core/datastore/index.ts +++ b/src/main/apis/core/datastore/index.ts @@ -1,6 +1,17 @@ +// External dependencies import fs from 'fs-extra' + +// Electron modules + +// Custom utilities and modules import { dbPathChecker, dbPathDir, getGalleryDBPath } from './dbChecker' + +// Custom types/enums + +// External utility functions import { DBStore, JSONStore } from '@picgo/store' + +// External utility functions import { T } from '~/main/i18n' const STORE_PATH = dbPathDir() diff --git a/src/main/apis/core/picgo/index.ts b/src/main/apis/core/picgo/index.ts index 6cf521a..4f8913f 100644 --- a/src/main/apis/core/picgo/index.ts +++ b/src/main/apis/core/picgo/index.ts @@ -1,8 +1,17 @@ -import { dbChecker, dbPathChecker } from 'apis/core/datastore/dbChecker' +// External dependencies import pkg from 'root/package.json' +import debounce from 'lodash/debounce' + +// Electron modules + +// Custom utilities and modules import { PicGo } from 'piclist' import db from 'apis/core/datastore' -import debounce from 'lodash/debounce' +import { dbChecker, dbPathChecker } from 'apis/core/datastore/dbChecker' + +// Custom types/enums + +// External utility functions const CONFIG_PATH = dbPathChecker() diff --git a/src/main/apis/gui/index.ts b/src/main/apis/gui/index.ts index 2ae2c47..e094e7a 100644 --- a/src/main/apis/gui/index.ts +++ b/src/main/apis/gui/index.ts @@ -1,25 +1,29 @@ +// External dependencies +import fs from 'fs-extra' +import { cloneDeep } from 'lodash' + +// Electron modules import { dialog, BrowserWindow, Notification, ipcMain } from 'electron' + +// Custom utilities and modules import db, { GalleryDB } from 'apis/core/datastore' import { dbPathChecker, defaultConfigPath, getGalleryDBPath } from 'apis/core/datastore/dbChecker' import uploader from 'apis/app/uploader' import pasteTemplate from '~/main/utils/pasteTemplate' import { handleCopyUrl } from '~/main/utils/common' -import { - getWindowId, - getSettingWindowId -} from '@core/bus/apis' -import { - SHOW_INPUT_BOX -} from '~/universal/events/constants' +import { getWindowId, getSettingWindowId } from '@core/bus/apis' +import { SHOW_INPUT_BOX } from '~/universal/events/constants' + +// Custom types/enums + +// External utility functions import { DBStore } from '@picgo/store' import { T } from '~/main/i18n' -import fs from 'fs-extra' -import { cloneDeep } from 'lodash' // Cross-process support may be required in the future class GuiApi implements IGuiApi { diff --git a/src/main/events/busEventList.ts b/src/main/events/busEventList.ts index cb4585b..8e7d6bc 100644 --- a/src/main/events/busEventList.ts +++ b/src/main/events/busEventList.ts @@ -1,4 +1,9 @@ +// External dependencies import bus from '@core/bus' + +// Electron modules + +// Custom utilities and modules import { uploadClipboardFiles, uploadChoosedFiles @@ -6,8 +11,12 @@ import { import { createMenu } from 'apis/app/system' -import { IWindowList } from '#/types/enum' import windowManager from 'apis/app/window/windowManager' + +// Custom types/enums +import { IWindowList } from '#/types/enum' + +// External utility functions import { UPLOAD_WITH_FILES, UPLOAD_WITH_FILES_RESPONSE, @@ -19,6 +28,7 @@ import { GET_SETTING_WINDOW_ID_RESPONSE, CREATE_APP_MENU } from '@core/bus/constants' + function initEventCenter () { const eventList: any = { 'picgo:upload': uploadClipboardFiles, diff --git a/src/main/events/ipcList.ts b/src/main/events/ipcList.ts index 43065aa..b8bbec9 100644 --- a/src/main/events/ipcList.ts +++ b/src/main/events/ipcList.ts @@ -126,7 +126,7 @@ export default { try { const client = SSHClient.instance await client.connect(config) - const uploadPath = `/${(config.uploadPath || '').replace(/^\/+|\/+$/g, '')}/`.replace(/\/+/g, '/') + const uploadPath = `/${(config.uploadPath || '')}/`.replace(/\/+/g, '/') const remote = path.join(uploadPath, fileName) const deleteResult = await client.deleteFile(remote) client.close() diff --git a/src/main/events/picgoCoreIPC.ts b/src/main/events/picgoCoreIPC.ts index c6d12ae..6db93b9 100644 --- a/src/main/events/picgoCoreIPC.ts +++ b/src/main/events/picgoCoreIPC.ts @@ -1,5 +1,5 @@ +// External dependencies import path from 'path' -import GuiApi from 'apis/gui' import { dialog, shell, @@ -7,7 +7,11 @@ import { ipcMain, clipboard } from 'electron' -import { IPasteStyle, IPicGoHelperType, IWindowList } from '#/types/enum' + +// Electron modules + +// Custom utilities and modules +import GuiApi from 'apis/gui' import shortKeyHandler from 'apis/app/shortKey/shortKeyHandler' import picgo from '@core/picgo' import { handleStreamlinePluginName, simpleClone } from '~/universal/utils/common' @@ -15,6 +19,16 @@ import { IGuiMenuItem, PicGo as PicGoCore } from 'piclist' import windowManager from 'apis/app/window/windowManager' import { showNotification } from '~/main/utils/common' import { dbPathChecker } from 'apis/core/datastore/dbChecker' +import { GalleryDB } from 'apis/core/datastore' +import pasteTemplate from '../utils/pasteTemplate' +import { i18nManager, T } from '~/main/i18n' +import { rpcServer } from './rpc' + +// Custom types/enums +import { IPasteStyle, IPicGoHelperType, IWindowList } from '#/types/enum' +import { IObject, IFilter } from '@picgo/store/dist/types' + +// External utility functions import { PICGO_SAVE_CONFIG, PICGO_GET_CONFIG, @@ -32,12 +46,6 @@ import { GET_CURRENT_LANGUAGE } from '#/events/constants' -import { GalleryDB } from 'apis/core/datastore' -import { IObject, IFilter } from '@picgo/store/dist/types' -import pasteTemplate from '../utils/pasteTemplate' -import { i18nManager, T } from '~/main/i18n' -import { rpcServer } from './rpc' - // eslint-disable-next-line const requireFunc = typeof __webpack_require__ === 'function' ? __non_webpack_require__ : require // const PluginHandler = requireFunc('picgo/lib/PluginHandler').default diff --git a/src/main/events/remotes/menu.ts b/src/main/events/remotes/menu.ts index 7ce7623..ff0ce82 100644 --- a/src/main/events/remotes/menu.ts +++ b/src/main/events/remotes/menu.ts @@ -1,20 +1,37 @@ -import windowManager from 'apis/app/window/windowManager' -import { IWindowList } from '#/types/enum' +// External dependencies +import pkg from 'root/package.json' + +// Electron modules import { Menu, BrowserWindow, app, dialog } from 'electron' + +// Custom utilities and modules +import windowManager from 'apis/app/window/windowManager' import getPicBeds from '~/main/utils/getPicBeds' import picgo from '@core/picgo' -import { - uploadClipboardFiles -} from '~/main/apis/app/uploader/apis' -import pkg from 'root/package.json' import GuiApi from 'apis/gui' -import { PICGO_CONFIG_PLUGIN, PICGO_HANDLE_PLUGIN_DONE, PICGO_HANDLE_PLUGIN_ING, PICGO_TOGGLE_PLUGIN, SHOW_MAIN_PAGE_DONATION, SHOW_MAIN_PAGE_QRCODE } from '~/universal/events/constants' import picgoCoreIPC from '~/main/events/picgoCoreIPC' -import { PicGo as PicGoCore } from 'piclist' -import { T } from '~/main/i18n' import { changeCurrentUploader } from '~/main/utils/handleUploaderConfig' import db from '~/main/apis/core/datastore' import clipboardPoll from '~/main/utils/clipboardPoll' + +// Custom types/enums +import { IWindowList } from '#/types/enum' + +// External utility functions +import { + uploadClipboardFiles +} from '~/main/apis/app/uploader/apis' +import { + PICGO_CONFIG_PLUGIN, + PICGO_HANDLE_PLUGIN_DONE, + PICGO_HANDLE_PLUGIN_ING, + PICGO_TOGGLE_PLUGIN, + SHOW_MAIN_PAGE_DONATION, + SHOW_MAIN_PAGE_QRCODE +} from '~/universal/events/constants' +import { PicGo as PicGoCore } from 'piclist' +import { T } from '~/main/i18n' + interface GuiMenuItem { label: string handle: (arg0: PicGoCore, arg1: GuiApi) => Promise diff --git a/src/main/events/rpc/index.ts b/src/main/events/rpc/index.ts index 81604e4..997fbc0 100644 --- a/src/main/events/rpc/index.ts +++ b/src/main/events/rpc/index.ts @@ -1,10 +1,19 @@ +// External dependencies import { ipcMain, IpcMainEvent } from 'electron' -import { IRPCActionType } from '~/universal/types/enum' -import { RPC_ACTIONS } from '#/events/constants' + +// Electron modules + +// Custom utilities and modules import { configRouter } from './routes/config' import { toolboxRouter } from './routes/toolbox' import { systemRouter } from './routes/system' +// Custom types/enums +import { IRPCActionType } from '~/universal/types/enum' + +// External utility functions +import { RPC_ACTIONS } from '#/events/constants' + class RPCServer implements IRPCServer { private routes: IRPCRoutes = new Map() diff --git a/src/main/events/rpc/routes/config.ts b/src/main/events/rpc/routes/config.ts index c0b94fc..1ebc440 100644 --- a/src/main/events/rpc/routes/config.ts +++ b/src/main/events/rpc/routes/config.ts @@ -1,6 +1,12 @@ import { IRPCActionType } from '~/universal/types/enum' import { RPCRouter } from '../router' -import { deleteUploaderConfig, getUploaderConfigList, selectUploaderConfig, updateUploaderConfig, resetUploaderConfig } from '~/main/utils/handleUploaderConfig' +import { + deleteUploaderConfig, + getUploaderConfigList, + selectUploaderConfig, + updateUploaderConfig, + resetUploaderConfig +} from '~/main/utils/handleUploaderConfig' const configRouter = new RPCRouter() diff --git a/src/main/events/rpc/routes/system.ts b/src/main/events/rpc/routes/system.ts index d51eceb..0de8be8 100644 --- a/src/main/events/rpc/routes/system.ts +++ b/src/main/events/rpc/routes/system.ts @@ -1,6 +1,11 @@ +// External dependencies +import { app, clipboard, shell } from 'electron' + +// Electron modules + +// Custom utilities and modules import { IRPCActionType } from '~/universal/types/enum' import { RPCRouter } from '../router' -import { app, clipboard, shell } from 'electron' const systemRouter = new RPCRouter() diff --git a/src/main/events/rpc/routes/toolbox/checkClipboardUpload.ts b/src/main/events/rpc/routes/toolbox/checkClipboardUpload.ts index 0238cd5..5404b84 100644 --- a/src/main/events/rpc/routes/toolbox/checkClipboardUpload.ts +++ b/src/main/events/rpc/routes/toolbox/checkClipboardUpload.ts @@ -1,9 +1,18 @@ +// External dependencies import fs from 'fs-extra' import path from 'path' + +// Electron modules + +// Custom utilities and modules import { dbPathChecker, defaultConfigPath } from '~/main/apis/core/datastore/dbChecker' -import { IToolboxItemCheckStatus, IToolboxItemType } from '~/universal/types/enum' -import { CLIPBOARD_IMAGE_FOLDER } from '~/universal/utils/static' import { sendToolboxResWithType } from './utils' + +// Custom types/enums +import { IToolboxItemCheckStatus, IToolboxItemType } from '~/universal/types/enum' + +// External utility functions +import { CLIPBOARD_IMAGE_FOLDER } from '~/universal/utils/static' import { T } from '~/main/i18n' const sendToolboxRes = sendToolboxResWithType(IToolboxItemType.HAS_PROBLEM_WITH_CLIPBOARD_PIC_UPLOAD) diff --git a/src/main/events/rpc/routes/toolbox/checkFile.ts b/src/main/events/rpc/routes/toolbox/checkFile.ts index d0cecdf..7422065 100644 --- a/src/main/events/rpc/routes/toolbox/checkFile.ts +++ b/src/main/events/rpc/routes/toolbox/checkFile.ts @@ -1,10 +1,19 @@ +// External dependencies import fs from 'fs-extra' +import path from 'path' + +// Electron modules import { IpcMainEvent } from 'electron' -import { IToolboxItemCheckStatus, IToolboxItemType } from '~/universal/types/enum' -import { sendToolboxResWithType } from './utils' + +// Custom utilities and modules import { dbPathChecker } from '~/main/apis/core/datastore/dbChecker' import { GalleryDB, DB_PATH } from '~/main/apis/core/datastore' -import path from 'path' +import { sendToolboxResWithType } from './utils' + +// Custom types/enums +import { IToolboxItemCheckStatus, IToolboxItemType } from '~/universal/types/enum' + +// External utility functions import { T } from '~/main/i18n' export const checkFileMap: IToolboxCheckerMap< diff --git a/src/main/events/rpc/routes/toolbox/checkProxy.ts b/src/main/events/rpc/routes/toolbox/checkProxy.ts index b61bccb..15ba950 100644 --- a/src/main/events/rpc/routes/toolbox/checkProxy.ts +++ b/src/main/events/rpc/routes/toolbox/checkProxy.ts @@ -1,10 +1,21 @@ +// External dependencies import fs from 'fs-extra' -import { IToolboxItemCheckStatus, IToolboxItemType } from '~/universal/types/enum' -import { sendToolboxResWithType } from './utils' -import tunnel from 'tunnel' -import { dbPathChecker } from '~/main/apis/core/datastore/dbChecker' -import { IConfig } from 'piclist' import axios, { AxiosRequestConfig } from 'axios' +import tunnel from 'tunnel' + +// Electron modules + +// Custom utilities and modules +import { dbPathChecker } from '~/main/apis/core/datastore/dbChecker' +import { sendToolboxResWithType } from './utils' + +// Custom types/enums +import { IToolboxItemCheckStatus, IToolboxItemType } from '~/universal/types/enum' + +// External utility functions + +// Custom types/enums +import { IConfig } from 'piclist' import { T } from '~/main/i18n' const getProxy = (proxyStr: string): AxiosRequestConfig['proxy'] | false => { diff --git a/src/main/fileServer/index.ts b/src/main/fileServer/index.ts index 341a86d..3f51d8a 100644 --- a/src/main/fileServer/index.ts +++ b/src/main/fileServer/index.ts @@ -1,6 +1,11 @@ +// External dependencies import http from 'http' import fs from 'fs-extra' import path from 'path' + +// Electron modules + +// Custom utilities and modules import picgo from '@core/picgo' import logger from '../apis/core/picgo/logger' diff --git a/src/main/i18n/index.ts b/src/main/i18n/index.ts index 9096be4..be922de 100644 --- a/src/main/i18n/index.ts +++ b/src/main/i18n/index.ts @@ -1,7 +1,16 @@ +// External dependencies import yaml from 'js-yaml' import { ObjectAdapter, I18n } from '@picgo/i18n' import path from 'path' import fs from 'fs-extra' + +// Electron modules + +// Custom utilities and modules + +// Custom types/enums + +// External utility functions import { builtinI18nList } from '#/i18n' class I18nManager { diff --git a/src/main/manage/apis/aliyun.ts b/src/main/manage/apis/aliyun.ts index 76c5c07..31d1f12 100644 --- a/src/main/manage/apis/aliyun.ts +++ b/src/main/manage/apis/aliyun.ts @@ -493,7 +493,7 @@ class AliyunApi { const res = client.signatureUrl(key, { expires: expires || 3600 }) - return customUrl ? `${customUrl.replace(/\/$/, '')}/${key}${res.slice(res.indexOf('?'))}` : res + return customUrl ? `${customUrl.replace(/\/+$/, '')}/${key}${res.slice(res.indexOf('?'))}` : res } /** diff --git a/src/main/manage/apis/api.ts b/src/main/manage/apis/api.ts index 3f611fe..4a7f3bc 100644 --- a/src/main/manage/apis/api.ts +++ b/src/main/manage/apis/api.ts @@ -1,11 +1,11 @@ -import TcyunApi from './tcyun' import AliyunApi from './aliyun' -import QiniuApi from './qiniu' -import UpyunApi from './upyun' -import SmmsApi from './smms' import GithubApi from './github' import ImgurApi from './imgur' +import QiniuApi from './qiniu' import S3plistApi from './s3plist' +import SmmsApi from './smms' +import TcyunApi from './tcyun' +import UpyunApi from './upyun' import WebdavplistApi from './webdavplist' export default { diff --git a/src/main/manage/apis/github.ts b/src/main/manage/apis/github.ts index 332c866..33afb64 100644 --- a/src/main/manage/apis/github.ts +++ b/src/main/manage/apis/github.ts @@ -35,12 +35,7 @@ class GithubApi { } formatFolder (item: any, slicedPrefix: string) { - let key = '' - if (slicedPrefix === '') { - key = `${item.path}/` - } else { - key = `${slicedPrefix}/${item.path}/` - } + const key = `${slicedPrefix ? `${slicedPrefix}/` : ''}${item.path}/` return { ...item, Key: key, @@ -57,27 +52,18 @@ class GithubApi { formatFile (item: any, slicedPrefix: string, branch: string, repo: string, cdnUrl: string | undefined) { let rawUrl = '' - if (cdnUrl) { - const placeholder = ['{username}', '{repo}', '{branch}', '{path}'] - if (placeholder.some(item => cdnUrl.includes(item))) { - rawUrl = cdnUrl.replace('{username}', this.username) - .replace('{repo}', repo) - .replace('{branch}', branch) - .replace('{path}', `${slicedPrefix}/${item.path}`) - } else { - rawUrl = `${cdnUrl}/${slicedPrefix}/${item.path}` - } - } else { - rawUrl = `https://raw.githubusercontent.com/${this.username}/${repo}/${branch}/${slicedPrefix}/${item.path}` - } + const placeholders = ['{username}', '{repo}', '{branch}', '{path}'] + const key = slicedPrefix === '' ? item.path : `${slicedPrefix}/${item.path}` + rawUrl = cdnUrl + ? placeholders.some(item => cdnUrl.includes(item)) + ? placeholders.reduce((url, ph) => { + const value = ph === '{username}' ? this.username : ph === '{repo}' ? repo : ph === '{branch}' ? branch : ph === '{path}' ? `${slicedPrefix}/${item.path}` : '' + return url.replaceAll(ph, value) + }, cdnUrl) + : `${cdnUrl}/${key}` + : `https://raw.githubusercontent.com/${this.username}/${repo}/${branch}/${key}` rawUrl = rawUrl.replace(/(? { const window = windowManager.get(IWindowList.SETTING_WINDOW)! const { bucketName: repo, customUrl: branch, prefix, cancelToken, cdnUrl } = configMap - const slicedPrefix = prefix.replace(/^\//, '').replace(/\/$/, '') + const slicedPrefix = prefix.replace(/(^\/+|\/+$)/g, '') const cancelTask = [false] ipcMain.on(cancelDownloadLoadingFileList, (_evt: IpcMainEvent, token: string) => { if (token === cancelToken) { @@ -202,7 +185,7 @@ class GithubApi { async getBucketListBackstage (configMap: IStringKeyMap): Promise { const window = windowManager.get(IWindowList.SETTING_WINDOW)! const { bucketName: repo, customUrl: branch, prefix, cancelToken, cdnUrl } = configMap - const slicedPrefix = prefix.replace(/^\//, '').replace(/\/$/, '') + const slicedPrefix = prefix.replace(/(^\/+|\/+$)/g, '') const cancelTask = [false] ipcMain.on('cancelLoadingFileList', (_evt: IpcMainEvent, token: string) => { if (token === cancelToken) { @@ -288,7 +271,7 @@ class GithubApi { // TODO: if there are more than 10000 files in the folder, it will be truncated // Rare cases, not considered for now const treeRes = await got( - `${this.baseUrl}/repos/${this.username}/${repo}/git/trees/${branch}:${key.replace(/^\//, '').replace(/\/$/, '')}`, + `${this.baseUrl}/repos/${this.username}/${repo}/git/trees/${branch}:${key.replace(/(^\/+|\/+$)/g, '')}`, getOptions('GET', this.commonHeaders, { recursive: true }, 'json', undefined, undefined, this.proxy) @@ -299,7 +282,7 @@ class GithubApi { const oldTree = treeRes.body.tree const newTree = oldTree.filter((item: any) => item.type === 'blob') .map((item:any) => ({ - path: `${key.replace(/^\//, '').replace(/\/$/, '')}/${item.path}`, + path: `${key.replace(/(^\/+|\/+$)/g, '')}/${item.path}`, mode: item.mode, type: item.type, sha: null @@ -333,10 +316,7 @@ class GithubApi { sha: commitSha }), undefined, this.proxy) ) as any - if (updateRefRes.statusCode !== 200) { - return false - } - return true + return updateRefRes.statusCode === 200 } /** @@ -352,20 +332,14 @@ class GithubApi { */ async getPreSignedUrl (configMap: IStringKeyMap): Promise { const { bucketName: repo, customUrl: branch, key, rawUrl, githubPrivate: isPrivate } = configMap - if (!isPrivate) { - return rawUrl - } + if (!isPrivate) return rawUrl const res = await got( `${this.baseUrl}/repos/${this.username}/${repo}/contents/${key}`, getOptions('GET', this.commonHeaders, { ref: branch }, 'json', undefined, undefined, this.proxy) ) as any - if (res.statusCode === 200) { - return res.body.download_url - } else { - return '' - } + return res.statusCode === 200 ? res.body.download_url : '' } /** diff --git a/src/main/manage/apis/imgur.ts b/src/main/manage/apis/imgur.ts index 2e67374..73fa3c9 100644 --- a/src/main/manage/apis/imgur.ts +++ b/src/main/manage/apis/imgur.ts @@ -1,17 +1,27 @@ -import got from 'got' -import ManageLogger from '../utils/logger' -import { getAgent, getOptions, NewDownloader, gotUpload, getFileMimeType, ConcurrencyPromisePool, formatError } from '../utils/common' -import windowManager from 'apis/app/window/windowManager' -import { IWindowList } from '#/types/enum' -import { ipcMain, IpcMainEvent } from 'electron' -import { formatHttpProxy, isImage } from '~/renderer/manage/utils/common' -import path from 'path' -import UpDownTaskQueue, -{ - commonTaskStatus -} from '../datastore/upDownTaskQueue' -import FormData from 'form-data' +// External dependencies import fs from 'fs-extra' +import FormData from 'form-data' +import got from 'got' +import path from 'path' + +// Electron modules +import { ipcMain, IpcMainEvent } from 'electron' + +// Custom utilities and modules +import { IWindowList } from '#/types/enum' +import { + ConcurrencyPromisePool, + formatError, + getFileMimeType, + getOptions, + getAgent, + gotUpload, + NewDownloader +} from '../utils/common' +import ManageLogger from '../utils/logger' +import windowManager from 'apis/app/window/windowManager' +import { formatHttpProxy, isImage } from '~/renderer/manage/utils/common' +import UpDownTaskQueue, { commonTaskStatus } from '../datastore/upDownTaskQueue' class ImgurApi { userName: string @@ -35,17 +45,19 @@ class ImgurApi { } formatFile (item: any) { + const fileName = path.basename(item.link) + const isImg = isImage(fileName) return { ...item, - Key: path.basename(item.link), - key: path.basename(item.link), + Key: fileName, + key: fileName, fileName: `${item.name}${path.extname(item.link)}`, formatedTime: new Date(item.datetime * 1000).toLocaleString(), fileSize: item.size, isDir: false, checked: false, match: false, - isImage: isImage(path.basename(item.link)), + isImage: isImg, url: item.link, sha: item.deletehash } diff --git a/src/main/manage/apis/tcyun.ts b/src/main/manage/apis/tcyun.ts index 6ab72d6..2455db5 100644 --- a/src/main/manage/apis/tcyun.ts +++ b/src/main/manage/apis/tcyun.ts @@ -410,7 +410,7 @@ class TcyunApi { Sign: true }, () => { }) - return customUrl ? `${customUrl.replace(/\/$/, '')}/${key}${res.slice(res.indexOf('?'))}` : res + return customUrl ? `${customUrl.replace(/\/+$/, '')}/${key}${res.slice(res.indexOf('?'))}` : res } /** diff --git a/src/renderer/App.vue b/src/renderer/App.vue index b7b3799..d9336f5 100644 --- a/src/renderer/App.vue +++ b/src/renderer/App.vue @@ -5,10 +5,19 @@