From 10bdb9962cd636f968f2b4ccb7d38eaa2c378ee1 Mon Sep 17 00:00:00 2001 From: kunfei Date: Tue, 8 Mar 2022 13:55:37 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=80=9A=E7=94=A8=E5=B0=81?= =?UTF-8?q?=E9=9D=A2=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legado/app/data/entities/BaseSource.kt | 4 ++ .../io/legado/app/data/entities/BookSource.kt | 4 -- .../io/legado/app/data/entities/HttpTTS.kt | 4 -- .../io/legado/app/data/entities/RssSource.kt | 4 -- .../java/io/legado/app/model/BookCover.kt | 53 +++++++++++++++++-- .../app/model/analyzeRule/AnalyzeRule.kt | 6 +-- 6 files changed, 57 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/io/legado/app/data/entities/BaseSource.kt b/app/src/main/java/io/legado/app/data/entities/BaseSource.kt index a872572ec..4987a012f 100644 --- a/app/src/main/java/io/legado/app/data/entities/BaseSource.kt +++ b/app/src/main/java/io/legado/app/data/entities/BaseSource.kt @@ -26,6 +26,10 @@ interface BaseSource : JsExtensions { fun getKey(): String + override fun getSource(): BaseSource? { + return this + } + fun loginUi(): List? { return GSON.fromJsonArray(loginUi) .onFailure { diff --git a/app/src/main/java/io/legado/app/data/entities/BookSource.kt b/app/src/main/java/io/legado/app/data/entities/BookSource.kt index 31650756c..1e2c5ecf8 100644 --- a/app/src/main/java/io/legado/app/data/entities/BookSource.kt +++ b/app/src/main/java/io/legado/app/data/entities/BookSource.kt @@ -79,10 +79,6 @@ data class BookSource( return bookSourceUrl } - override fun getSource(): BaseSource { - return this - } - @delegate:Transient @delegate:Ignore @IgnoredOnParcel diff --git a/app/src/main/java/io/legado/app/data/entities/HttpTTS.kt b/app/src/main/java/io/legado/app/data/entities/HttpTTS.kt index 3b1db4512..0ca097c49 100644 --- a/app/src/main/java/io/legado/app/data/entities/HttpTTS.kt +++ b/app/src/main/java/io/legado/app/data/entities/HttpTTS.kt @@ -33,10 +33,6 @@ data class HttpTTS( return "httpTts:$id" } - override fun getSource(): BaseSource { - return this - } - @Suppress("MemberVisibilityCanBePrivate") companion object { diff --git a/app/src/main/java/io/legado/app/data/entities/RssSource.kt b/app/src/main/java/io/legado/app/data/entities/RssSource.kt index 4d7d9ca54..b4fa7dfe6 100644 --- a/app/src/main/java/io/legado/app/data/entities/RssSource.kt +++ b/app/src/main/java/io/legado/app/data/entities/RssSource.kt @@ -52,10 +52,6 @@ data class RssSource( return sourceUrl } - override fun getSource(): BaseSource { - return this - } - override fun equals(other: Any?): Boolean { if (other is RssSource) { return other.sourceUrl == sourceUrl diff --git a/app/src/main/java/io/legado/app/model/BookCover.kt b/app/src/main/java/io/legado/app/model/BookCover.kt index 0e92be364..da3f7e298 100644 --- a/app/src/main/java/io/legado/app/model/BookCover.kt +++ b/app/src/main/java/io/legado/app/model/BookCover.kt @@ -8,22 +8,31 @@ import com.bumptech.glide.RequestBuilder import com.bumptech.glide.request.RequestOptions import io.legado.app.R import io.legado.app.constant.PreferKey +import io.legado.app.data.entities.BaseSource import io.legado.app.help.BlurTransformation +import io.legado.app.help.CacheManager import io.legado.app.help.config.AppConfig import io.legado.app.help.glide.ImageLoader -import io.legado.app.utils.BitmapUtils -import io.legado.app.utils.getPrefBoolean -import io.legado.app.utils.getPrefString +import io.legado.app.model.analyzeRule.AnalyzeRule +import io.legado.app.model.analyzeRule.AnalyzeUrl +import io.legado.app.utils.* +import kotlinx.coroutines.runBlocking import splitties.init.appCtx object BookCover { + private const val coverRuleConfigKey = "legadoCoverRuleConfig" var drawBookName = true private set var drawBookAuthor = true private set lateinit var defaultDrawable: Drawable private set + var coverRuleConfig: CoverRuleConfig? = + GSON.fromJsonObject(CacheManager.get(coverRuleConfigKey)).getOrNull() + private val analyzeRule by lazy { + AnalyzeRule() + } init { upDefaultCover() @@ -58,4 +67,42 @@ object BookCover { .apply(RequestOptions.bitmapTransform(BlurTransformation(context, 25))) } + fun searchCover(name: String, author: String): String? { + val config = coverRuleConfig ?: return null + if (config.searchUrl.isBlank() || config.coverRule.isBlank()) { + return null + } + val analyzeUrl = + AnalyzeUrl(config.searchUrl, name, source = config, headerMapF = config.getHeaderMap()) + return runBlocking { + analyzeUrl.getStrResponseAwait().body?.let { body -> + return@let analyzeRule.getString(config.coverRule, body, true) + } + } + } + + fun saveCoverRuleConfig(config: CoverRuleConfig) { + coverRuleConfig = config + val json = GSON.toJson(config) + CacheManager.put(coverRuleConfigKey, json) + } + + data class CoverRuleConfig( + var searchUrl: String, + var coverRule: String, + override var concurrentRate: String? = null, + override var loginUrl: String? = null, + override var loginUi: String? = null, + override var header: String? = null, + ) : BaseSource { + + override fun getTag(): String { + return searchUrl + } + + override fun getKey(): String { + return searchUrl + } + } + } \ No newline at end of file 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 0dcc796a9..4b34783fc 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,7 +24,7 @@ import javax.script.SimpleBindings @Keep @Suppress("unused", "RegExpRedundantEscape", "MemberVisibilityCanBePrivate") class AnalyzeRule( - val ruleData: RuleDataInterface, + val ruleData: RuleDataInterface? = null, private val source: BaseSource? = null ) : JsExtensions { @@ -613,7 +613,7 @@ class AnalyzeRule( fun put(key: String, value: String): String { chapter?.putVariable(key, value) ?: book?.putVariable(key, value) - ?: ruleData.putVariable(key, value) + ?: ruleData?.putVariable(key, value) return value } @@ -628,7 +628,7 @@ class AnalyzeRule( } return chapter?.variableMap?.get(key) ?: book?.variableMap?.get(key) - ?: ruleData.variableMap[key] + ?: ruleData?.variableMap?.get(key) ?: "" }