优化
This commit is contained in:
@@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user