Horis 1 rok temu
rodzic
commit
58b6df5a3c

+ 57 - 0
app/src/main/java/io/legado/app/help/glide/FilePathLoader.kt

@@ -0,0 +1,57 @@
+package io.legado.app.help.glide
+
+import com.bumptech.glide.Priority
+import com.bumptech.glide.load.DataSource
+import com.bumptech.glide.load.data.DataFetcher
+import com.bumptech.glide.load.model.ModelLoader
+import com.bumptech.glide.load.model.ModelLoaderFactory
+import com.bumptech.glide.load.model.MultiModelLoaderFactory
+import com.bumptech.glide.signature.ObjectKey
+import java.io.File
+
+class FilePathLoader : ModelLoader<String, File> {
+    override fun buildLoadData(
+        model: String,
+        width: Int,
+        height: Int,
+        options: com.bumptech.glide.load.Options
+    ): ModelLoader.LoadData<File>? {
+        return ModelLoader.LoadData(ObjectKey(model), FilePathFetcher(model))
+    }
+
+    override fun handles(model: String): Boolean {
+        return true
+    }
+
+    class FilePathFetcher(private val filePath: String) : DataFetcher<File> {
+        override fun loadData(
+            priority: Priority,
+            callback: DataFetcher.DataCallback<in File>
+        ) {
+            val file = File(filePath)
+            if (file.exists() && file.isFile) {
+                callback.onDataReady(file)
+            } else {
+                callback.onLoadFailed(Exception("File not found: $filePath"))
+            }
+        }
+
+        override fun cleanup() {}
+
+        override fun cancel() {}
+
+        override fun getDataClass(): Class<File> = File::class.java
+
+        override fun getDataSource(): DataSource = DataSource.LOCAL
+    }
+
+    class Factory : ModelLoaderFactory<String, File> {
+        override fun build(multiFactory: MultiModelLoaderFactory): ModelLoader<String, File> {
+            return FilePathLoader()
+        }
+
+        override fun teardown() {}
+    }
+}
+
+

+ 6 - 0
app/src/main/java/io/legado/app/help/glide/LegadoGlideModule.kt

@@ -12,6 +12,7 @@ import com.bumptech.glide.load.model.GlideUrl
 import com.bumptech.glide.module.AppGlideModule
 import io.legado.app.BuildConfig
 import io.legado.app.help.config.AppConfig
+import java.io.File
 import java.io.InputStream
 
 
@@ -30,6 +31,11 @@ class LegadoGlideModule : AppGlideModule() {
             InputStream::class.java,
             LegadoDataUrlLoader.Factory()
         )
+        registry.prepend(
+            String::class.java,
+            File::class.java,
+            FilePathLoader.Factory()
+        )
     }
 
     override fun applyOptions(context: Context, builder: GlideBuilder) {