Horis 1 an în urmă
părinte
comite
5c6ab4392a

+ 1 - 0
app/src/main/java/io/legado/app/data/entities/DictRule.kt

@@ -4,6 +4,7 @@ import androidx.room.ColumnInfo
 import androidx.room.Entity
 import androidx.room.Entity
 import androidx.room.PrimaryKey
 import androidx.room.PrimaryKey
 import io.legado.app.model.analyzeRule.AnalyzeRule
 import io.legado.app.model.analyzeRule.AnalyzeRule
+import io.legado.app.model.analyzeRule.AnalyzeRule.Companion.setCoroutineContext
 import io.legado.app.model.analyzeRule.AnalyzeUrl
 import io.legado.app.model.analyzeRule.AnalyzeUrl
 import kotlin.coroutines.coroutineContext
 import kotlin.coroutines.coroutineContext
 
 

+ 1 - 0
app/src/main/java/io/legado/app/help/DirectLinkUpload.kt

@@ -3,6 +3,7 @@ package io.legado.app.help
 import androidx.annotation.Keep
 import androidx.annotation.Keep
 import io.legado.app.exception.NoStackTraceException
 import io.legado.app.exception.NoStackTraceException
 import io.legado.app.model.analyzeRule.AnalyzeRule
 import io.legado.app.model.analyzeRule.AnalyzeRule
+import io.legado.app.model.analyzeRule.AnalyzeRule.Companion.setCoroutineContext
 import io.legado.app.model.analyzeRule.AnalyzeUrl
 import io.legado.app.model.analyzeRule.AnalyzeUrl
 import io.legado.app.utils.ACache
 import io.legado.app.utils.ACache
 import io.legado.app.utils.FileUtils
 import io.legado.app.utils.FileUtils

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

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

+ 15 - 17
app/src/main/java/io/legado/app/help/glide/OkHttpStreamFetcher.kt

@@ -10,12 +10,12 @@ import com.bumptech.glide.util.ContentLengthInputStream
 import com.script.rhino.runScriptWithContext
 import com.script.rhino.runScriptWithContext
 import io.legado.app.data.entities.BaseSource
 import io.legado.app.data.entities.BaseSource
 import io.legado.app.exception.NoStackTraceException
 import io.legado.app.exception.NoStackTraceException
-import io.legado.app.help.http.CookieManager.cookieJarHeader
 import io.legado.app.help.http.addHeaders
 import io.legado.app.help.http.addHeaders
 import io.legado.app.help.http.okHttpClient
 import io.legado.app.help.http.okHttpClient
 import io.legado.app.help.http.okHttpClientManga
 import io.legado.app.help.http.okHttpClientManga
 import io.legado.app.help.source.SourceHelp
 import io.legado.app.help.source.SourceHelp
 import io.legado.app.model.ReadManga
 import io.legado.app.model.ReadManga
+import io.legado.app.model.analyzeRule.AnalyzeUrl
 import io.legado.app.utils.ImageUtils
 import io.legado.app.utils.ImageUtils
 import io.legado.app.utils.isWifiConnect
 import io.legado.app.utils.isWifiConnect
 import kotlinx.coroutines.Job
 import kotlinx.coroutines.Job
@@ -30,7 +30,6 @@ import java.io.InputStream
 
 
 
 
 class OkHttpStreamFetcher(
 class OkHttpStreamFetcher(
-    private val oldUrl: GlideUrl,
     private val url: GlideUrl,
     private val url: GlideUrl,
     private val options: Options,
     private val options: Options,
 ) :
 ) :
@@ -41,6 +40,7 @@ class OkHttpStreamFetcher(
     private var source: BaseSource? = null
     private var source: BaseSource? = null
     private val manga = options.get(OkHttpModelLoader.mangaOption) == true
     private val manga = options.get(OkHttpModelLoader.mangaOption) == true
     private val coroutineContext = Job()
     private val coroutineContext = Job()
+    private lateinit var analyzedUrl: GlideUrl
 
 
     @Volatile
     @Volatile
     private var call: Call? = null
     private var call: Call? = null
@@ -59,21 +59,19 @@ class OkHttpStreamFetcher(
             callback.onLoadFailed(NoStackTraceException("只在wifi加载图片"))
             callback.onLoadFailed(NoStackTraceException("只在wifi加载图片"))
             return
             return
         }
         }
