This commit is contained in:
kunfei
2022-03-11 00:05:04 +08:00
parent 12acfca459
commit 72a2d11a9e
13 changed files with 51 additions and 23 deletions

View File

@@ -33,6 +33,7 @@ class App : MultiDexApplication() {
.autoClear(false)
registerActivityLifecycleCallbacks(LifecycleHelp)
defaultSharedPreferences.registerOnSharedPreferenceChangeListener(AppConfig)
}
override fun attachBaseContext(base: Context) {

View File

@@ -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 {

View File

@@ -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

View File

@@ -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 {

View File

@@ -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,

View File

@@ -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,

View File

@@ -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

View File

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

View File

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

View File

@@ -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
}
}

View File

@@ -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]
}

View File

@@ -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
}

View File

@@ -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)