package me.devsaki.hentoid.activities;
import android.annotation.TargetApi;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Build;
import android.support.annotation.NonNull;
import android.webkit.WebResourceRequest;
import android.webkit.WebResourceResponse;
import android.webkit.WebView;
import java.io.ByteArrayInputStream;
import java.net.MalformedURLException;
import java.net.URL;
import me.devsaki.hentoid.database.domains.Content;
import me.devsaki.hentoid.enums.Site;
import me.devsaki.hentoid.parsers.NhentaiParser;
import me.devsaki.hentoid.util.HttpClientHelper;
import me.devsaki.hentoid.util.LogHelper;
import me.devsaki.hentoid.views.ObservableWebView;
import static me.devsaki.hentoid.util.Helper.TYPE;
import static me.devsaki.hentoid.util.Helper.executeAsyncTask;
import static me.devsaki.hentoid.util.Helper.getWebResourceResponseFromAsset;
/**
* Created by Shiro on 1/20/2016.
* Implements nhentai source
*/
public class NhentaiActivity extends BaseWebActivity {
private static final String TAG = LogHelper.makeLogTag(NhentaiActivity.class);
@Override
void setSite(Site site) {
super.setSite(Site.NHENTAI);
}
@Override
void setWebView(ObservableWebView webView) {
webView.setWebViewClient(new NhentaiWebViewClient());
super.setWebView(webView);
}
private class NhentaiWebViewClient extends CustomWebViewClient {
final ByteArrayInputStream nothing = new ByteArrayInputStream("".getBytes());
@SuppressWarnings("deprecation") // From API 24 we should use another overload
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
try {
URL u = new URL(url);
return !(u.getHost().endsWith("nhentai.net"));
} catch (MalformedURLException e) {
LogHelper.d(TAG, "Malformed URL");
}
return false;
}
@TargetApi(Build.VERSION_CODES.N)
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
try {
URL u = new URL(request.getUrl().toString());
return !(u.getHost().endsWith("nhentai.net"));
} catch (MalformedURLException e) {
LogHelper.d(TAG, "Malformed URL");
}
return false;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
if (url.contains("nhentai.net/g/")) {
String newURL = url.replace("/g", "/api/gallery");
newURL = newURL.substring(0, newURL.length() - 1);
executeAsyncTask(new JsonLoader(), newURL);
}
}
@SuppressWarnings("deprecation") // From API 21 we should use another overload
@Override
public WebResourceResponse shouldInterceptRequest(@NonNull WebView view,
@NonNull String url) {
if (url.contains("//static.nhentai.net/js/")) {
return getWebResourceResponseFromAsset(getSite(), "main_js.js", TYPE.JS);
} else if (url.contains("//static.nhentai.net/css/")) {
return getWebResourceResponseFromAsset(getSite(), "main_style.css", TYPE.CSS);
} else if (url.contains("ads.contentabc.com")) {
return new WebResourceResponse("text/plain", "utf-8", nothing);
} else {
return super.shouldInterceptRequest(view, url);
}
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public WebResourceResponse shouldInterceptRequest(@NonNull WebView view,
@NonNull WebResourceRequest request) {
String url = request.getUrl().toString();
if (url.contains("//static.nhentai.net/js/")) {
return getWebResourceResponseFromAsset(getSite(), "main_js.js", TYPE.JS);
} else if (url.contains("//static.nhentai.net/css/")) {
return getWebResourceResponseFromAsset(getSite(), "main_style.css", TYPE.CSS);
} else if (url.contains("ads2.contentabc.com")) {
return new WebResourceResponse("text/plain", "utf-8", nothing);
} else {
return super.shouldInterceptRequest(view, request);
}
}
}
private class JsonLoader extends AsyncTask<String, Integer, Content> {
@Override
protected Content doInBackground(String... params) {
String url = params[0];
try {
processContent(NhentaiParser.parseContent(HttpClientHelper.call(url)));
} catch (Exception e) {
LogHelper.e(TAG, e, "Error parsing content.");
}
return null;
}
}
}