diff --git a/app/src/main/java/io/legado/app/data/entities/DictRule.kt b/app/src/main/java/io/legado/app/data/entities/DictRule.kt index 54512a991..5b8f8b520 100644 --- a/app/src/main/java/io/legado/app/data/entities/DictRule.kt +++ b/app/src/main/java/io/legado/app/data/entities/DictRule.kt @@ -24,11 +24,11 @@ data class DictRule( /** * 搜索字典 */ - suspend fun search(word: String): String? { + suspend fun search(word: String): String { val analyzeUrl = AnalyzeUrl(urlRule, key = word) val body = analyzeUrl.getStrResponseAwait().body if (showRule.isBlank()) { - return body + return body!! } val analyzeRule = AnalyzeRule() return analyzeRule.getString(showRule, mContent = body) diff --git a/app/src/main/java/io/legado/app/ui/dict/DictDialog.kt b/app/src/main/java/io/legado/app/ui/dict/DictDialog.kt index d1800a569..ff2fb7f9a 100644 --- a/app/src/main/java/io/legado/app/ui/dict/DictDialog.kt +++ b/app/src/main/java/io/legado/app/ui/dict/DictDialog.kt @@ -60,15 +60,14 @@ class DictDialog() : BaseDialogFragment(R.layout.dialog_dict) { override fun onTabSelected(tab: TabLayout.Tab) { val dictRule = tab.tag as DictRule binding.rotateLoading.visible() - viewModel.dict(dictRule, word!!) + viewModel.dict(dictRule, word!!) { + binding.rotateLoading.inVisible() + binding.tvDict.setHtml(it) + } } }) - viewModel.dictHtmlData.observe(viewLifecycleOwner) { - binding.rotateLoading.inVisible() - binding.tvDict.setHtml(it) - } viewModel.initData { - viewModel.dictRules?.forEach { + it.forEach { binding.tabLayout.addTab(binding.tabLayout.newTab().apply { text = it.name tag = it diff --git a/app/src/main/java/io/legado/app/ui/dict/DictViewModel.kt b/app/src/main/java/io/legado/app/ui/dict/DictViewModel.kt index 4730b3530..10e02c34c 100644 --- a/app/src/main/java/io/legado/app/ui/dict/DictViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/dict/DictViewModel.kt @@ -1,32 +1,35 @@ package io.legado.app.ui.dict import android.app.Application -import androidx.lifecycle.MutableLiveData import io.legado.app.base.BaseViewModel import io.legado.app.data.entities.DictRule import io.legado.app.help.DefaultData -import io.legado.app.utils.toastOnUi +import io.legado.app.help.coroutine.Coroutine class DictViewModel(application: Application) : BaseViewModel(application) { - var dictRules: List? = null - var dictHtmlData: MutableLiveData = MutableLiveData() - fun initData(onSuccess: () -> Unit) { + private var dictJob: Coroutine? = null + + fun initData(onSuccess: (List) -> Unit) { execute { DefaultData.dictRules }.onSuccess { - dictRules = it - onSuccess.invoke() + onSuccess.invoke(it) } } - fun dict(dictRule: DictRule, word: String) { - execute { + fun dict( + dictRule: DictRule, + word: String, + onFinally: (String) -> Unit + ) { + dictJob?.cancel() + dictJob = execute { dictRule.search(word) }.onSuccess { - dictHtmlData.postValue(it) + onFinally.invoke(it) }.onError { - context.toastOnUi(it.localizedMessage) + onFinally.invoke(it.localizedMessage ?: "ERROR") } }