|
|
|
@ -81,7 +81,10 @@ class WebDav(urlStr: String, val authorization: Authorization) { |
|
|
|
|
* @param propsList 指定列出文件的哪些属性 |
|
|
|
|
*/ |
|
|
|
|
@Throws(WebDavException::class) |
|
|
|
|
private suspend fun propFindResponse(propsList: List<String> = emptyList()): String? { |
|
|
|
|
private suspend fun propFindResponse( |
|
|
|
|
propsList: List<String> = emptyList(), |
|
|
|
|
depth: Int = 1 |
|
|
|
|
): String? { |
|
|
|
|
val requestProps = StringBuilder() |
|
|
|
|
for (p in propsList) { |
|
|
|
|
requestProps.append("<a:").append(p).append("/>\n") |
|
|
|
@ -95,7 +98,7 @@ class WebDav(urlStr: String, val authorization: Authorization) { |
|
|
|
|
return okHttpClient.newCallResponse { |
|
|
|
|
url(url) |
|
|
|
|
addHeader(authorization.name, authorization.data) |
|
|
|
|
addHeader("Depth", "1") |
|
|
|
|
addHeader("Depth", depth.toString()) |
|
|
|
|
// 添加RequestBody对象,可以只返回的属性。如果设为null,则会返回全部属性 |
|
|
|
|
// 注意:尽量手动指定需要返回的属性。若返回全部属性,可能后由于Prop.java里没有该属性名,而崩溃。 |
|
|
|
|
val requestBody = requestPropsStr.toRequestBody("text/plain".toMediaType()) |
|
|
|
@ -144,12 +147,10 @@ class WebDav(urlStr: String, val authorization: Authorization) { |
|
|
|
|
*/ |
|
|
|
|
suspend fun exists(): Boolean { |
|
|
|
|
return kotlin.runCatching { |
|
|
|
|
val response = propFindResponse() ?: return false |
|
|
|
|
val response = propFindResponse(depth = 0) ?: return false |
|
|
|
|
val document = Jsoup.parse(response) |
|
|
|
|
val elements = document.getElementsByTag("d:response") |
|
|
|
|
return elements.isNotEmpty() |
|
|
|
|
}.onFailure { |
|
|
|
|
AppLog.put("WebDav检测是否存在出错\n${it.localizedMessage}") |
|
|
|
|
}.getOrDefault(false) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|