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

This commit is contained in:
Nihility
2024-09-09 14:46:22 +08:00
parent 88cabef11e
commit a3fa748a74
4 changed files with 24 additions and 18 deletions

View File

@@ -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))
}
}

View File

@@ -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()
}

View File

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

View File

@@ -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()