From 8b8faaa30f733e7b012f75cb6c10f92ff5e1be62 Mon Sep 17 00:00:00 2001 From: kunfei Date: Tue, 21 Jun 2022 21:06:01 +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 --- .../app/ui/book/remote/RemoteBookActivity.kt | 14 ++++++++++---- .../legado/app/ui/book/remote/RemoteBookAdapter.kt | 4 ++-- .../legado/app/ui/book/remote/RemoteBookManager.kt | 2 +- .../app/ui/book/remote/RemoteBookViewModel.kt | 9 ++++++--- .../app/ui/book/remote/manager/RemoteBookWebDav.kt | 10 +++++----- 5 files changed, 24 insertions(+), 15 deletions(-) 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 e27401a3e..dab1affdd 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 @@ -12,6 +12,7 @@ import io.legado.app.base.VMBaseActivity import io.legado.app.databinding.ActivityRemoteBookBinding +import io.legado.app.ui.book.remote.manager.RemoteBookWebDav import io.legado.app.ui.widget.dialog.WaitDialog import io.legado.app.utils.toastOnUi @@ -50,7 +51,7 @@ class RemoteBookActivity : VMBaseActivity { - viewModel.loadRemoteBookList() + viewModel.loadRemoteBookList( + viewModel.dirList.lastOrNull()?.path ?: RemoteBookWebDav.rootBookUrl + ) } } return super.onCompatOptionsItemSelected(item) } - override fun openDir(url: String) { - + override fun openDir(remoteBook: RemoteBook) { + viewModel.dirList.add(remoteBook) + binding.titleBar.title = remoteBook.filename + viewModel.dataCallback?.clear() + viewModel.loadRemoteBookList(remoteBook.path) } @SuppressLint("NotifyDataSetChanged") diff --git a/app/src/main/java/io/legado/app/ui/book/remote/RemoteBookAdapter.kt b/app/src/main/java/io/legado/app/ui/book/remote/RemoteBookAdapter.kt index a7bd8cf74..93abccd89 100644 --- a/app/src/main/java/io/legado/app/ui/book/remote/RemoteBookAdapter.kt +++ b/app/src/main/java/io/legado/app/ui/book/remote/RemoteBookAdapter.kt @@ -51,7 +51,7 @@ class RemoteBookAdapter (context: Context, val callBack: CallBack) : binding.btnDownload.setOnClickListener { getItem(holder.layoutPosition)?.let { if (it.isDir) { - callBack.openDir(it.path) + callBack.openDir(it) } else { callBack.addToBookshelf(it) } @@ -61,7 +61,7 @@ class RemoteBookAdapter (context: Context, val callBack: CallBack) : } interface CallBack { - fun openDir(url: String) + fun openDir(remoteBook: RemoteBook) fun addToBookshelf(remoteBook: RemoteBook) } } \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/book/remote/RemoteBookManager.kt b/app/src/main/java/io/legado/app/ui/book/remote/RemoteBookManager.kt index 132c6f354..72f975c05 100644 --- a/app/src/main/java/io/legado/app/ui/book/remote/RemoteBookManager.kt +++ b/app/src/main/java/io/legado/app/ui/book/remote/RemoteBookManager.kt @@ -5,7 +5,7 @@ import android.net.Uri abstract class RemoteBookManager { protected val remoteBookFolder : String = "books" abstract suspend fun initRemoteContext() - abstract suspend fun getRemoteBookList(): MutableList + abstract suspend fun getRemoteBookList(path: String): MutableList abstract suspend fun upload(localBookUri: Uri): Boolean abstract suspend fun delete(remoteBookUrl: String): Boolean 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 6de7c9a94..3699d79dc 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 @@ -13,7 +13,10 @@ import kotlinx.coroutines.flow.flowOn import java.util.* class RemoteBookViewModel(application: Application): BaseViewModel(application){ - private var dataCallback : DataCallback? = null + + val dirList = arrayListOf() + + var dataCallback: DataCallback? = null val dataFlow = callbackFlow> { @@ -49,10 +52,10 @@ class RemoteBookViewModel(application: Application): BaseViewModel(application){ } } - fun loadRemoteBookList() { + fun loadRemoteBookList(path: String) { execute { dataCallback?.clear() - val bookList = RemoteBookWebDav.getRemoteBookList() + val bookList = RemoteBookWebDav.getRemoteBookList(path) dataCallback?.setItems(bookList) }.onError { 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 a85b2a3b7..9c67171c5 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 @@ -19,7 +19,7 @@ import java.io.File import java.net.URLDecoder object RemoteBookWebDav : RemoteBookManager() { - private val remoteBookUrl get() = "${AppWebDav.rootWebDavUrl}${remoteBookFolder}" + val rootBookUrl get() = "${AppWebDav.rootWebDavUrl}${remoteBookFolder}" init { runBlocking { @@ -29,7 +29,7 @@ object RemoteBookWebDav : RemoteBookManager() { override suspend fun initRemoteContext() { AppWebDav.authorization?.let { - WebDav(remoteBookUrl, it).makeAsDir() + WebDav(rootBookUrl, it).makeAsDir() } } @@ -37,11 +37,11 @@ object RemoteBookWebDav : RemoteBookManager() { * 获取远程书籍列表 */ @Throws(Exception::class) - override suspend fun getRemoteBookList(): MutableList { + override suspend fun getRemoteBookList(path: String): MutableList { val remoteBooks = mutableListOf() AppWebDav.authorization?.let { //读取文件列表 - val remoteWebDavFileList: List = WebDav(remoteBookUrl, it).listFiles() + val remoteWebDavFileList: List = WebDav(path, it).listFiles() //转化远程文件信息到本地对象 remoteWebDavFileList.forEach { webDavFile -> var webDavFileName = webDavFile.displayName @@ -93,7 +93,7 @@ object RemoteBookWebDav : RemoteBookManager() { if (!NetworkUtils.isAvailable()) return false val localBookName = localBookUri.path?.substringAfterLast(File.separator) - val putUrl = "${remoteBookUrl}${File.separator}${localBookName}" + val putUrl = "${rootBookUrl}${File.separator}${localBookName}" AppWebDav.authorization?.let { if (localBookUri.isContentScheme()) { WebDav(putUrl, it).upload(