Skip to content
This repository has been archived by the owner on Jul 23, 2020. It is now read-only.

Commit

Permalink
added gzip support
Browse files Browse the repository at this point in the history
  • Loading branch information
raulhaag committed Apr 15, 2019
1 parent b74e4ea commit 1084700
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 24 deletions.
44 changes: 21 additions & 23 deletions app/src/main/java/ar/rulosoft/mimanganu/servers/VerComicsCom.java
Original file line number Diff line number Diff line change
Expand Up @@ -60,27 +60,29 @@ public ArrayList<Manga> search(String term) throws Exception {

@Override
public void loadChapters(Manga manga, boolean forceReload) throws Exception {
String data = getNavigatorAndFlushParameters().get(HOST + manga.getPath());
int pages = Integer.parseInt(getFirstMatchDefault("/page/(\\d+)/\">[^ ]+?<a class=\"nextpostslink\"", data, "1"));
if (pages == 1) {
pages = Integer.parseInt(getFirstMatchDefault("/(\\d+)/\">Última", data, "1"));
}
Pattern pattern = Pattern.compile("<a href=\"https?://vercomics.com/(.+?)\" rel=\"bookmark\" title=\"(.+?)\"");
Matcher matcher = pattern.matcher(data);
ArrayList<Chapter> chapters = new ArrayList<>();
while (matcher.find()) {
chapters.add(new Chapter(matcher.group(2), matcher.group(1)));
}
for (int i = 2; i <= pages; i++) {
// Util.getInstance().toast(context, "Cargando " + i + " de " + pages + " paginas", Toast.LENGTH_SHORT);
data = getNavigatorAndFlushParameters().get(HOST + manga.getPath() + "/page/" + i + "/");
matcher = pattern.matcher(data);
if (manga.getChapters().isEmpty()) {
String data = getNavigatorAndFlushParameters().get(HOST + manga.getPath());
int pages = Integer.parseInt(getFirstMatchDefault("/page/(\\d+)/\">[^ ]+?<a class=\"nextpostslink\"", data, "1"));
if (pages == 1) {
pages = Integer.parseInt(getFirstMatchDefault("/(\\d+)/\">Última", data, "1"));
}
Pattern pattern = Pattern.compile("<a href=\"https?://vercomics.com/(.+?)\" rel=\"bookmark\" title=\"(.+?)\"");
Matcher matcher = pattern.matcher(data);
ArrayList<Chapter> chapters = new ArrayList<>();
while (matcher.find()) {
chapters.add(new Chapter(matcher.group(2), matcher.group(1)));
}
}
for (Chapter c : chapters) {
manga.addChapterFirst(c);
for (int i = 2; i <= pages; i++) {
// Util.getInstance().toast(context, "Cargando " + i + " de " + pages + " paginas", Toast.LENGTH_SHORT);
data = getNavigatorAndFlushParameters().get(HOST + manga.getPath() + "/page/" + i + "/");
matcher = pattern.matcher(data);
while (matcher.find()) {
chapters.add(new Chapter(matcher.group(2), matcher.group(1)));
}
}
for (Chapter c : chapters) {
manga.addChapterFirst(c);
}
}
}

Expand All @@ -91,16 +93,12 @@ public void loadMangaInformation(Manga manga, boolean forceReload) throws Except
manga.setAuthor(context.getString(R.string.nodisponible));
manga.setSynopsis(context.getString(R.string.nodisponible));
manga.setGenre(context.getString(R.string.nodisponible));
try {
if (manga.getTitle().contains("|")) {
JSONObject list = new JSONObject(getFirstMatch("js_array =(\\{[\\s\\S]+?\\})\\;\\s*</sc", data, context.getString(R.string.error)));
JSONObject o = (JSONObject) list.get(manga.getTitle().split("\\|")[0]);
manga.setTitle(o.get("name").toString());
manga.setSynopsis(o.get("description").toString());
} catch (Exception e) {
// already gived
}
if (forceReload)
loadChapters(manga, forceReload);
}

@Override
Expand Down
3 changes: 2 additions & 1 deletion app/src/main/java/ar/rulosoft/navegadores/Navigator.java
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@ private void initClient(CookieJar cookieJar, Context context) throws KeyManageme
socketFactory = sslContext.getSocketFactory();
}
httpClient = new OkHttpClientConnectionChecker.Builder()
.addInterceptor(new UnzippingInterceptor())
.addInterceptor(new RetryInterceptor())// the interceptors list appear to be a lifo
.addInterceptor(new CFInterceptor())
.sslSocketFactory(socketFactory, (X509TrustManager) trustManagers[0])
Expand Down Expand Up @@ -362,7 +363,7 @@ private Headers getHeaders() {
.add("Accept-Language", "es-AR,es;q=0.8,en-US;q=0.5,en;q=0.3")
.add("Connection", "keep-alive")
.add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
.add("Accept-Encoding", "deflate");
.add("Accept-Encoding", "gzip, deflate");

for (Parameter p : headers) {
builder.add(p.getKey(), p.getValue());
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package ar.rulosoft.navegadores;

import java.io.IOException;

import okhttp3.Headers;
import okhttp3.Interceptor;
import okhttp3.Response;
import okhttp3.internal.http.RealResponseBody;
import okio.GzipSource;
import okio.Okio;


public class UnzippingInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Response response = chain.proceed(chain.request());
return unzip(response);
}

private Response unzip(final Response response) {
if (response.body() == null) {
return response;
}

String contentEncoding = response.headers().get("Content-Encoding");
if (contentEncoding != null && contentEncoding.equals("gzip")) {
Long contentLength = response.body().contentLength();
GzipSource responseBody = new GzipSource(response.body().source());
Headers strippedHeaders = response.headers().newBuilder().build();
return response.newBuilder().headers(strippedHeaders)
.body(new RealResponseBody(response.body().contentType().toString(), contentLength, Okio.buffer(responseBody)))
.build();
} else {
return response;
}
}
}


0 comments on commit 1084700

Please sign in to comment.