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