🔨 Refactor: refactored the import section of the code

This commit is contained in:
萌萌哒赫萝
2023-08-07 01:36:27 -07:00
parent 33b36d63c6
commit cb131d5250
64 changed files with 778 additions and 195 deletions

View File

@@ -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'

View File

@@ -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 () {

View File

@@ -1,4 +1,5 @@
import logger from '@core/picgo/logger'
class ShortKeyService {
private commandList: Map<string, IShortKeyHandler> = new Map()
registerCommand (command: string, handler: IShortKeyHandler) {

View File

@@ -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

View File

@@ -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<false | ImgInfo[]> => {
const useBuiltinClipboard = db.get('settings.useBuiltinClipboard') === undefined ? true : !!db.get('settings.useBuiltinClipboard')

View File

@@ -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<string|null> => {
return new Promise((resolve) => {
const windowId = window.id

View File

@@ -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<IWindowList, IWindowListItem>()

View File

@@ -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 {

View File

@@ -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')

View File

@@ -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()

View File

@@ -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()

View File

@@ -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 {

View File

@@ -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,

View File

@@ -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()

View File

@@ -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

View File

@@ -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<void>

View File

@@ -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()

View File

@@ -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()

View File

@@ -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()

View File

@@ -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)

View File

@@ -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<

View File

@@ -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 => {

View File

@@ -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'

View File

@@ -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 {

View File

@@ -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
}
/**

View File

@@ -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 {

View File

@@ -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(/(?<!https?:)\/{2,}/g, '/')
let key = ''
if (slicedPrefix === '') {
key = item.path
} else {
key = `${slicedPrefix}/${item.path}`
}
const result = {
return {
...item,
Key: key,
key,
@@ -88,12 +74,9 @@ class GithubApi {
checked: false,
match: false,
isImage: isImage(item.path),
rawUrl
rawUrl: item.url,
url: rawUrl
}
const temp = result.rawUrl
result.rawUrl = result.url
result.url = temp
return result
}
/**
@@ -151,7 +134,7 @@ class GithubApi {
async getBucketListRecursively (configMap: IStringKeyMap): Promise<any> {
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<any> {
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<string> {
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 : ''
}
/**

View File

@@ -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
}

View File

@@ -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
}
/**