diff --git a/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt b/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt index 0f93ba53b..eb79ef5e7 100644 --- a/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt @@ -40,6 +40,7 @@ import io.legado.app.ui.book.source.edit.BookSourceEditActivity import io.legado.app.ui.book.toc.TocActivityResult import io.legado.app.ui.login.SourceLoginActivity import io.legado.app.ui.widget.dialog.PhotoDialog +import io.legado.app.ui.widget.dialog.WaitDialog import io.legado.app.utils.* import io.legado.app.utils.viewbindingdelegate.viewBinding import kotlinx.coroutines.Dispatchers.IO @@ -206,11 +207,20 @@ class BookInfoActivity : R.id.menu_upload -> { launch { val uri = Uri.parse(viewModel.bookData.value?.bookUrl.toString()) - if (RemoteBookWebDav.upload(uri)) - toastOnUi(getString(R.string.upload_book_success)) - else - toastOnUi(getString(R.string.upload_book_fail)) - + val waitDialog = WaitDialog(this@BookInfoActivity) + waitDialog.setText("上传中.....") + waitDialog.show() + try { + val isUpload = RemoteBookWebDav.upload(uri) + if (isUpload) + toastOnUi(getString(R.string.upload_book_success)) + else + toastOnUi(getString(R.string.upload_book_fail)) + }catch (e : Exception){ + toastOnUi(e.localizedMessage) + }finally { + waitDialog.dismiss() + } } } } 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 0aa43b0fb..cd2319c55 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,6 +10,7 @@ import io.legado.app.base.VMBaseActivity import io.legado.app.databinding.ActivityRemoteBookBinding +import io.legado.app.ui.widget.dialog.WaitDialog import io.legado.app.utils.toastOnUi import io.legado.app.utils.viewbindingdelegate.viewBinding @@ -50,9 +51,13 @@ class RemoteBookActivity : VMBaseActivity Unit) { + fun addToBookshelf(remoteBook: RemoteBook, success: () -> Unit, finally: () -> Unit) { execute { val downloadBookPath = RemoteBookWebDav.getRemoteBook(remoteBook) downloadBookPath?.let { LocalBook.importFile(it) } + }.onSuccess { + success.invoke() + }.onError { + context.toastOnUi(it.localizedMessage) }.onFinally { finally.invoke() } 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 982ac183f..3466ee2a5 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,6 +19,7 @@ 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() { private val remoteBookUrl get() = "${rootWebDavUrl}${remoteBookFolder}" @@ -48,6 +49,9 @@ object RemoteBookWebDav : RemoteBookManager() { } } + /** + * 获取远程书籍列表 + */ @Throws(Exception::class) override suspend fun getRemoteBookList(): MutableList { val remoteBooks = mutableListOf() @@ -61,9 +65,10 @@ object RemoteBookWebDav : RemoteBookManager() { remoteWebDavFileList = remoteWebDavFileList!!.reversed() //转化远程文件信息到本地对象 remoteWebDavFileList!!.forEach { webDavFile -> - val webDavFileName = webDavFile.displayName - val webDavUrlName = "${remoteBookUrl}${File.separator}${webDavFile.displayName}" - + var webDavFileName = webDavFile.displayName + var webDavUrlName = "${remoteBookUrl}${File.separator}${webDavFile.displayName}" + webDavFileName = URLDecoder.decode(webDavFileName,"utf-8") + webDavUrlName = URLDecoder.decode(webDavUrlName,"utf-8") // 转码 //val trueFileName = String(webDavFileName.toByteArray(Charset.forName("GBK")), Charset.forName("UTF-8")) //val trueUrlName = String(webDavUrlName.toByteArray(Charset.forName("GBK")), Charset.forName("UTF-8")) @@ -86,6 +91,9 @@ object RemoteBookWebDav : RemoteBookManager() { return remoteBooks } + /** + * 下载指定的远程书籍到本地 + */ override suspend fun getRemoteBook(remoteBook: RemoteBook): Uri? { return kotlin.runCatching { AppWebDav.authorization?.let { @@ -98,7 +106,7 @@ object RemoteBookWebDav : RemoteBookManager() { } } }.onFailure { - it.printStackTrace() + throw it }.getOrNull() } @@ -122,7 +130,7 @@ object RemoteBookWebDav : RemoteBookManager() { } } }.onFailure { - return false + throw it } return true } diff --git a/app/src/main/res/layout/activity_remote_book.xml b/app/src/main/res/layout/activity_remote_book.xml index fbbdefb98..35b5353d8 100644 --- a/app/src/main/res/layout/activity_remote_book.xml +++ b/app/src/main/res/layout/activity_remote_book.xml @@ -30,6 +30,15 @@ android:layout_width="match_parent" android:layout_height="match_parent" /> + + @@ -47,10 +56,12 @@ android:layout_margin="16dp" android:gravity="center" android:visibility="gone" - android:text="webDav book文件夹为空" + android:text="webDav books文件夹为空" app:layout_constraintTop_toBottomOf="@+id/title_bar" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" tools:text="Empty" /> + + \ No newline at end of file