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 207a707c4..ced66ae09 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 @@ -137,6 +137,9 @@ open class WebDav(val path: String, val authorization: Authorization) { val contentType = element .getElementsByTag("d:getcontenttype") .firstOrNull()?.text().orEmpty() + val resourceType = element + .getElementsByTag("d:resourcetype") + .firstOrNull()?.html()?.trim().orEmpty() val size = kotlin.runCatching { element.getElementsByTag("d:getcontentlength") .firstOrNull()?.text()?.toLong() ?: 0 @@ -155,6 +158,7 @@ open class WebDav(val path: String, val authorization: Authorization) { urlName = urlName, size = size, contentType = contentType, + resourceType = resourceType, lastModify = lastModify ) list.add(webDavFile) @@ -171,11 +175,14 @@ open class WebDav(val path: String, val authorization: Authorization) { * 文件是否存在 */ suspend fun exists(): Boolean { + val url = httpUrl ?: return false + //当使用自建的WebDav服务时,在末尾有否 ”/“ 会影响请求的成功与否 + //使用坚果云的WebDav则不会,这里做一个简单的替换来解决这个问题 + val testUrl = url.removeSuffix("/") + "/" return kotlin.runCatching { return okHttpClient.newCallResponse { - url(url) + url(testUrl) addHeader(authorization.name, authorization.data) - head() }.code == 200 }.getOrDefault(false) } diff --git a/app/src/main/java/io/legado/app/lib/webdav/WebDavFile.kt b/app/src/main/java/io/legado/app/lib/webdav/WebDavFile.kt index fea46ea0b..48120d7f0 100644 --- a/app/src/main/java/io/legado/app/lib/webdav/WebDavFile.kt +++ b/app/src/main/java/io/legado/app/lib/webdav/WebDavFile.kt @@ -11,11 +11,12 @@ class WebDavFile( val urlName: String, val size: Long, val contentType: String, + val resourceType: String, val lastModify: Long ) : WebDav(urlStr, authorization) { val isDir by lazy { - contentType == "httpd/unix-directory" + contentType == "httpd/unix-directory" || resourceType.lowercase() == "" } } \ No newline at end of file