From 68845d53abbf7e1f14c28c530ba3fd52ce45061c Mon Sep 17 00:00:00 2001 From: Kuingsmile <96409857+Kuingsmile@users.noreply.github.com> Date: Sat, 10 Jan 2026 14:01:27 +0800 Subject: [PATCH] :sparkles: Feature(custom): optimize per picbed setting logic when the value is same to default --- .../components/ImageProcessSetting.vue | 93 +++++++++++-------- src/renderer/i18n/locales/en.json | 2 +- src/renderer/i18n/locales/zh-CN.json | 2 +- src/renderer/i18n/locales/zh-TW.json | 2 +- 4 files changed, 59 insertions(+), 40 deletions(-) diff --git a/src/renderer/components/ImageProcessSetting.vue b/src/renderer/components/ImageProcessSetting.vue index 512f4e2b..2d968232 100644 --- a/src/renderer/components/ImageProcessSetting.vue +++ b/src/renderer/components/ImageProcessSetting.vue @@ -1111,40 +1111,38 @@ const compressForm = ref({ /* Only used if configId is not provided */ const formatConvertObjStr = ref('{}') +const defaultSkipProcessSetting = { + skipProcessExtList: 'zip,rar,7z,tar,gz,tar.gz,tar.bz2,tar.xz', +} /* Only used if configId is not provided */ const skipProcessForm = ref({ - skipProcessExtList: 'zip,rar,7z,tar,gz,tar.gz,tar.bz2,tar.xz', + ...defaultSkipProcessSetting, }) const isInitialized = ref(false) -function saveSkipProcessConfig() { - saveConfig(configPaths.buildIn.skipProcess, toRaw(skipProcessForm.value)) -} - -function saveCompressConfig() { - const cleanFullMap: Record = {} - Object.entries(compressForm.value.formatConvertObjMap || {}).forEach(([picbedType, value]) => { - try { - const cleanedObj = cleanFormatConvertObj(value) - - if (Object.keys(cleanedObj).length > 0) { - cleanFullMap[picbedType] = cleanedObj - } - } catch (_error) {} - }) - if (JSON.stringify(cleanFullMap) !== JSON.stringify(compressForm.value.formatConvertObjMap)) { - compressForm.value.formatConvertObjMap = cleanFullMap - } - - saveConfig(configPaths.buildIn.compress, toRaw(compressForm.value)) -} - function saveWaterMarkConfig() { saveConfig(configPaths.buildIn.watermark, toRaw(waterMarkForm.value)) } -const singleConfigSettings = ref({} as IBuildInListItem) +const singleConfigSettings = ref({ + id: '', + compress: { + ...defaultCompressSetting, + }, + watermark: { + ...defaultWaterMarkSetting, + }, + skipProcess: { + ...defaultSkipProcessSetting, + }, + rename: { + enable: false, + format: '{filename}', + }, + autoRename: false, + manualRename: false, +} as IBuildInListItem) function cleanFormatConvertObj(obj: any) { const cleanedObj: Record = {} @@ -1157,18 +1155,6 @@ function cleanFormatConvertObj(obj: any) { } async function initData() { - //single config settings - if (configId) { - const buildInList = await getConfig>(configPaths.buildIn.list) - if (!buildInList) { - console.error('Failed to load built-in config list.') - } - const targetConfig = buildInList?.find(item => item.id === configId) - if (targetConfig) { - singleConfigSettings.value = targetConfig - } - } - // global settings const compress = (await getConfig(configPaths.buildIn.compress)) || {} const watermark = (await getConfig(configPaths.buildIn.watermark)) || {} @@ -1230,6 +1216,17 @@ async function initData() { ...skipProcess, } } + if (configId) { + let buildInList = await getConfig>(configPaths.buildIn.list) + if (!buildInList) { + saveConfig(configPaths.buildIn.list, []) + buildInList = [] + } + const targetConfig = buildInList?.find(item => item.id === configId) + if (!targetConfig) { + return + } + } } function safeSetMapValue(form: any, fieldName: string, picbedType: string, value: any, defaultValue: any) { @@ -1250,7 +1247,7 @@ function safeSetMapValue(form: any, fieldName: string, picbedType: string, value if (!form[mapFieldName]) { form[mapFieldName] = {} } - if (value === defaultValue) { + if (value === defaultValue && form[fieldName] === defaultValue) { delete form[mapFieldName][picbedType] } else { if (fieldName === 'formatConvertObj') { @@ -1261,6 +1258,28 @@ function safeSetMapValue(form: any, fieldName: string, picbedType: string, value } } +function saveSkipProcessConfig() { + saveConfig(configPaths.buildIn.skipProcess, toRaw(skipProcessForm.value)) +} + +function saveCompressConfig() { + const cleanFullMap: Record = {} + Object.entries(compressForm.value.formatConvertObjMap || {}).forEach(([picbedType, value]) => { + try { + const cleanedObj = cleanFormatConvertObj(value) + + if (Object.keys(cleanedObj).length > 0) { + cleanFullMap[picbedType] = cleanedObj + } + } catch (_error) {} + }) + if (JSON.stringify(cleanFullMap) !== JSON.stringify(compressForm.value.formatConvertObjMap)) { + compressForm.value.formatConvertObjMap = cleanFullMap + } + + saveConfig(configPaths.buildIn.compress, toRaw(compressForm.value)) +} + watch(activeTab, () => { nextTick(updateTabIndicator) }) diff --git a/src/renderer/i18n/locales/en.json b/src/renderer/i18n/locales/en.json index 0b9edf3b..e6e0b0fa 100644 --- a/src/renderer/i18n/locales/en.json +++ b/src/renderer/i18n/locales/en.json @@ -104,7 +104,7 @@ }, "generalSettings": "General", "perPicBed": { - "defaultValue": "Default Value: {value}", + "defaultValue": "Global Value: {value}", "description": "Configure settings for each PicBed individually", "title": "Per-PicBed Settings" }, diff --git a/src/renderer/i18n/locales/zh-CN.json b/src/renderer/i18n/locales/zh-CN.json index d9adb85c..88eb57e6 100644 --- a/src/renderer/i18n/locales/zh-CN.json +++ b/src/renderer/i18n/locales/zh-CN.json @@ -104,7 +104,7 @@ }, "generalSettings": "常规", "perPicBed": { - "defaultValue": "默认值: {value}", + "defaultValue": "全局值: {value}", "description": "为每个图床单独配置设置", "title": "图床独立设置" }, diff --git a/src/renderer/i18n/locales/zh-TW.json b/src/renderer/i18n/locales/zh-TW.json index e2016404..d6da9b63 100644 --- a/src/renderer/i18n/locales/zh-TW.json +++ b/src/renderer/i18n/locales/zh-TW.json @@ -104,7 +104,7 @@ }, "generalSettings": "常規", "perPicBed": { - "defaultValue": "默認值: {value}", + "defaultValue": "全局值: {value}", "description": "為每個圖床單獨配置設置", "title": "圖床獨立設置" },