Explorar el Código

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	app/src/main/java/io/legado/app/ui/book/read/page/provider/ImageProvider.kt
kunfei hace 4 años
padre
commit
dd2bc79e6b

+ 21 - 56
app/src/main/java/io/legado/app/ui/book/read/page/provider/ImageProvider.kt

@@ -1,74 +1,33 @@
 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
 import io.legado.app.data.entities.BookSource
 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.BitmapUtils
 import io.legado.app.utils.FileUtils
+import io.legado.app.utils.BitmapUtils
+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,
@@ -90,14 +49,20 @@ object ImageProvider {
                 }
             }
         }
-        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
-        }
+       return try {
+            ImageLoader.loadBitmap(appCtx, vFile.absolutePath)
+                .submit(ChapterProvider.visibleWidth,ChapterProvider.visibleHeight)
+                .get()
+       } catch (e: Exception) {
+           Coroutine.async {
+               putDebug("${vFile.absolutePath} 解码失败", e)
+               if (FileUtils.readText(vFile.absolutePath).isXml()) {
+                   putDebug("${vFile.absolutePath}为xml,自动删除")
+                   vFile.delete()
+               }
+           }
+           errorBitmap
+       }
     }
 
 }