Jelajahi Sumber

收拢验证结果获取与设置逻辑

Nihility 2 tahun lalu
induk
melakukan
d6b22d1af5

+ 20 - 9
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<VerificationCodeActivity> {
                 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<Thread>(key)
+    fun checkResult(sourceKey: String) {
+        getResult(sourceKey) ?: setResult(sourceKey, "")
+        val thread = IntentData.get<Thread>(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))
+    }
 }

+ 2 - 4
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()
     }

+ 1 - 1
app/src/main/java/io/legado/app/ui/browser/WebViewActivity.kt

@@ -158,7 +158,7 @@ class WebViewActivity : VMBaseActivity<ActivityWebViewBinding, WebViewModel>() {
     }
 
     override fun finish() {
-        SourceVerificationHelp.checkResult(viewModel.key)
+        SourceVerificationHelp.checkResult(viewModel.sourceOrigin)
         super.finish()
     }
 

+ 1 - 4
app/src/main/java/io/legado/app/ui/browser/WebViewModel.kt

@@ -31,7 +31,6 @@ class WebViewModel(application: Application) : BaseViewModel(application) {
     val headerMap: HashMap<String, String> = 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<Map<String, String>>(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()