Преглед изворни кода

Merge pull request #2046 from qianfanguojin/master

fix: 继续修复自建WebDav服务使用WebDav书籍的BUG
kunfei пре 4 година
родитељ
комит
6212b82be9

+ 7 - 4
app/src/main/java/io/legado/app/lib/webdav/WebDav.kt

@@ -126,8 +126,11 @@ open class WebDav(val path: String, val authorization: Authorization) {
         httpUrl?.let { urlStr ->
             val baseUrl = NetworkUtils.getBaseUrl(urlStr)
             for (element in elements) {
-                val href = URLDecoder.decode(element.getElementsByTag("d:href")[0].text(), "UTF-8")
-                if (!href.endsWith("/")) {
+                //依然是优化支持 caddy 自建的 WebDav ,其目录后缀都为“/”, 所以删除“/”的判定,不然无法获取该目录项
+                var href = URLDecoder.decode(element.getElementsByTag("d:href")[0].text(), "UTF-8")
+                if (href.endsWith("/")) {
+                    href = href.removeSuffix("/")
+                }
                     val fileName = href.substring(href.lastIndexOf("/") + 1)
                     val webDavFile: WebDav
                     try {
@@ -167,7 +170,6 @@ open class WebDav(val path: String, val authorization: Authorization) {
                         e.printOnDebug()
                     }
                 }
-            }
         }
         return list
     }
@@ -184,7 +186,8 @@ open class WebDav(val path: String, val authorization: Authorization) {
             return okHttpClient.newCallResponse {
                 url(testUrl)
                 addHeader(authorization.name, authorization.data)
-            }.code == 200
+            //某些自建的WebDav服务,请求数据时返回码不一定为 200,如 caddy 为207,所以改为在200-300区间
+            }.isSuccessful
         }.getOrDefault(false)
     }
 

+ 4 - 4
app/src/main/java/io/legado/app/lib/webdav/WebDavFile.kt

@@ -13,10 +13,10 @@ class WebDavFile(
     val contentType: String,
     val resourceType: String,
     val lastModify: Long
-) : WebDav(urlStr, authorization) {
+    ) : WebDav(urlStr, authorization) {
 
-    val isDir by lazy {
-        contentType == "httpd/unix-directory" || resourceType.lowercase() == "<d:collection />"
-    }
+        val isDir by lazy {
+            contentType == "httpd/unix-directory" || resourceType.lowercase().contains("collection")
+        }
 
 }