package org.wikipedia.dataclient.okhttp; import android.support.annotation.NonNull; import java.io.IOException; import okhttp3.Interceptor; import okhttp3.Request; import okhttp3.Response; public class CacheIfErrorInterceptor implements Interceptor { @Override public Response intercept(Chain chain) throws IOException { // when max-stale is set, CacheStrategy forbids a conditional network request in // CacheInterceptor if (!chain.request().cacheControl().onlyIfCached()) { Request req = forceNetRequest(chain.request()); Response rsp = null; try { rsp = chain.proceed(req); } catch (IOException ignore) { } if (rsp != null && rsp.isSuccessful()) { return rsp; } } try { return chain.proceed(chain.request()); } catch (IOException e) { throw e; } } @NonNull private Request forceNetRequest(@NonNull Request req) { String cacheControl = CacheControlUtil.forceNetRequest(req.cacheControl().toString()); return req.newBuilder().header("Cache-Control", cacheControl).build(); } }