From 6e315ea94d141d102939b99ce1e27af5e46aa3aa Mon Sep 17 00:00:00 2001 From: seven332 Date: Thu, 17 Mar 2016 15:27:17 +0800 Subject: [PATCH] Add e-hentai site support --- .../java/com/hippo/ehviewer/Settings.java | 11 +++++ .../hippo/ehviewer/client/EhCookieStore.java | 48 ++++++++++++++----- .../com/hippo/ehviewer/client/EhEngine.java | 6 +-- .../java/com/hippo/ehviewer/client/EhUrl.java | 44 +++++++++++++++-- .../client/data/FavListUrlBuilder.java | 2 +- .../ehviewer/client/data/ListUrlBuilder.java | 6 +-- .../client/parser/FavoritesParser.java | 3 +- .../client/parser/WhatsHotParser.java | 3 +- .../ehviewer/ui/scene/FavoritesScene.java | 2 +- .../java/com/hippo/okhttp/CookieDBStore.java | 2 +- app/src/main/res/values-zh-rCN/strings.xml | 1 + app/src/main/res/values/arrays.xml | 10 ++++ app/src/main/res/values/strings.xml | 1 + app/src/main/res/xml/eh_settings.xml | 8 ++++ build.gradle | 2 +- 15 files changed, 118 insertions(+), 31 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/Settings.java b/app/src/main/java/com/hippo/ehviewer/Settings.java index 546afd21d..eebabced5 100644 --- a/app/src/main/java/com/hippo/ehviewer/Settings.java +++ b/app/src/main/java/com/hippo/ehviewer/Settings.java @@ -201,6 +201,17 @@ public class Settings { /******************** ****** Eh ********************/ + public static final String KEY_GALLERY_SITE = "gallery_site"; + private static final int DEFAULT_GALLERY_SITE = 1; + + public static int getGallerySite() { + return getIntFromStr(KEY_GALLERY_SITE, DEFAULT_GALLERY_SITE); + } + + public static void putGallerySite(int value) { + putIntToStr(KEY_GALLERY_SITE, value); + } + public static final String KEY_LIST_MODE = "list_mode"; private static final int DEFAULT_LIST_MODE = 0; diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhCookieStore.java b/app/src/main/java/com/hippo/ehviewer/client/EhCookieStore.java index 211007923..f2f6818ec 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhCookieStore.java +++ b/app/src/main/java/com/hippo/ehviewer/client/EhCookieStore.java @@ -30,6 +30,16 @@ public class EhCookieStore extends CookieDBStore { public static final String KEY_IPD_MEMBER_ID = "ipb_member_id"; public static final String KEY_IPD_PASS_HASH = "ipb_pass_hash"; + public static final String KEY_TIPS = "tips"; + + public static final Cookie sTipsCookie = + new Cookie.Builder() + .name(KEY_TIPS) + .value("0") + .domain(EhUrl.DOMAIN_G) + .path("/") + .expiresAt(Long.MAX_VALUE) + .build(); public void signOut() { removeAll(); @@ -68,27 +78,39 @@ public class EhCookieStore extends CookieDBStore { public List loadForRequest(HttpUrl url, Request request) { List cookies = super.loadForRequest(url, request); Object tag = request.tag(); + String host = url.host(); - if (url.host().equals(EhUrl.DOMAIN_EX) && tag instanceof EhConfig) { - EhConfig ehConfig = (EhConfig) tag; + boolean checkTips = domainMatch(host, EhUrl.DOMAIN_G); + boolean checkUconfig = (domainMatch(host, EhUrl.DOMAIN_E) || domainMatch(host, EhUrl.DOMAIN_EX)) && tag instanceof EhConfig; + if (checkTips || checkUconfig) { List result = new ArrayList<>(cookies.size() + 1); - // Add all but skip uconfig + // Add all but skip some for (Cookie cookie: cookies) { - if (EhConfig.KEY_UCONFIG.equals(cookie.name())) { + String name = cookie.name(); + if (checkTips && KEY_TIPS.equals(name)) { + continue; + } + if (checkUconfig && EhConfig.KEY_UCONFIG.equals(name)) { continue; } result.add(cookie); } - // Add uconfig from EhConfig - Cookie uconfigCookie = new Cookie.Builder() - .name(EhConfig.KEY_UCONFIG) - .value(ehConfig.uconfig()) - .domain(EhUrl.DOMAIN_EX) - .path("/") - .build(); - result.add(uconfigCookie); - + // Add some + if (checkTips) { + result.add(sTipsCookie); + } + if (checkUconfig) { + EhConfig ehConfig = (EhConfig) tag; + Cookie uconfigCookie = new Cookie.Builder() + .name(EhConfig.KEY_UCONFIG) + .value(ehConfig.uconfig()) + .domain(host) + .path("/") + .expiresAt(Long.MAX_VALUE) + .build(); + result.add(uconfigCookie); + } return Collections.unmodifiableList(result); } else { return cookies; diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhEngine.java b/app/src/main/java/com/hippo/ehviewer/client/EhEngine.java index dcdccbba4..cff9620a1 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhEngine.java +++ b/app/src/main/java/com/hippo/ehviewer/client/EhEngine.java @@ -229,7 +229,7 @@ public class EhEngine { } json.put("gidlist", ja); json.put("namespace", 1); - String url = EhUrl.API_EX; + String url = EhUrl.getApiUrl(); Log.d(TAG, url); Request request = new EhRequestBuilder(url) .post(RequestBody.create(JSON, json.toString())) @@ -314,7 +314,7 @@ public class EhEngine { json.put("token", token); json.put("rating", (int) Math.ceil(rating * 2)); final RequestBody requestBody = RequestBody.create(JSON, json.toString()); - String url = EhUrl.API_EX; + String url = EhUrl.getApiUrl(); Log.d(TAG, url); Request request = new EhRequestBuilder(url, task.getEhConfig()) .post(requestBody) @@ -375,7 +375,7 @@ public class EhEngine { .put("pagelist", new JSONArray().put( new JSONArray().put(gid).put(gtoken).put(page + 1))); final RequestBody requestBody = RequestBody.create(JSON, json.toString()); - String url = EhUrl.API_EX; + String url = EhUrl.getApiUrl(); Log.d(TAG, url); Request request = new EhRequestBuilder(url, task.getEhConfig()) .post(requestBody) diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhUrl.java b/app/src/main/java/com/hippo/ehviewer/client/EhUrl.java index 7b26f7fee..f1f5625a0 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhUrl.java +++ b/app/src/main/java/com/hippo/ehviewer/client/EhUrl.java @@ -16,10 +16,14 @@ package com.hippo.ehviewer.client; +import com.hippo.ehviewer.Settings; import com.hippo.network.UrlBuilder; public class EhUrl { + public static final int SITE_G = 0; + public static final int SITE_EX = 1; + public static final String DOMAIN_EX = "exhentai.org"; public static final String DOMAIN_E = "e-hentai.org"; public static final String DOMAIN_G = "g.e-hentai.org"; @@ -30,19 +34,51 @@ public class EhUrl { public static final String API_SIGN_IN = "http://forums.e-hentai.org/index.php?act=Login&CODE=01"; + public static final String API_G = HOST_G + "api.php"; public static final String API_EX = HOST_EX + "api.php"; public static final String URL_SIGN_IN = "http://forums.e-hentai.org/index.php?act=Login"; public static final String URL_REGISTER = "http://forums.e-hentai.org/index.php?act=Reg&CODE=00"; - public static final String URL_FAVORITES = HOST_EX + "favorites.php"; + public static final String URL_FAVORITES_G = HOST_G + "favorites.php"; + public static final String URL_FAVORITES_EX = HOST_EX + "favorites.php"; public static final String URL_FORUMS = "https://forums.e-hentai.org/"; public static String getGalleryDetailUrl(long gid, String token) { return getGalleryDetailUrl(gid, token, 0, false); } + public static String getHost() { + switch (Settings.getGallerySite()) { + default: + case SITE_G: + return HOST_G; + case SITE_EX: + return HOST_EX; + } + } + + public static String getFavoritesUrl() { + switch (Settings.getGallerySite()) { + default: + case SITE_G: + return URL_FAVORITES_G; + case SITE_EX: + return URL_FAVORITES_EX; + } + } + + public static String getApiUrl() { + switch (Settings.getGallerySite()) { + default: + case SITE_G: + return API_G; + case SITE_EX: + return API_EX; + } + } + public static String getGalleryDetailUrl(long gid, String token, int index, boolean allComment) { - UrlBuilder builder = new UrlBuilder(HOST_EX + "g/" + gid + '/' + token + '/'); + UrlBuilder builder = new UrlBuilder(getHost() + "g/" + gid + '/' + token + '/'); if (index != 0) { builder.addQuery("p", index); } @@ -53,10 +89,10 @@ public class EhUrl { } public static String getPageUrl(long gid, int index, String pToken) { - return HOST_EX + "s/" + pToken + '/' + gid + '-' + (index + 1); + return getHost() + "s/" + pToken + '/' + gid + '-' + (index + 1); } public static String getAddFavorites(long gid, String token) { - return HOST_EX + "gallerypopups.php?gid=" + gid + "&t=" + token + "&act=addfav"; + return getHost() + "gallerypopups.php?gid=" + gid + "&t=" + token + "&act=addfav"; } } diff --git a/app/src/main/java/com/hippo/ehviewer/client/data/FavListUrlBuilder.java b/app/src/main/java/com/hippo/ehviewer/client/data/FavListUrlBuilder.java index fed1b2132..519b06c3d 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/data/FavListUrlBuilder.java +++ b/app/src/main/java/com/hippo/ehviewer/client/data/FavListUrlBuilder.java @@ -66,7 +66,7 @@ public class FavListUrlBuilder implements Parcelable { } public String build() { - UrlBuilder ub = new UrlBuilder(EhUrl.URL_FAVORITES); + UrlBuilder ub = new UrlBuilder(EhUrl.getFavoritesUrl()); if (isValidFavCat(mFavCat)) { ub.addQuery("favcat", Integer.toString(mFavCat)); } diff --git a/app/src/main/java/com/hippo/ehviewer/client/data/ListUrlBuilder.java b/app/src/main/java/com/hippo/ehviewer/client/data/ListUrlBuilder.java index 971ae80d8..7713db59d 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/data/ListUrlBuilder.java +++ b/app/src/main/java/com/hippo/ehviewer/client/data/ListUrlBuilder.java @@ -315,7 +315,7 @@ public class ListUrlBuilder implements Cloneable, Parcelable { default: case MODE_NORMAL: { boolean filter = false; - UrlBuilder ub = new UrlBuilder(EhUrl.HOST_EX); + UrlBuilder ub = new UrlBuilder(EhUrl.getHost()); if (mCategory != EhUtils.NONE) { ub.addQuery("f_doujinshi", ((mCategory & EhConfig.DOUJINSHI) == 0) ? "0" : "1"); ub.addQuery("f_manga", ((mCategory & EhConfig.MANGA) == 0) ? "0" : "1"); @@ -367,7 +367,7 @@ public class ListUrlBuilder implements Cloneable, Parcelable { return ub.build(); } case MODE_UPLOADER: { - StringBuilder sb = new StringBuilder(EhUrl.HOST_EX); + StringBuilder sb = new StringBuilder(EhUrl.getHost()); sb.append("uploader/"); try { sb.append(URLEncoder.encode(mKeyword, "UTF-8")); @@ -380,7 +380,7 @@ public class ListUrlBuilder implements Cloneable, Parcelable { return sb.toString(); } case MODE_TAG: { - StringBuilder sb = new StringBuilder(EhUrl.HOST_EX); + StringBuilder sb = new StringBuilder(EhUrl.getHost()); sb.append("tag/"); try { sb.append(URLEncoder.encode(mKeyword, "UTF-8")); diff --git a/app/src/main/java/com/hippo/ehviewer/client/parser/FavoritesParser.java b/app/src/main/java/com/hippo/ehviewer/client/parser/FavoritesParser.java index 92dbde47f..e68085343 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/parser/FavoritesParser.java +++ b/app/src/main/java/com/hippo/ehviewer/client/parser/FavoritesParser.java @@ -16,7 +16,6 @@ package com.hippo.ehviewer.client.parser; -import com.hippo.ehviewer.client.EhUrl; import com.hippo.ehviewer.client.data.GalleryInfo; import com.hippo.ehviewer.client.exception.ParseException; import com.hippo.util.JsoupUtils; @@ -52,7 +51,7 @@ public class FavoritesParser { int limit; try { - Document d = Jsoup.parse(body, EhUrl.HOST_EX); + Document d = Jsoup.parse(body); Element ido = JsoupUtils.getElementByClass(d, "ido"); Elements fps = ido.getElementsByClass("fp"); // Last one is "fp fps" diff --git a/app/src/main/java/com/hippo/ehviewer/client/parser/WhatsHotParser.java b/app/src/main/java/com/hippo/ehviewer/client/parser/WhatsHotParser.java index 74920aae6..2ae0b0a95 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/parser/WhatsHotParser.java +++ b/app/src/main/java/com/hippo/ehviewer/client/parser/WhatsHotParser.java @@ -16,7 +16,6 @@ package com.hippo.ehviewer.client.parser; -import com.hippo.ehviewer.client.EhUrl; import com.hippo.ehviewer.client.data.GalleryInfo; import com.hippo.ehviewer.client.exception.ParseException; import com.hippo.util.JsoupUtils; @@ -35,7 +34,7 @@ public class WhatsHotParser { public static List parse(String body) throws ParseException { try { List galleryInfoList = new ArrayList<>(15); - Document d = Jsoup.parse(body, EhUrl.HOST_G); + Document d = Jsoup.parse(body); Element pp = d.getElementById("pp"); Elements id1List = pp.getElementsByClass("id1"); for (int i = 0, n = id1List.size(); i < n; i++) { diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.java index 1113cc635..23702d899 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.java @@ -987,7 +987,7 @@ public class FavoritesScene extends BaseScene implements String url; if (local) { // Local fav is shown now, but operation need be done for cloud fav - url = EhUrl.URL_FAVORITES; + url = EhUrl.getFavoritesUrl(); } else { url = mUrlBuilder.build(); } diff --git a/app/src/main/java/com/hippo/okhttp/CookieDBStore.java b/app/src/main/java/com/hippo/okhttp/CookieDBStore.java index 8a9b5bd60..115b68a54 100644 --- a/app/src/main/java/com/hippo/okhttp/CookieDBStore.java +++ b/app/src/main/java/com/hippo/okhttp/CookieDBStore.java @@ -45,7 +45,7 @@ public class CookieDBStore implements CookieJar { : domainMatch(urlHost, cookie.domain()); } - private static boolean domainMatch(String urlHost, String cookieDomain) { + public static boolean domainMatch(String urlHost, String cookieDomain) { if (urlHost.equals(cookieDomain)) { return true; // As in 'example.com' matching 'example.com'. } diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index b4423112c..d00e64aca 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -287,6 +287,7 @@ 天哪,我的老伙计,你要退出登录吗?我是说,你真的要退出登录吗? 是的,我是说,真的 已退出登陆,重启应用以便再次登陆 + 画廊站点 列表模式 详情 缩略图 diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 42861195a..370094fcd 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -27,6 +27,16 @@ 1 + + e-hentai + exhentai + + + + 0 + 1 + + @string/star_2 @string/star_3 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a628cada1..721cdd597 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -326,6 +326,7 @@ Do you really want to sign out? @android:string/ok Signed out, restart the application to sign in + Gallery site List mode Detail Thumb diff --git a/app/src/main/res/xml/eh_settings.xml b/app/src/main/res/xml/eh_settings.xml index 0f085761b..e78f19bef 100644 --- a/app/src/main/res/xml/eh_settings.xml +++ b/app/src/main/res/xml/eh_settings.xml @@ -24,6 +24,14 @@ android:title="@string/settings_eh_sign_out" android:summary="@string/settings_eh_sign_out_summary"/> + +