From b843278b2c75c9a9af5d421851d571438e8052e3 Mon Sep 17 00:00:00 2001 From: Kuingsmile Date: Thu, 31 Oct 2024 14:14:32 +0800 Subject: [PATCH] :sparkles: Feature(custom): add support for sink ISSUES CLOSED: #254 --- public/i18n/en.yml | 2 ++ public/i18n/zh-CN.yml | 2 ++ public/i18n/zh-TW.yml | 2 ++ src/main/utils/common.ts | 30 +++++++++++++++++++++++++++++ src/renderer/pages/PicGoSetting.vue | 30 +++++++++++++++++++++++++++++ src/universal/types/enum.ts | 3 ++- src/universal/types/i18n.d.ts | 2 ++ src/universal/types/view.d.ts | 2 ++ src/universal/utils/configPaths.ts | 4 ++++ 9 files changed, 76 insertions(+), 1 deletion(-) diff --git a/public/i18n/en.yml b/public/i18n/en.yml index 888250a..644755e 100644 --- a/public/i18n/en.yml +++ b/public/i18n/en.yml @@ -263,6 +263,8 @@ SETTINGS_SHORT_URL_C1N_TOKEN: C1N Token SETTINGS_SHORT_URL_YOURLS_DOMAIN: YOURLS domain SETTINGS_SHORT_URL_YOURLS_SIGNATURE: YOURLS signature SETTINGS_SHORT_URL_CF_WORKER_HOST: Cloudflare Worker Host +SETTINGS_SHORT_SINK_DOMAIN: sink domain +SETTINGS_SHORT_SINK_TOKEN: sink token SETTINGS_DELETE_LOCAL_FILE_AFTER_UPLOAD: Delete local file after upload SETTINGS_SYNC_CONFIG: Settings Sync Configuration SETTINGS_SYNC_CONFIG_TITLE: Sync Settings diff --git a/public/i18n/zh-CN.yml b/public/i18n/zh-CN.yml index e60931a..e809ab8 100644 --- a/public/i18n/zh-CN.yml +++ b/public/i18n/zh-CN.yml @@ -266,6 +266,8 @@ SETTINGS_SHORT_URL_C1N_TOKEN: C1N Token SETTINGS_SHORT_URL_YOURLS_DOMAIN: YOURLS域名 SETTINGS_SHORT_URL_YOURLS_SIGNATURE: YOURLS signature SETTINGS_SHORT_URL_CF_WORKER_HOST: Cloudflare Worker域名 +SETTINGS_SHORT_SINK_DOMAIN: sink域名 +SETTINGS_SHORT_SINK_TOKEN: sink token SETTINGS_DELETE_LOCAL_FILE_AFTER_UPLOAD: 上传后删除本地文件 SETTINGS_SYNC_CONFIG: 设置配置同步 SETTINGS_SYNC_CONFIG_TITLE: 同步设置 diff --git a/public/i18n/zh-TW.yml b/public/i18n/zh-TW.yml index 1c88f00..be8a26f 100644 --- a/public/i18n/zh-TW.yml +++ b/public/i18n/zh-TW.yml @@ -264,6 +264,8 @@ SETTINGS_SHORT_URL_C1N_TOKEN: C1N Token SETTINGS_SHORT_URL_YOURLS_DOMAIN: YOURLS域名 SETTINGS_SHORT_URL_YOURLS_SIGNATURE: YOURLS signature SETTINGS_SHORT_URL_CF_WORKER_HOST: Cloudflare Worker Host +SETTINGS_SHORT_SINK_DOMAIN: sink域名 +SETTINGS_SHORT_SINK_TOKEN: sink token SETTINGS_DELETE_LOCAL_FILE_AFTER_UPLOAD: 上傳後刪除本地檔案 SETTINGS_SYNC_CONFIG: 設置同步配置 SETTINGS_SYNC_CONFIG_TITLE: 同步設置 diff --git a/src/main/utils/common.ts b/src/main/utils/common.ts index bb5b4c3..d680259 100644 --- a/src/main/utils/common.ts +++ b/src/main/utils/common.ts @@ -210,6 +210,34 @@ const generateCFWORKERShortUrl = async (url: string) => { return url } +const generateSinkShortUrl = async (url: string) => { + let sinkDomain = db.get(configPaths.settings.sinkDomain) || '' + const sinkToken = db.get(configPaths.settings.sinkToken) || '' + if (!sinkDomain || !sinkToken) { + logger.warn('Sink domain or token is not set') + return url + } + if (!/^https?:\/\//.test(sinkDomain)) { + sinkDomain = `http://${sinkDomain}` + } + if (sinkDomain.endsWith('/')) { + sinkDomain = sinkDomain.slice(0, -1) + } + try { + const res = await axios.post( + `${sinkDomain}/api/link/create`, + { url }, + { headers: { Authorization: `Bearer ${sinkToken}` } } + ) + if (res.data?.link?.slug) { + return `${sinkDomain}/${res.data.link.slug}` + } + } catch (e: any) { + logger.error(e) + } + return url +} + export const generateShortUrl = async (url: string) => { const server = db.get(configPaths.settings.shortUrlServer) || IShortUrlServer.C1N switch (server) { @@ -219,6 +247,8 @@ export const generateShortUrl = async (url: string) => { return generateYOURLSShortUrl(url) case IShortUrlServer.CFWORKER: return generateCFWORKERShortUrl(url) + case IShortUrlServer.SINK: + return generateSinkShortUrl(url) default: return url } diff --git a/src/renderer/pages/PicGoSetting.vue b/src/renderer/pages/PicGoSetting.vue index eece303..8ee1da5 100644 --- a/src/renderer/pages/PicGoSetting.vue +++ b/src/renderer/pages/PicGoSetting.vue @@ -360,6 +360,28 @@ :placeholder="$T('SETTINGS_SHORT_URL_CF_WORKER_HOST')" /> + + + + + + ({ yourlsDomain: '', yourlsSignature: '', cfWorkerHost: '', + sinkDomain: '', + sinkToken: '', deleteLocalFile: false, serverKey: '', aesPassword: 'PicList-aesPassword', @@ -1089,6 +1117,8 @@ const autoWatchKeys = [ 'yourlsDomain', 'yourlsSignature', 'cfWorkerHost', + 'sinkDomain', + 'sinkToken', 'registry', 'proxy', 'autoCopy', diff --git a/src/universal/types/enum.ts b/src/universal/types/enum.ts index d72c20a..f6203ad 100644 --- a/src/universal/types/enum.ts +++ b/src/universal/types/enum.ts @@ -241,7 +241,8 @@ export enum II18nLanguage { export enum IShortUrlServer { C1N = 'c1n', YOURLS = 'yourls', - CFWORKER = 'cf_worker' + CFWORKER = 'cf_worker', + SINK = 'sink' } export enum commonTaskStatus { diff --git a/src/universal/types/i18n.d.ts b/src/universal/types/i18n.d.ts index a47561d..bc2b172 100644 --- a/src/universal/types/i18n.d.ts +++ b/src/universal/types/i18n.d.ts @@ -259,6 +259,8 @@ interface ILocales { SETTINGS_SHORT_URL_YOURLS_DOMAIN: string SETTINGS_SHORT_URL_YOURLS_SIGNATURE: string SETTINGS_SHORT_URL_CF_WORKER_HOST: string + SETTINGS_SHORT_SINK_DOMAIN: string + SETTINGS_SHORT_SINK_TOKEN: string SETTINGS_DELETE_LOCAL_FILE_AFTER_UPLOAD: string SETTINGS_SYNC_CONFIG: string SETTINGS_SYNC_CONFIG_TITLE: string diff --git a/src/universal/types/view.d.ts b/src/universal/types/view.d.ts index 5ef4d13..6d518d3 100644 --- a/src/universal/types/view.d.ts +++ b/src/universal/types/view.d.ts @@ -26,6 +26,8 @@ interface ISettingForm { yourlsDomain: string yourlsSignature: string cfWorkerHost: string + sinkDomain: string + sinkToken: string deleteLocalFile: boolean serverKey: string aesPassword: string diff --git a/src/universal/utils/configPaths.ts b/src/universal/utils/configPaths.ts index 6f693ec..efe18ca 100644 --- a/src/universal/utils/configPaths.ts +++ b/src/universal/utils/configPaths.ts @@ -71,6 +71,8 @@ export interface IConfigStruct { cfWorkerHost: string yourlsDomain: string yourlsSignature: string + sinkDomain: string + sinkToken: string isSilentNotice: boolean proxy: string registry: string @@ -153,6 +155,8 @@ export const configPaths = { cfWorkerHost: 'settings.cfWorkerHost', yourlsDomain: 'settings.yourlsDomain', yourlsSignature: 'settings.yourlsSignature', + sinkDomain: 'settings.sinkDomain', + sinkToken: 'settings.sinkToken', isSilentNotice: 'settings.isSilentNotice', proxy: 'settings.proxy', registry: 'settings.registry',