From b5aa1a459816195d48cf3dd8f6c77c0c1187c9b1 Mon Sep 17 00:00:00 2001 From: Grishka Date: Thu, 18 Apr 2024 02:55:07 +0300 Subject: [PATCH] Cache donation campaign responses --- .../android/api/MastodonAPIController.java | 10 ++++++++++ .../joinmastodon/android/api/MastodonAPIRequest.java | 5 +++++ .../api/requests/catalog/GetDonationCampaigns.java | 1 + 3 files changed, 16 insertions(+) diff --git a/mastodon/src/main/java/org/joinmastodon/android/api/MastodonAPIController.java b/mastodon/src/main/java/org/joinmastodon/android/api/MastodonAPIController.java index 384378df..a2d2a320 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/api/MastodonAPIController.java +++ b/mastodon/src/main/java/org/joinmastodon/android/api/MastodonAPIController.java @@ -12,10 +12,12 @@ import com.google.gson.JsonParser; import com.google.gson.JsonSyntaxException; import org.joinmastodon.android.BuildConfig; +import org.joinmastodon.android.MastodonApp; import org.joinmastodon.android.api.gson.IsoInstantTypeAdapter; import org.joinmastodon.android.api.gson.IsoLocalDateTypeAdapter; import org.joinmastodon.android.api.session.AccountSession; +import java.io.File; import java.io.IOException; import java.io.Reader; import java.time.Instant; @@ -29,6 +31,8 @@ import java.util.concurrent.TimeUnit; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import me.grishka.appkit.utils.WorkerThread; +import okhttp3.Cache; +import okhttp3.CacheControl; import okhttp3.Call; import okhttp3.Callback; import okhttp3.OkHttpClient; @@ -49,8 +53,11 @@ public class MastodonAPIController{ .connectTimeout(60, TimeUnit.SECONDS) .writeTimeout(60, TimeUnit.SECONDS) .readTimeout(60, TimeUnit.SECONDS) + .cache(new Cache(new File(MastodonApp.context.getCacheDir(), "http"), 10*1024*1024)) .build(); + private static final CacheControl NO_CACHE_WHATSOEVER=new CacheControl.Builder().noCache().noStore().build(); + private AccountSession session; static{ @@ -80,6 +87,9 @@ public class MastodonAPIController{ if(token!=null) builder.header("Authorization", "Bearer "+token); + if(!req.cacheable) + builder.cacheControl(NO_CACHE_WHATSOEVER); + if(req.headers!=null){ for(Map.Entry header:req.headers.entrySet()){ builder.header(header.getKey(), header.getValue()); diff --git a/mastodon/src/main/java/org/joinmastodon/android/api/MastodonAPIRequest.java b/mastodon/src/main/java/org/joinmastodon/android/api/MastodonAPIRequest.java index f308d872..c780bbcf 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/api/MastodonAPIRequest.java +++ b/mastodon/src/main/java/org/joinmastodon/android/api/MastodonAPIRequest.java @@ -46,6 +46,7 @@ public abstract class MastodonAPIRequest extends APIRequest{ boolean canceled; Map headers; long timeout; + boolean cacheable; private ProgressDialog progressDialog; protected boolean removeUnsupportedItems; @@ -132,6 +133,10 @@ public abstract class MastodonAPIRequest extends APIRequest{ this.timeout=timeout; } + protected void setCacheable(){ + cacheable=true; + } + protected String getPathPrefix(){ return "/api/v1"; } diff --git a/mastodon/src/main/java/org/joinmastodon/android/api/requests/catalog/GetDonationCampaigns.java b/mastodon/src/main/java/org/joinmastodon/android/api/requests/catalog/GetDonationCampaigns.java index e6f018ef..937aa6cc 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/api/requests/catalog/GetDonationCampaigns.java +++ b/mastodon/src/main/java/org/joinmastodon/android/api/requests/catalog/GetDonationCampaigns.java @@ -12,6 +12,7 @@ public class GetDonationCampaigns extends MastodonAPIRequest{ super(HttpMethod.GET, null, DonationCampaign.class); this.locale=locale; this.seed=seed; + setCacheable(); } @Override