diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhClient.java b/app/src/main/java/com/hippo/ehviewer/client/EhClient.java index 1f4d47149..f15d5d664 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhClient.java +++ b/app/src/main/java/com/hippo/ehviewer/client/EhClient.java @@ -19,13 +19,11 @@ package com.hippo.ehviewer.client; import android.content.Context; import android.os.AsyncTask; import com.hippo.ehviewer.EhApplication; -import com.hippo.ehviewer.client.data.GalleryInfo; import com.hippo.ehviewer.client.exception.CancelledException; import com.hippo.util.ExceptionUtils; import com.hippo.util.IoThreadPoolExecutor; import com.hippo.yorozuya.SimpleHandler; import java.io.File; -import java.util.List; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; @@ -38,7 +36,6 @@ public class EhClient { public static final int METHOD_SIGN_IN = 0; public static final int METHOD_GET_GALLERY_LIST = 1; - public static final int METHOD_FILL_GALLERY_LIST_BY_API = 2; public static final int METHOD_GET_GALLERY_DETAIL = 3; public static final int METHOD_GET_PREVIEW_SET = 4; public static final int METHOD_GET_RATE_GALLERY = 5; @@ -145,8 +142,6 @@ public class EhClient { return EhEngine.signIn(this, mOkHttpClient, (String) params[0], (String) params[1], (String) params[2], (String) params[3]); case METHOD_GET_GALLERY_LIST: return EhEngine.getGalleryList(this, mOkHttpClient, (String) params[0]); - case METHOD_FILL_GALLERY_LIST_BY_API: - return EhEngine.fillGalleryListByApi(this, mOkHttpClient, (List) params[0]); case METHOD_GET_GALLERY_DETAIL: return EhEngine.getGalleryDetail(this, mOkHttpClient, (String) params[0]); case METHOD_GET_PREVIEW_SET: @@ -166,7 +161,7 @@ public class EhClient { case METHOD_MODIFY_FAVORITES: return EhEngine.modifyFavorites(this, mOkHttpClient, (String) params[0], (long[]) params[1], (Integer) params[2], (Boolean) params[3]); case METHOD_GET_TORRENT_LIST: - return EhEngine.getTorrentList(this, mOkHttpClient, (String) params[0]); + return EhEngine.getTorrentList(this, mOkHttpClient, (String) params[0], (Long) params[1], (String) params[2]); case METHOD_GET_WHATS_HOT: return EhEngine.getWhatsHot(this, mOkHttpClient); case METHOD_GET_PROFILE: @@ -176,7 +171,7 @@ public class EhClient { case METHOD_IMAGE_SEARCH: return EhEngine.imageSearch(this, mOkHttpClient, (File) params[0], (Boolean) params[1], (Boolean) params[2], (Boolean) params[3]); case METHOD_ARCHIVE_LIST: - return EhEngine.getArchiveList(this, mOkHttpClient, (String) params[0]); + return EhEngine.getArchiveList(this, mOkHttpClient, (String) params[0], (Long) params[1], (String) params[2]); case METHOD_DOWNLOAD_ARCHIVE: return EhEngine.downloadArchive(this, mOkHttpClient, (Long) params[0], (String) params[1], (String) params[2], (String) params[3]); default: 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 654177587..f6ec47f45 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhEngine.java +++ b/app/src/main/java/com/hippo/ehviewer/client/EhEngine.java @@ -145,8 +145,10 @@ public class EhEngine { builder.add("recaptcha_response_field", recaptchaResponse); } String url = EhUrl.API_SIGN_IN; + String referer = "https://forums.e-hentai.org/index.php?act=Login&CODE=00"; + String origin = "https://forums.e-hentai.org"; Log.d(TAG, url); - Request request = new EhRequestBuilder(url) + Request request = new EhRequestBuilder(url, referer, origin) .post(builder.build()) .build(); Call call = okHttpClient.newCall(request); @@ -174,8 +176,9 @@ public class EhEngine { public static GalleryListParser.Result getGalleryList(@Nullable EhClient.Task task, OkHttpClient okHttpClient, String url) throws Throwable { + String referer = EhUrl.getReferer(); Log.d(TAG, url); - Request request = new EhRequestBuilder(url).build(); + Request request = new EhRequestBuilder(url, referer).build(); Call call = okHttpClient.newCall(request); // Put call @@ -227,7 +230,7 @@ public class EhEngine { if (needFillByApi) { // Fill by api - fillGalleryListByApi(task, okHttpClient, list); + fillGalleryListByApi(task, okHttpClient, list, url); // Filter tag for (int i = 0, n = list.size(); i < n; i++) { @@ -249,14 +252,14 @@ public class EhEngine { // At least, GalleryInfo contain valid gid and token public static List fillGalleryListByApi(@Nullable EhClient.Task task, OkHttpClient okHttpClient, - List galleryInfoList) throws Throwable { + List galleryInfoList, String referer) throws Throwable { // We can only request 25 items one time at most final int MAX_REQUEST_SIZE = 25; List requestItems = new ArrayList<>(MAX_REQUEST_SIZE); for (int i = 0, size = galleryInfoList.size(); i < size; i++) { requestItems.add(galleryInfoList.get(i)); if (requestItems.size() == MAX_REQUEST_SIZE || i == size - 1) { - doFillGalleryListByApi(task, okHttpClient, requestItems); + doFillGalleryListByApi(task, okHttpClient, requestItems, referer); requestItems.clear(); } } @@ -264,7 +267,7 @@ public class EhEngine { } private static void doFillGalleryListByApi(@Nullable EhClient.Task task, OkHttpClient okHttpClient, - List galleryInfoList) throws Throwable { + List galleryInfoList, String referer) throws Throwable { JSONObject json = new JSONObject(); json.put("method", "gdata"); JSONArray ja = new JSONArray(); @@ -278,8 +281,9 @@ public class EhEngine { json.put("gidlist", ja); json.put("namespace", 1); String url = EhUrl.getApiUrl(); + String origin = EhUrl.getOrigin(); Log.d(TAG, url); - Request request = new EhRequestBuilder(url) + Request request = new EhRequestBuilder(url, referer, origin) .post(RequestBody.create(MEDIA_TYPE_JSON, json.toString())) .build(); Call call = okHttpClient.newCall(request); @@ -307,8 +311,9 @@ public class EhEngine { public static GalleryDetail getGalleryDetail(@Nullable EhClient.Task task, OkHttpClient okHttpClient, String url) throws Throwable { + String referer = EhUrl.getReferer(); Log.d(TAG, url); - Request request = new EhRequestBuilder(url).build(); + Request request = new EhRequestBuilder(url, referer).build(); Call call = okHttpClient.newCall(request); // Put call @@ -335,8 +340,9 @@ public class EhEngine { public static Pair getPreviewSet( @Nullable EhClient.Task task, OkHttpClient okHttpClient, String url) throws Throwable { + String referer = EhUrl.getReferer(); Log.d(TAG, url); - Request request = new EhRequestBuilder(url).build(); + Request request = new EhRequestBuilder(url, referer).build(); Call call = okHttpClient.newCall(request); // Put call @@ -373,8 +379,10 @@ public class EhEngine { json.put("rating", (int) Math.ceil(rating * 2)); final RequestBody requestBody = RequestBody.create(MEDIA_TYPE_JSON, json.toString()); String url = EhUrl.getApiUrl(); + String referer = EhUrl.getGalleryDetailUrl(gid, token); + String origin = EhUrl.getOrigin(); Log.d(TAG, url); - Request request = new EhRequestBuilder(url) + Request request = new EhRequestBuilder(url, referer, origin) .post(requestBody) .build(); Call call = okHttpClient.newCall(request); @@ -404,8 +412,9 @@ public class EhEngine { OkHttpClient okHttpClient, String url, String comment) throws Throwable { FormBody.Builder builder = new FormBody.Builder() .add("commenttext_new", comment); + String origin = EhUrl.getOrigin(); Log.d(TAG, url); - Request request = new EhRequestBuilder(url) + Request request = new EhRequestBuilder(url, url, origin) .post(builder.build()) .build(); Call call = okHttpClient.newCall(request); @@ -446,8 +455,10 @@ public class EhEngine { new JSONArray().put(gid).put(gtoken).put(page + 1))); final RequestBody requestBody = RequestBody.create(MEDIA_TYPE_JSON, json.toString()); String url = EhUrl.getApiUrl(); + String referer = EhUrl.getReferer(); + String origin = EhUrl.getOrigin(); Log.d(TAG, url); - Request request = new EhRequestBuilder(url) + Request request = new EhRequestBuilder(url, referer, origin) .post(requestBody) .build(); Call call = okHttpClient.newCall(request); @@ -475,8 +486,9 @@ public class EhEngine { public static FavoritesParser.Result getFavorites(@Nullable EhClient.Task task, OkHttpClient okHttpClient, String url, boolean callApi) throws Throwable { + String referer = EhUrl.getReferer(); Log.d(TAG, url); - Request request = new EhRequestBuilder(url).build(); + Request request = new EhRequestBuilder(url, referer).build(); Call call = okHttpClient.newCall(request); // Put call @@ -503,7 +515,7 @@ public class EhEngine { List list = result.galleryInfoList; if (list.size() > 0 && (TextUtils.isEmpty(list.get(0).uploader) || Settings.getShowJpnTitle() || Settings.getShowGalleryPages())) { - fillGalleryListByApi(task, okHttpClient, list); + fillGalleryListByApi(task, okHttpClient, list, url); } for (GalleryInfo info : list) { @@ -534,8 +546,9 @@ public class EhEngine { builder.add("submit", "Apply Changes"); builder.add("update", "1"); String url = EhUrl.getAddFavorites(gid, token); + String origin = EhUrl.getOrigin(); Log.d(TAG, url); - Request request = new EhRequestBuilder(url) + Request request = new EhRequestBuilder(url, url, origin) .post(builder.build()) .build(); Call call = okHttpClient.newCall(request); @@ -588,8 +601,9 @@ public class EhEngine { builder.add("modifygids[]", Long.toString(gid)); } builder.add("apply", "Apply"); + String origin = EhUrl.getOrigin(); Log.d(TAG, url); - Request request = new EhRequestBuilder(url) + Request request = new EhRequestBuilder(url, url, origin) .post(builder.build()) .build(); Call call = okHttpClient.newCall(request); @@ -617,7 +631,7 @@ public class EhEngine { List list = result.galleryInfoList; if (list.size() > 0 && (TextUtils.isEmpty(list.get(0).uploader) || Settings.getShowJpnTitle() || Settings.getShowGalleryPages())) { - fillGalleryListByApi(task, okHttpClient, list); + fillGalleryListByApi(task, okHttpClient, list, url); } for (GalleryInfo info : list) { @@ -628,9 +642,10 @@ public class EhEngine { } public static Pair[] getTorrentList(@Nullable EhClient.Task task, OkHttpClient okHttpClient, - String url) throws Throwable { + String url, long gid, String token) throws Throwable { + String referer = EhUrl.getGalleryDetailUrl(gid, token); Log.d(TAG, url); - Request request = new EhRequestBuilder(url).build(); + Request request = new EhRequestBuilder(url, referer).build(); Call call = okHttpClient.newCall(request); // Put call @@ -658,9 +673,10 @@ public class EhEngine { } public static Pair[]> getArchiveList(@Nullable EhClient.Task task, OkHttpClient okHttpClient, - String url) throws Throwable { + String url, long gid, String token) throws Throwable { + String referer = EhUrl.getGalleryDetailUrl(gid, token); Log.d(TAG, url); - Request request = new EhRequestBuilder(url).build(); + Request request = new EhRequestBuilder(url, referer).build(); Call call = okHttpClient.newCall(request); // Put call @@ -698,8 +714,10 @@ public class EhEngine { FormBody.Builder builder = new FormBody.Builder(); builder.add("hathdl_xres", res); String url = EhUrl.getDownloadArchive(gid, token, or); + String referer = EhUrl.getGalleryDetailUrl(gid, token); + String origin = EhUrl.getOrigin(); Log.d(TAG, url); - Request request = new EhRequestBuilder(url) + Request request = new EhRequestBuilder(url, referer, origin) .post(builder.build()) .build(); Call call = okHttpClient.newCall(request); @@ -736,7 +754,7 @@ public class EhEngine { OkHttpClient okHttpClient) throws Throwable { String url = EhUrl.HOST_E; Log.d(TAG, url); - Request request = new EhRequestBuilder(url).build(); + Request request = new EhRequestBuilder(url, null).build(); Call call = okHttpClient.newCall(request); // Put call @@ -762,7 +780,7 @@ public class EhEngine { if (list.size() > 0) { // Fill by api - fillGalleryListByApi(task, okHttpClient, list); + fillGalleryListByApi(task, okHttpClient, list, url); } for (GalleryInfo info : list) { @@ -773,9 +791,9 @@ public class EhEngine { } private static ProfileParser.Result getProfileInternal(@Nullable EhClient.Task task, - OkHttpClient okHttpClient, String url) throws Throwable { + OkHttpClient okHttpClient, String url, String referer) throws Throwable { Log.d(TAG, url); - Request request = new EhRequestBuilder(url).build(); + Request request = new EhRequestBuilder(url, referer).build(); Call call = okHttpClient.newCall(request); // Put call @@ -803,7 +821,7 @@ public class EhEngine { OkHttpClient okHttpClient) throws Throwable { String url = EhUrl.URL_FORUMS; Log.d(TAG, url); - Request request = new EhRequestBuilder(url).build(); + Request request = new EhRequestBuilder(url, null).build(); Call call = okHttpClient.newCall(request); // Put call @@ -819,7 +837,7 @@ public class EhEngine { code = response.code(); headers = response.headers(); body = response.body().string(); - return getProfileInternal(task, okHttpClient, ForumsParser.parse(body)); + return getProfileInternal(task, okHttpClient, ForumsParser.parse(body), url); } catch (Throwable e) { ExceptionUtils.throwIfFatal(e); throwException(call, code, headers, body, e); @@ -839,8 +857,10 @@ public class EhEngine { json.put("comment_vote", commentVote); final RequestBody requestBody = RequestBody.create(MEDIA_TYPE_JSON, json.toString()); String url = EhUrl.getApiUrl(); + String referer = EhUrl.getReferer(); + String origin = EhUrl.getOrigin(); Log.d(TAG, url); - Request request = new EhRequestBuilder(url) + Request request = new EhRequestBuilder(url, referer, origin) .post(requestBody) .build(); Call call = okHttpClient.newCall(request); @@ -900,8 +920,10 @@ public class EhEngine { RequestBody.create(null, "File Search") ); String url = EhUrl.getImageSearchUrl(); + String referer = EhUrl.getReferer(); + String origin = EhUrl.getOrigin(); Log.d(TAG, url); - Request request = new EhRequestBuilder(url) + Request request = new EhRequestBuilder(url, referer, origin) .post(builder.build()) .build(); Call call = okHttpClient.newCall(request); @@ -943,7 +965,7 @@ public class EhEngine { if (list.size() > 0 && (TextUtils.isEmpty(list.get(0).uploader) || Settings.getShowJpnTitle() || Settings.getShowGalleryPages() || sEhFilter.needCallApi())) { // Fill by api - fillGalleryListByApi(task, okHttpClient, list); + fillGalleryListByApi(task, okHttpClient, list, url); // Filter tag for (int i = 0, n = list.size(); i < n; i++) { @@ -964,9 +986,10 @@ public class EhEngine { } public static GalleryPageParser.Result getGalleryPage(@Nullable EhClient.Task task, - OkHttpClient okHttpClient, String url) throws Throwable { + OkHttpClient okHttpClient, String url, long gid, String token) throws Throwable { + String referer = EhUrl.getGalleryDetailUrl(gid, token); Log.d(TAG, url); - Request request = new EhRequestBuilder(url).build(); + Request request = new EhRequestBuilder(url, referer).build(); Call call = okHttpClient.newCall(request); // Put call @@ -991,7 +1014,7 @@ public class EhEngine { } public static GalleryPageApiParser.Result getGalleryPageApi(@Nullable EhClient.Task task, - OkHttpClient okHttpClient, long gid, int index, String pToken, String showKey) throws Throwable { + OkHttpClient okHttpClient, long gid, int index, String pToken, String showKey, String previousPToken) throws Throwable { final JSONObject json = new JSONObject(); json.put("method", "showpage"); json.put("gid", gid); @@ -1000,8 +1023,13 @@ public class EhEngine { json.put("showkey", showKey); final RequestBody requestBody = RequestBody.create(MEDIA_TYPE_JSON, json.toString()); String url = EhUrl.getApiUrl(); + String referer = null; + if (index > 0 && previousPToken != null) { + referer = EhUrl.getPageUrl(gid, index - 1, previousPToken); + } + String origin = EhUrl.getOrigin(); Log.d(TAG, url); - Request request = new EhRequestBuilder(url) + Request request = new EhRequestBuilder(url, referer, origin) .post(requestBody) .build(); Call call = okHttpClient.newCall(request); diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhRequestBuilder.java b/app/src/main/java/com/hippo/ehviewer/client/EhRequestBuilder.java index 7c4b24c49..5e81f4979 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhRequestBuilder.java +++ b/app/src/main/java/com/hippo/ehviewer/client/EhRequestBuilder.java @@ -20,7 +20,17 @@ import com.hippo.okhttp.ChromeRequestBuilder; public class EhRequestBuilder extends ChromeRequestBuilder { - public EhRequestBuilder(String url) { + public EhRequestBuilder(String url, String referer) { + this(url, referer, null); + } + + public EhRequestBuilder(String url, String referer, String origin) { super(url); + if (referer != null) { + addHeader("Referer", referer); + } + if (origin != null) { + addHeader("Origin", origin); + } } } 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 ee100bc23..1e26ca77d 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhUrl.java +++ b/app/src/main/java/com/hippo/ehviewer/client/EhUrl.java @@ -49,6 +49,12 @@ public class EhUrl { public static final String URL_FAVORITES_EX = HOST_EX + "favorites.php"; public static final String URL_FORUMS = "https://forums.e-hentai.org/"; + public static final String REFERER_EX = "https://" + DOMAIN_EX; + public static final String REFERER_E = "https://" + DOMAIN_E; + + public static final String ORIGIN_EX = REFERER_EX; + public static final String ORIGIN_E = REFERER_E; + public static final String UCONFIG_E = HOST_E + "uconfig.php"; public static final String UCONFIG_EX = HOST_EX + "uconfig.php"; @@ -89,6 +95,26 @@ public class EhUrl { } } + public static String getReferer() { + switch (Settings.getGallerySite()) { + default: + case SITE_E: + return REFERER_E; + case SITE_EX: + return REFERER_EX; + } + } + + public static String getOrigin() { + switch (Settings.getGallerySite()) { + default: + case SITE_E: + return ORIGIN_E; + case SITE_EX: + return ORIGIN_EX; + } + } + public static String getUConfigUrl() { switch (Settings.getGallerySite()) { default: diff --git a/app/src/main/java/com/hippo/ehviewer/preference/RestoreDownloadPreference.java b/app/src/main/java/com/hippo/ehviewer/preference/RestoreDownloadPreference.java index b84188b38..61b322301 100644 --- a/app/src/main/java/com/hippo/ehviewer/preference/RestoreDownloadPreference.java +++ b/app/src/main/java/com/hippo/ehviewer/preference/RestoreDownloadPreference.java @@ -28,6 +28,7 @@ import com.hippo.ehviewer.EhDB; import com.hippo.ehviewer.R; import com.hippo.ehviewer.Settings; import com.hippo.ehviewer.client.EhEngine; +import com.hippo.ehviewer.client.EhUrl; import com.hippo.ehviewer.client.data.GalleryInfo; import com.hippo.ehviewer.download.DownloadManager; import com.hippo.ehviewer.spider.SpiderInfo; @@ -134,7 +135,7 @@ public class RestoreDownloadPreference extends TaskPreference { } try { - return EhEngine.fillGalleryListByApi(null, mHttpClient, new ArrayList(restoreItemList)); + return EhEngine.fillGalleryListByApi(null, mHttpClient, new ArrayList(restoreItemList), EhUrl.getReferer()); } catch (Throwable e) { ExceptionUtils.throwIfFatal(e); e.printStackTrace(); diff --git a/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java b/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java index ac9240687..b8dc4a306 100644 --- a/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java +++ b/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java @@ -742,7 +742,7 @@ public final class SpiderQueen implements Runnable { spiderInfo.token = mGalleryInfo.token; Request request = new EhRequestBuilder(EhUrl.getGalleryDetailUrl( - mGalleryInfo.gid, mGalleryInfo.token, 0, false)).build(); + mGalleryInfo.gid, mGalleryInfo.token, 0, false), EhUrl.getReferer()).build(); Response response = mHttpClient.newCall(request).execute(); String body = response.body().string(); @@ -776,11 +776,12 @@ public final class SpiderQueen implements Runnable { try { String url = EhUrl.getGalleryDetailUrl( mGalleryInfo.gid, mGalleryInfo.token, previewIndex, false); + String referer = EhUrl.getReferer(); if (DEBUG_PTOKEN) { Log.d(TAG, "index " + index + ", previewIndex " + previewIndex + ", previewPerPage " + spiderInfo.previewPerPage+ ", url " + url); } - Request request = new EhRequestBuilder(url).build(); + Request request = new EhRequestBuilder(url, referer).build(); Response response = mHttpClient.newCall(request).execute(); String body = response.body().string(); readPreviews(body, previewIndex, spiderInfo); @@ -1034,7 +1035,7 @@ public final class SpiderQueen implements Runnable { } private GalleryPageParser.Result fetchPageResultFromHtml(int index, String pageUrl) throws Throwable { - GalleryPageParser.Result result = EhEngine.getGalleryPage(null, mHttpClient, pageUrl); + GalleryPageParser.Result result = EhEngine.getGalleryPage(null, mHttpClient, pageUrl, mGalleryInfo.gid, mGalleryInfo.token); if (StringUtils.endsWith(result.imageUrl, URL_509_SUFFIX_ARRAY)) { // Get 509 // Notify listeners @@ -1045,8 +1046,8 @@ public final class SpiderQueen implements Runnable { return result; } - private GalleryPageApiParser.Result fetchPageResultFromApi(long gid, int index, String pToken, String showKey) throws Throwable { - GalleryPageApiParser.Result result = EhEngine.getGalleryPageApi(null, mHttpClient, gid, index, pToken, showKey); + private GalleryPageApiParser.Result fetchPageResultFromApi(long gid, int index, String pToken, String showKey, String previousPToken) throws Throwable { + GalleryPageApiParser.Result result = EhEngine.getGalleryPageApi(null, mHttpClient, gid, index, pToken, showKey, previousPToken); if (StringUtils.endsWith(result.imageUrl, URL_509_SUFFIX_ARRAY)) { // Get 509 // Notify listeners @@ -1058,7 +1059,7 @@ public final class SpiderQueen implements Runnable { } // false for stop - private boolean downloadImage(long gid, int index, String pToken, boolean force) { + private boolean downloadImage(long gid, int index, String pToken, String previousPToken, boolean force) { String skipHathKey = null; List skipHathKeys = new ArrayList<>(5); String originImageUrl = null; @@ -1127,7 +1128,7 @@ public final class SpiderQueen implements Runnable { } try { - GalleryPageApiParser.Result result = fetchPageResultFromApi(gid, index, pToken, localShowKey); + GalleryPageApiParser.Result result = fetchPageResultFromApi(gid, index, pToken, localShowKey, previousPToken); imageUrl = result.imageUrl; skipHathKey = result.skipHathKey; originImageUrl = result.originImageUrl; @@ -1155,10 +1156,13 @@ public final class SpiderQueen implements Runnable { } String targetImageUrl; + String referer; if (Settings.getDownloadOriginImage() && !TextUtils.isEmpty(originImageUrl)) { targetImageUrl = originImageUrl; + referer = EhUrl.getPageUrl(gid, index, pToken); } else { targetImageUrl = imageUrl; + referer = null; } if (targetImageUrl == null) { error = "TargetImageUrl error"; @@ -1176,7 +1180,7 @@ public final class SpiderQueen implements Runnable { Log.d(TAG, "Start download image " + index); } - Call call = mHttpClient.newCall(new EhRequestBuilder(targetImageUrl).build()); + Call call = mHttpClient.newCall(new EhRequestBuilder(targetImageUrl, referer).build()); Response response = call.execute(); ResponseBody responseBody = response.body(); @@ -1391,6 +1395,36 @@ public final class SpiderQueen implements Runnable { return false; } + String previousPToken = null; + int previousIndex = index - 1; + // Get token + while (previousIndex >= 0 && !Thread.currentThread().isInterrupted()) { + synchronized (mPTokenLock) { + previousPToken = spiderInfo.pTokenMap.get(previousIndex); + } + if (previousPToken == null) { + mRequestPTokenQueue.add(previousIndex); + // Notify Queen + synchronized (mQueenLock) { + mQueenLock.notify(); + } + // Wait + synchronized (mWorkerLock) { + try { + mWorkerLock.wait(); + } catch (InterruptedException e) { + // Interrupted + if (DEBUG_LOG) { + Log.d(TAG, Thread.currentThread().getName() + " Interrupted"); + } + break; + } + } + } else { + break; + } + } + if (SpiderInfo.TOKEN_FAILED.equals(pToken)) { // Get token failed updatePageState(index, STATE_FAILED, GetText.getString(R.string.error_get_ptoken_error)); @@ -1398,7 +1432,7 @@ public final class SpiderQueen implements Runnable { } // Get image url - return downloadImage(mGid, index, pToken, force); + return downloadImage(mGid, index, pToken, previousPToken, force); } @Override diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java index 8445bdb79..2beaa52ab 100755 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java @@ -1704,7 +1704,7 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene mErrorText.setVisibility(View.GONE); mListView.setVisibility(View.GONE); mRequest = new EhRequest().setMethod(EhClient.METHOD_ARCHIVE_LIST) - .setArgs(url) + .setArgs(url, mGid, mToken) .setCallback(this); EhApplication.getEhClient(context).execute(mRequest); } else { @@ -1819,7 +1819,7 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene mErrorText.setVisibility(View.GONE); mListView.setVisibility(View.GONE); mRequest = new EhRequest().setMethod(EhClient.METHOD_GET_TORRENT_LIST) - .setArgs(url) + .setArgs(url, mGid, mToken) .setCallback(this); EhApplication.getEhClient(context).execute(mRequest); } else {