From 2e7831de8a6f869fc224a2c29bbb31f536bea18e Mon Sep 17 00:00:00 2001 From: Xwite <1797350009@qq.com> Date: Wed, 8 Mar 2023 07:11:06 +0800 Subject: [PATCH] feat(webFileImport): add waitDialog close #2847 --- .../main/java/io/legado/app/model/Debug.kt | 4 ++-- .../app/ui/book/info/BookInfoActivity.kt | 19 +++++++++++++++++-- .../app/ui/book/info/BookInfoViewModel.kt | 11 ++++++++++- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/io/legado/app/model/Debug.kt b/app/src/main/java/io/legado/app/model/Debug.kt index 2c4e4eaa3..bfd4480b9 100644 --- a/app/src/main/java/io/legado/app/model/Debug.kt +++ b/app/src/main/java/io/legado/app/model/Debug.kt @@ -2,8 +2,8 @@ package io.legado.app.model import android.annotation.SuppressLint import io.legado.app.constant.AppPattern -import io.legado.app.constant.BookType import io.legado.app.data.entities.* +import io.legado.app.help.book.isWebFile import io.legado.app.help.coroutine.CompositeCoroutine import io.legado.app.help.source.sortUrls import io.legado.app.model.rss.Rss @@ -240,7 +240,7 @@ object Debug { .onSuccess { log(debugSource, "︽详情页解析完成") log(debugSource, showTime = false) - if (book.type and BookType.webFile == 0) { + if (!book.isWebFile) { tocDebug(scope, bookSource, book) } else { log(debugSource, "≡文件类书源跳过解析目录", state = 1000) 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 2ff58fbda..e5691959e 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 @@ -52,7 +52,8 @@ class BookInfoActivity : VMBaseActivity(toolBarTheme = Theme.Dark), GroupSelectDialog.CallBack, ChangeBookSourceDialog.CallBack, - ChangeCoverDialog.CallBack { + ChangeCoverDialog.CallBack, + BookInfoViewModel.CallBack { private val tocActivityResult = registerForActivityResult(TocActivityResult()) { it?.let { @@ -93,6 +94,7 @@ class BookInfoActivity : } } private var tocChanged = false + private val waitDialog by lazy { WaitDialog(this) } override val binding by viewBinding(ActivityBookInfoBinding::inflate) override val viewModel by viewModels() @@ -106,6 +108,7 @@ class BookInfoActivity : binding.flAction.setBackgroundColor(bottomBackground) binding.tvShelf.setTextColor(getPrimaryTextColor(ColorUtils.isColorLight(bottomBackground))) binding.tvToc.text = getString(R.string.toc_s, getString(R.string.loading)) + viewModel.callBack = this viewModel.bookData.observe(this) { showBook(it) } viewModel.chapterListData.observe(this) { upLoading(false, it) } //viewModel.webFileData.observe(this) { showWebFileDownloadAlert() } @@ -223,7 +226,6 @@ class BookInfoActivity : bookWebDav: RemoteBookWebDav? = AppWebDav.defaultBookWebDav ) { launch { - val waitDialog = WaitDialog(this@BookInfoActivity) waitDialog.setText("上传中.....") waitDialog.show() try { @@ -501,6 +503,7 @@ class BookInfoActivity : alert(titleResource = R.string.download_and_import_file) { items(it) { _, webFile, _ -> if (webFile.isSupported) { + /* import */ viewModel.importOrDownloadWebFile(webFile) { onClick?.invoke(it) } @@ -510,6 +513,7 @@ class BookInfoActivity : message = getString(R.string.file_not_supported, webFile.name) ) { neutralButton(R.string.open_fun) { + /* download only */ viewModel.importOrDownloadWebFile(webFile) { uri -> openFileUri(uri, "*/*") } @@ -584,4 +588,15 @@ class BookInfoActivity : } } + override fun onWebFileProcessFinally() { + waitDialog.dismiss() + } + + override fun onWebFileProcessStart() { + waitDialog.run { + setText("Loading.....") + show() + } + } + } \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt b/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt index f21389256..9ea491077 100644 --- a/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt @@ -40,6 +40,7 @@ class BookInfoViewModel(application: Application) : BaseViewModel(application) { var inBookshelf = false var bookSource: BookSource? = null private var changeSourceCoroutine: Coroutine<*>? = null + var callBack: CallBack? = null fun initData(intent: Intent) { execute { @@ -273,6 +274,7 @@ class BookInfoViewModel(application: Application) : BaseViewModel(application) { fun importOrDownloadWebFile(webFile: WebFile, success: ((T) -> Unit)?) { bookSource ?: return execute { + callBack?.onWebFileProcessStart() if (webFile.isSupported) { val book = LocalBook.importFileOnLine(webFile.url, webFile.name, bookSource) changeToLocalBook(book) @@ -283,7 +285,9 @@ class BookInfoViewModel(application: Application) : BaseViewModel(application) { success?.invoke(it as T) }.onError { context.toastOnUi("ImportWebFileError\n${it.localizedMessage}") - } + }.onFinally { + callBack?.onWebFileProcessFinally() + } } fun changeTo(source: BookSource, book: Book, toc: List) { @@ -419,4 +423,9 @@ class BookInfoViewModel(application: Application) : BaseViewModel(application) { } } + interface CallBack { + fun onWebFileProcessStart() + fun onWebFileProcessFinally() + } + }