pull/1778/head
kunfei 3 years ago
parent 6287e899c0
commit 8875e0a759
  1. 53
      app/src/main/java/io/legado/app/ui/book/read/page/provider/ImageProvider.kt

@ -1,6 +1,7 @@
package io.legado.app.ui.book.read.page.provider
import android.graphics.Bitmap
import android.util.Size
import io.legado.app.R
import io.legado.app.constant.AppLog.putDebug
import io.legado.app.data.entities.Book
@ -9,25 +10,67 @@ import io.legado.app.help.BookHelp
import io.legado.app.help.coroutine.Coroutine
import io.legado.app.help.glide.ImageLoader
import io.legado.app.model.localBook.EpubFile
import io.legado.app.utils.FileUtils
import io.legado.app.utils.BitmapUtils
import io.legado.app.utils.FileUtils
import io.legado.app.utils.isXml
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.suspendCancellableCoroutine
import splitties.init.appCtx
import java.io.File
import java.io.FileOutputStream
import kotlin.coroutines.resume
object ImageProvider {
private val errorBitmap: Bitmap? by lazy {
BitmapUtils.decodeBitmap(
appCtx,
R.drawable.image_loading_error,
ChapterProvider.visibleWidth,
ChapterProvider.visibleHeight
appCtx,
R.drawable.image_loading_error,
ChapterProvider.visibleWidth,
ChapterProvider.visibleHeight
)
}
private suspend fun cacheImage(
book: Book,
src: String,
bookSource: BookSource?
): File {
val vFile = BookHelp.getImage(book, src)
if (!vFile.exists()) {
if (book.isEpub()) {
EpubFile.getImage(book, src)?.use { input ->
val newFile = FileUtils.createFileIfNotExist(vFile.absolutePath)
@Suppress("BlockingMethodInNonBlockingContext")
FileOutputStream(newFile).use { output ->
input.copyTo(output)
}
}
} else {
BookHelp.saveImage(bookSource, book, src)
}
}
return vFile
}
suspend fun getImageSize(
book: Book,
src: String,
bookSource: BookSource?
): Size {
val file = cacheImage(book, src, bookSource)
return suspendCancellableCoroutine { block ->
kotlin.runCatching {
ImageLoader.loadBitmap(appCtx, file.absolutePath).submit()
.getSize { width, height ->
block.resume(Size(width, height))
}
}.onFailure {
block.cancel(it)
}
}
}
fun getImage(
book: Book,
src: String,

Loading…
Cancel
Save