-        val requestBuilder: Request.Builder = Request.Builder().url(url.toStringUrl())
-        val headerMap = HashMap<String, String>()
+
         options.get(OkHttpModelLoader.sourceOriginOption)?.let { sourceUrl ->
         options.get(OkHttpModelLoader.sourceOriginOption)?.let { sourceUrl ->
             source = SourceHelp.getSource(sourceUrl)
             source = SourceHelp.getSource(sourceUrl)
-            runScriptWithContext(coroutineContext) {
-                source?.getHeaderMap(true)?.let {
-                    headerMap.putAll(it)
-                }
-            }
-            if (source?.enabledCookieJar == true) {
-                headerMap[cookieJarHeader] = "1"
-            }
         }
         }
-        headerMap.putAll(url.headers)
-        requestBuilder.addHeaders(headerMap)
+
+        analyzedUrl = AnalyzeUrl(
+            url.toString(),
+            source = source,
+            coroutineContext = coroutineContext
+        ).getGlideUrl()
+
+        val requestBuilder = Request.Builder().url(analyzedUrl.toStringUrl())
+        requestBuilder.addHeaders(analyzedUrl.headers)
         val request: Request = requestBuilder.build()
         val request: Request = requestBuilder.build()
         this.callback = callback
         this.callback = callback
         call = if (manga) {
         call = if (manga) {
@@ -118,7 +116,7 @@ class OkHttpStreamFetcher(
                     responseBody!!.byteStream()
                     responseBody!!.byteStream()
                 } else if (manga) {
                 } else if (manga) {
                     ImageUtils.decode(
                     ImageUtils.decode(
-                        oldUrl.toString(),
+                        url.toString(),
                         responseBody!!.bytes(),
                         responseBody!!.bytes(),
                         isCover = false,
                         isCover = false,
                         source,
                         source,
@@ -126,7 +124,7 @@ class OkHttpStreamFetcher(
                     )?.inputStream()
                     )?.inputStream()
                 } else {
                 } else {
                     ImageUtils.decode(
                     ImageUtils.decode(
-                        url.toStringUrl(), responseBody!!.byteStream(),
+                        analyzedUrl.toStringUrl(), responseBody!!.byteStream(),
                         isCover = true, source
                         isCover = true, source
                     )
                     )
                 }
                 }
@@ -142,7 +140,7 @@ class OkHttpStreamFetcher(
             }
             }
         } else {
         } else {
             if (!manga) {
             if (!manga) {
-                failUrl.add(url.toStringUrl())
+                failUrl.add(analyzedUrl.toStringUrl())
             }
             }
             callback?.onLoadFailed(HttpException(response.message, response.code))
             callback?.onLoadFailed(HttpException(response.message, response.code))
         }
         }

+ 1 - 0
app/src/main/java/io/legado/app/model/BookCover.kt

@@ -27,6 +27,7 @@ import io.legado.app.help.glide.BlurTransformation
 import io.legado.app.help.glide.ImageLoader
 import io.legado.app.help.glide.ImageLoader
 import io.legado.app.help.glide.OkHttpModelLoader
 import io.legado.app.help.glide.OkHttpModelLoader
 import io.legado.app.model.analyzeRule.AnalyzeRule
 import io.legado.app.model.analyzeRule.AnalyzeRule
+import io.legado.app.model.analyzeRule.AnalyzeRule.Companion.setCoroutineContext
 import io.legado.app.model.analyzeRule.AnalyzeUrl
 import io.legado.app.model.analyzeRule.AnalyzeUrl
 import io.legado.app.utils.BitmapUtils
 import io.legado.app.utils.BitmapUtils
 import io.legado.app.utils.GSON
 import io.legado.app.utils.GSON

+ 6 - 5
app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt

@@ -88,11 +88,6 @@ class AnalyzeRule(
         return this
         return this
     }
     }
 
 
