From a45fd38004279df7733e774eb5dd2b701f3fd577 Mon Sep 17 00:00:00 2001 From: Kuingsmile <96409857+Kuingsmile@users.noreply.github.com> Date: Fri, 9 Jan 2026 18:10:48 +0800 Subject: [PATCH] :construction: WIP(custom): support picbed specific image preprocess and rename config --- src/main/apis/app/uploader/index.ts | 13 ++++++++++--- src/main/utils/common.ts | 14 ++++++++++++++ src/main/utils/configPaths.ts | 17 +++++++++++++++++ src/universal/types/types.d.ts | 15 +++++++++++++++ 4 files changed, 56 insertions(+), 3 deletions(-) diff --git a/src/main/apis/app/uploader/index.ts b/src/main/apis/app/uploader/index.ts index 86847493..15aa19c3 100644 --- a/src/main/apis/app/uploader/index.ts +++ b/src/main/apis/app/uploader/index.ts @@ -13,7 +13,7 @@ import writeFile from 'write-file-atomic' import { GET_RENAME_FILE_NAME, RENAME_FILE_NAME } from '~/events/constant' import { T as $t } from '~/i18n' -import { getClipboardFilePath, showNotification } from '~/utils/common' +import { getClipboardFilePath, getUploaderType, showNotification } from '~/utils/common' import { configPaths } from '~/utils/configPaths' import { ICOREBuildInEvent, IWindowList } from '~/utils/enum' import { CLIPBOARD_IMAGE_FOLDER } from '~/utils/static' @@ -60,8 +60,15 @@ class Uploader { picgo.helper.beforeUploadPlugins.register('renameFn', { handle: async (ctx: IPicGo) => { - const rename = db.get(configPaths.settings.rename) - const autoRename = db.get(configPaths.settings.autoRename) + const uploaderType = getUploaderType(ctx) + + const globalRename = db.get(configPaths.settings.rename) + const globalAutoRename = db.get(configPaths.settings.autoRename) + const buildInList = db.get(configPaths.buildIn.list._name) || [] + const idSpecificRename = buildInList.find((item: any) => item.id === uploaderType.id)?.manualRename + const idSpecificAutoRename = buildInList.find((item: any) => item.id === uploaderType.id)?.autoRename + const rename = idSpecificRename !== undefined ? !!idSpecificRename : !!globalRename + const autoRename = idSpecificAutoRename !== undefined ? !!idSpecificAutoRename : !!globalAutoRename if (autoRename || rename) { await Promise.all( ctx.output.map(async (item, index) => { diff --git a/src/main/utils/common.ts b/src/main/utils/common.ts index 84c80c4a..04c63c0e 100644 --- a/src/main/utils/common.ts +++ b/src/main/utils/common.ts @@ -7,6 +7,7 @@ import { clipboard, Notification, Tray } from 'electron' import { gunzipSync, gzipSync, strFromU8 } from 'fflate' import FormData from 'form-data' import fs from 'fs-extra' +import { IPicGo } from 'piclist' import { isReactive, isRef, toRaw, unref } from 'vue' import { configPaths } from '~/utils/configPaths' @@ -341,3 +342,16 @@ export const zipData = async (data: Record, zipPath: string): Promi throw new Error('Zip failed') } } + +export function getUploaderType(ctx: IPicGo): { + picBed: string + id?: string +} { + const picBed = + ctx.getConfig>('picBed.uploader') || + ctx.getConfig>('picBed.current') || + 'smms' + const picBedConfig = ctx.getConfig>(`picBed.${picBed}`) || {} + const id = picBedConfig._id || '' + return { picBed, id } +} diff --git a/src/main/utils/configPaths.ts b/src/main/utils/configPaths.ts index a3b70a8d..20dfa89a 100644 --- a/src/main/utils/configPaths.ts +++ b/src/main/utils/configPaths.ts @@ -184,6 +184,23 @@ export const configPaths = { watermark: 'buildIn.watermark', rename: 'buildIn.rename', skipProcess: 'buildIn.skipProcess', + list: { + _name: 'buildIn.list', + id: 'buildIn.list.id', + compress: 'buildIn.list.compress', + watermark: 'buildIn.list.watermark', + skipProcess: { + _name: 'buildIn.list.skipProcess', + skipProcessExtList: 'buildIn.list.skipProcess.skipProcessExtList', + }, + rename: { + _name: 'buildIn.list.rename', + enable: 'buildIn.list.rename.enable', + format: 'buildIn.list.rename.format', + }, + autoRename: 'buildIn.list.autoRename', + manualRename: 'buildIn.list.manualRename', + }, }, debug: 'debug', PICGO_ENV: 'PICGO_ENV', diff --git a/src/universal/types/types.d.ts b/src/universal/types/types.d.ts index 83791dfe..2a643d51 100644 --- a/src/universal/types/types.d.ts +++ b/src/universal/types/types.d.ts @@ -506,3 +506,18 @@ interface IGalleryDBFile { gallery: IGalleryDBGalleryItem[] __gallery_KEY__: Record } + +interface IBuildInListItem { + id: string + compress?: Partial + watermark?: Partial + skipProcess?: import('piclist').IBuildInSkipProcessOptions + rename?: { + enable?: boolean + format?: string + } + // settings.autoRename + autoRename?: boolean + // settings.rename + manualRename?: boolean +}