5120: Fix image item loading in ExploreFragment

- removed redundant try block containing checker with `rsp.body` instead of using peekBody, resulting in closing the connection before even reading it.
This commit is contained in:
Ankush Bose 2022-12-18 15:33:29 +05:30
parent 6dec69147f
commit cc115f1e76
No known key found for this signature in database
GPG key ID: 66494F34333829DA

View file

@ -3,7 +3,6 @@ package fr.free.nrw.commons;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -20,15 +19,19 @@ import org.wikipedia.dataclient.okhttp.HttpStatusException;
import timber.log.Timber; import timber.log.Timber;
public final class OkHttpConnectionFactory { public final class OkHttpConnectionFactory {
private static final String CACHE_DIR_NAME = "okhttp-cache"; private static final String CACHE_DIR_NAME = "okhttp-cache";
private static final long NET_CACHE_SIZE = 64 * 1024 * 1024; private static final long NET_CACHE_SIZE = 64 * 1024 * 1024;
@NonNull private static final Cache NET_CACHE = new Cache(new File(CommonsApplication.getInstance().getCacheDir(), @NonNull
private static final Cache NET_CACHE = new Cache(
new File(CommonsApplication.getInstance().getCacheDir(),
CACHE_DIR_NAME), NET_CACHE_SIZE); CACHE_DIR_NAME), NET_CACHE_SIZE);
@NonNull @NonNull
private static final OkHttpClient CLIENT = createClient(); private static final OkHttpClient CLIENT = createClient();
@NonNull public static OkHttpClient getClient() { @NonNull
public static OkHttpClient getClient() {
return CLIENT; return CLIENT;
} }
@ -69,6 +72,7 @@ public final class OkHttpConnectionFactory {
} }
public static class UnsuccessfulResponseInterceptor implements Interceptor { public static class UnsuccessfulResponseInterceptor implements Interceptor {
private static final List<String> DO_NOT_INTERCEPT = Collections.singletonList( private static final List<String> DO_NOT_INTERCEPT = Collections.singletonList(
"api.php?format=json&formatversion=2&errorformat=plaintext&action=upload&ignorewarnings=1"); "api.php?format=json&formatversion=2&errorformat=plaintext&action=upload&ignorewarnings=1");
@ -80,15 +84,13 @@ public final class OkHttpConnectionFactory {
final Response rsp = chain.proceed(chain.request()); final Response rsp = chain.proceed(chain.request());
// Do not intercept certain requests and let the caller handle the errors // Do not intercept certain requests and let the caller handle the errors
if(isExcludedUrl(chain.request())) { if (isExcludedUrl(chain.request())) {
return rsp; return rsp;
} }
if (rsp.isSuccessful()) { if (rsp.isSuccessful()) {
try (final ResponseBody responseBody = rsp.peekBody(ERRORS_PREFIX.length())) { try (final ResponseBody responseBody = rsp.peekBody(ERRORS_PREFIX.length())) {
if (ERRORS_PREFIX.equals(responseBody.string())) { if (ERRORS_PREFIX.equals(responseBody.string())) {
try (final ResponseBody body = rsp.body()) { throw new IOException(responseBody.string());
throw new IOException(body.string());
}
} }
} catch (final IOException e) { } catch (final IOException e) {
Timber.e(e); Timber.e(e);
@ -100,8 +102,8 @@ public final class OkHttpConnectionFactory {
private boolean isExcludedUrl(final Request request) { private boolean isExcludedUrl(final Request request) {
final String requestUrl = request.url().toString(); final String requestUrl = request.url().toString();
for(final String url: DO_NOT_INTERCEPT) { for (final String url : DO_NOT_INTERCEPT) {
if(requestUrl.contains(url)) { if (requestUrl.contains(url)) {
return true; return true;
} }
} }