diff options
author | ByteHamster <info@bytehamster.com> | 2020-02-12 18:09:25 +0100 |
---|---|---|
committer | ByteHamster <info@bytehamster.com> | 2020-02-12 18:12:42 +0100 |
commit | ddfb4de9cff67bd33a600a34cb2333fb0c9f6fc2 (patch) | |
tree | b0c6a04da4ab75f1461b0df1e7af415875b57efe /core/src/main/java/de | |
parent | 9a492fa40634f684828323b0e25e6e344b1ac888 (diff) | |
download | AntennaPod-ddfb4de9cff67bd33a600a34cb2333fb0c9f6fc2.zip |
Load range only
Diffstat (limited to 'core/src/main/java/de')
-rw-r--r-- | core/src/main/java/de/danoeh/antennapod/core/glide/ChapterImageModelLoader.java | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/core/src/main/java/de/danoeh/antennapod/core/glide/ChapterImageModelLoader.java b/core/src/main/java/de/danoeh/antennapod/core/glide/ChapterImageModelLoader.java index 6548e9c5e..bc0a06a07 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/glide/ChapterImageModelLoader.java +++ b/core/src/main/java/de/danoeh/antennapod/core/glide/ChapterImageModelLoader.java @@ -10,7 +10,9 @@ 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 de.danoeh.antennapod.core.ClientConfig; import de.danoeh.antennapod.core.feed.Chapter; +import de.danoeh.antennapod.core.service.download.AntennapodHttpClient; import de.danoeh.antennapod.core.util.EmbeddedChapterImage; import java.io.BufferedInputStream; import java.io.File; @@ -18,6 +20,9 @@ import java.io.FileInputStream; import java.io.IOException; import java.net.URL; import java.nio.ByteBuffer; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; import org.apache.commons.io.IOUtils; public final class ChapterImageModelLoader implements ModelLoader<EmbeddedChapterImage, ByteBuffer> { @@ -45,7 +50,7 @@ public final class ChapterImageModelLoader implements ModelLoader<EmbeddedChapte return true; } - class EmbeddedImageFetcher implements DataFetcher<ByteBuffer> { + static class EmbeddedImageFetcher implements DataFetcher<ByteBuffer> { private final EmbeddedChapterImage image; public EmbeddedImageFetcher(EmbeddedChapterImage image) { @@ -60,17 +65,25 @@ public final class ChapterImageModelLoader implements ModelLoader<EmbeddedChapte if (image.getMedia().localFileAvailable()) { File localFile = new File(image.getMedia().getLocalMediaUrl()); stream = new BufferedInputStream(new FileInputStream(localFile)); + stream.skip(image.getPosition()); + byte[] imageContent = new byte[image.getLength()]; + stream.read(imageContent, 0, image.getLength()); + callback.onDataReady(ByteBuffer.wrap(imageContent)); } else { - URL url = new URL(image.getMedia().getStreamUrl()); - stream = new BufferedInputStream(url.openStream()); + Request.Builder httpReq = new Request.Builder(); + httpReq.header("User-Agent", ClientConfig.USER_AGENT); + // Skipping would download the whole file + httpReq.header("Range", "bytes=" + image.getPosition() + + "-" + (image.getPosition() + image.getLength())); + httpReq.url(image.getMedia().getStreamUrl()); + Response response = AntennapodHttpClient.getHttpClient().newCall(httpReq.build()).execute(); + if (!response.isSuccessful() || response.body() == null) { + throw new IOException("Invalid response: " + response.code() + " " + response.message()); + } + callback.onDataReady(ByteBuffer.wrap(response.body().bytes())); } - byte[] imageContent = new byte[image.getLength()]; - stream.skip(image.getPosition()); - stream.read(imageContent, 0, image.getLength()); - callback.onDataReady(ByteBuffer.wrap(imageContent)); } catch (IOException e) { - callback.onLoadFailed(new IOException("Loading embedded cover did not work")); - e.printStackTrace(); + callback.onLoadFailed(e); } finally { IOUtils.closeQuietly(stream); } |