-    fun setCoroutineContext(context: CoroutineContext): AnalyzeRule {
-        coroutineContext = context.minusKey(ContinuationInterceptor)
-        return this
-    }
-
     fun setBaseUrl(baseUrl: String?): AnalyzeRule {
     fun setBaseUrl(baseUrl: String?): AnalyzeRule {
         baseUrl?.let {
         baseUrl?.let {
             this.baseUrl = baseUrl
             this.baseUrl = baseUrl
@@ -861,6 +856,12 @@ class AnalyzeRule(
         private val evalPattern =
         private val evalPattern =
             Pattern.compile("@get:\\{[^}]+?\\}|\\{\\{[\\w\\W]*?\\}\\}", Pattern.CASE_INSENSITIVE)
             Pattern.compile("@get:\\{[^}]+?\\}|\\{\\{[\\w\\W]*?\\}\\}", Pattern.CASE_INSENSITIVE)
         private val regexPattern = Pattern.compile("\\$\\d{1,2}")
         private val regexPattern = Pattern.compile("\\$\\d{1,2}")
+
+        fun AnalyzeRule.setCoroutineContext(context: CoroutineContext): AnalyzeRule {
+            coroutineContext = context.minusKey(ContinuationInterceptor)
+            return this
+        }
+
     }
     }
 
 
 }
 }

+ 14 - 12
app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt

@@ -78,7 +78,7 @@ class AnalyzeUrl(
     val page: Int? = null,
     val page: Int? = null,
     val speakText: String? = null,
     val speakText: String? = null,
     val speakSpeed: Int? = null,
     val speakSpeed: Int? = null,
-    var baseUrl: String = "",
+    private var baseUrl: String = "",
     private val source: BaseSource? = null,
     private val source: BaseSource? = null,
     private val ruleData: RuleDataInterface? = null,
     private val ruleData: RuleDataInterface? = null,
     private val chapter: BookChapter? = null,
     private val chapter: BookChapter? = null,
@@ -88,12 +88,6 @@ class AnalyzeUrl(
     headerMapF: Map<String, String>? = null,
     headerMapF: Map<String, String>? = null,
     hasLoginHeader: Boolean = true
     hasLoginHeader: Boolean = true
 ) : JsExtensions {
 ) : JsExtensions {
-    companion object {
-        val paramPattern: Pattern = Pattern.compile("\\s*,\\s*(?=\\{)")
-        private val pagePattern = Pattern.compile("<(.*?)>")
-        private val queryEncoder =
-            RFC3986.UNRESERVED.orNew(PercentCodec.of("!$%&()*+,/:;=?@[\\]^`{|}"))
-    }
 
 
     var ruleUrl = ""
     var ruleUrl = ""
         private set
         private set
@@ -644,11 +638,6 @@ class AnalyzeUrl(
         return GlideUrl(url, GlideHeaders(headerMap))
         return GlideUrl(url, GlideHeaders(headerMap))
     }
     }
 
 
-    fun getMediaItem(): MediaItem {
-        setCookie()
-        return ExoPlayerHelper.createMediaItem(url, headerMap)
-    }
-
     fun getUserAgent(): String {
     fun getUserAgent(): String {
         return headerMap.get(UA_NAME, true) ?: AppConfig.userAgent
         return headerMap.get(UA_NAME, true) ?: AppConfig.userAgent
     }
     }
@@ -661,6 +650,19 @@ class AnalyzeUrl(
         return source
         return source
     }
     }
 
 
+    companion object {
+        val paramPattern: Pattern = Pattern.compile("\\s*,\\s*(?=\\{)")
+        private val pagePattern = Pattern.compile("<(.*?)>")
+        private val queryEncoder =
+            RFC3986.UNRESERVED.orNew(PercentCodec.of("!$%&()*+,/:;=?@[\\]^`{|}"))
+
+        fun AnalyzeUrl.getMediaItem(): MediaItem {
+            setCookie()
+            return ExoPlayerHelper.createMediaItem(url, headerMap)
+        }
+
+    }
+
     @Keep
     @Keep
     data class UrlOption(
     data class UrlOption(
         private var method: String? = null,
         private var method: String? = null,

+ 1 - 0
app/src/main/java/io/legado/app/model/rss/Rss.kt

@@ -6,6 +6,7 @@ import io.legado.app.help.coroutine.Coroutine
 import io.legado.app.help.http.StrResponse
 import io.legado.app.help.http.StrResponse
 import io.legado.app.model.Debug
 import io.legado.app.model.Debug
 import io.legado.app.model.analyzeRule.AnalyzeRule
 import io.legado.app.model.analyzeRule.AnalyzeRule
+import io.legado.app.model.analyzeRule.AnalyzeRule.Companion.setCoroutineContext
 import io.legado.app.model.analyzeRule.AnalyzeUrl
 import io.legado.app.model.analyzeRule.AnalyzeUrl
 import io.legado.app.model.analyzeRule.RuleData
 import io.legado.app.model.analyzeRule.RuleData
 import io.legado.app.utils.NetworkUtils
 import io.legado.app.utils.NetworkUtils

+ 1 - 0
app/src/main/java/io/legado/app/model/rss/RssParserByRule.kt

@@ -7,6 +7,7 @@ import io.legado.app.data.entities.RssSource
 import io.legado.app.exception.NoStackTraceException
 import io.legado.app.exception.NoStackTraceException
 import io.legado.app.model.Debug
 import io.legado.app.model.Debug
 import io.legado.app.model.analyzeRule.AnalyzeRule
 import io.legado.app.model.analyzeRule.AnalyzeRule
+import io.legado.app.model.analyzeRule.AnalyzeRule.Companion.setCoroutineContext
 import io.legado.app.model.analyzeRule.RuleData
 import io.legado.app.model.analyzeRule.RuleData
 import io.legado.app.utils.NetworkUtils
 import io.legado.app.utils.NetworkUtils
 import splitties.init.appCtx
 import splitties.init.appCtx

+ 1 - 0
app/src/main/java/io/legado/app/model/webBook/BookChapterList.kt

@@ -16,6 +16,7 @@ import io.legado.app.help.book.simulatedTotalChapterNum
 import io.legado.app.help.config.AppConfig
 import io.legado.app.help.config.AppConfig
 import io.legado.app.model.Debug
 import io.legado.app.model.Debug
 import io.legado.app.model.analyzeRule.AnalyzeRule
 import io.legado.app.model.analyzeRule.AnalyzeRule
+import io.legado.app.model.analyzeRule.AnalyzeRule.Companion.setCoroutineContext
 import io.legado.app.model.analyzeRule.AnalyzeUrl
 import io.legado.app.model.analyzeRule.AnalyzeUrl
 import io.legado.app.utils.isTrue
 import io.legado.app.utils.isTrue
 import io.legado.app.utils.mapAsync
 import io.legado.app.utils.mapAsync

+ 1 - 0
app/src/main/java/io/legado/app/model/webBook/BookContent.kt

@@ -13,6 +13,7 @@ import io.legado.app.help.book.BookHelp
 import io.legado.app.help.config.AppConfig
 import io.legado.app.help.config.AppConfig
 import io.legado.app.model.Debug
 import io.legado.app.model.Debug
 import io.legado.app.model.analyzeRule.AnalyzeRule
 import io.legado.app.model.analyzeRule.AnalyzeRule
+import io.legado.app.model.analyzeRule.AnalyzeRule.Companion.setCoroutineContext
 import io.legado.app.model.analyzeRule.AnalyzeUrl
 import io.legado.app.model.analyzeRule.AnalyzeUrl
 import io.legado.app.utils.HtmlFormatter
 import io.legado.app.utils.HtmlFormatter
 import io.legado.app.utils.NetworkUtils
 import io.legado.app.utils.NetworkUtils

+ 1 - 0
app/src/main/java/io/legado/app/model/webBook/BookInfo.kt

@@ -9,6 +9,7 @@ import io.legado.app.help.book.BookHelp
 import io.legado.app.help.book.isWebFile
 import io.legado.app.help.book.isWebFile
 import io.legado.app.model.Debug
 import io.legado.app.model.Debug
 import io.legado.app.model.analyzeRule.AnalyzeRule
 import io.legado.app.model.analyzeRule.AnalyzeRule
+import io.legado.app.model.analyzeRule.AnalyzeRule.Companion.setCoroutineContext
 import io.legado.app.utils.DebugLog
 import io.legado.app.utils.DebugLog
 import io.legado.app.utils.HtmlFormatter
 import io.legado.app.utils.HtmlFormatter
 import io.legado.app.utils.NetworkUtils
 import io.legado.app.utils.NetworkUtils

+ 1 - 0
app/src/main/java/io/legado/app/model/webBook/BookList.kt

@@ -10,6 +10,7 @@ import io.legado.app.help.book.BookHelp
 import io.legado.app.help.source.getBookType
 import io.legado.app.help.source.getBookType
 import io.legado.app.model.Debug
 import io.legado.app.model.Debug
 import io.legado.app.model.analyzeRule.AnalyzeRule
 import io.legado.app.model.analyzeRule.AnalyzeRule
+import io.legado.app.model.analyzeRule.AnalyzeRule.Companion.setCoroutineContext
 import io.legado.app.model.analyzeRule.AnalyzeUrl
 import io.legado.app.model.analyzeRule.AnalyzeUrl
 import io.legado.app.model.analyzeRule.RuleData
 import io.legado.app.model.analyzeRule.RuleData
 import io.legado.app.utils.HtmlFormatter
 import io.legado.app.utils.HtmlFormatter

+ 1 - 0
app/src/main/java/io/legado/app/model/webBook/WebBook.kt

@@ -14,6 +14,7 @@ import io.legado.app.help.http.StrResponse
 import io.legado.app.help.source.getBookType
 import io.legado.app.help.source.getBookType
 import io.legado.app.model.Debug
 import io.legado.app.model.Debug
 import io.legado.app.model.analyzeRule.AnalyzeRule
 import io.legado.app.model.analyzeRule.AnalyzeRule
+import io.legado.app.model.analyzeRule.AnalyzeRule.Companion.setCoroutineContext
 import io.legado.app.model.analyzeRule.AnalyzeUrl
 import io.legado.app.model.analyzeRule.AnalyzeUrl
 import io.legado.app.model.analyzeRule.RuleData
 import io.legado.app.model.analyzeRule.RuleData
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.CoroutineScope

+ 1 - 0
app/src/main/java/io/legado/app/service/AudioPlayService.kt

@@ -36,6 +36,7 @@ import io.legado.app.help.exoplayer.ExoPlayerHelper
 import io.legado.app.help.glide.ImageLoader
 import io.legado.app.help.glide.ImageLoader
 import io.legado.app.model.AudioPlay
 import io.legado.app.model.AudioPlay
 import io.legado.app.model.analyzeRule.AnalyzeUrl
 import io.legado.app.model.analyzeRule.AnalyzeUrl
+import io.legado.app.model.analyzeRule.AnalyzeUrl.Companion.getMediaItem
 import io.legado.app.receiver.MediaButtonReceiver
 import io.legado.app.receiver.MediaButtonReceiver
 import io.legado.app.ui.book.audio.AudioPlayActivity
 import io.legado.app.ui.book.audio.AudioPlayActivity
 import io.legado.app.utils.activityPendingIntent
 import io.legado.app.utils.activityPendingIntent

+ 1 - 0
app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt

@@ -61,6 +61,7 @@ import io.legado.app.lib.theme.accentColor
 import io.legado.app.model.ReadAloud
 import io.legado.app.model.ReadAloud
 import io.legado.app.model.ReadBook
 import io.legado.app.model.ReadBook
 import io.legado.app.model.analyzeRule.AnalyzeRule
 import io.legado.app.model.analyzeRule.AnalyzeRule
+import io.legado.app.model.analyzeRule.AnalyzeRule.Companion.setCoroutineContext
 import io.legado.app.model.localBook.EpubFile
 import io.legado.app.model.localBook.EpubFile
 import io.legado.app.model.localBook.MobiFile
 import io.legado.app.model.localBook.MobiFile
 import io.legado.app.receiver.NetworkChangedListener
 import io.legado.app.receiver.NetworkChangedListener