pull/2533/head
kunfei 2 years ago
parent 5bfb451c11
commit 6f0df97bc7
  1. 62
      app/src/main/java/io/legado/app/ui/association/AddToBookshelfDialog.kt

@ -1,12 +1,24 @@
package io.legado.app.ui.association package io.legado.app.ui.association
import android.app.Application
import android.content.DialogInterface import android.content.DialogInterface
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.viewModels
import androidx.lifecycle.MutableLiveData
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.BaseDialogFragment import io.legado.app.base.BaseDialogFragment
import io.legado.app.base.BaseViewModel
import io.legado.app.data.appDb
import io.legado.app.data.entities.Book
import io.legado.app.databinding.DialogAddToBookshelfBinding
import io.legado.app.exception.NoStackTraceException
import io.legado.app.model.webBook.WebBook
import io.legado.app.utils.NetworkUtils
import io.legado.app.utils.setLayout import io.legado.app.utils.setLayout
import io.legado.app.utils.toastOnUi
import io.legado.app.utils.viewbindingdelegate.viewBinding
class AddToBookshelfDialog() : BaseDialogFragment(R.layout.dialog_add_to_bookshelf) { class AddToBookshelfDialog() : BaseDialogFragment(R.layout.dialog_add_to_bookshelf) {
@ -17,6 +29,9 @@ class AddToBookshelfDialog() : BaseDialogFragment(R.layout.dialog_add_to_bookshe
} }
} }
val binding by viewBinding(DialogAddToBookshelfBinding::bind)
val viewModel by viewModels<ViewModel>()
override fun onStart() { override fun onStart() {
super.onStart() super.onStart()
setLayout(0.9f, ViewGroup.LayoutParams.WRAP_CONTENT) setLayout(0.9f, ViewGroup.LayoutParams.WRAP_CONTENT)
@ -32,9 +47,54 @@ class AddToBookshelfDialog() : BaseDialogFragment(R.layout.dialog_add_to_bookshe
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
val bookUrl = arguments?.getString("bookUrl") val bookUrl = arguments?.getString("bookUrl")
if (bookUrl.isNullOrBlank()) { if (bookUrl.isNullOrBlank()) {
toastOnUi("url不能为空")
dismiss()
return return
} }
viewModel.load(bookUrl) {
}
}
class ViewModel(application: Application) : BaseViewModel(application) {
val loadStateLiveData = MutableLiveData<Boolean>()
fun load(bookUrl: String, success: (book: Book) -> Unit) {
execute {
val sources = appDb.bookSourceDao.hasBookUrlPattern
appDb.bookDao.getBook(bookUrl)?.let {
throw NoStackTraceException("${it.name} 已在书架")
}
val baseUrl = NetworkUtils.getBaseUrl(bookUrl)
?: throw NoStackTraceException("书籍地址格式不对")
var source = appDb.bookSourceDao.getBookSource(baseUrl)
if (source == null) {
sources.forEach { bookSource ->
if (bookUrl.matches(bookSource.bookUrlPattern!!.toRegex())) {
source = bookSource
return@forEach
}
}
}
source?.let { bookSource ->
val book = Book(
bookUrl = bookUrl,
origin = bookSource.bookSourceUrl,
originName = bookSource.bookSourceName
)
WebBook.getBookInfoAwait(bookSource, book)
book.order = appDb.bookDao.minOrder - 1
return@execute book
} ?: throw NoStackTraceException("未找到匹配书源")
}.onSuccess {
success.invoke(it)
}.onStart {
loadStateLiveData.postValue(true)
}.onFinally {
loadStateLiveData.postValue(false)
}
}
} }

Loading…
Cancel
Save