summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorByteHamster <info@bytehamster.com>2020-03-16 00:55:05 +0100
committerByteHamster <info@bytehamster.com>2020-03-16 01:15:16 +0100
commit7bfee9ba0f69610364f41493bb1301d1b4a40a12 (patch)
treeea34c0602a9735abbf48730080d37b88c2bba89e
parent03d1f41e9bd88e1920be306ef8bcd10642ce5527 (diff)
downloadAntennaPod-7bfee9ba0f69610364f41493bb1301d1b4a40a12.zip
Enable caching for web responses
-rw-r--r--app/src/main/java/de/danoeh/antennapod/discovery/ItunesTopListLoader.java3
-rw-r--r--core/src/free/java/de/danoeh/antennapod/core/ClientConfig.java2
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java29
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java2
-rw-r--r--core/src/play/java/de/danoeh/antennapod/core/ClientConfig.java2
5 files changed, 26 insertions, 12 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/discovery/ItunesTopListLoader.java b/app/src/main/java/de/danoeh/antennapod/discovery/ItunesTopListLoader.java
index ee318c706..bb0e165b7 100644
--- a/app/src/main/java/de/danoeh/antennapod/discovery/ItunesTopListLoader.java
+++ b/app/src/main/java/de/danoeh/antennapod/discovery/ItunesTopListLoader.java
@@ -10,6 +10,7 @@ import io.reactivex.Single;
import io.reactivex.SingleOnSubscribe;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
+import okhttp3.CacheControl;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
@@ -21,6 +22,7 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
+import java.util.concurrent.TimeUnit;
public class ItunesTopListLoader {
private static final String TAG = "ITunesTopListLoader";
@@ -81,6 +83,7 @@ public class ItunesTopListLoader {
String url = "https://itunes.apple.com/%s/rss/toppodcasts/limit=" + limit + "/explicit=true/json";
Log.d(TAG, "Feed URL " + String.format(url, country));
Request.Builder httpReq = new Request.Builder()
+ .cacheControl(new CacheControl.Builder().minFresh(1, TimeUnit.DAYS).build())
.header("User-Agent", ClientConfig.USER_AGENT)
.url(String.format(url, country));
diff --git a/core/src/free/java/de/danoeh/antennapod/core/ClientConfig.java b/core/src/free/java/de/danoeh/antennapod/core/ClientConfig.java
index 54cd84b43..cd075c1cf 100644
--- a/core/src/free/java/de/danoeh/antennapod/core/ClientConfig.java
+++ b/core/src/free/java/de/danoeh/antennapod/core/ClientConfig.java
@@ -5,6 +5,7 @@ import android.content.Context;
import de.danoeh.antennapod.core.preferences.PlaybackPreferences;
import de.danoeh.antennapod.core.preferences.SleepTimerPreferences;
import de.danoeh.antennapod.core.preferences.UserPreferences;
+import de.danoeh.antennapod.core.service.download.AntennapodHttpClient;
import de.danoeh.antennapod.core.storage.PodDBAdapter;
import de.danoeh.antennapod.core.util.NetworkUtils;
import de.danoeh.antennapod.core.util.exception.RxJavaErrorHandlerSetup;
@@ -43,6 +44,7 @@ public class ClientConfig {
UserPreferences.init(context);
PlaybackPreferences.init(context);
NetworkUtils.init(context);
+ AntennapodHttpClient.setCacheDirectory(context.getCacheDir());
SleepTimerPreferences.init(context);
RxJavaErrorHandlerSetup.setupRxJavaErrorHandler();
NotificationUtils.createChannels(context);
diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java
index 8f368c76e..ee0f8bd95 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java
@@ -6,6 +6,8 @@ import android.text.TextUtils;
import android.util.Log;
import de.danoeh.antennapod.core.service.BasicAuthorizationInterceptor;
+
+import java.io.File;
import java.io.IOException;
import java.net.CookieManager;
import java.net.CookiePolicy;
@@ -31,6 +33,7 @@ import javax.net.ssl.X509TrustManager;
import de.danoeh.antennapod.core.preferences.UserPreferences;
import de.danoeh.antennapod.core.storage.DBWriter;
+import okhttp3.Cache;
import okhttp3.CipherSuite;
import okhttp3.ConnectionSpec;
import okhttp3.Credentials;
@@ -45,19 +48,18 @@ import okhttp3.internal.http.StatusLine;
* Provides access to a HttpClient singleton.
*/
public class AntennapodHttpClient {
-
- private AntennapodHttpClient(){}
-
private static final String TAG = "AntennapodHttpClient";
-
private static final int CONNECTION_TIMEOUT = 10000;
private static final int READ_TIMEOUT = 30000;
-
private static final int MAX_CONNECTIONS = 8;
-
+ private static File cacheDirectory;
private static volatile OkHttpClient httpClient = null;
+ private AntennapodHttpClient() {
+
+ }
+
/**
* Returns the HttpClient singleton.
*/
@@ -91,14 +93,14 @@ public class AntennapodHttpClient {
builder.networkInterceptors().add(chain -> {
Request request = chain.request();
Response response = chain.proceed(request);
- if (response.code() == HttpURLConnection.HTTP_MOVED_PERM ||
- response.code() == StatusLine.HTTP_PERM_REDIRECT) {
+ if (response.code() == HttpURLConnection.HTTP_MOVED_PERM
+ || response.code() == StatusLine.HTTP_PERM_REDIRECT) {
String location = response.header("Location");
if (location.startsWith("/")) { // URL is not absolute, but relative
HttpUrl url = request.url();
location = url.scheme() + "://" + url.host() + location;
- } else if (!location.toLowerCase().startsWith("http://") &&
- !location.toLowerCase().startsWith("https://")) {
+ } else if (!location.toLowerCase().startsWith("http://")
+ && !location.toLowerCase().startsWith("https://")) {
// Reference is relative to current path
HttpUrl url = request.url();
String path = url.encodedPath();
@@ -124,6 +126,7 @@ public class AntennapodHttpClient {
builder.connectTimeout(CONNECTION_TIMEOUT, TimeUnit.MILLISECONDS);
builder.readTimeout(READ_TIMEOUT, TimeUnit.MILLISECONDS);
builder.writeTimeout(READ_TIMEOUT, TimeUnit.MILLISECONDS);
+ builder.cache(new Cache(cacheDirectory, 20L * 1000000)); // 20MB
// configure redirects
builder.followRedirects(true);
@@ -146,9 +149,7 @@ public class AntennapodHttpClient {
}
if (Build.VERSION.SDK_INT < 21) {
builder.sslSocketFactory(new CustomSslSocketFactory(), trustManager());
- }
- if (Build.VERSION.SDK_INT < 21) {
// workaround for Android 4.x for certain web sites.
// see: https://github.com/square/okhttp/issues/4053#issuecomment-402579554
List<CipherSuite> cipherSuites = new ArrayList<>();
@@ -192,6 +193,10 @@ public class AntennapodHttpClient {
}
}
+ public static void setCacheDirectory(File cacheDirectory) {
+ AntennapodHttpClient.cacheDirectory = cacheDirectory;
+ }
+
private static class CustomSslSocketFactory extends SSLSocketFactory {
private SSLSocketFactory factory;
diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java
index 551a20bf2..46b8568c5 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java
@@ -5,6 +5,7 @@ import android.text.TextUtils;
import android.util.Log;
import de.danoeh.antennapod.core.service.BasicAuthorizationInterceptor;
+import okhttp3.CacheControl;
import org.apache.commons.io.IOUtils;
import java.io.BufferedInputStream;
@@ -69,6 +70,7 @@ public class HttpDownloader extends Downloader {
// set header explicitly so that okhttp doesn't do transparent gzip
Log.d(TAG, "addHeader(\"Accept-Encoding\", \"identity\")");
httpReq.addHeader("Accept-Encoding", "identity");
+ httpReq.cacheControl(new CacheControl.Builder().noStore().build());
}
if (!TextUtils.isEmpty(request.getLastModified())) {
diff --git a/core/src/play/java/de/danoeh/antennapod/core/ClientConfig.java b/core/src/play/java/de/danoeh/antennapod/core/ClientConfig.java
index c92ce3e74..afed2aaae 100644
--- a/core/src/play/java/de/danoeh/antennapod/core/ClientConfig.java
+++ b/core/src/play/java/de/danoeh/antennapod/core/ClientConfig.java
@@ -11,6 +11,7 @@ import de.danoeh.antennapod.core.cast.CastManager;
import de.danoeh.antennapod.core.preferences.PlaybackPreferences;
import de.danoeh.antennapod.core.preferences.SleepTimerPreferences;
import de.danoeh.antennapod.core.preferences.UserPreferences;
+import de.danoeh.antennapod.core.service.download.AntennapodHttpClient;
import de.danoeh.antennapod.core.storage.PodDBAdapter;
import de.danoeh.antennapod.core.util.NetworkUtils;
import de.danoeh.antennapod.core.util.exception.RxJavaErrorHandlerSetup;
@@ -62,6 +63,7 @@ public class ClientConfig {
Log.v(TAG, "Cast is disabled. All Cast-related initialization will be skipped.");
}
installSslProvider(context);
+ AntennapodHttpClient.setCacheDirectory(context.getCacheDir());
SleepTimerPreferences.init(context);
RxJavaErrorHandlerSetup.setupRxJavaErrorHandler();
NotificationUtils.createChannels(context);