图片链接支持,{

charset: ,
method: POST,
body: ,
headers: {User-Agent: }
}
pull/323/head
AndyBernie 4 years ago
parent c5eeb2536f
commit 6ef1752d5e
  1. 6
      app/src/main/java/io/legado/app/help/http/HttpHelper.kt
  2. 27
      app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt
  3. 1
      app/src/main/java/io/legado/app/ui/book/read/page/ContentTextView.kt
  4. 4
      app/src/main/java/io/legado/app/ui/book/read/page/provider/ChapterProvider.kt
  5. 10
      app/src/main/java/io/legado/app/ui/book/read/page/provider/ImageProvider.kt
  6. 2
      app/src/main/java/io/legado/app/ui/widget/dialog/PhotoDialog.kt

@ -49,13 +49,11 @@ object HttpHelper {
return null
}
fun getBytes(url: String, referer: String): ByteArray? {
fun getBytes(url: String, queryMap: Map<String, String>, headers: Map<String, String>): ByteArray? {
NetworkUtils.getBaseUrl(url)?.let { baseUrl ->
val headers =
mapOf(Pair(AppConst.UA_NAME, AppConst.userAgent), Pair("Referer", referer))
return getByteRetrofit(baseUrl)
.create(HttpGetApi::class.java)
.getMapByte(url, mapOf(), headers)
.getMapByte(url, queryMap, headers)
.execute()
.body()
}

@ -321,6 +321,33 @@ class AnalyzeUrl(
return Res(NetworkUtils.getUrl(res), res.body())
}
@Throws(Exception::class)
fun getImageBytes(
tag: String
): ByteArray? {
//资源为本站的资源,保留cookie
val cookie = CookieStore.getCookie(tag)
NetworkUtils.getBaseUrl(url)?.let {
val regex: Any
if(it.lastIndexOf(".") != it.indexOf(".")) {
regex = it.substring(it.indexOf(".")+1).toRegex()
} else {
regex = it.substring(it.lastIndexOf("/")+1).toRegex()
}
if(regex.containsMatchIn(tag)) {
if (cookie.isNotEmpty()) {
headerMap["Cookie"] = cookie
}
}
}
//图片盗链的不保留当前的cookie,可由js生成图片源站的cookie
if(fieldMap.isEmpty()) {
return HttpHelper.getBytes(url, mapOf(), headerMap)
} else {
return HttpHelper.getBytes(url, fieldMap, headerMap)
}
}
data class UrlOption(
val method: String?,
val charset: String?,

@ -163,7 +163,6 @@ class ContentTextView(context: Context, attrs: AttributeSet?) : View(context, at
ReadBook.book!!,
textPage.chapterIndex,
textChar.charData,
null,
true
)?.let {
canvas.drawBitmap(it, null, rectF, null)

@ -39,7 +39,7 @@ object ChapterProvider {
lateinit var titlePaint: TextPaint
lateinit var contentPaint: TextPaint
private val srcPattern =
Pattern.compile("<img .*?src.*?=.*?\"(.*?)\".*?>", Pattern.CASE_INSENSITIVE)
Pattern.compile("<img .*?src.*?=.*?\"(.*?(?:,\\{.*\\})?)\".*?>", Pattern.CASE_INSENSITIVE)
init {
upStyle()
@ -122,7 +122,7 @@ object ChapterProvider {
imageStyle: String?
): Float {
var durY = y
ImageProvider.getImage(book, chapter.index, src, chapter.url)?.let {
ImageProvider.getImage(book, chapter.index, src)?.let {
if (durY > visibleHeight) {
textPages.last().height = durY
textPages.add(TextPage())

@ -11,6 +11,7 @@ import io.legado.app.utils.MD5Utils
import io.legado.app.utils.externalFilesDir
import java.io.FileOutputStream
import java.util.concurrent.ConcurrentHashMap
import io.legado.app.model.analyzeRule.AnalyzeUrl
object ImageProvider {
@ -31,13 +32,13 @@ object ImageProvider {
indexCache[src] = bitmap
}
fun getImage(book: Book, chapterIndex: Int, src: String, referrer: String?, onUi: Boolean = false): Bitmap? {
fun getImage(book: Book, chapterIndex: Int, src: String, onUi: Boolean = false): Bitmap? {
getCache(chapterIndex, src)?.let {
return it
}
val vFile = FileUtils.getFile(
App.INSTANCE.externalFilesDir,
"${MD5Utils.md5Encode16(src)}${src.substringAfterLast(".")}",
"${MD5Utils.md5Encode16(src)}${src.substringAfterLast(".").substringBefore(",")}",
"images", book.name
)
if (!vFile.exists()) {
@ -48,8 +49,9 @@ object ImageProvider {
out.flush()
out.close()
}
} else if (!onUi && referrer != null) {
HttpHelper.getBytes(src, referrer)?.let {
} else if (!onUi) {
val analyzeUrl = AnalyzeUrl(src, null, null, null, null)
analyzeUrl.getImageBytes(book.origin)?.let {
FileUtils.createFileIfNotExist(vFile.absolutePath).writeBytes(it)
}
}

@ -56,7 +56,7 @@ class PhotoDialog : BaseDialogFragment() {
val src = it.getString("src")
ReadBook.book?.let { book ->
src?.let {
ImageProvider.getImage(book, chapterIndex, src, null)?.let { bitmap ->
ImageProvider.getImage(book, chapterIndex, src)?.let { bitmap ->
photo_view.setImageBitmap(bitmap)
}
}

Loading…
Cancel
Save