From ecbe571c51d04ec165cb03552d16db4fcec4b04c Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 23 Jun 2022 10:46:20 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/legado/app/lib/webdav/WebDav.kt | 3 ++- .../app/ui/book/remote/RemoteBookActivity.kt | 7 ++++--- .../app/ui/book/remote/RemoteBookViewModel.kt | 1 + .../app/ui/book/remote/manager/RemoteBookWebDav.kt | 14 +++++--------- app/src/main/res/menu/book_remote.xml | 12 ++++++++++-- 5 files changed, 22 insertions(+), 15 deletions(-) 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 c0bd46423..93337eef3 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 @@ -19,6 +19,7 @@ import java.io.FileOutputStream import java.io.InputStream import java.net.MalformedURLException import java.net.URL +import java.net.URLDecoder import java.net.URLEncoder import java.time.LocalDateTime import java.time.ZoneOffset @@ -125,7 +126,7 @@ open class WebDav(val path: String, val authorization: Authorization) { httpUrl?.let { urlStr -> val baseUrl = NetworkUtils.getBaseUrl(urlStr) for (element in elements) { - val href = element.getElementsByTag("d:href")[0].text() + val href = URLDecoder.decode(element.getElementsByTag("d:href")[0].text(), "UTF-8") if (!href.endsWith("/")) { val fileName = href.substring(href.lastIndexOf("/") + 1) val webDavFile: WebDav diff --git a/app/src/main/java/io/legado/app/ui/book/remote/RemoteBookActivity.kt b/app/src/main/java/io/legado/app/ui/book/remote/RemoteBookActivity.kt index 58083c627..a19aaf1df 100644 --- a/app/src/main/java/io/legado/app/ui/book/remote/RemoteBookActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/remote/RemoteBookActivity.kt @@ -10,9 +10,11 @@ import io.legado.app.R import io.legado.app.base.VMBaseActivity import io.legado.app.databinding.ActivityImportBookBinding import io.legado.app.lib.theme.backgroundColor +import io.legado.app.ui.about.AppLogDialog import io.legado.app.ui.book.remote.manager.RemoteBookWebDav import io.legado.app.ui.widget.SelectActionBar import io.legado.app.ui.widget.dialog.WaitDialog +import io.legado.app.utils.showDialogFragment import io.legado.app.utils.viewbindingdelegate.viewBinding import kotlinx.coroutines.flow.conflate import kotlinx.coroutines.launch @@ -72,9 +74,8 @@ class RemoteBookActivity : VMBaseActivity { - upPath() - } + R.id.menu_refresh -> upPath() + R.id.menu_log -> showDialogFragment() } return super.onCompatOptionsItemSelected(item) } diff --git a/app/src/main/java/io/legado/app/ui/book/remote/RemoteBookViewModel.kt b/app/src/main/java/io/legado/app/ui/book/remote/RemoteBookViewModel.kt index 557921318..1b1b83019 100644 --- a/app/src/main/java/io/legado/app/ui/book/remote/RemoteBookViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/remote/RemoteBookViewModel.kt @@ -58,6 +58,7 @@ class RemoteBookViewModel(application: Application): BaseViewModel(application){ val bookList = RemoteBookWebDav.getRemoteBookList(path) dataCallback?.setItems(bookList) }.onError { + AppLog.put("获取webDav书籍出错\n${it.localizedMessage}", it) context.toastOnUi("获取webDav书籍出错\n${it.localizedMessage}") } } diff --git a/app/src/main/java/io/legado/app/ui/book/remote/manager/RemoteBookWebDav.kt b/app/src/main/java/io/legado/app/ui/book/remote/manager/RemoteBookWebDav.kt index c5d6d2052..478443e65 100644 --- a/app/src/main/java/io/legado/app/ui/book/remote/manager/RemoteBookWebDav.kt +++ b/app/src/main/java/io/legado/app/ui/book/remote/manager/RemoteBookWebDav.kt @@ -16,7 +16,6 @@ import io.legado.app.utils.readBytes import kotlinx.coroutines.runBlocking import splitties.init.appCtx import java.io.File -import java.net.URLDecoder object RemoteBookWebDav : RemoteBookManager() { val rootBookUrl get() = "${AppWebDav.rootWebDavUrl}${remoteBookFolder}" @@ -44,26 +43,23 @@ object RemoteBookWebDav : RemoteBookManager() { val remoteWebDavFileList: List = WebDav(path, it).listFiles() //转化远程文件信息到本地对象 remoteWebDavFileList.forEach { webDavFile -> - var webDavFileName = webDavFile.displayName - webDavFileName = URLDecoder.decode(webDavFileName, "utf-8") - if (webDavFile.isDir) { remoteBooks.add( RemoteBook( - webDavFileName, webDavFile.path, webDavFile.size, + webDavFile.displayName, webDavFile.path, webDavFile.size, "folder", webDavFile.lastModify, false ) ) } else { //分割后缀 - val fileExtension = webDavFileName.substringAfterLast(".") + val fileExtension = webDavFile.displayName.substringAfterLast(".") //扩展名符合阅读的格式则认为是书籍 - if (bookFileRegex.matches(webDavFileName)) { - val isOnBookShelf = LocalBook.isOnBookShelf(webDavFileName) + if (bookFileRegex.matches(webDavFile.displayName)) { + val isOnBookShelf = LocalBook.isOnBookShelf(webDavFile.displayName) remoteBooks.add( RemoteBook( - webDavFileName, webDavFile.path, webDavFile.size, + webDavFile.displayName, webDavFile.path, webDavFile.size, fileExtension, webDavFile.lastModify, isOnBookShelf ) ) diff --git a/app/src/main/res/menu/book_remote.xml b/app/src/main/res/menu/book_remote.xml index 8474a81d7..59f5ccd42 100644 --- a/app/src/main/res/menu/book_remote.xml +++ b/app/src/main/res/menu/book_remote.xml @@ -1,11 +1,19 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + tools:ignore="AlwaysShowAction"> + + \ No newline at end of file