From a3fa748a7451c5e84fe0b86b23d69c2b20df04b4 Mon Sep 17 00:00:00 2001 From: Nihility Date: Mon, 9 Sep 2024 14:46:22 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B6=E6=8B=A2=E9=AA=8C=E8=AF=81=E7=BB=93?= =?UTF-8?q?=E6=9E=9C=E8=8E=B7=E5=8F=96=E4=B8=8E=E8=AE=BE=E7=BD=AE=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/help/source/SourceVerificationHelp.kt | 29 +++++++++++++------ .../ui/association/VerificationCodeDialog.kt | 6 ++-- .../legado/app/ui/browser/WebViewActivity.kt | 2 +- .../io/legado/app/ui/browser/WebViewModel.kt | 5 +--- 4 files changed, 24 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/io/legado/app/help/source/SourceVerificationHelp.kt b/app/src/main/java/io/legado/app/help/source/SourceVerificationHelp.kt index c7b643222..c4f53dc9a 100644 --- a/app/src/main/java/io/legado/app/help/source/SourceVerificationHelp.kt +++ b/app/src/main/java/io/legado/app/help/source/SourceVerificationHelp.kt @@ -20,7 +20,7 @@ object SourceVerificationHelp { private val waitTime = 1.minutes.inWholeNanoseconds private fun getKey(source: BaseSource) = getKey(source.getKey()) - fun getKey(sourceKey: String) = "${sourceKey}_verificationResult" + private fun getKey(sourceKey: String) = "${sourceKey}_verificationResult" /** * 获取书源验证结果 @@ -35,22 +35,21 @@ object SourceVerificationHelp { source ?: throw NoStackTraceException("getVerificationResult parameter source cannot be null") - val key = getKey(source) - CacheManager.delete(key) + clearResult(source.getKey()) if (!useBrowser) { appCtx.startActivity { putExtra("imageUrl", url) putExtra("sourceOrigin", source.getKey()) putExtra("sourceName", source.getTag()) - IntentData.put(key, Thread.currentThread()) + IntentData.put(getKey(source), Thread.currentThread()) } } else { startBrowser(source, url, title, true) } var waitUserInput = false - while (CacheManager.get(key) == null) { + while (getResult(source.getKey()) == null) { if (!waitUserInput) { AppLog.putDebug("等待返回验证结果...") waitUserInput = true @@ -58,7 +57,7 @@ object SourceVerificationHelp { LockSupport.parkNanos(this, waitTime) } - return CacheManager.get(key)!!.let { + return getResult(source.getKey())!!.let { it.ifBlank { throw NoStackTraceException("验证结果为空") } @@ -89,9 +88,21 @@ object SourceVerificationHelp { } - fun checkResult(key: String) { - CacheManager.get(key) ?: CacheManager.putMemory(key, "") - val thread = IntentData.get(key) + fun checkResult(sourceKey: String) { + getResult(sourceKey) ?: setResult(sourceKey, "") + val thread = IntentData.get(getKey(sourceKey)) LockSupport.unpark(thread) } + + fun setResult(sourceKey: String, result: String?) { + CacheManager.putMemory(getKey(sourceKey), result ?: "") + } + + fun getResult(sourceKey: String): String? { + return CacheManager.get(getKey(sourceKey)) + } + + fun clearResult(sourceKey: String) { + CacheManager.delete(getKey(sourceKey)) + } } diff --git a/app/src/main/java/io/legado/app/ui/association/VerificationCodeDialog.kt b/app/src/main/java/io/legado/app/ui/association/VerificationCodeDialog.kt index 8190841e9..14953bfd4 100644 --- a/app/src/main/java/io/legado/app/ui/association/VerificationCodeDialog.kt +++ b/app/src/main/java/io/legado/app/ui/association/VerificationCodeDialog.kt @@ -57,7 +57,6 @@ class VerificationCodeDialog() : BaseDialogFragment(R.layout.dialog_verification } private var sourceOrigin: String? = null - private var key = "" override fun onFragmentCreated(view: View, savedInstanceState: Bundle?): Unit = binding.run { initMenu() @@ -65,7 +64,6 @@ class VerificationCodeDialog() : BaseDialogFragment(R.layout.dialog_verification toolBar.setBackgroundColor(primaryColor) toolBar.subtitle = arguments.getString("sourceName") sourceOrigin = arguments.getString("sourceOrigin") - key = SourceVerificationHelp.getKey(sourceOrigin!!) val imageUrl = arguments.getString("imageUrl") ?: return@run loadImage(imageUrl, sourceOrigin) verificationCodeImageView.setOnClickListener { @@ -119,7 +117,7 @@ class VerificationCodeDialog() : BaseDialogFragment(R.layout.dialog_verification when (item.itemId) { R.id.menu_ok -> { val verificationCode = binding.verificationCode.text.toString() - CacheManager.putMemory(key, verificationCode) + SourceVerificationHelp.setResult(sourceOrigin!!, verificationCode) dismiss() } } @@ -127,7 +125,7 @@ class VerificationCodeDialog() : BaseDialogFragment(R.layout.dialog_verification } override fun onDestroy() { - SourceVerificationHelp.checkResult(key) + SourceVerificationHelp.checkResult(sourceOrigin!!) super.onDestroy() activity?.finish() } diff --git a/app/src/main/java/io/legado/app/ui/browser/WebViewActivity.kt b/app/src/main/java/io/legado/app/ui/browser/WebViewActivity.kt index 57b026fb7..5833f0099 100644 --- a/app/src/main/java/io/legado/app/ui/browser/WebViewActivity.kt +++ b/app/src/main/java/io/legado/app/ui/browser/WebViewActivity.kt @@ -158,7 +158,7 @@ class WebViewActivity : VMBaseActivity() { } override fun finish() { - SourceVerificationHelp.checkResult(viewModel.key) + SourceVerificationHelp.checkResult(viewModel.sourceOrigin) super.finish() } diff --git a/app/src/main/java/io/legado/app/ui/browser/WebViewModel.kt b/app/src/main/java/io/legado/app/ui/browser/WebViewModel.kt index 7c8f6f77b..99819e5dd 100644 --- a/app/src/main/java/io/legado/app/ui/browser/WebViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/browser/WebViewModel.kt @@ -31,7 +31,6 @@ class WebViewModel(application: Application) : BaseViewModel(application) { val headerMap: HashMap = hashMapOf() var sourceVerificationEnable: Boolean = false var sourceOrigin: String = "" - var key = "" fun initData( intent: Intent, @@ -41,7 +40,6 @@ class WebViewModel(application: Application) : BaseViewModel(application) { val url = intent.getStringExtra("url") ?: throw NoStackTraceException("url不能为空") sourceOrigin = intent.getStringExtra("sourceOrigin") ?: "" - key = SourceVerificationHelp.getKey(sourceOrigin) sourceVerificationEnable = intent.getBooleanExtra("sourceVerificationEnable", false) val headerMapF = IntentData.get>(url) val analyzeUrl = AnalyzeUrl(url, headerMapF = headerMapF) @@ -96,13 +94,12 @@ class WebViewModel(application: Application) : BaseViewModel(application) { if (sourceVerificationEnable) { val url = intent.getStringExtra("url")!! val source = appDb.bookSourceDao.getBookSource(sourceOrigin) - val key = "${sourceOrigin}_verificationResult" html = AnalyzeUrl( url, headerMapF = headerMap, source = source ).getStrResponseAwait(useWebView = false).body - CacheManager.putMemory(key, html ?: "") + SourceVerificationHelp.setResult(sourceOrigin, html ?: "") } }.onSuccess { success.invoke()