|
|
|
@ -13,6 +13,7 @@ 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 kotlinx.coroutines.runBlocking |
|
|
|
|
import splitties.init.appCtx |
|
|
|
|
import java.io.File |
|
|
|
@ -20,6 +21,15 @@ import java.io.FileOutputStream |
|
|
|
|
|
|
|
|
|
object ImageProvider { |
|
|
|
|
|
|
|
|
|
private val errorBitmap: Bitmap? by lazy { |
|
|
|
|
BitmapUtils.decodeBitmap( |
|
|
|
|
appCtx, |
|
|
|
|
R.drawable.image_loading_error, |
|
|
|
|
ChapterProvider.visibleWidth, |
|
|
|
|
ChapterProvider.visibleHeight |
|
|
|
|
) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
fun getImage( |
|
|
|
|
book: Book, |
|
|
|
|
src: String, |
|
|
|
@ -41,40 +51,13 @@ object ImageProvider { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return ImageLoader.loadBitmap(appCtx, vFile.absolutePath) |
|
|
|
|
.error(R.drawable.image_loading_error) |
|
|
|
|
.listener(glideListener) |
|
|
|
|
.submit() |
|
|
|
|
.get() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private val glideListener by lazy { |
|
|
|
|
object : RequestListener<Bitmap> { |
|
|
|
|
|
|
|
|
|
override fun onLoadFailed( |
|
|
|
|
e: GlideException?, |
|
|
|
|
model: Any?, |
|
|
|
|
target: Target<Bitmap>?, |
|
|
|
|
isFirstResource: Boolean |
|
|
|
|
): Boolean { |
|
|
|
|
Coroutine.async { |
|
|
|
|
(model as? String)?.let { path -> |
|
|
|
|
File(path).delete() |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return false |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override fun onResourceReady( |
|
|
|
|
resource: Bitmap?, |
|
|
|
|
model: Any?, |
|
|
|
|
target: Target<Bitmap>?, |
|
|
|
|
dataSource: DataSource?, |
|
|
|
|
isFirstResource: Boolean |
|
|
|
|
): Boolean { |
|
|
|
|
return false |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return try { |
|
|
|
|
ImageLoader.loadBitmap(appCtx, vFile.absolutePath).submit().get() |
|
|
|
|
} catch (e: Exception) { |
|
|
|
|
Coroutine.async { vFile.delete() } |
|
|
|
|
//must call this method on a background thread |
|
|
|
|
//ImageLoader.loadBitmap(appCtx, R.drawable.image_loading_error).submit().get() |
|
|
|
|
errorBitmap |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|