mirror of
https://github.com/gedoor/legado.git
synced 2025-08-10 00:52:30 +00:00
收拢验证结果获取与设置逻辑
This commit is contained in:
@@ -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))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
@@ -158,7 +158,7 @@ class WebViewActivity : VMBaseActivity<ActivityWebViewBinding, WebViewModel>() {
|
||||
}
|
||||
|
||||
override fun finish() {
|
||||
SourceVerificationHelp.checkResult(viewModel.key)
|
||||
SourceVerificationHelp.checkResult(viewModel.sourceOrigin)
|
||||
super.finish()
|
||||
}
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user