From 389cd81ede382d4bd71433b18c8306179b022cc7 Mon Sep 17 00:00:00 2001 From: kunfei Date: Wed, 2 Aug 2023 22:34:20 +0800 Subject: [PATCH] =?UTF-8?q?=E8=83=8C=E6=99=AF=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/help/AppWebDav.kt | 14 ++++++++++++-- .../main/java/io/legado/app/lib/webdav/WebDav.kt | 9 ++++++++- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/io/legado/app/help/AppWebDav.kt b/app/src/main/java/io/legado/app/help/AppWebDav.kt index 41024e4c4..4b4422629 100644 --- a/app/src/main/java/io/legado/app/help/AppWebDav.kt +++ b/app/src/main/java/io/legado/app/help/AppWebDav.kt @@ -72,6 +72,7 @@ object AppWebDav { WebDav(rootWebDavUrl, mAuthorization).makeAsDir() WebDav(bookProgressUrl, mAuthorization).makeAsDir() WebDav(exportsWebDavUrl, mAuthorization).makeAsDir() + WebDav(bgWebDavUrl, mAuthorization).makeAsDir() val rootBooksUrl = "${rootWebDavUrl}books" defaultBookWebDav = RemoteBookWebDav(rootBooksUrl, mAuthorization) authorization = mAuthorization @@ -159,7 +160,7 @@ object AppWebDav { /** * 获取云端所有背景名称 */ - suspend fun getAllBgWebDavFiles(): Result> { + private suspend fun getAllBgWebDavFiles(): Result> { return kotlin.runCatching { if (!NetworkUtils.isAvailable()) throw NoStackTraceException("网络未连接") @@ -173,9 +174,18 @@ object AppWebDav { /** * 上传背景图片 */ - suspend fun upBgs(files: List) { + suspend fun upBgs(files: Array) { val authorization = authorization ?: return if (!NetworkUtils.isAvailable()) return + val bgWebDavFiles = getAllBgWebDavFiles().getOrThrow() + .map { it.displayName } + .toSet() + files.forEach { + if (!bgWebDavFiles.contains(it.name)) { + WebDav("$bgWebDavUrl${it.name}", authorization) + .upload(it) + } + } } /** diff --git a/app/src/main/java/io/legado/app/lib/webdav/WebDav.kt b/app/src/main/java/io/legado/app/lib/webdav/WebDav.kt index eba7ead65..ef635e564 100644 --- a/app/src/main/java/io/legado/app/lib/webdav/WebDav.kt +++ b/app/src/main/java/io/legado/app/lib/webdav/WebDav.kt @@ -304,10 +304,17 @@ open class WebDav( suspend fun upload( localPath: String, contentType: String = "application/octet-stream" + ) { + upload(File(localPath), contentType) + } + + @Throws(WebDavException::class) + suspend fun upload( + file: File, + contentType: String = "application/octet-stream" ) { kotlin.runCatching { withContext(IO) { - val file = File(localPath) if (!file.exists()) throw WebDavException("文件不存在") // 务必注意RequestBody不要嵌套,不然上传时内容可能会被追加多余的文件信息 val fileBody = file.asRequestBody(contentType.toMediaType())