This commit is contained in:
kunfei
2023-03-18 22:43:02 +08:00
parent d0ae59490b
commit 56752a6b26
2 changed files with 62 additions and 49 deletions
@@ -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<BookSourceEditActivity> {
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<SearchActivity> {
putExtra("key", viewModel.bookData.value?.author)
viewModel.getBook(false)?.let { book ->
startActivity<SearchActivity> {
putExtra("key", book.author)
}
}
}
tvName.setOnClickListener {
startActivity<SearchActivity> {
putExtra("key", viewModel.bookData.value?.name)
viewModel.getBook(false)?.let { book ->
startActivity<SearchActivity> {
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)
@@ -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 {