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

This commit is contained in:
Nihility
2024-09-09 14:57:29 +08:00
parent 88cabef11e
commit a3fa748a74
4 changed files with 24 additions and 18 deletions
@@ -20,7 +20,7 @@ object SourceVerificationHelp {
private val waitTime = 1.minutes.inWholeNanoseconds private val waitTime = 1.minutes.inWholeNanoseconds
private fun getKey(source: BaseSource) = getKey(source.getKey()) 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 source
?: throw NoStackTraceException("getVerificationResult parameter source cannot be null") ?: throw NoStackTraceException("getVerificationResult parameter source cannot be null")
val key = getKey(source) clearResult(source.getKey())
CacheManager.delete(key)
if (!useBrowser) { if (!useBrowser) {
appCtx.startActivity<VerificationCodeActivity> { appCtx.startActivity<VerificationCodeActivity> {
putExtra("imageUrl", url) putExtra("imageUrl", url)
putExtra("sourceOrigin", source.getKey()) putExtra("sourceOrigin", source.getKey())
putExtra("sourceName", source.getTag()) putExtra("sourceName", source.getTag())
IntentData.put(key, Thread.currentThread()) IntentData.put(getKey(source), Thread.currentThread())
} }
} else { } else {
startBrowser(source, url, title, true) startBrowser(source, url, title, true)
} }
var waitUserInput = false var waitUserInput = false
while (CacheManager.get(key) == null) { while (getResult(source.getKey()) == null) {
if (!waitUserInput) { if (!waitUserInput) {
AppLog.putDebug("等待返回验证结果...") AppLog.putDebug("等待返回验证结果...")
waitUserInput = true waitUserInput = true
@@ -58,7 +57,7 @@ object SourceVerificationHelp {
LockSupport.parkNanos(this, waitTime) LockSupport.parkNanos(this, waitTime)
} }
return CacheManager.get(key)!!.let { return getResult(source.getKey())!!.let {
it.ifBlank { it.ifBlank {
throw NoStackTraceException("验证结果为空") throw NoStackTraceException("验证结果为空")
} }
@@ -89,9 +88,21 @@ object SourceVerificationHelp {
} }
fun checkResult(key: String) { fun checkResult(sourceKey: String) {
CacheManager.get(key) ?: CacheManager.putMemory(key, "") getResult(sourceKey) ?: setResult(sourceKey, "")
val thread = IntentData.get<Thread>(key) val thread = IntentData.get<Thread>(getKey(sourceKey))
LockSupport.unpark(thread) 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))
}
} }
@@ -57,7 +57,6 @@ class VerificationCodeDialog() : BaseDialogFragment(R.layout.dialog_verification
} }
private var sourceOrigin: String? = null private var sourceOrigin: String? = null
private var key = ""
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?): Unit = binding.run { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?): Unit = binding.run {
initMenu() initMenu()
@@ -65,7 +64,6 @@ class VerificationCodeDialog() : BaseDialogFragment(R.layout.dialog_verification
toolBar.setBackgroundColor(primaryColor) toolBar.setBackgroundColor(primaryColor)
toolBar.subtitle = arguments.getString("sourceName") toolBar.subtitle = arguments.getString("sourceName")
sourceOrigin = arguments.getString("sourceOrigin") sourceOrigin = arguments.getString("sourceOrigin")
key = SourceVerificationHelp.getKey(sourceOrigin!!)
val imageUrl = arguments.getString("imageUrl") ?: return@run val imageUrl = arguments.getString("imageUrl") ?: return@run
loadImage(imageUrl, sourceOrigin) loadImage(imageUrl, sourceOrigin)
verificationCodeImageView.setOnClickListener { verificationCodeImageView.setOnClickListener {
@@ -119,7 +117,7 @@ class VerificationCodeDialog() : BaseDialogFragment(R.layout.dialog_verification
when (item.itemId) { when (item.itemId) {
R.id.menu_ok -> { R.id.menu_ok -> {
val verificationCode = binding.verificationCode.text.toString() val verificationCode = binding.verificationCode.text.toString()
CacheManager.putMemory(key, verificationCode) SourceVerificationHelp.setResult(sourceOrigin!!, verificationCode)
dismiss() dismiss()
} }
} }
@@ -127,7 +125,7 @@ class VerificationCodeDialog() : BaseDialogFragment(R.layout.dialog_verification
} }
override fun onDestroy() { override fun onDestroy() {
SourceVerificationHelp.checkResult(key) SourceVerificationHelp.checkResult(sourceOrigin!!)
super.onDestroy() super.onDestroy()
activity?.finish() activity?.finish()
} }
@@ -158,7 +158,7 @@ class WebViewActivity : VMBaseActivity<ActivityWebViewBinding, WebViewModel>() {
} }
override fun finish() { override fun finish() {
SourceVerificationHelp.checkResult(viewModel.key) SourceVerificationHelp.checkResult(viewModel.sourceOrigin)
super.finish() super.finish()
} }
@@ -31,7 +31,6 @@ class WebViewModel(application: Application) : BaseViewModel(application) {
val headerMap: HashMap<String, String> = hashMapOf() val headerMap: HashMap<String, String> = hashMapOf()
var sourceVerificationEnable: Boolean = false var sourceVerificationEnable: Boolean = false
var sourceOrigin: String = "" var sourceOrigin: String = ""
var key = ""
fun initData( fun initData(
intent: Intent, intent: Intent,
@@ -41,7 +40,6 @@ class WebViewModel(application: Application) : BaseViewModel(application) {
val url = intent.getStringExtra("url") val url = intent.getStringExtra("url")
?: throw NoStackTraceException("url不能为空") ?: throw NoStackTraceException("url不能为空")
sourceOrigin = intent.getStringExtra("sourceOrigin") ?: "" sourceOrigin = intent.getStringExtra("sourceOrigin") ?: ""
key = SourceVerificationHelp.getKey(sourceOrigin)
sourceVerificationEnable = intent.getBooleanExtra("sourceVerificationEnable", false) sourceVerificationEnable = intent.getBooleanExtra("sourceVerificationEnable", false)
val headerMapF = IntentData.get<Map<String, String>>(url) val headerMapF = IntentData.get<Map<String, String>>(url)
val analyzeUrl = AnalyzeUrl(url, headerMapF = headerMapF) val analyzeUrl = AnalyzeUrl(url, headerMapF = headerMapF)
@@ -96,13 +94,12 @@ class WebViewModel(application: Application) : BaseViewModel(application) {
if (sourceVerificationEnable) { if (sourceVerificationEnable) {
val url = intent.getStringExtra("url")!! val url = intent.getStringExtra("url")!!
val source = appDb.bookSourceDao.getBookSource(sourceOrigin) val source = appDb.bookSourceDao.getBookSource(sourceOrigin)
val key = "${sourceOrigin}_verificationResult"
html = AnalyzeUrl( html = AnalyzeUrl(
url, url,
headerMapF = headerMap, headerMapF = headerMap,
source = source source = source
).getStrResponseAwait(useWebView = false).body ).getStrResponseAwait(useWebView = false).body
CacheManager.putMemory(key, html ?: "") SourceVerificationHelp.setResult(sourceOrigin, html ?: "")
} }
}.onSuccess { }.onSuccess {
success.invoke() success.invoke()