From b37e6bdadc510eb3e50d3c3cba2682d8282bae22 Mon Sep 17 00:00:00 2001 From: gedoor Date: Tue, 22 Sep 2020 23:35:04 +0800 Subject: [PATCH 01/10] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=A7=84=E5=88=99?= =?UTF-8?q?=E8=A7=A3=E6=9E=90bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/model/analyzeRule/AnalyzeRule.kt | 50 ++++++++++++------- 1 file changed, 32 insertions(+), 18 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 29c0f5473..8b82d4151 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 @@ -446,22 +446,17 @@ class AnalyzeRule(var book: BaseBook? = null) : JsExtensions { } //分离put rule = splitPutRule(rule, putMap) - //@get,{{ }},$1, 拆分 + //@get,{{ }}, 拆分 var start = 0 var tmp: String val evalMatcher = evalPattern.matcher(rule) while (evalMatcher.find()) { if (evalMatcher.start() > start) { tmp = rule.substring(start, evalMatcher.start()) - ruleType.add(0) - ruleParam.add(tmp) + splitRegex(tmp) } tmp = evalMatcher.group() when { - tmp.startsWith("$") -> { - ruleType.add(tmp.substring(1).toInt()) - ruleParam.add(tmp) - } tmp.startsWith("@get:", true) -> { ruleType.add(-2) ruleParam.add(tmp.substring(6, tmp.lastIndex)) @@ -471,21 +466,45 @@ class AnalyzeRule(var book: BaseBook? = null) : JsExtensions { ruleParam.add(tmp.substring(2, tmp.length - 2)) } else -> { - ruleType.add(0) - ruleParam.add(tmp) + splitRegex(tmp) } } start = evalMatcher.end() } if (rule.length > start) { tmp = rule.substring(start) + splitRegex(tmp) + } + } + + private fun splitRegex(ruleStr: String) { + var start = 0 + var tmp: String + val ruleStrArray = ruleStr.split("##") + val regexMatcher = regexPattern.matcher(ruleStrArray[0]) + while (regexMatcher.find()) { + if (mode != Mode.Js) { + mode = Mode.Regex + } + if (regexMatcher.start() > start) { + tmp = rule.substring(start, regexMatcher.start()) + ruleType.add(0) + ruleParam.add(tmp) + } + tmp = regexMatcher.group() + ruleType.add(tmp.substring(1).toInt()) + ruleParam.add(tmp) + start = regexMatcher.end() + } + if (ruleStr.length > start) { + tmp = ruleStr.substring(start) ruleType.add(0) ruleParam.add(tmp) } } /** - * 替换@get,{{ }},$1, + * 替换@get,{{ }} */ fun makeUpRule(result: Any?) { val infoVal = StringBuilder() @@ -631,14 +650,9 @@ class AnalyzeRule(var book: BaseBook? = null) : JsExtensions { companion object { private val putPattern = Pattern.compile("@put:(\\{[^}]+?\\})", Pattern.CASE_INSENSITIVE) private val getPattern = Pattern.compile("@get:\\{([^}]+?)\\}", Pattern.CASE_INSENSITIVE) - private val evalPattern = Pattern.compile( - "@get:\\{[^}]+?\\}|\\{\\{[\\w\\W]*?\\}\\}|\\$\\d{1,2}", - Pattern.CASE_INSENSITIVE - ) - private val replacePattern = Pattern.compile( - "@get:\\{[^}]+?\\}|\\{\\{[\\w\\W]*?\\}\\}", - Pattern.CASE_INSENSITIVE - ) + private val evalPattern = + Pattern.compile("@get:\\{[^}]+?\\}|\\{\\{[\\w\\W]*?\\}\\}", Pattern.CASE_INSENSITIVE) + private val regexPattern = Pattern.compile("\\\$\\d{1,2}") } } From 1c0cb183aa04a7e98792b7d161e3ae02086cdd2b Mon Sep 17 00:00:00 2001 From: gedoor Date: Tue, 22 Sep 2020 23:38:08 +0800 Subject: [PATCH 02/10] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=A7=84=E5=88=99?= =?UTF-8?q?=E8=A7=A3=E6=9E=90bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/updateLog.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index 6b5ff9e46..d8696bcce 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -3,6 +3,9 @@ * 关注合作公众号 **[小说拾遗]()** 获取好看的小说。 - 旧版数据导入教程:先在旧版阅读(2.x)中进行备份,然后在新版阅读(3.x)【我的】->【备份与恢复】,选择【导入旧版本数据】。 +**2020/09/22** +* 修复规则解析bug + **2020/09/21** * 修复规则解析bug * 换源时无最新章节信息时可加载详情页来获取(默认关闭) From 0ea41c3f4fb97e3a81cabd31060e25bdf64d2582 Mon Sep 17 00:00:00 2001 From: gedoor Date: Wed, 23 Sep 2020 00:07:37 +0800 Subject: [PATCH 03/10] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=A7=84=E5=88=99?= =?UTF-8?q?=E8=A7=A3=E6=9E=90bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 8b82d4151..530dcb33b 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 @@ -487,7 +487,7 @@ class AnalyzeRule(var book: BaseBook? = null) : JsExtensions { mode = Mode.Regex } if (regexMatcher.start() > start) { - tmp = rule.substring(start, regexMatcher.start()) + tmp = ruleStr.substring(start, regexMatcher.start()) ruleType.add(0) ruleParam.add(tmp) } From 9cae96fe2e07f68dca830a368cb2a856de6a7506 Mon Sep 17 00:00:00 2001 From: gedoor Date: Wed, 23 Sep 2020 00:07:56 +0800 Subject: [PATCH 04/10] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=A7=84=E5=88=99?= =?UTF-8?q?=E8=A7=A3=E6=9E=90bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/updateLog.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index d8696bcce..db5123e54 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -3,7 +3,7 @@ * 关注合作公众号 **[小说拾遗]()** 获取好看的小说。 - 旧版数据导入教程:先在旧版阅读(2.x)中进行备份,然后在新版阅读(3.x)【我的】->【备份与恢复】,选择【导入旧版本数据】。 -**2020/09/22** +**2020/09/23** * 修复规则解析bug **2020/09/21** From 98de63b04c031b78fde46d46bb882d7fbf123417 Mon Sep 17 00:00:00 2001 From: gedoor Date: Wed, 23 Sep 2020 07:57:17 +0800 Subject: [PATCH 05/10] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=A7=84=E5=88=99?= =?UTF-8?q?=E8=A7=A3=E6=9E=90bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/model/analyzeRule/AnalyzeRule.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 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 530dcb33b..d7555c951 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 @@ -451,6 +451,9 @@ class AnalyzeRule(var book: BaseBook? = null) : JsExtensions { var tmp: String val evalMatcher = evalPattern.matcher(rule) while (evalMatcher.find()) { + if (mode != Mode.Js) { + mode = Mode.Regex + } if (evalMatcher.start() > start) { tmp = rule.substring(start, evalMatcher.start()) splitRegex(tmp) @@ -483,9 +486,6 @@ class AnalyzeRule(var book: BaseBook? = null) : JsExtensions { val ruleStrArray = ruleStr.split("##") val regexMatcher = regexPattern.matcher(ruleStrArray[0]) while (regexMatcher.find()) { - if (mode != Mode.Js) { - mode = Mode.Regex - } if (regexMatcher.start() > start) { tmp = ruleStr.substring(start, regexMatcher.start()) ruleType.add(0) From c06c26a36fc17f0895282c356ec9641589598493 Mon Sep 17 00:00:00 2001 From: gedoor Date: Wed, 23 Sep 2020 08:14:59 +0800 Subject: [PATCH 06/10] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=A7=84=E5=88=99?= =?UTF-8?q?=E8=A7=A3=E6=9E=90bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/model/analyzeRule/AnalyzeRule.kt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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 d7555c951..55e028134 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 @@ -480,12 +480,18 @@ class AnalyzeRule(var book: BaseBook? = null) : JsExtensions { } } + /** + * 拆分\$\d{1,2} + */ private fun splitRegex(ruleStr: String) { var start = 0 var tmp: String val ruleStrArray = ruleStr.split("##") val regexMatcher = regexPattern.matcher(ruleStrArray[0]) while (regexMatcher.find()) { + if (mode != Mode.Js) { + mode = Mode.Regex + } if (regexMatcher.start() > start) { tmp = ruleStr.substring(start, regexMatcher.start()) ruleType.add(0) @@ -652,7 +658,7 @@ class AnalyzeRule(var book: BaseBook? = null) : JsExtensions { private val getPattern = Pattern.compile("@get:\\{([^}]+?)\\}", Pattern.CASE_INSENSITIVE) private val evalPattern = Pattern.compile("@get:\\{[^}]+?\\}|\\{\\{[\\w\\W]*?\\}\\}", Pattern.CASE_INSENSITIVE) - private val regexPattern = Pattern.compile("\\\$\\d{1,2}") + private val regexPattern = Pattern.compile("\\$\\d{1,2}") } } From 6b6a39e07dcb96cd2e2b0a24fe9ac7f343be618e Mon Sep 17 00:00:00 2001 From: gedoor Date: Wed, 23 Sep 2020 08:33:46 +0800 Subject: [PATCH 07/10] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=A7=84=E5=88=99?= =?UTF-8?q?=E8=A7=A3=E6=9E=90bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/model/analyzeRule/AnalyzeRule.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 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 55e028134..d43abdfcd 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 @@ -451,11 +451,11 @@ class AnalyzeRule(var book: BaseBook? = null) : JsExtensions { var tmp: String val evalMatcher = evalPattern.matcher(rule) while (evalMatcher.find()) { - if (mode != Mode.Js) { - mode = Mode.Regex - } if (evalMatcher.start() > start) { tmp = rule.substring(start, evalMatcher.start()) + if (start == 0 && !tmp.contains("##") && mode != Mode.Js) { + mode = Mode.Regex + } splitRegex(tmp) } tmp = evalMatcher.group() From 487524182acff8023e32e32385aadc835f703cd6 Mon Sep 17 00:00:00 2001 From: gedoor Date: Wed, 23 Sep 2020 08:41:05 +0800 Subject: [PATCH 08/10] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=A7=84=E5=88=99?= =?UTF-8?q?=E8=A7=A3=E6=9E=90bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../legado/app/model/analyzeRule/AnalyzeRule.kt | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 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 d43abdfcd..1b77cdd1a 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 @@ -406,6 +406,9 @@ class AnalyzeRule(var book: BaseBook? = null) : JsExtensions { internal val putMap = HashMap() private val ruleParam = ArrayList() private val ruleType = ArrayList() + private val getRuleType = -2 + private val jsRuleType = -1 + private val defaultRuleType = 0 init { this.mode = mainMode @@ -461,11 +464,11 @@ class AnalyzeRule(var book: BaseBook? = null) : JsExtensions { tmp = evalMatcher.group() when { tmp.startsWith("@get:", true) -> { - ruleType.add(-2) + ruleType.add(getRuleType) ruleParam.add(tmp.substring(6, tmp.lastIndex)) } tmp.startsWith("{{") -> { - ruleType.add(-1) + ruleType.add(jsRuleType) ruleParam.add(tmp.substring(2, tmp.length - 2)) } else -> { @@ -494,7 +497,7 @@ class AnalyzeRule(var book: BaseBook? = null) : JsExtensions { } if (regexMatcher.start() > start) { tmp = ruleStr.substring(start, regexMatcher.start()) - ruleType.add(0) + ruleType.add(defaultRuleType) ruleParam.add(tmp) } tmp = regexMatcher.group() @@ -504,7 +507,7 @@ class AnalyzeRule(var book: BaseBook? = null) : JsExtensions { } if (ruleStr.length > start) { tmp = ruleStr.substring(start) - ruleType.add(0) + ruleType.add(defaultRuleType) ruleParam.add(tmp) } } @@ -519,7 +522,7 @@ class AnalyzeRule(var book: BaseBook? = null) : JsExtensions { while (index-- > 0) { val regType = ruleType[index] when { - regType > 0 -> { + regType > defaultRuleType -> { @Suppress("UNCHECKED_CAST") val resultList = result as? List if (resultList != null) { @@ -532,7 +535,7 @@ class AnalyzeRule(var book: BaseBook? = null) : JsExtensions { infoVal.insert(0, ruleParam[index]) } } - regType == -1 -> { + regType == jsRuleType -> { if (isRule(ruleParam[index])) { getString(arrayListOf(SourceRule(ruleParam[index]))).let { infoVal.insert(0, it) @@ -550,7 +553,7 @@ class AnalyzeRule(var book: BaseBook? = null) : JsExtensions { } } } - regType == -2 -> { + regType == getRuleType -> { infoVal.insert(0, get(ruleParam[index])) } else -> infoVal.insert(0, ruleParam[index]) From 2fb74fe9b87565f3d5a6e1815a1ba4f076fd5f6a Mon Sep 17 00:00:00 2001 From: gedoor Date: Wed, 23 Sep 2020 10:58:54 +0800 Subject: [PATCH 09/10] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=A7=84=E5=88=99?= =?UTF-8?q?=E8=A7=A3=E6=9E=90bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/model/analyzeRule/AnalyzeRule.kt | 69 ++++++++++--------- 1 file changed, 36 insertions(+), 33 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 1b77cdd1a..57b867219 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 @@ -447,39 +447,44 @@ class AnalyzeRule(var book: BaseBook? = null) : JsExtensions { else -> rule = ruleStr } } - //分离put - rule = splitPutRule(rule, putMap) - //@get,{{ }}, 拆分 - var start = 0 - var tmp: String - val evalMatcher = evalPattern.matcher(rule) - while (evalMatcher.find()) { - if (evalMatcher.start() > start) { - tmp = rule.substring(start, evalMatcher.start()) - if (start == 0 && !tmp.contains("##") && mode != Mode.Js) { - mode = Mode.Regex - } - splitRegex(tmp) - } - tmp = evalMatcher.group() - when { - tmp.startsWith("@get:", true) -> { - ruleType.add(getRuleType) - ruleParam.add(tmp.substring(6, tmp.lastIndex)) - } - tmp.startsWith("{{") -> { - ruleType.add(jsRuleType) - ruleParam.add(tmp.substring(2, tmp.length - 2)) - } - else -> { + if (mode == Mode.Js) { + ruleType.add(defaultRuleType) + ruleParam.add(rule) + } else { + //分离put + rule = splitPutRule(rule, putMap) + //@get,{{ }}, 拆分 + var start = 0 + var tmp: String + val evalMatcher = evalPattern.matcher(rule) + while (evalMatcher.find()) { + if (evalMatcher.start() > start) { + tmp = rule.substring(start, evalMatcher.start()) + if (start == 0 && !tmp.contains("##")) { + mode = Mode.Regex + } splitRegex(tmp) } + tmp = evalMatcher.group() + when { + tmp.startsWith("@get:", true) -> { + ruleType.add(getRuleType) + ruleParam.add(tmp.substring(6, tmp.lastIndex)) + } + tmp.startsWith("{{") -> { + ruleType.add(jsRuleType) + ruleParam.add(tmp.substring(2, tmp.length - 2)) + } + else -> { + splitRegex(tmp) + } + } + start = evalMatcher.end() + } + if (rule.length > start) { + tmp = rule.substring(start) + splitRegex(tmp) } - start = evalMatcher.end() - } - if (rule.length > start) { - tmp = rule.substring(start) - splitRegex(tmp) } } @@ -492,9 +497,7 @@ class AnalyzeRule(var book: BaseBook? = null) : JsExtensions { val ruleStrArray = ruleStr.split("##") val regexMatcher = regexPattern.matcher(ruleStrArray[0]) while (regexMatcher.find()) { - if (mode != Mode.Js) { - mode = Mode.Regex - } + mode = Mode.Regex if (regexMatcher.start() > start) { tmp = ruleStr.substring(start, regexMatcher.start()) ruleType.add(defaultRuleType) From 6b7de1cf2a74cf2ed709f5390afe1a7c1180ce19 Mon Sep 17 00:00:00 2001 From: gedoor Date: Wed, 23 Sep 2020 11:38:27 +0800 Subject: [PATCH 10/10] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/help/AppConfig.kt | 2 +- app/src/main/res/xml/pref_config_other.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/io/legado/app/help/AppConfig.kt b/app/src/main/java/io/legado/app/help/AppConfig.kt index eddc4f428..ac32d830a 100644 --- a/app/src/main/java/io/legado/app/help/AppConfig.kt +++ b/app/src/main/java/io/legado/app/help/AppConfig.kt @@ -59,7 +59,7 @@ object AppConfig { } val backgroundVerification: Boolean - get() = App.INSTANCE.getPrefBoolean(R.string.pk_background_verification) + get() = App.INSTANCE.getPrefBoolean(R.string.pk_background_verification, true) val autoRefreshBook: Boolean get() = App.INSTANCE.getPrefBoolean(R.string.pk_auto_refresh) diff --git a/app/src/main/res/xml/pref_config_other.xml b/app/src/main/res/xml/pref_config_other.xml index f4f28ca94..0bc8ae32c 100644 --- a/app/src/main/res/xml/pref_config_other.xml +++ b/app/src/main/res/xml/pref_config_other.xml @@ -52,7 +52,7 @@ app:layout="@layout/view_preference_category">