Răsfoiți Sursa

feat:glideUrl支持添加options

Xwite 4 ani în urmă
părinte
comite
511d2e7471

+ 4 - 14
app/src/main/java/io/legado/app/help/glide/ImageLoader.kt

@@ -7,7 +7,6 @@ import android.net.Uri
 import androidx.annotation.DrawableRes
 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
 import java.io.File
@@ -21,19 +20,11 @@ object ImageLoader {
     fun load(context: Context, path: String?): RequestBuilder<Drawable> {
         return when {
             path.isNullOrEmpty() -> GlideApp.with(context).load(path)
-            dataUriRegex.find(path) != null -> {
-                //glide内部已经实现dataUri解析
-                GlideApp.with(context).load(path)
-            }
+            dataUriRegex.find(path) != null -> GlideApp.with(context).load(path)
             path.isAbsUrl() -> GlideApp.with(context).load(path)
             path.isContentScheme() -> GlideApp.with(context).load(Uri.parse(path))
             else -> kotlin.runCatching {
-                val file = File(path)
-                if (file.exists()) {
-                    GlideApp.with(context).load(file)
-                } else {
-                    GlideApp.with(context).load(path)
-                }
+                GlideApp.with(context).load(File(path))
             }.getOrElse {
                 GlideApp.with(context).load(path)
             }
@@ -43,8 +34,7 @@ object ImageLoader {
     fun loadBitmap(context: Context, path: String?): RequestBuilder<Bitmap> {
         return when {
             path.isNullOrEmpty() -> GlideApp.with(context).asBitmap().load(path)
-            path.isAbsUrl() -> GlideApp.with(context).asBitmap()
-                .load(AnalyzeUrl(path).getGlideUrl())
+            path.isAbsUrl() -> GlideApp.with(context).asBitmap().load(path)
             path.isContentScheme() -> GlideApp.with(context).asBitmap().load(Uri.parse(path))
             else -> kotlin.runCatching {
                 GlideApp.with(context).asBitmap().load(File(path))
@@ -57,7 +47,7 @@ object ImageLoader {
     fun loadFile(context: Context, path: String?): RequestBuilder<File> {
         return when {
             path.isNullOrEmpty() -> GlideApp.with(context).asFile().load(path)
-            path.isAbsUrl() -> GlideApp.with(context).asFile().load(AnalyzeUrl(path).getGlideUrl())
+            path.isAbsUrl() -> GlideApp.with(context).asFile().load(path)
             path.isContentScheme() -> GlideApp.with(context).asFile().load(Uri.parse(path))
             else -> kotlin.runCatching {
                 GlideApp.with(context).asFile().load(File(path))

+ 4 - 1
app/src/main/java/io/legado/app/help/glide/OkHttpModelLoader.kt

@@ -4,6 +4,8 @@ import com.bumptech.glide.load.Option
 import com.bumptech.glide.load.Options
 import com.bumptech.glide.load.model.GlideUrl
 import com.bumptech.glide.load.model.ModelLoader
+import io.legado.app.model.analyzeRule.AnalyzeUrl
+
 import java.io.InputStream
 
 object OkHttpModelLoader : ModelLoader<GlideUrl?, InputStream?> {
@@ -17,7 +19,8 @@ object OkHttpModelLoader : ModelLoader<GlideUrl?, InputStream?> {
         height: Int,
         options: Options
     ): ModelLoader.LoadData<InputStream?> {
-        return ModelLoader.LoadData(model, OkHttpStreamFetcher(model, options))
+        val modelWithHeader = AnalyzeUrl(model.toString()).getGlideUrl()
+        return ModelLoader.LoadData(modelWithHeader, OkHttpStreamFetcher(modelWithHeader, options))
     }
 
     override fun handles(model: GlideUrl): Boolean {

+ 16 - 10
app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt

@@ -518,22 +518,28 @@ class AnalyzeUrl(
         }
     }
 
+    /**
+     *设置cookie urlOption的优先级大于书源保存的cookie
+     *@param tag 书源url 缺省为传入的url
+     */
     private fun setCookie(tag: String?) {
-        if (tag != null) {
-            val cookie = CookieStore.getCookie(tag)
-            if (cookie.isNotEmpty()) {
-                val cookieMap = CookieStore.cookieToMap(cookie)
-                val customCookieMap = CookieStore.cookieToMap(headerMap["Cookie"] ?: "")
-                cookieMap.putAll(customCookieMap)
-                val newCookie = CookieStore.mapToCookie(cookieMap)
-                newCookie?.let {
-                    headerMap.put("Cookie", it)
-                }
+        val cookie = CookieStore.getCookie(tag ?: url)
+        if (cookie.isNotEmpty()) {
+            val cookieMap = CookieStore.cookieToMap(cookie)
+            val customCookieMap = CookieStore.cookieToMap(headerMap["Cookie"] ?: "")
+            cookieMap.putAll(customCookieMap)
+            val newCookie = CookieStore.mapToCookie(cookieMap)
+            newCookie?.let {
+                headerMap.put("Cookie", it)
             }
         }
     }
 
+    /**
+     *获取处理过阅读定义的urlOption和cookie的GlideUrl
+     */
     fun getGlideUrl(): GlideUrl {
+        setCookie(source?.getKey())
         val headers = LazyHeaders.Builder()
         headerMap.forEach { (key, value) ->
             headers.addHeader(key, value)