package com.fastaccess.provider.rest.interceptors; import android.net.Uri; import com.fastaccess.helper.InputHelper; import java.io.IOException; import okhttp3.Interceptor; import okhttp3.Response; import okhttp3.ResponseBody; public class PaginationInterceptor implements Interceptor { @Override public Response intercept(Chain chain) throws IOException { Response response = chain.proceed(chain.request()); if (response.isSuccessful()) { if (response.peekBody(1).string().equals("[")) { String json = "{"; String link = response.header("link"); if (link != null) { String[] links = link.split(","); for (String link1 : links) { String[] pageLink = link1.split(";"); String page = Uri.parse(pageLink[0].replaceAll("[<>]", "")).getQueryParameter("page"); String rel = pageLink[1].replaceAll("\"", "").replace("rel=", ""); if (page != null) json += String.format("\"%s\":\"%s\",", rel.trim(), page); } } json += String.format("\"items\":%s}", response.body().string()); return response.newBuilder().body(ResponseBody.create(response.body().contentType(), json)).build(); } else { String link = response.header("link"); if (link != null) { String pagination = ""; String[] links = link.split(","); for (String link1 : links) { String[] pageLink = link1.split(";"); String page = Uri.parse(pageLink[0].replaceAll("[<>]", "")).getQueryParameter("page"); String rel = pageLink[1].replaceAll("\"", "").replace("rel=", ""); if (page != null) pagination += String.format("\"%s\":\"%s\",", rel.trim(), page); } if (!InputHelper.isEmpty(pagination)) {//hacking for search pagination. String body = response.body().string(); return response.newBuilder().body(ResponseBody.create(response.body().contentType(), "{" + pagination + body.substring(1, body.length()))).build(); } } } } return response; } }