优化
This commit is contained in:
@@ -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() {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -12,6 +12,7 @@ import com.bumptech.glide.load.model.GlideUrl
|
|||||||
import com.bumptech.glide.module.AppGlideModule
|
import com.bumptech.glide.module.AppGlideModule
|
||||||
import io.legado.app.BuildConfig
|
import io.legado.app.BuildConfig
|
||||||
import io.legado.app.help.config.AppConfig
|
import io.legado.app.help.config.AppConfig
|
||||||
|
import java.io.File
|
||||||
import java.io.InputStream
|
import java.io.InputStream
|
||||||
|
|
||||||
|
|
||||||
@@ -30,6 +31,11 @@ class LegadoGlideModule : AppGlideModule() {
|
|||||||
InputStream::class.java,
|
InputStream::class.java,
|
||||||
LegadoDataUrlLoader.Factory()
|
LegadoDataUrlLoader.Factory()
|
||||||
)
|
)
|
||||||
|
registry.prepend(
|
||||||
|
String::class.java,
|
||||||
|
File::class.java,
|
||||||
|
FilePathLoader.Factory()
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun applyOptions(context: Context, builder: GlideBuilder) {
|
override fun applyOptions(context: Context, builder: GlideBuilder) {
|
||||||
|
|||||||
Reference in New Issue
Block a user