From f81c77c67898c9a71a9191e3110395358f1f2e91 Mon Sep 17 00:00:00 2001 From: Horis <8674809+821938089@users.noreply.github.com> Date: Sat, 3 May 2025 13:29:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../legado/app/help/glide/FilePathLoader.kt | 57 +++++++++++++++++++ .../app/help/glide/LegadoGlideModule.kt | 6 ++ 2 files changed, 63 insertions(+) create mode 100644 app/src/main/java/io/legado/app/help/glide/FilePathLoader.kt diff --git a/app/src/main/java/io/legado/app/help/glide/FilePathLoader.kt b/app/src/main/java/io/legado/app/help/glide/FilePathLoader.kt new file mode 100644 index 000000000..149020bfd --- /dev/null +++ b/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 { + override fun buildLoadData( + model: String, + width: Int, + height: Int, + options: com.bumptech.glide.load.Options + ): ModelLoader.LoadData? { + return ModelLoader.LoadData(ObjectKey(model), FilePathFetcher(model)) + } + + override fun handles(model: String): Boolean { + return true + } + + class FilePathFetcher(private val filePath: String) : DataFetcher { + override fun loadData( + priority: Priority, + callback: DataFetcher.DataCallback + ) { + 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::class.java + + override fun getDataSource(): DataSource = DataSource.LOCAL + } + + class Factory : ModelLoaderFactory { + override fun build(multiFactory: MultiModelLoaderFactory): ModelLoader { + return FilePathLoader() + } + + override fun teardown() {} + } +} + + diff --git a/app/src/main/java/io/legado/app/help/glide/LegadoGlideModule.kt b/app/src/main/java/io/legado/app/help/glide/LegadoGlideModule.kt index 3f11eefd5..7d70f6574 100644 --- a/app/src/main/java/io/legado/app/help/glide/LegadoGlideModule.kt +++ b/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) {