This commit is contained in:
kunfei
2023-03-18 22:43:02 +08:00
parent f4f5903dbd
commit 3a368da11b
2 changed files with 62 additions and 49 deletions
@@ -60,7 +60,7 @@ class BookInfoActivity :
private val tocActivityResult = registerForActivityResult(TocActivityResult()) { private val tocActivityResult = registerForActivityResult(TocActivityResult()) {
it?.let { it?.let {
viewModel.bookData.value?.let { book -> viewModel.getBook(false)?.let { book ->
launch { launch {
withContext(IO) { withContext(IO) {
book.durChapterIndex = it.first book.durChapterIndex = it.first
@@ -155,14 +155,14 @@ class BookInfoActivity :
override fun onCompatOptionsItemSelected(item: MenuItem): Boolean { override fun onCompatOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) { when (item.itemId) {
R.id.menu_edit -> { R.id.menu_edit -> {
viewModel.bookData.value?.let { viewModel.getBook()?.let {
infoEditResult.launch { infoEditResult.launch {
putExtra("bookUrl", it.bookUrl) putExtra("bookUrl", it.bookUrl)
} }
} }
} }
R.id.menu_share_it -> { R.id.menu_share_it -> {
viewModel.bookData.value?.let { viewModel.getBook()?.let {
val bookJson = GSON.toJson(it) val bookJson = GSON.toJson(it)
val shareStr = "${it.bookUrl}#$bookJson" val shareStr = "${it.bookUrl}#$bookJson"
shareWithQr(shareStr, it.name) shareWithQr(shareStr, it.name)
@@ -170,7 +170,7 @@ class BookInfoActivity :
} }
R.id.menu_refresh -> { R.id.menu_refresh -> {
upLoading(true) upLoading(true)
viewModel.bookData.value?.let { viewModel.getBook()?.let {
viewModel.refreshBook(it) viewModel.refreshBook(it)
} }
} }
@@ -183,14 +183,14 @@ class BookInfoActivity :
R.id.menu_top -> viewModel.topBook() R.id.menu_top -> viewModel.topBook()
R.id.menu_set_source_variable -> setSourceVariable() R.id.menu_set_source_variable -> setSourceVariable()
R.id.menu_set_book_variable -> setBookVariable() 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) 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) sendToClip(it)
} ?: toastOnUi(R.string.no_book) }
R.id.menu_can_update -> { R.id.menu_can_update -> {
viewModel.bookData.value?.let { viewModel.getBook()?.let {
it.canUpdate = !it.canUpdate it.canUpdate = !it.canUpdate
if (viewModel.inBookshelf) { if (viewModel.inBookshelf) {
viewModel.saveBook(it) viewModel.saveBook(it)
@@ -202,7 +202,7 @@ class BookInfoActivity :
R.id.menu_split_long_chapter -> { R.id.menu_split_long_chapter -> {
upLoading(true) upLoading(true)
tocChanged = true tocChanged = true
viewModel.bookData.value?.let { viewModel.getBook()?.let {
it.setSplitLongChapter(!item.isChecked) it.setSplitLongChapter(!item.isChecked)
viewModel.loadBookInfo(it, false) viewModel.loadBookInfo(it, false)
} }
@@ -211,7 +211,7 @@ class BookInfoActivity :
} }
R.id.menu_delete_alert -> LocalConfig.bookInfoDeleteAlert = !item.isChecked R.id.menu_delete_alert -> LocalConfig.bookInfoDeleteAlert = !item.isChecked
R.id.menu_upload -> { R.id.menu_upload -> {
viewModel.bookData.value?.let { book -> viewModel.getBook()?.let { book ->
book.getRemoteUrl()?.let { book.getRemoteUrl()?.let {
alert(R.string.draw, R.string.sure_upload) { alert(R.string.draw, R.string.sure_upload) {
okButton { okButton {
@@ -332,20 +332,20 @@ class BookInfoActivity :
private fun initViewEvent() = binding.run { private fun initViewEvent() = binding.run {
ivCover.setOnClickListener { ivCover.setOnClickListener {
viewModel.bookData.value?.let { viewModel.getBook()?.let {
showDialogFragment( showDialogFragment(
ChangeCoverDialog(it.name, it.author) ChangeCoverDialog(it.name, it.author)
) )
} ?: toastOnUi("Book is null") }
} }
ivCover.setOnLongClickListener { ivCover.setOnLongClickListener {
viewModel.bookData.value?.getDisplayCover()?.let { path -> viewModel.getBook()?.getDisplayCover()?.let { path ->
showDialogFragment(PhotoDialog(path)) showDialogFragment(PhotoDialog(path))
} }
true true
} }
tvRead.setOnClickListener { tvRead.setOnClickListener {
viewModel.bookData.value?.let { book -> viewModel.getBook()?.let { book ->
if (book.isWebFile) { if (book.isWebFile) {
showWebFileDownloadAlert { showWebFileDownloadAlert {
readBook(it) readBook(it)
@@ -353,10 +353,10 @@ class BookInfoActivity :
} else { } else {
readBook(book) readBook(book)
} }
} ?: toastOnUi("Book is null") }
} }
tvShelf.setOnClickListener { tvShelf.setOnClickListener {
viewModel.bookData.value?.let { book -> viewModel.getBook()?.let { book ->
if (viewModel.inBookshelf) { if (viewModel.inBookshelf) {
deleteBook() deleteBook()
} else { } else {
@@ -371,21 +371,22 @@ class BookInfoActivity :
} }
} }
tvOrigin.setOnClickListener { tvOrigin.setOnClickListener {
viewModel.bookData.value?.let { book -> viewModel.getBook()?.let { book ->
if (book.isLocal) return@let if (book.isLocal) return@let
startActivity<BookSourceEditActivity> { startActivity<BookSourceEditActivity> {
putExtra("sourceUrl", book.origin) putExtra("sourceUrl", book.origin)
} }
} ?: toastOnUi("Book is null") }
} }
tvChangeSource.setOnClickListener { tvChangeSource.setOnClickListener {
viewModel.bookData.value?.let { book -> viewModel.getBook()?.let { book ->
showDialogFragment(ChangeBookSourceDialog(book.name, book.author)) showDialogFragment(ChangeBookSourceDialog(book.name, book.author))
} ?: toastOnUi("Book is null") }
} }
tvTocView.setOnClickListener { tvTocView.setOnClickListener {
viewModel.getBook()?.let { book ->
if (!viewModel.inBookshelf) { if (!viewModel.inBookshelf) {
viewModel.saveBook(viewModel.bookData.value) { viewModel.saveBook(book) {
viewModel.saveChapterList { viewModel.saveChapterList {
openChapterList() openChapterList()
} }
@@ -394,21 +395,26 @@ class BookInfoActivity :
openChapterList() openChapterList()
} }
} }
}
tvChangeGroup.setOnClickListener { tvChangeGroup.setOnClickListener {
viewModel.bookData.value?.let { viewModel.getBook()?.let {
showDialogFragment( showDialogFragment(
GroupSelectDialog(it.group) GroupSelectDialog(it.group)
) )
} ?: toastOnUi("Book is null") }
} }
tvAuthor.setOnClickListener { tvAuthor.setOnClickListener {
viewModel.getBook(false)?.let { book ->
startActivity<SearchActivity> { startActivity<SearchActivity> {
putExtra("key", viewModel.bookData.value?.author) putExtra("key", book.author)
}
} }
} }
tvName.setOnClickListener { tvName.setOnClickListener {
viewModel.getBook(false)?.let { book ->
startActivity<SearchActivity> { startActivity<SearchActivity> {
putExtra("key", viewModel.bookData.value?.name) putExtra("key", book.name)
}
} }
} }
} }
@@ -440,24 +446,23 @@ class BookInfoActivity :
toastOnUi("书源不存在") toastOnUi("书源不存在")
return@launch return@launch
} }
val book = viewModel.bookData.value val book = viewModel.getBook() ?: return@launch
if (book == null) {
toastOnUi("书籍不存在")
return@launch
}
val variable = withContext(IO) { book.getCustomVariable() } val variable = withContext(IO) { book.getCustomVariable() }
val comment = source.getDisplayVariableComment("""书籍变量可在js中通过book.getVariable("custom")获取""") val comment =
showDialogFragment(VariableDialog( source.getDisplayVariableComment("""书籍变量可在js中通过book.getVariable("custom")获取""")
showDialogFragment(
VariableDialog(
getString(R.string.set_book_variable), getString(R.string.set_book_variable),
book.bookUrl, book.bookUrl,
variable, variable,
comment comment
)) )
)
} }
} }
override fun setVariable(key: String, variable: String?) { override fun setVariable(key: String, variable: String?) {
when(key) { when (key) {
viewModel.bookSource?.getKey() -> viewModel.bookSource?.setVariable(variable) viewModel.bookSource?.getKey() -> viewModel.bookSource?.setVariable(variable)
viewModel.bookData.value?.bookUrl -> viewModel.bookData.value?.let { viewModel.bookData.value?.bookUrl -> viewModel.bookData.value?.let {
it.putCustomVariable(variable) it.putCustomVariable(variable)
@@ -468,7 +473,7 @@ class BookInfoActivity :
@SuppressLint("InflateParams") @SuppressLint("InflateParams")
private fun deleteBook() { private fun deleteBook() {
viewModel.bookData.value?.let { viewModel.getBook()?.let {
if (LocalConfig.bookInfoDeleteAlert) { if (LocalConfig.bookInfoDeleteAlert) {
alert( alert(
titleResource = R.string.draw, titleResource = R.string.draw,
@@ -509,7 +514,7 @@ class BookInfoActivity :
toastOnUi(R.string.chapter_list_empty) toastOnUi(R.string.chapter_list_empty)
return return
} }
viewModel.bookData.value?.let { viewModel.getBook()?.let {
tocActivityResult.launch(it.bookUrl) tocActivityResult.launch(it.bookUrl)
} }
} }
@@ -630,7 +635,7 @@ class BookInfoActivity :
override fun upGroup(requestCode: Int, groupId: Long) { override fun upGroup(requestCode: Int, groupId: Long) {
upGroup(groupId) upGroup(groupId)
viewModel.bookData.value?.let { book -> viewModel.getBook()?.let { book ->
book.group = groupId book.group = groupId
if (viewModel.inBookshelf) { if (viewModel.inBookshelf) {
viewModel.saveBook(book) viewModel.saveBook(book)
@@ -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) { fun delBook(deleteOriginal: Boolean = false, success: (() -> Unit)? = null) {
execute { execute {
bookData.value?.let { bookData.value?.let {