From 2e4c9a7f2522183f9ad6a945904af431998d32e8 Mon Sep 17 00:00:00 2001 From: kunfei Date: Mon, 20 Feb 2023 13:11:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legado/app/data/entities/DictRule.kt | 4 +-- .../java/io/legado/app/ui/dict/DictDialog.kt | 11 ++++---- .../io/legado/app/ui/dict/DictViewModel.kt | 25 +++++++++++-------- 3 files changed, 21 insertions(+), 19 deletions(-) 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") } }