From 88cabef11e876a80c840166b437d8e02a0e3515f Mon Sep 17 00:00:00 2001 From: Nihility Date: Sun, 8 Sep 2024 16:13:29 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E7=A7=BB=E9=99=A4=E5=86=97=E4=BD=99?= =?UTF-8?q?=E5=8F=98=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/model/analyzeRule/AnalyzeRule.kt | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt index 9431fe7ef..24bcd37ac 100644 --- a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt +++ b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt @@ -63,10 +63,6 @@ class AnalyzeRule( private var analyzeByJSoup: AnalyzeByJSoup? = null private var analyzeByJSonPath: AnalyzeByJSonPath? = null - private var objectChangedXP = false - private var objectChangedJS = false - private var objectChangedJP = false - private val stringRuleCache = hashMapOf>() private var coroutineContext: CoroutineContext = EmptyCoroutineContext @@ -80,9 +76,9 @@ class AnalyzeRule( else -> content.toString().isJson() } setBaseUrl(baseUrl) - objectChangedXP = true - objectChangedJS = true - objectChangedJP = true + analyzeByXPath = null + analyzeByJSoup = null + analyzeByJSonPath = null return this } @@ -114,9 +110,8 @@ class AnalyzeRule( return if (o != content) { AnalyzeByXPath(o) } else { - if (analyzeByXPath == null || objectChangedXP) { + if (analyzeByXPath == null) { analyzeByXPath = AnalyzeByXPath(content!!) - objectChangedXP = false } analyzeByXPath!! } @@ -129,9 +124,8 @@ class AnalyzeRule( return if (o != content) { AnalyzeByJSoup(o) } else { - if (analyzeByJSoup == null || objectChangedJS) { + if (analyzeByJSoup == null) { analyzeByJSoup = AnalyzeByJSoup(content!!) - objectChangedJS = false } analyzeByJSoup!! } @@ -144,9 +138,8 @@ class AnalyzeRule( return if (o != content) { AnalyzeByJSonPath(o) } else { - if (analyzeByJSonPath == null || objectChangedJP) { + if (analyzeByJSonPath == null) { analyzeByJSonPath = AnalyzeByJSonPath(content!!) - objectChangedJP = false } analyzeByJSonPath!! } From a3fa748a7451c5e84fe0b86b23d69c2b20df04b4 Mon Sep 17 00:00:00 2001 From: Nihility Date: Mon, 9 Sep 2024 14:46:22 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E6=94=B6=E6=8B=A2=E9=AA=8C=E8=AF=81?= =?UTF-8?q?=E7=BB=93=E6=9E=9C=E8=8E=B7=E5=8F=96=E4=B8=8E=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E9=80=BB=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() From 8bfa1d31299176cdff69a2f20b61817cbdeb33aa Mon Sep 17 00:00:00 2001 From: Nihility Date: Sun, 8 Sep 2024 17:25:59 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E9=87=8D=E5=91=BD=E5=90=8D=E9=AA=8C?= =?UTF-8?q?=E8=AF=81=E6=B5=81=E7=A8=8B=E7=9A=84=20key=20=E4=B8=BA=20verifi?= =?UTF-8?q?cationResultKey?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/help/source/SourceVerificationHelp.kt | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 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 c4f53dc9a..2bc123253 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 @@ -19,8 +19,8 @@ object SourceVerificationHelp { private val waitTime = 1.minutes.inWholeNanoseconds - private fun getKey(source: BaseSource) = getKey(source.getKey()) - private fun getKey(sourceKey: String) = "${sourceKey}_verificationResult" + private fun getVerificationResultKey(source: BaseSource) = getVerificationResultKey(source.getKey()) + private fun getVerificationResultKey(sourceKey: String) = "${sourceKey}_verificationResult" /** * 获取书源验证结果 @@ -42,7 +42,7 @@ object SourceVerificationHelp { putExtra("imageUrl", url) putExtra("sourceOrigin", source.getKey()) putExtra("sourceName", source.getTag()) - IntentData.put(getKey(source), Thread.currentThread()) + IntentData.put(getVerificationResultKey(source), Thread.currentThread()) } } else { startBrowser(source, url, title, true) @@ -75,7 +75,6 @@ object SourceVerificationHelp { saveResult: Boolean? = false ) { source ?: throw NoStackTraceException("startBrowser parameter source cannot be null") - val key = getKey(source) appCtx.startActivity { putExtra("title", title) putExtra("url", url) @@ -83,26 +82,26 @@ object SourceVerificationHelp { putExtra("sourceName", source.getTag()) putExtra("sourceVerificationEnable", saveResult) IntentData.put(url, source.getHeaderMap(true)) - IntentData.put(key, Thread.currentThread()) + IntentData.put(getVerificationResultKey(source), Thread.currentThread()) } } fun checkResult(sourceKey: String) { getResult(sourceKey) ?: setResult(sourceKey, "") - val thread = IntentData.get(getKey(sourceKey)) + val thread = IntentData.get(getVerificationResultKey(sourceKey)) LockSupport.unpark(thread) } fun setResult(sourceKey: String, result: String?) { - CacheManager.putMemory(getKey(sourceKey), result ?: "") + CacheManager.putMemory(getVerificationResultKey(sourceKey), result ?: "") } fun getResult(sourceKey: String): String? { - return CacheManager.get(getKey(sourceKey)) + return CacheManager.get(getVerificationResultKey(sourceKey)) } fun clearResult(sourceKey: String) { - CacheManager.delete(getKey(sourceKey)) + CacheManager.delete(getVerificationResultKey(sourceKey)) } } From f20ad82ae4d2d9db5c8a007025e6006c67a25ea7 Mon Sep 17 00:00:00 2001 From: Nihility Date: Sun, 8 Sep 2024 18:30:50 +0800 Subject: [PATCH 4/5] =?UTF-8?q?startBrowserAwait=20=E6=B7=BB=E5=8A=A0=20re?= =?UTF-8?q?fetchAfterSuccess=20=E5=8F=82=E6=95=B0=EF=BC=8C=E4=B8=BA=20true?= =?UTF-8?q?=20=E6=97=B6=E8=BF=94=E5=9B=9E=E7=9A=84=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E6=BA=90=E7=A0=81=E4=B8=BA=E7=94=A8=E6=88=B7=E7=9C=8B=E8=A7=81?= =?UTF-8?q?=E7=9A=84=E9=A1=B5=E9=9D=A2=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/help/JsExtensions.kt | 4 +-- .../app/help/source/SourceVerificationHelp.kt | 9 ++++-- .../app/model/analyzeRule/AnalyzeUrl.kt | 4 ++- .../legado/app/ui/browser/WebViewActivity.kt | 4 +-- .../io/legado/app/ui/browser/WebViewModel.kt | 28 +++++++++++++++---- 5 files changed, 35 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/io/legado/app/help/JsExtensions.kt b/app/src/main/java/io/legado/app/help/JsExtensions.kt index e71d18e8d..a87e1f1c6 100644 --- a/app/src/main/java/io/legado/app/help/JsExtensions.kt +++ b/app/src/main/java/io/legado/app/help/JsExtensions.kt @@ -226,10 +226,10 @@ interface JsExtensions : JsEncodeUtils { /** * 使用内置浏览器打开链接,并等待网页结果 */ - fun startBrowserAwait(url: String, title: String): StrResponse { + fun startBrowserAwait(url: String, title: String, refetchAfterSuccess: Boolean = true): StrResponse { return StrResponse( url, - SourceVerificationHelp.getVerificationResult(getSource(), url, title, true) + SourceVerificationHelp.getVerificationResult(getSource(), url, title, true, refetchAfterSuccess) ) } 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 2bc123253..5f28d6a9b 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 @@ -30,7 +30,8 @@ object SourceVerificationHelp { source: BaseSource?, url: String, title: String, - useBrowser: Boolean + useBrowser: Boolean, + refetchAfterSuccess: Boolean = true ): String { source ?: throw NoStackTraceException("getVerificationResult parameter source cannot be null") @@ -45,7 +46,7 @@ object SourceVerificationHelp { IntentData.put(getVerificationResultKey(source), Thread.currentThread()) } } else { - startBrowser(source, url, title, true) + startBrowser(source, url, title, true, refetchAfterSuccess) } var waitUserInput = false @@ -72,7 +73,8 @@ object SourceVerificationHelp { source: BaseSource?, url: String, title: String, - saveResult: Boolean? = false + saveResult: Boolean? = false, + refetchAfterSuccess: Boolean? = true ) { source ?: throw NoStackTraceException("startBrowser parameter source cannot be null") appCtx.startActivity { @@ -81,6 +83,7 @@ object SourceVerificationHelp { putExtra("sourceOrigin", source.getKey()) putExtra("sourceName", source.getTag()) putExtra("sourceVerificationEnable", saveResult) + putExtra("refetchAfterSuccess", refetchAfterSuccess) IntentData.put(url, source.getHeaderMap(true)) IntentData.put(getVerificationResultKey(source), Thread.currentThread()) } diff --git a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt index 7b2f87069..a070a69f6 100644 --- a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt +++ b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt @@ -193,8 +193,10 @@ class AnalyzeUrl( baseUrl = it } if (urlNoOption.length != ruleUrl.length) { - GSON.fromJsonObject(ruleUrl.substring(urlMatcher.end())).getOrNull() + val optionStr = ruleUrl.substring(urlMatcher.end()) + GSON.fromJsonObject(optionStr).getOrNull() ?.let { option -> + this.optionStr = optionStr option.getMethod()?.let { if (it.equals("POST", true)) method = RequestMethod.POST } 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 5833f0099..65d6d9ecc 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 @@ -82,7 +82,7 @@ class WebViewActivity : VMBaseActivity() { R.id.menu_copy_url -> sendToClip(viewModel.baseUrl) R.id.menu_ok -> { if (viewModel.sourceVerificationEnable) { - viewModel.saveVerificationResult(intent) { + viewModel.saveVerificationResult(binding.webView) { finish() } } else { @@ -224,7 +224,7 @@ class WebViewActivity : VMBaseActivity() { if (it == "true") { isCloudflareChallenge = true } else if (isCloudflareChallenge && viewModel.sourceVerificationEnable) { - viewModel.saveVerificationResult(intent) { + viewModel.saveVerificationResult(binding.webView) { 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 99819e5dd..bab12ed97 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 @@ -5,6 +5,7 @@ import android.content.Intent import android.net.Uri import android.util.Base64 import android.webkit.URLUtil +import android.webkit.WebView import androidx.documentfile.provider.DocumentFile import io.legado.app.base.BaseViewModel import io.legado.app.constant.AppConst @@ -22,14 +23,17 @@ import io.legado.app.utils.isContentScheme import io.legado.app.utils.printOnDebug import io.legado.app.utils.toastOnUi import io.legado.app.utils.writeBytes +import org.apache.commons.text.StringEscapeUtils import java.io.File import java.util.Date class WebViewModel(application: Application) : BaseViewModel(application) { + var intent: Intent? = null var baseUrl: String = "" var html: String? = null val headerMap: HashMap = hashMapOf() var sourceVerificationEnable: Boolean = false + var refetchAfterSuccess: Boolean = true var sourceOrigin: String = "" fun initData( @@ -37,10 +41,12 @@ class WebViewModel(application: Application) : BaseViewModel(application) { success: () -> Unit ) { execute { + this@WebViewModel.intent = intent val url = intent.getStringExtra("url") ?: throw NoStackTraceException("url不能为空") sourceOrigin = intent.getStringExtra("sourceOrigin") ?: "" sourceVerificationEnable = intent.getBooleanExtra("sourceVerificationEnable", false) + refetchAfterSuccess = intent.getBooleanExtra("refetchAfterSuccess", true) val headerMapF = IntentData.get>(url) val analyzeUrl = AnalyzeUrl(url, headerMapF = headerMapF) baseUrl = analyzeUrl.url @@ -89,10 +95,13 @@ class WebViewModel(application: Application) : BaseViewModel(application) { } } - fun saveVerificationResult(intent: Intent, success: () -> Unit) { - execute { - if (sourceVerificationEnable) { - val url = intent.getStringExtra("url")!! + fun saveVerificationResult(webView: WebView, success: () -> Unit) { + if (!sourceVerificationEnable) { + execute { success.invoke() } + } + if (refetchAfterSuccess) { + execute { + val url = intent!!.getStringExtra("url")!! val source = appDb.bookSourceDao.getBookSource(sourceOrigin) html = AnalyzeUrl( url, @@ -100,9 +109,16 @@ class WebViewModel(application: Application) : BaseViewModel(application) { source = source ).getStrResponseAwait(useWebView = false).body SourceVerificationHelp.setResult(sourceOrigin, html ?: "") + success.invoke() + } + } else { + webView.evaluateJavascript("document.documentElement.outerHTML") { + execute { + html = StringEscapeUtils.unescapeJson(it).trim('"') + SourceVerificationHelp.setResult(sourceOrigin, html ?: "") + success.invoke() + } } - }.onSuccess { - success.invoke() } } From 79c5ab8dbb1dac657208babcfadcae677f0df407 Mon Sep 17 00:00:00 2001 From: Nihility Date: Sun, 8 Sep 2024 18:33:51 +0800 Subject: [PATCH 5/5] =?UTF-8?q?js=20=E5=88=97=E8=A1=A8=E8=A7=84=E5=88=99?= =?UTF-8?q?=E5=8F=8A=E5=88=97=E8=A1=A8=E5=AD=90=E9=A1=B9=E8=A7=84=E5=88=99?= =?UTF-8?q?=E4=B8=AD=E6=94=AF=E6=8C=81=20baseUrlWithOptions=20=E5=8F=98?= =?UTF-8?q?=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/web/help/md/jsHelp.md | 3 ++- .../java/io/legado/app/model/analyzeRule/AnalyzeRule.kt | 8 ++++++++ .../java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt | 1 + app/src/main/java/io/legado/app/model/webBook/BookList.kt | 2 +- 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/app/src/main/assets/web/help/md/jsHelp.md b/app/src/main/assets/web/help/md/jsHelp.md index 5bdff919b..efd6bc6da 100644 --- a/app/src/main/assets/web/help/md/jsHelp.md +++ b/app/src/main/assets/web/help/md/jsHelp.md @@ -20,7 +20,8 @@ |变量名|调用类| |------|-----| |java|当前类| -|baseUrl|当前url,String | +|baseUrl|String,当前 url,如 `https://example.com/page/1`| +|baseUrlWithOptions|String,带参数的当前 url,如 `https://example.com/page/1,{"webView": true}`| |result|上一步的结果| |book|[书籍类](https://github.com/gedoor/legado/blob/master/app/src/main/java/io/legado/app/data/entities/Book.kt)| |chapter|[章节类](https://github.com/gedoor/legado/blob/master/app/src/main/java/io/legado/app/data/entities/BookChapter.kt)| diff --git a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt index 24bcd37ac..5bf2725c4 100644 --- a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt +++ b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt @@ -54,6 +54,8 @@ class AnalyzeRule( private set var baseUrl: String? = null private set + var optionStr: String = "{}" + private set var redirectUrl: URL? = null private set private var isJSON: Boolean = false @@ -94,6 +96,11 @@ class AnalyzeRule( return this } + fun setOption(option: String): AnalyzeRule { + optionStr = option + return this + } + fun setRedirectUrl(url: String): URL? { try { redirectUrl = URL(url) @@ -747,6 +754,7 @@ class AnalyzeRule( bindings["book"] = book bindings["result"] = result bindings["baseUrl"] = baseUrl + bindings["baseUrlWithOptions"] = "$baseUrl,$optionStr" bindings["chapter"] = chapter bindings["title"] = chapter?.title bindings["src"] = content diff --git a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt index a070a69f6..814c3ec5d 100644 --- a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt +++ b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt @@ -76,6 +76,7 @@ class AnalyzeUrl( var type: String? = null private set val headerMap = HashMap() + var optionStr: String = "" private var urlNoQuery: String = "" private var queryStr: String? = null private val fieldMap = LinkedHashMap() diff --git a/app/src/main/java/io/legado/app/model/webBook/BookList.kt b/app/src/main/java/io/legado/app/model/webBook/BookList.kt index d9f233dcf..f15f8f048 100644 --- a/app/src/main/java/io/legado/app/model/webBook/BookList.kt +++ b/app/src/main/java/io/legado/app/model/webBook/BookList.kt @@ -43,7 +43,7 @@ object BookList { Debug.log(bookSource.bookSourceUrl, "≡获取成功:${analyzeUrl.ruleUrl}") Debug.log(bookSource.bookSourceUrl, body, state = 10) val analyzeRule = AnalyzeRule(ruleData, bookSource) - analyzeRule.setContent(body).setBaseUrl(baseUrl) + analyzeRule.setContent(body).setBaseUrl(baseUrl).setOption(analyzeUrl.optionStr) analyzeRule.setRedirectUrl(baseUrl) analyzeRule.setCoroutineContext(coroutineContext) if (isSearch) bookSource.bookUrlPattern?.let {