From 115ca980e9847d44c8327fdd1c1a3049f280b14d Mon Sep 17 00:00:00 2001
From: Xwite <1797350009@qq.com>
Date: Tue, 1 Mar 2022 08:45:22 +0800
Subject: [PATCH] =?UTF-8?q?=E5=B0=81=E9=9D=A2=E6=94=AF=E6=8C=81dataURL?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/src/main/java/io/legado/app/constant/AppPattern.kt | 2 ++
app/src/main/java/io/legado/app/help/glide/ImageLoader.kt | 8 ++++++++
.../java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt | 2 +-
3 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/app/src/main/java/io/legado/app/constant/AppPattern.kt b/app/src/main/java/io/legado/app/constant/AppPattern.kt
index 98df27df0..0ca092f2d 100644
--- a/app/src/main/java/io/legado/app/constant/AppPattern.kt
+++ b/app/src/main/java/io/legado/app/constant/AppPattern.kt
@@ -10,6 +10,8 @@ object AppPattern {
//匹配格式化后的图片格式
val imgPattern: Pattern = Pattern.compile("
]*src=\"([^\"]*(?:\"[^>]+\\})?)\"[^>]*>")
+ //dataURL图片类型
+ val dataUriRegex = Regex("data:[\\w/\\-\\.]+;base64,(.*)")
val nameRegex = Regex("\\s+作\\s*者.*|\\s+\\S+\\s+著")
val authorRegex = Regex("^\\s*作\\s*者[::\\s]+|\\s+著")
diff --git a/app/src/main/java/io/legado/app/help/glide/ImageLoader.kt b/app/src/main/java/io/legado/app/help/glide/ImageLoader.kt
index c6d011aeb..cdf5b5014 100644
--- a/app/src/main/java/io/legado/app/help/glide/ImageLoader.kt
+++ b/app/src/main/java/io/legado/app/help/glide/ImageLoader.kt
@@ -4,9 +4,11 @@ import android.content.Context
import android.graphics.Bitmap
import android.graphics.drawable.Drawable
import android.net.Uri
+import android.util.Base64
import androidx.annotation.DrawableRes
import com.bumptech.glide.Glide
import com.bumptech.glide.RequestBuilder
+import io.legado.app.constant.AppPattern.dataUriRegex
import io.legado.app.model.analyzeRule.AnalyzeUrl
import io.legado.app.utils.isAbsUrl
import io.legado.app.utils.isContentScheme
@@ -19,8 +21,14 @@ object ImageLoader {
* 自动判断path类型
*/
fun load(context: Context, path: String?): RequestBuilder {
+ val dataUriFindResult = dataUriRegex.find(path ?: "")
return when {
path.isNullOrEmpty() -> Glide.with(context).load(path)
+ dataUriFindResult != null -> {
+ val dataUriBase64 = dataUriFindResult.groupValues[1]
+ val byteArray = Base64.decode(dataUriBase64, Base64.DEFAULT)
+ Glide.with(context).load(byteArray)
+ }
path.isAbsUrl() -> {
val url = kotlin.runCatching {
AnalyzeUrl(path).getGlideUrl()
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 d4c0b603e..8dc3ed72f 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
@@ -8,6 +8,7 @@ import com.bumptech.glide.load.model.LazyHeaders
import io.legado.app.constant.AppConst.SCRIPT_ENGINE
import io.legado.app.constant.AppConst.UA_NAME
import io.legado.app.constant.AppPattern.JS_PATTERN
+import io.legado.app.constant.AppPattern.dataUriRegex
import io.legado.app.data.entities.BaseSource
import io.legado.app.data.entities.Book
import io.legado.app.data.entities.BookChapter
@@ -463,7 +464,6 @@ class AnalyzeUrl(
*/
suspend fun getByteArrayAwait(): ByteArray {
@Suppress("RegExpRedundantEscape")
- val dataUriRegex = Regex("data:[\\w/\\-\\.]+;base64,(.*)")
val dataUriFindResult = dataUriRegex.find(urlNoQuery)
val concurrentRecord = fetchStart()
setCookie(source?.getKey())