Horis před 1 rokem
rodič
revize
359df11dfc

+ 18 - 8
app/src/main/java/io/legado/app/api/controller/BookController.kt

@@ -1,5 +1,7 @@
 package io.legado.app.api.controller
 package io.legado.app.api.controller
 
 
+import android.graphics.Bitmap
+import android.graphics.drawable.Drawable
 import androidx.core.graphics.drawable.toBitmap
 import androidx.core.graphics.drawable.toBitmap
 import com.bumptech.glide.Glide
 import com.bumptech.glide.Glide
 import io.legado.app.api.ReturnData
 import io.legado.app.api.ReturnData
@@ -29,6 +31,7 @@ import kotlinx.coroutines.delay
 import kotlinx.coroutines.runBlocking
 import kotlinx.coroutines.runBlocking
 import splitties.init.appCtx
 import splitties.init.appCtx
 import java.io.File
 import java.io.File
+import java.util.WeakHashMap
 import java.util.concurrent.TimeUnit
 import java.util.concurrent.TimeUnit
 
 
 object BookController {
 object BookController {
@@ -36,6 +39,7 @@ object BookController {
     private lateinit var book: Book
     private lateinit var book: Book
     private var bookSource: BookSource? = null
     private var bookSource: BookSource? = null
     private var bookUrl: String = ""
     private var bookUrl: String = ""
+    private val defaultCoverCache by lazy { WeakHashMap<Drawable, Bitmap>() }
 
 
     /**
     /**
      * 书架所有书籍
      * 书架所有书籍
@@ -77,14 +81,20 @@ object BookController {
         } catch (e: Exception) {
         } catch (e: Exception) {
             LogUtils.d("BookController", "Error getCover($startAt) $coverPath\n$e")
             LogUtils.d("BookController", "Error getCover($startAt) $coverPath\n$e")
             try {
             try {
-                val defaultBitmap = Glide.with(appCtx)
-                    .asBitmap()
-                    .load(BookCover.defaultDrawable.toBitmap())
-                    .override(84, 112)
-                    .centerCrop()
-                    .submit()
-                    .get(3, TimeUnit.SECONDS)
-                returnData.setData(defaultBitmap)
+                val cached = defaultCoverCache[BookCover.defaultDrawable]
+                if (cached == null) {
+                    val defaultBitmap = Glide.with(appCtx)
+                        .asBitmap()
+                        .load(BookCover.defaultDrawable.toBitmap())
+                        .override(84, 112)
+                        .centerCrop()
+                        .submit()
+                        .get(3, TimeUnit.SECONDS)
+                    defaultCoverCache[BookCover.defaultDrawable] = defaultBitmap
+                    returnData.setData(defaultBitmap)
+                } else {
+                    returnData.setData(cached)
+                }
             } catch (e: Exception) {
             } catch (e: Exception) {
                 returnData.setErrorMsg(e.localizedMessage ?: "getCover error")
                 returnData.setErrorMsg(e.localizedMessage ?: "getCover error")
             }
             }