Merge pull request #1782 from Xwite/master
glideUrl支持urlOption;二级域名应该不带https/http
This commit is contained in:
@@ -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,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 {
|
||||
|
||||
@@ -10,6 +10,9 @@ import io.legado.app.utils.NetworkUtils
|
||||
|
||||
object CookieStore : CookieManager {
|
||||
|
||||
/**
|
||||
*保存cookie到数据库,会自动识别url的二级域名
|
||||
*/
|
||||
override fun setCookie(url: String, cookie: String?) {
|
||||
val cookieBean = Cookie(NetworkUtils.getSubDomain(url), cookie ?: "")
|
||||
appDb.cookieDao.insert(cookieBean)
|
||||
@@ -30,6 +33,9 @@ object CookieStore : CookieManager {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*获取url所属的二级域名的cookie
|
||||
*/
|
||||
override fun getCookie(url: String): String {
|
||||
val cookieBean = appDb.cookieDao.get(NetworkUtils.getSubDomain(url))
|
||||
return cookieBean?.cookie ?: ""
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -130,6 +130,8 @@ object NetworkUtils {
|
||||
*/
|
||||
fun getAbsoluteURL(baseURL: URL?, relativePath: String): String {
|
||||
if (baseURL == null) return relativePath
|
||||
if (relativePath.isAbsUrl()) return relativePath
|
||||
if (relativePath.matches(AppPattern.dataUriRegex)) return relativePath
|
||||
if (relativePath.startsWith("javascript")) return ""
|
||||
var relativeUrl = relativePath
|
||||
try {
|
||||
@@ -156,7 +158,7 @@ object NetworkUtils {
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取域名,供cookie保存和读取
|
||||
* 获取域名,供cookie保存和读取,处理失败返回传入的url
|
||||
* http://1.2.3.4 => 1.2.3.4
|
||||
* https://www.example.com => example.com
|
||||
* http://www.biquge.com.cn => biquge.com.cn
|
||||
@@ -167,10 +169,11 @@ object NetworkUtils {
|
||||
return kotlin.runCatching {
|
||||
val mURL = URL(baseUrl)
|
||||
val host: String = mURL.host
|
||||
//mURL.scheme https/http
|
||||
//判断是否为ip
|
||||
if (isIPAddress(host)) return baseUrl
|
||||
if (isIPAddress(host)) return host
|
||||
//PublicSuffixDatabase处理域名
|
||||
PublicSuffixDatabase.get().getEffectiveTldPlusOne(host) ?: baseUrl
|
||||
PublicSuffixDatabase.get().getEffectiveTldPlusOne(host) ?: host
|
||||
}.getOrDefault(baseUrl)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user