kunfei 4 лет назад
Родитель
Сommit
e7aa661d75

+ 1 - 0
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) {

+ 0 - 7
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<String> {
         val kindList = arrayListOf<String>()
         wordCount?.let {

+ 4 - 0
app/src/main/java/io/legado/app/data/entities/Book.kt

@@ -142,6 +142,10 @@ data class Book(
         GSON.fromJsonObject<HashMap<String, String>>(variable).getOrNull() ?: hashMapOf()
     }
 
+    override fun putBigVariable(key: String, value: String) {
+
+    }
+
     @Ignore
     @IgnoredOnParcel
     override var infoHtml: String? = null

+ 5 - 1
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 {

+ 5 - 1
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,

+ 5 - 1
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,

+ 4 - 0
app/src/main/java/io/legado/app/data/entities/SearchBook.kt

@@ -63,6 +63,10 @@ data class SearchBook(
         GSON.fromJsonObject<HashMap<String, String>>(variable).getOrNull() ?: HashMap()
     }
 
+    override fun putBigVariable(key: String, value: String) {
+
+    }
+
     @delegate:Transient
     @delegate:Ignore
     @IgnoredOnParcel

+ 5 - 5
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)
             ?: ""
     }
 

+ 2 - 2
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)
             ?: ""
     }
 

+ 6 - 0
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<String, String>()
     }
 
+    override fun putBigVariable(key: String, value: String) {
+        variableMap[key] = value
+    }
+
 }

+ 8 - 0
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<String, String>
 
     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]
     }

+ 4 - 4
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<AnalyzeRule.SourceRule>,
         rulePubDate: List<AnalyzeRule.SourceRule>,
@@ -95,7 +95,8 @@ object RssParserByRule {
         ruleImage: List<AnalyzeRule.SourceRule>,
         ruleLink: List<AnalyzeRule.SourceRule>
     ): 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
         }

+ 2 - 2
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)