From 72a2d11a9ead632404ec908e5e5f6dd3ff8e8e65 Mon Sep 17 00:00:00 2001 From: kunfei Date: Fri, 11 Mar 2022 00:05:04 +0800 Subject: [PATCH] =?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/App.kt | 1 + .../main/java/io/legado/app/data/entities/BaseBook.kt | 7 ------- app/src/main/java/io/legado/app/data/entities/Book.kt | 4 ++++ .../java/io/legado/app/data/entities/BookChapter.kt | 6 +++++- .../java/io/legado/app/data/entities/RssArticle.kt | 6 +++++- .../main/java/io/legado/app/data/entities/RssStar.kt | 6 +++++- .../java/io/legado/app/data/entities/SearchBook.kt | 4 ++++ .../io/legado/app/model/analyzeRule/AnalyzeRule.kt | 10 +++++----- .../java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt | 4 ++-- .../java/io/legado/app/model/analyzeRule/RuleData.kt | 6 ++++++ .../legado/app/model/analyzeRule/RuleDataInterface.kt | 8 ++++++++ .../java/io/legado/app/model/rss/RssParserByRule.kt | 8 ++++---- .../main/java/io/legado/app/model/webBook/BookList.kt | 4 ++-- 13 files changed, 51 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/io/legado/app/App.kt b/app/src/main/java/io/legado/app/App.kt index fa6dfda87..e40fe6932 100644 --- a/app/src/main/java/io/legado/app/App.kt +++ b/app/src/main/java/io/legado/app/App.kt @@ -33,6 +33,7 @@ class App : MultiDexApplication() { .autoClear(false) registerActivityLifecycleCallbacks(LifecycleHelp) defaultSharedPreferences.registerOnSharedPreferenceChangeListener(AppConfig) + } override fun attachBaseContext(base: Context) { diff --git a/app/src/main/java/io/legado/app/data/entities/BaseBook.kt b/app/src/main/java/io/legado/app/data/entities/BaseBook.kt index 5f7964861..5b3f76e0c 100644 --- a/app/src/main/java/io/legado/app/data/entities/BaseBook.kt +++ b/app/src/main/java/io/legado/app/data/entities/BaseBook.kt @@ -1,7 +1,6 @@ package io.legado.app.data.entities import io.legado.app.model.analyzeRule.RuleDataInterface -import io.legado.app.utils.GSON import io.legado.app.utils.splitNotBlank interface BaseBook : RuleDataInterface { @@ -10,16 +9,10 @@ interface BaseBook : RuleDataInterface { var bookUrl: String var kind: String? var wordCount: String? - var variable: String? var infoHtml: String? var tocHtml: String? - override fun putVariable(key: String, value: String?) { - super.putVariable(key, value) - variable = GSON.toJson(variableMap) - } - fun getKindList(): List { val kindList = arrayListOf() wordCount?.let { diff --git a/app/src/main/java/io/legado/app/data/entities/Book.kt b/app/src/main/java/io/legado/app/data/entities/Book.kt index 8f1661bc2..8f2628dcd 100644 --- a/app/src/main/java/io/legado/app/data/entities/Book.kt +++ b/app/src/main/java/io/legado/app/data/entities/Book.kt @@ -142,6 +142,10 @@ data class Book( GSON.fromJsonObject>(variable).getOrNull() ?: hashMapOf() } + override fun putBigVariable(key: String, value: String) { + + } + @Ignore @IgnoredOnParcel override var infoHtml: String? = null diff --git a/app/src/main/java/io/legado/app/data/entities/BookChapter.kt b/app/src/main/java/io/legado/app/data/entities/BookChapter.kt index 9aab338e0..7a1b1b142 100644 --- a/app/src/main/java/io/legado/app/data/entities/BookChapter.kt +++ b/app/src/main/java/io/legado/app/data/entities/BookChapter.kt @@ -44,7 +44,7 @@ data class BookChapter( var end: Long? = null, // 章节终止位置 var startFragmentId: String? = null, //EPUB书籍当前章节的fragmentId var endFragmentId: String? = null, //EPUB书籍下一章节的fragmentId - var variable: String? = null //变量 + override var variable: String? = null //变量 ) : Parcelable, RuleDataInterface { @delegate:Transient @@ -59,6 +59,10 @@ data class BookChapter( variable = GSON.toJson(variableMap) } + override fun putBigVariable(key: String, value: String) { + + } + override fun hashCode() = url.hashCode() override fun equals(other: Any?): Boolean { diff --git a/app/src/main/java/io/legado/app/data/entities/RssArticle.kt b/app/src/main/java/io/legado/app/data/entities/RssArticle.kt index 948671e14..ca3374de4 100644 --- a/app/src/main/java/io/legado/app/data/entities/RssArticle.kt +++ b/app/src/main/java/io/legado/app/data/entities/RssArticle.kt @@ -23,7 +23,7 @@ data class RssArticle( var content: String? = null, var image: String? = null, var read: Boolean = false, - var variable: String? = null + override var variable: String? = null ) : RuleDataInterface { override fun hashCode() = link.hashCode() @@ -45,6 +45,10 @@ data class RssArticle( variable = GSON.toJson(variableMap) } + override fun putBigVariable(key: String, value: String) { + + } + fun toStar() = RssStar( origin = origin, sort = sort, diff --git a/app/src/main/java/io/legado/app/data/entities/RssStar.kt b/app/src/main/java/io/legado/app/data/entities/RssStar.kt index 51aa5f44f..d4deca1bb 100644 --- a/app/src/main/java/io/legado/app/data/entities/RssStar.kt +++ b/app/src/main/java/io/legado/app/data/entities/RssStar.kt @@ -22,7 +22,7 @@ data class RssStar( var description: String? = null, var content: String? = null, var image: String? = null, - var variable: String? = null + override var variable: String? = null ) : RuleDataInterface { @delegate:Transient @@ -37,6 +37,10 @@ data class RssStar( variable = GSON.toJson(variableMap) } + override fun putBigVariable(key: String, value: String) { + + } + fun toRssArticle() = RssArticle( origin = origin, sort = sort, diff --git a/app/src/main/java/io/legado/app/data/entities/SearchBook.kt b/app/src/main/java/io/legado/app/data/entities/SearchBook.kt index 7d0d1e026..25f662e99 100644 --- a/app/src/main/java/io/legado/app/data/entities/SearchBook.kt +++ b/app/src/main/java/io/legado/app/data/entities/SearchBook.kt @@ -63,6 +63,10 @@ data class SearchBook( GSON.fromJsonObject>(variable).getOrNull() ?: HashMap() } + override fun putBigVariable(key: String, value: String) { + + } + @delegate:Transient @delegate:Ignore @IgnoredOnParcel 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 4b34783fc..0c039598e 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 @@ -24,11 +24,11 @@ import javax.script.SimpleBindings @Keep @Suppress("unused", "RegExpRedundantEscape", "MemberVisibilityCanBePrivate") class AnalyzeRule( - val ruleData: RuleDataInterface? = null, + var ruleData: RuleDataInterface? = null, private val source: BaseSource? = null ) : JsExtensions { - var book = if (ruleData is BaseBook) ruleData else null + val book get() = ruleData as? BaseBook var chapter: BookChapter? = null var nextChapterUrl: String? = null @@ -626,9 +626,9 @@ class AnalyzeRule( return it.title } } - return chapter?.variableMap?.get(key) - ?: book?.variableMap?.get(key) - ?: ruleData?.variableMap?.get(key) + return chapter?.getVariable(key) + ?: book?.getVariable(key) + ?: ruleData?.getVariable(key) ?: "" } 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 8e4860364..16ac7017a 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 @@ -274,8 +274,8 @@ class AnalyzeUrl( return it.title } } - return chapter?.variableMap?.get(key) - ?: ruleData?.variableMap?.get(key) + return chapter?.getVariable(key) + ?: ruleData?.getVariable(key) ?: "" } diff --git a/app/src/main/java/io/legado/app/model/analyzeRule/RuleData.kt b/app/src/main/java/io/legado/app/model/analyzeRule/RuleData.kt index 5d84d58fd..196861be4 100644 --- a/app/src/main/java/io/legado/app/model/analyzeRule/RuleData.kt +++ b/app/src/main/java/io/legado/app/model/analyzeRule/RuleData.kt @@ -2,8 +2,14 @@ package io.legado.app.model.analyzeRule class RuleData : RuleDataInterface { + override var variable: String? = null + override val variableMap by lazy { hashMapOf() } + override fun putBigVariable(key: String, value: String) { + variableMap[key] = value + } + } \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/model/analyzeRule/RuleDataInterface.kt b/app/src/main/java/io/legado/app/model/analyzeRule/RuleDataInterface.kt index daa4f108a..f090f59cc 100644 --- a/app/src/main/java/io/legado/app/model/analyzeRule/RuleDataInterface.kt +++ b/app/src/main/java/io/legado/app/model/analyzeRule/RuleDataInterface.kt @@ -1,16 +1,22 @@ package io.legado.app.model.analyzeRule +import io.legado.app.utils.GSON + interface RuleDataInterface { + var variable: String? + val variableMap: HashMap fun putVariable(key: String, value: String?) { when { value == null -> { variableMap.remove(key) + variable = GSON.toJson(variableMap) } value.length < 1000 -> { variableMap[key] = value + variable = GSON.toJson(variableMap) } else -> { @@ -18,6 +24,8 @@ interface RuleDataInterface { } } + fun putBigVariable(key: String, value: String) + fun getVariable(key: String): String? { return variableMap[key] } diff --git a/app/src/main/java/io/legado/app/model/rss/RssParserByRule.kt b/app/src/main/java/io/legado/app/model/rss/RssParserByRule.kt index f97f806aa..c95541081 100644 --- a/app/src/main/java/io/legado/app/model/rss/RssParserByRule.kt +++ b/app/src/main/java/io/legado/app/model/rss/RssParserByRule.kt @@ -8,7 +8,6 @@ import io.legado.app.model.Debug import io.legado.app.model.NoStackTraceException import io.legado.app.model.analyzeRule.AnalyzeRule import io.legado.app.model.analyzeRule.RuleDataInterface -import io.legado.app.utils.GSON import io.legado.app.utils.NetworkUtils import splitties.init.appCtx import java.util.* @@ -69,7 +68,7 @@ object RssParserByRule { val ruleLink = analyzeRule.splitSourceRule(rssSource.ruleLink) for ((index, item) in collections.withIndex()) { getItem( - sourceUrl, item, analyzeRule, index == 0, + sourceUrl, item, analyzeRule, ruleData, index == 0, ruleTitle, rulePubDate, ruleDescription, ruleImage, ruleLink )?.let { it.sort = sortName @@ -88,6 +87,7 @@ object RssParserByRule { sourceUrl: String, item: Any, analyzeRule: AnalyzeRule, + ruleData: RuleDataInterface, log: Boolean, ruleTitle: List, rulePubDate: List, @@ -95,7 +95,8 @@ object RssParserByRule { ruleImage: List, ruleLink: List ): RssArticle? { - val rssArticle = RssArticle() + val rssArticle = RssArticle(variable = ruleData.variable) + analyzeRule.ruleData = rssArticle analyzeRule.setContent(item) Debug.log(sourceUrl, "┌获取标题", log) rssArticle.title = analyzeRule.getString(ruleTitle) @@ -117,7 +118,6 @@ object RssParserByRule { Debug.log(sourceUrl, "┌获取文章链接", log) rssArticle.link = NetworkUtils.getAbsoluteURL(sourceUrl, analyzeRule.getString(ruleLink)) Debug.log(sourceUrl, "└${rssArticle.link}", log) - rssArticle.variable = analyzeRule.ruleData?.variableMap?.let { GSON.toJson(it) } if (rssArticle.title.isBlank()) { return null } 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 8bc9dacad..48f7adf52 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 @@ -135,7 +135,7 @@ object BookList { book.originName = bookSource.bookSourceName book.originOrder = bookSource.customOrder book.type = bookSource.bookSourceType - analyzeRule.book = book + analyzeRule.ruleData = book BookInfo.analyzeBookInfo( scope, book, @@ -175,7 +175,7 @@ object BookList { searchBook.originName = bookSource.bookSourceName searchBook.type = bookSource.bookSourceType searchBook.originOrder = bookSource.customOrder - analyzeRule.book = searchBook + analyzeRule.ruleData = searchBook analyzeRule.setContent(item) scope.ensureActive() Debug.log(bookSource.bookSourceUrl, "┌获取书名", log)