From 1dacd3c663ae25ca52bd9c36eb1a44a5bd09e4e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=90=8C=E8=90=8C=E5=93=92=E8=B5=AB=E8=90=9D?= Date: Wed, 22 Feb 2023 23:52:38 +0800 Subject: [PATCH] :sparkles: Feature: picture upload support webdav now --- package.json | 2 +- src/main.ts | 3 ++- src/renderer/apis/allApi.ts | 4 +++- src/renderer/apis/webdav.ts | 28 ++++++++++++++++++++++++++++ src/renderer/pages/Gallery.vue | 2 +- yarn.lock | 8 ++++---- 6 files changed, 39 insertions(+), 8 deletions(-) create mode 100644 src/renderer/apis/webdav.ts diff --git a/package.json b/package.json index 04d01cd2..02efd58e 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "mime-types": "^2.1.35", "mitt": "^3.0.0", "nodejs-file-downloader": "^4.10.6", - "piclist": "^0.0.8", + "piclist": "^0.0.9", "pinia": "^2.0.32", "pinia-plugin-persistedstate": "^3.1.0", "qiniu": "^7.8.0", diff --git a/src/main.ts b/src/main.ts index 251ba8c5..0dcae864 100644 --- a/src/main.ts +++ b/src/main.ts @@ -38,7 +38,8 @@ app.config.globalProperties.$builtInPicBed = [ 'tcyun', 'upyun', 'aliyun', - 'github' + 'github', + 'webdavplist' ] app.config.unwrapInjectedRef = true diff --git a/src/renderer/apis/allApi.ts b/src/renderer/apis/allApi.ts index 58ae9476..76262772 100644 --- a/src/renderer/apis/allApi.ts +++ b/src/renderer/apis/allApi.ts @@ -6,6 +6,7 @@ import ImgurApi from './imgur' import GithubApi from './github' import UpyunApi from './upyun' import AwsS3Api from './awss3' +import WebdavApi from './webdav' const apiMap: IStringKeyMap = { smms: SmmsApi, @@ -15,7 +16,8 @@ const apiMap: IStringKeyMap = { imgur: ImgurApi, github: GithubApi, upyun: UpyunApi, - 'aws-s3': AwsS3Api + 'aws-s3': AwsS3Api, + webdavplist: WebdavApi } export default class ALLApi { diff --git a/src/renderer/apis/webdav.ts b/src/renderer/apis/webdav.ts new file mode 100644 index 00000000..3da4c70d --- /dev/null +++ b/src/renderer/apis/webdav.ts @@ -0,0 +1,28 @@ +import { createClient } from 'webdav' +import { formatEndpoint } from '~/main/manage/utils/common' + +export default class WebdavApi { + static async delete (configMap: IStringKeyMap): Promise { + const { fileName, config: { host, username, password, path, sslEnabled } } = configMap + const endpoint = formatEndpoint(host, sslEnabled) + const ctx = createClient( + endpoint, + { + username, + password + } + ) + let key + if (path === '/' || !path) { + key = fileName + } else { + key = `${path.replace(/^\//, '').replace(/\/$/, '')}/${fileName}` + } + try { + await ctx.deleteFile(key) + return true + } catch (error) { + return false + } + } +} diff --git a/src/renderer/pages/Gallery.vue b/src/renderer/pages/Gallery.vue index d92e5b8a..0126d046 100644 --- a/src/renderer/pages/Gallery.vue +++ b/src/renderer/pages/Gallery.vue @@ -425,7 +425,7 @@ function remove (item: ImgInfo) { }).then(async () => { const file = await $$db.getById(item.id!) await $$db.removeById(item.id!) - const picBedsCanbeDeleted = ['smms', 'github', 'imgur', 'tcyun', 'aliyun', 'qiniu', 'upyun', 'aws-s3'] + const picBedsCanbeDeleted = ['smms', 'github', 'imgur', 'tcyun', 'aliyun', 'qiniu', 'upyun', 'aws-s3', 'webdavplist'] if (await getConfig('settings.deleteCloudFile')) { if (item.type !== undefined && picBedsCanbeDeleted.includes(item.type)) { setTimeout(() => { diff --git a/yarn.lock b/yarn.lock index 6014a486..dfc3f6b3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10919,10 +10919,10 @@ performance-now@^2.1.0: resolved "https://registry.npmmirror.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== -piclist@^0.0.8: - version "0.0.8" - resolved "https://registry.npmjs.org/piclist/-/piclist-0.0.8.tgz#99d78cb4f288915b8056849c6d4c718704b2df2f" - integrity sha512-aZVSWoP2A78ZMKoGd3HFQP/+EsCpbUcQ8xcaswu7UB4jSUdlkUWDp/Mp0VmvUcgPSlpFFJR7DEcDJ/Q6HMMcJg== +piclist@^0.0.9: + version "0.0.9" + resolved "https://registry.npmjs.org/piclist/-/piclist-0.0.9.tgz#1c610728480594fc7cfd04d3bde5b542ecc910ee" + integrity sha512-ZDNP1uQT3JACUG1s1RhRlB35DuZPFuDlDPrv8aBPdVlfAjO9nuY7ICEZ3qj8AHPQb7R98R8fSJZq8juYMqXPzw== dependencies: "@picgo/i18n" "^1.0.0" "@picgo/store" "^2.0.4"