summaryrefslogtreecommitdiff
path: root/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/utils/StreamGlideModule.java
diff options
context:
space:
mode:
Diffstat (limited to 'org.fox.ttcomics/src/main/java/org/fox/ttcomics2/utils/StreamGlideModule.java')
-rwxr-xr-xorg.fox.ttcomics/src/main/java/org/fox/ttcomics2/utils/StreamGlideModule.java59
1 files changed, 59 insertions, 0 deletions
diff --git a/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/utils/StreamGlideModule.java b/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/utils/StreamGlideModule.java
new file mode 100755
index 0000000..3659bfa
--- /dev/null
+++ b/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/utils/StreamGlideModule.java
@@ -0,0 +1,59 @@
+package org.fox.ttcomics2.utils;
+
+import android.content.Context;
+import android.util.Log;
+
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.GlideBuilder;
+import com.bumptech.glide.Priority;
+import com.bumptech.glide.load.data.DataFetcher;
+import com.bumptech.glide.load.model.GenericLoaderFactory;
+import com.bumptech.glide.load.model.ModelLoader;
+import com.bumptech.glide.load.model.ModelLoaderFactory;
+import com.bumptech.glide.load.model.stream.StreamModelLoader;
+import com.bumptech.glide.module.GlideModule;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+class StreamGlideModule implements GlideModule {
+ @Override public void applyOptions(Context context, GlideBuilder builder) {
+
+ }
+ @Override public void registerComponents(Context context, Glide glide) {
+ glide.register(InputStream.class, InputStream.class, new PassthroughStreamLoader.Factory());
+ }
+}
+
+class PassthroughStreamLoader implements StreamModelLoader<InputStream> {
+ @Override public DataFetcher<InputStream> getResourceFetcher(final InputStream model, int width, int height) {
+ return new DataFetcher<InputStream>() {
+ @Override public InputStream loadData(Priority priority) throws Exception {
+ return model;
+ }
+ @Override public void cleanup() {
+ try {
+ model.close();
+ } catch (IOException e) {
+ Log.w("PassthroughDataFetcher", "Cannot clean up after stream", e);
+ }
+ }
+ @Override public String getId() {
+ return String.valueOf(System.currentTimeMillis()); // There's no way to have a meaningful value here,
+ // which means that caching of straight-loaded InputStreams is not possible.
+ }
+ @Override public void cancel() {
+ // do nothing
+ }
+ };
+ }
+
+ public static class Factory implements ModelLoaderFactory<InputStream, InputStream> {
+ @Override public ModelLoader<InputStream, InputStream> build(Context context, GenericLoaderFactory factories) {
+ return new PassthroughStreamLoader();
+ }
+ @Override public void teardown() {
+ // nothing to do
+ }
+ }
+} \ No newline at end of file