feat:使用glide解码正文图片

pull/1770/head
Xwite 2 years ago
parent cb4cd4fd1e
commit 9c5fdfe46c
  1. 2
      app/src/main/java/io/legado/app/model/ReadBook.kt
  2. 52
      app/src/main/java/io/legado/app/ui/book/read/page/provider/ImageProvider.kt

@ -55,7 +55,6 @@ object ReadBook : CoroutineScope by MainScope() {
callBack?.upMenuView() callBack?.upMenuView()
callBack?.upPageAnim() callBack?.upPageAnim()
upWebBook(book) upWebBook(book)
ImageProvider.clearAllCache()
synchronized(this) { synchronized(this) {
loadingChapters.clear() loadingChapters.clear()
} }
@ -207,7 +206,6 @@ object ReadBook : CoroutineScope by MainScope() {
} }
upReadTime() upReadTime()
preDownload() preDownload()
ImageProvider.clearOut(durChapterIndex)
} }
/** /**

@ -4,32 +4,17 @@ import android.graphics.Bitmap
import io.legado.app.data.entities.Book import io.legado.app.data.entities.Book
import io.legado.app.data.entities.BookSource import io.legado.app.data.entities.BookSource
import io.legado.app.help.BookHelp import io.legado.app.help.BookHelp
import io.legado.app.help.glide.ImageLoader
import io.legado.app.model.localBook.EpubFile import io.legado.app.model.localBook.EpubFile
import io.legado.app.utils.BitmapUtils import io.legado.app.utils.BitmapUtils
import io.legado.app.utils.FileUtils import io.legado.app.utils.FileUtils
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import splitties.init.appCtx
import java.io.FileOutputStream import java.io.FileOutputStream
import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.ConcurrentHashMap
object ImageProvider { object ImageProvider {
private val cache = ConcurrentHashMap<Int, ConcurrentHashMap<String, Bitmap>>()
@Synchronized
fun getCache(chapterIndex: Int, src: String): Bitmap? {
return cache[chapterIndex]?.get(src)
}
@Synchronized
fun setCache(chapterIndex: Int, src: String, bitmap: Bitmap) {
var indexCache = cache[chapterIndex]
if (indexCache == null) {
indexCache = ConcurrentHashMap()
cache[chapterIndex] = indexCache
}
indexCache[src] = bitmap
}
fun getImage( fun getImage(
book: Book, book: Book,
chapterIndex: Int, chapterIndex: Int,
@ -37,9 +22,6 @@ object ImageProvider {
bookSource: BookSource?, bookSource: BookSource?,
onUi: Boolean = false, onUi: Boolean = false,
): Bitmap? { ): Bitmap? {
getCache(chapterIndex, src)?.let {
return it
}
val vFile = BookHelp.getImage(book, src) val vFile = BookHelp.getImage(book, src)
if (!vFile.exists()) { if (!vFile.exists()) {
if (book.isEpub()) { if (book.isEpub()) {
@ -56,38 +38,10 @@ object ImageProvider {
} }
} }
return try { return try {
val bitmap = BitmapUtils.decodeBitmap( ImageLoader.loadBitmap(appCtx, vFile.absolutePath).submit().get()
vFile.absolutePath,
ChapterProvider.visibleWidth,
ChapterProvider.visibleHeight
)
setCache(chapterIndex, src, bitmap)
bitmap
} catch (e: Exception) { } catch (e: Exception) {
null null
} }
} }
@Synchronized
fun clearAllCache() {
cache.forEach { indexCache ->
indexCache.value.forEach {
it.value.recycle()
}
}
cache.clear()
}
@Synchronized
fun clearOut(chapterIndex: Int) {
cache.forEach { indexCache ->
if (indexCache.key !in chapterIndex - 1..chapterIndex + 1) {
indexCache.value.forEach {
it.value.recycle()
}
cache.remove(indexCache.key)
}
}
}
} }

Loading…
Cancel
Save