From 13f4c49ab04af365b05faec957d7aa45543cdcdb Mon Sep 17 00:00:00 2001 From: Kuingsmile <96409857+Kuingsmile@users.noreply.github.com> Date: Mon, 8 Jun 2026 02:31:02 -0700 Subject: [PATCH] :sparkles: Feature(custom): add support for ULID in advanced rename --- package.json | 1 + src/renderer/components/ImageProcessSetting.vue | 1 + src/renderer/i18n/locales/en.json | 1 + src/renderer/i18n/locales/zh-CN.json | 1 + src/renderer/i18n/locales/zh-TW.json | 1 + src/renderer/manage/pages/BucketPage.vue | 1 + src/renderer/manage/pages/ManageSetting.vue | 1 + src/renderer/manage/utils/common.ts | 2 ++ src/renderer/pages/Gallery.vue | 1 + src/renderer/pages/PicGoSetting.vue | 1 + yarn.lock | 5 +++++ 11 files changed, 16 insertions(+) diff --git a/package.json b/package.json index c39548fd..63998d31 100644 --- a/package.json +++ b/package.json @@ -96,6 +96,7 @@ "tunnel": "^0.0.6", "upyun": "^3.4.6", "uuid": "^14.0.0", + "ulid": "^3.0.2", "vue": "^3.5.35", "webdav": "^5.10.0", "write-file-atomic": "^7.0.1", diff --git a/src/renderer/components/ImageProcessSetting.vue b/src/renderer/components/ImageProcessSetting.vue index 864ab9f5..48b6c7cb 100644 --- a/src/renderer/components/ImageProcessSetting.vue +++ b/src/renderer/components/ImageProcessSetting.vue @@ -1098,6 +1098,7 @@ const advancedRenameList = computed(() => ({ { label: t('pages.settings.upload.placeholder.md5'), value: '{md5}' }, { label: t('pages.settings.upload.placeholder.md5-16'), value: '{md5-16}' }, { label: t('pages.settings.upload.placeholder.uuid'), value: '{uuid}' }, + { label: t('pages.settings.upload.placeholder.ulid'), value: '{ulid}' }, { label: t('pages.settings.upload.placeholder.sha1'), value: '{sha1}' }, { label: t('pages.settings.upload.placeholder.sha1-n'), value: '{sha1-n}' }, { label: t('pages.settings.upload.placeholder.sha256'), value: '{sha256}' }, diff --git a/src/renderer/i18n/locales/en.json b/src/renderer/i18n/locales/en.json index 276c2efc..7d6bb5de 100644 --- a/src/renderer/i18n/locales/en.json +++ b/src/renderer/i18n/locales/en.json @@ -1088,6 +1088,7 @@ "sha256-n": "SHA256 Hash (First n Digits)", "timestamp": "Timestamp, 13 Digits", "timestampS": "Timestamp, 10 Digits", + "ulid": "Random ULID", "uuid": "Random UUID", "year2": "Year, 2 Digits", "year4": "Year, 4 Digits" diff --git a/src/renderer/i18n/locales/zh-CN.json b/src/renderer/i18n/locales/zh-CN.json index 7f916b42..2702cda8 100644 --- a/src/renderer/i18n/locales/zh-CN.json +++ b/src/renderer/i18n/locales/zh-CN.json @@ -1088,6 +1088,7 @@ "sha256-n": "SHA256 哈希(前n位)", "timestamp": "时间戳,13位数", "timestampS": "时间戳,10位数", + "ulid": "随机 ULID", "uuid": "随机 UUID", "year2": "年份,2位数", "year4": "年份,4位数" diff --git a/src/renderer/i18n/locales/zh-TW.json b/src/renderer/i18n/locales/zh-TW.json index 907ed71c..44d8083c 100644 --- a/src/renderer/i18n/locales/zh-TW.json +++ b/src/renderer/i18n/locales/zh-TW.json @@ -1088,6 +1088,7 @@ "sha256-n": "SHA256 哈希(前n位)", "timestamp": "時間戳,13位數", "timestampS": "時間戳,10位數", + "ulid": "隨機 ULID", "uuid": "隨機 UUID", "year2": "年份,2位數", "year4": "年份,4位數" diff --git a/src/renderer/manage/pages/BucketPage.vue b/src/renderer/manage/pages/BucketPage.vue index b9e9262c..f8c50aea 100644 --- a/src/renderer/manage/pages/BucketPage.vue +++ b/src/renderer/manage/pages/BucketPage.vue @@ -1334,6 +1334,7 @@ const advancedRenameList = computed(() => ({ { label: t('pages.settings.upload.placeholder.md5'), value: '{md5}' }, { label: t('pages.settings.upload.placeholder.md5-16'), value: '{md5-16}' }, { label: t('pages.settings.upload.placeholder.uuid'), value: '{uuid}' }, + { label: t('pages.settings.upload.placeholder.ulid'), value: '{ulid}' }, { label: t('pages.settings.upload.placeholder.sha1'), value: '{sha1}' }, { label: t('pages.settings.upload.placeholder.sha1-n'), value: '{sha1-n}' }, { label: t('pages.settings.upload.placeholder.sha256'), value: '{sha256}' }, diff --git a/src/renderer/manage/pages/ManageSetting.vue b/src/renderer/manage/pages/ManageSetting.vue index 95f453df..1527204c 100644 --- a/src/renderer/manage/pages/ManageSetting.vue +++ b/src/renderer/manage/pages/ManageSetting.vue @@ -290,6 +290,7 @@ const advancedRenameList = computed(() => ({ { label: t('pages.settings.upload.placeholder.md5'), value: '{md5}' }, { label: t('pages.settings.upload.placeholder.md5-16'), value: '{md5-16}' }, { label: t('pages.settings.upload.placeholder.uuid'), value: '{uuid}' }, + { label: t('pages.settings.upload.placeholder.ulid'), value: '{ulid}' }, { label: t('pages.settings.upload.placeholder.sha1'), value: '{sha1}' }, { label: t('pages.settings.upload.placeholder.sha1-n'), value: '{sha1-n}' }, { label: t('pages.settings.upload.placeholder.sha256'), value: '{sha256}' }, diff --git a/src/renderer/manage/utils/common.ts b/src/renderer/manage/utils/common.ts index b1a56462..b957de57 100644 --- a/src/renderer/manage/utils/common.ts +++ b/src/renderer/manage/utils/common.ts @@ -1,3 +1,4 @@ +import { ulid } from 'ulid' import { v4 as uuidv4 } from 'uuid' import { getConfig } from '@/manage/utils/dataSender' @@ -87,6 +88,7 @@ export function renameFileNameWithCustomString( ? window.node.path.basename(affixFileName, window.node.path.extname(affixFileName)) : window.node.path.basename(oldName, window.node.path.extname(oldName)), '{uuid}': () => uuidv4().replace(/-/g, ''), + '{ulid}': () => ulid(), '{timestamp}': () => date.getTime().toString(), '{timestampS}': () => Math.floor(date.getTime() / 1000).toString(), } diff --git a/src/renderer/pages/Gallery.vue b/src/renderer/pages/Gallery.vue index 724957a3..577d9f2c 100644 --- a/src/renderer/pages/Gallery.vue +++ b/src/renderer/pages/Gallery.vue @@ -520,6 +520,7 @@ const advancedRenameList = { { label: t('pages.settings.upload.placeholder.md5'), value: '{md5}' }, { label: t('pages.settings.upload.placeholder.md5-16'), value: '{md5-16}' }, { label: t('pages.settings.upload.placeholder.uuid'), value: '{uuid}' }, + { label: t('pages.settings.upload.placeholder.ulid'), value: '{ulid}' }, { label: t('pages.settings.upload.placeholder.sha1'), value: '{sha1}' }, { label: t('pages.settings.upload.placeholder.sha1-n'), value: '{sha1-n}' }, { label: t('pages.settings.upload.placeholder.sha256'), value: '{sha256}' }, diff --git a/src/renderer/pages/PicGoSetting.vue b/src/renderer/pages/PicGoSetting.vue index 4973f77f..b8de0e8e 100644 --- a/src/renderer/pages/PicGoSetting.vue +++ b/src/renderer/pages/PicGoSetting.vue @@ -1615,6 +1615,7 @@ const advancedRenameList = computed(() => ({ { label: t('pages.settings.upload.placeholder.md5'), value: '{md5}' }, { label: t('pages.settings.upload.placeholder.md5-16'), value: '{md5-16}' }, { label: t('pages.settings.upload.placeholder.uuid'), value: '{uuid}' }, + { label: t('pages.settings.upload.placeholder.ulid'), value: '{ulid}' }, { label: t('pages.settings.upload.placeholder.sha1'), value: '{sha1}' }, { label: t('pages.settings.upload.placeholder.sha1-n'), value: '{sha1-n}' }, { label: t('pages.settings.upload.placeholder.sha256'), value: '{sha256}' }, diff --git a/yarn.lock b/yarn.lock index e3f22ff7..918dda57 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12267,6 +12267,11 @@ uint8array-extras@^1.5.0: resolved "https://registry.yarnpkg.com/uint8array-extras/-/uint8array-extras-1.5.0.tgz#10d2a85213de3ada304fea1c454f635c73839e86" integrity sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A== +ulid@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/ulid/-/ulid-3.0.2.tgz#b6a1f2a3de7852e39aa86bf497a8e33b1867c984" + integrity sha512-yu26mwteFYzBAot7KVMqFGCVpsF6g8wXfJzQUHvu1no3+rRRSFcSV2nKeYvNPLD2J4b08jYBDhHUjeH0ygIl9w== + "undici-types@>=7.24.0 <7.24.7": version "7.24.6" resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.24.6.tgz#61275b485d7fd4e9d269c7cf04ec2873c9cc0f91"