summaryrefslogtreecommitdiff
path: root/core/src/main/java/de
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/main/java/de')
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/glide/ChapterImageModelLoader.java31
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);
}