pull/1705/head
kunfei 3 years ago
parent 12acfca459
commit 72a2d11a9e
  1. 1
      app/src/main/java/io/legado/app/App.kt
  2. 7
      app/src/main/java/io/legado/app/data/entities/BaseBook.kt
  3. 4
      app/src/main/java/io/legado/app/data/entities/Book.kt
  4. 6
      app/src/main/java/io/legado/app/data/entities/BookChapter.kt
  5. 6
      app/src/main/java/io/legado/app/data/entities/RssArticle.kt
  6. 6
      app/src/main/java/io/legado/app/data/entities/RssStar.kt
  7. 4
      app/src/main/java/io/legado/app/data/entities/SearchBook.kt
  8. 10
      app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt
  9. 4
      app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt
  10. 6
      app/src/main/java/io/legado/app/model/analyzeRule/RuleData.kt
  11. 8
      app/src/main/java/io/legado/app/model/analyzeRule/RuleDataInterface.kt
  12. 8
      app/src/main/java/io/legado/app/model/rss/RssParserByRule.kt
  13. 4
      app/src/main/java/io/legado/app/model/webBook/BookList.kt

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

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

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

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

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

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

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

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

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

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

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

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

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

Loading…
Cancel
Save