From 56752a6b266d86e1ccb702b059f24c998652a867 Mon Sep 17 00:00:00 2001 From: kunfei Date: Sat, 18 Mar 2023 22:43:02 +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/info/BookInfoActivity.kt | 103 +++++++++--------- .../app/ui/book/info/BookInfoViewModel.kt | 8 ++ 2 files changed, 62 insertions(+), 49 deletions(-) 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 38bc1919d..91c2d07ae 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 @@ -60,7 +60,7 @@ class BookInfoActivity : private val tocActivityResult = registerForActivityResult(TocActivityResult()) { it?.let { - viewModel.bookData.value?.let { book -> + viewModel.getBook(false)?.let { book -> launch { withContext(IO) { book.durChapterIndex = it.first @@ -155,14 +155,14 @@ class BookInfoActivity : override fun onCompatOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { R.id.menu_edit -> { - viewModel.bookData.value?.let { + viewModel.getBook()?.let { infoEditResult.launch { putExtra("bookUrl", it.bookUrl) } } } R.id.menu_share_it -> { - viewModel.bookData.value?.let { + viewModel.getBook()?.let { val bookJson = GSON.toJson(it) val shareStr = "${it.bookUrl}#$bookJson" shareWithQr(shareStr, it.name) @@ -170,7 +170,7 @@ class BookInfoActivity : } R.id.menu_refresh -> { upLoading(true) - viewModel.bookData.value?.let { + viewModel.getBook()?.let { viewModel.refreshBook(it) } } @@ -183,14 +183,14 @@ class BookInfoActivity : R.id.menu_top -> viewModel.topBook() R.id.menu_set_source_variable -> setSourceVariable() R.id.menu_set_book_variable -> setBookVariable() - R.id.menu_copy_book_url -> viewModel.bookData.value?.bookUrl?.let { + R.id.menu_copy_book_url -> viewModel.getBook()?.bookUrl?.let { sendToClip(it) - } ?: toastOnUi(R.string.no_book) - R.id.menu_copy_toc_url -> viewModel.bookData.value?.tocUrl?.let { + } + R.id.menu_copy_toc_url -> viewModel.getBook()?.tocUrl?.let { sendToClip(it) - } ?: toastOnUi(R.string.no_book) + } R.id.menu_can_update -> { - viewModel.bookData.value?.let { + viewModel.getBook()?.let { it.canUpdate = !it.canUpdate if (viewModel.inBookshelf) { viewModel.saveBook(it) @@ -202,7 +202,7 @@ class BookInfoActivity : R.id.menu_split_long_chapter -> { upLoading(true) tocChanged = true - viewModel.bookData.value?.let { + viewModel.getBook()?.let { it.setSplitLongChapter(!item.isChecked) viewModel.loadBookInfo(it, false) } @@ -211,7 +211,7 @@ class BookInfoActivity : } R.id.menu_delete_alert -> LocalConfig.bookInfoDeleteAlert = !item.isChecked R.id.menu_upload -> { - viewModel.bookData.value?.let { book -> + viewModel.getBook()?.let { book -> book.getRemoteUrl()?.let { alert(R.string.draw, R.string.sure_upload) { okButton { @@ -332,20 +332,20 @@ class BookInfoActivity : private fun initViewEvent() = binding.run { ivCover.setOnClickListener { - viewModel.bookData.value?.let { + viewModel.getBook()?.let { showDialogFragment( ChangeCoverDialog(it.name, it.author) ) - } ?: toastOnUi("Book is null") + } } ivCover.setOnLongClickListener { - viewModel.bookData.value?.getDisplayCover()?.let { path -> + viewModel.getBook()?.getDisplayCover()?.let { path -> showDialogFragment(PhotoDialog(path)) } true } tvRead.setOnClickListener { - viewModel.bookData.value?.let { book -> + viewModel.getBook()?.let { book -> if (book.isWebFile) { showWebFileDownloadAlert { readBook(it) @@ -353,10 +353,10 @@ class BookInfoActivity : } else { readBook(book) } - } ?: toastOnUi("Book is null") + } } tvShelf.setOnClickListener { - viewModel.bookData.value?.let { book -> + viewModel.getBook()?.let { book -> if (viewModel.inBookshelf) { deleteBook() } else { @@ -371,44 +371,50 @@ class BookInfoActivity : } } tvOrigin.setOnClickListener { - viewModel.bookData.value?.let { book -> + viewModel.getBook()?.let { book -> if (book.isLocal) return@let startActivity { putExtra("sourceUrl", book.origin) } - } ?: toastOnUi("Book is null") + } } tvChangeSource.setOnClickListener { - viewModel.bookData.value?.let { book -> + viewModel.getBook()?.let { book -> showDialogFragment(ChangeBookSourceDialog(book.name, book.author)) - } ?: toastOnUi("Book is null") + } } tvTocView.setOnClickListener { - if (!viewModel.inBookshelf) { - viewModel.saveBook(viewModel.bookData.value) { - viewModel.saveChapterList { - openChapterList() + viewModel.getBook()?.let { book -> + if (!viewModel.inBookshelf) { + viewModel.saveBook(book) { + viewModel.saveChapterList { + openChapterList() + } } + } else { + openChapterList() } - } else { - openChapterList() } } tvChangeGroup.setOnClickListener { - viewModel.bookData.value?.let { + viewModel.getBook()?.let { showDialogFragment( GroupSelectDialog(it.group) ) - } ?: toastOnUi("Book is null") + } } tvAuthor.setOnClickListener { - startActivity { - putExtra("key", viewModel.bookData.value?.author) + viewModel.getBook(false)?.let { book -> + startActivity { + putExtra("key", book.author) + } } } tvName.setOnClickListener { - startActivity { - putExtra("key", viewModel.bookData.value?.name) + viewModel.getBook(false)?.let { book -> + startActivity { + putExtra("key", book.name) + } } } } @@ -440,24 +446,23 @@ class BookInfoActivity : toastOnUi("书源不存在") return@launch } - val book = viewModel.bookData.value - if (book == null) { - toastOnUi("书籍不存在") - return@launch - } + val book = viewModel.getBook() ?: return@launch val variable = withContext(IO) { book.getCustomVariable() } - val comment = source.getDisplayVariableComment("""书籍变量可在js中通过book.getVariable("custom")获取""") - showDialogFragment(VariableDialog( - getString(R.string.set_book_variable), - book.bookUrl, - variable, - comment - )) + val comment = + source.getDisplayVariableComment("""书籍变量可在js中通过book.getVariable("custom")获取""") + showDialogFragment( + VariableDialog( + getString(R.string.set_book_variable), + book.bookUrl, + variable, + comment + ) + ) } } override fun setVariable(key: String, variable: String?) { - when(key) { + when (key) { viewModel.bookSource?.getKey() -> viewModel.bookSource?.setVariable(variable) viewModel.bookData.value?.bookUrl -> viewModel.bookData.value?.let { it.putCustomVariable(variable) @@ -468,7 +473,7 @@ class BookInfoActivity : @SuppressLint("InflateParams") private fun deleteBook() { - viewModel.bookData.value?.let { + viewModel.getBook()?.let { if (LocalConfig.bookInfoDeleteAlert) { alert( titleResource = R.string.draw, @@ -509,7 +514,7 @@ class BookInfoActivity : toastOnUi(R.string.chapter_list_empty) return } - viewModel.bookData.value?.let { + viewModel.getBook()?.let { tocActivityResult.launch(it.bookUrl) } } @@ -630,7 +635,7 @@ class BookInfoActivity : override fun upGroup(requestCode: Int, groupId: Long) { upGroup(groupId) - viewModel.bookData.value?.let { book -> + viewModel.getBook()?.let { book -> book.group = groupId if (viewModel.inBookshelf) { viewModel.saveBook(book) 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 31b363b26..bd5dde10d 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 @@ -407,6 +407,14 @@ class BookInfoViewModel(application: Application) : BaseViewModel(application) { } } + fun getBook(toastNull: Boolean = true): Book? { + val book = bookData.value + if (toastNull && book == null) { + context.toastOnUi("book is null") + } + return book + } + fun delBook(deleteOriginal: Boolean = false, success: (() -> Unit)? = null) { execute { bookData.value?.let {