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 b9213dbb6..afac373a7 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
@@ -44,7 +44,7 @@ public class FavListUrlBuilder implements Parcelable {
}
};
private static final String TAG = FavListUrlBuilder.class.getSimpleName();
- private int mIndex;
+ private String mNext;
private String mKeyword;
private int mFavCat = FAV_CAT_ALL;
@@ -52,7 +52,7 @@ public class FavListUrlBuilder implements Parcelable {
}
protected FavListUrlBuilder(Parcel in) {
- this.mIndex = in.readInt();
+ this.mNext = in.readString();
this.mKeyword = in.readString();
this.mFavCat = in.readInt();
}
@@ -61,8 +61,8 @@ public class FavListUrlBuilder implements Parcelable {
return favCat >= 0 && favCat <= 9;
}
- public void setIndex(int index) {
- mIndex = index;
+ public void setNext(String next) {
+ mNext = next;
}
public String getKeyword() {
@@ -105,8 +105,8 @@ public class FavListUrlBuilder implements Parcelable {
Log.e(TAG, "Can't URLEncoder.encode " + mKeyword);
}
}
- if (mIndex > 0) {
- ub.addQuery("page", Integer.toString(mIndex));
+ if (mNext != null && !mNext.isEmpty()) {
+ ub.addQuery("next", mNext);
}
return ub.build();
}
@@ -118,7 +118,7 @@ public class FavListUrlBuilder implements Parcelable {
@Override
public void writeToParcel(Parcel dest, int flags) {
- dest.writeInt(this.mIndex);
+ dest.writeString(this.mNext);
dest.writeString(this.mKeyword);
dest.writeInt(this.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 0fb9c7ae8..6b63be806 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
@@ -88,6 +88,7 @@ public class ListUrlBuilder implements Cloneable, Parcelable {
protected ListUrlBuilder(Parcel in) {
this.mMode = in.readInt();
this.mNextGid = in.readInt();
+ this.mPrevGid = in.readInt();
this.mCategory = in.readInt();
this.mKeyword = in.readString();
this.mAdvanceSearch = in.readInt();
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 c3fce9c8c..124242e62 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
@@ -31,8 +31,10 @@ import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.util.List;
+import java.util.regex.Pattern;
public class FavoritesParser {
+ private static final Pattern PATTERN_NEXT_PAGE = Pattern.compile("next=(\\d+-\\d+)");
public static Result parse(String body) throws Exception {
if (body.contains("This page requires you to log on.
")) {
@@ -59,10 +61,23 @@ public class FavoritesParser {
e.printStackTrace();
throw new ParseException("Parse favorites error", body);
}
+ Result re = new Result();
+
+ try {
+ var d = Jsoup.parse(body);
+ var snv = d.getElementsByClass("searchnav").first();
+ assert snv != null;
+ var href = snv.child(3).child(0).attr("href");
+ var matcher = PATTERN_NEXT_PAGE.matcher(href);
+ if (matcher.find()) {
+ re.nextPage = matcher.group(1);
+ }
+ } catch (Throwable e) {
+ e.printStackTrace();
+ }
GalleryListParser.Result result = GalleryListParser.parse(body);
- Result re = new Result();
re.catArray = catArray;
re.countArray = countArray;
re.galleryInfoList = result.galleryInfoList;
@@ -73,8 +88,7 @@ public class FavoritesParser {
public static class Result {
public String[] catArray; // Size 10
public int[] countArray; // Size 10
- public int pages;
- public int nextPage;
+ public String nextPage;
public List galleryInfoList;
}
}
diff --git a/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryListParser.java b/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryListParser.java
index cc13cb524..e49bdfb4f 100644
--- a/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryListParser.java
+++ b/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryListParser.java
@@ -51,7 +51,6 @@ public class GalleryListParser {
private static final Pattern PATTERN_THUMB_SIZE = Pattern.compile("height:(\\d+)px;width:(\\d+)px");
private static final Pattern PATTERN_FAVORITE_SLOT = Pattern.compile("background-color:rgba\\((\\d+),(\\d+),(\\d+),");
private static final Pattern PATTERN_PAGES = Pattern.compile("(\\d+) page");
- private static final Pattern PATTERN_NEXT_PAGE = Pattern.compile("page=(\\d+)");
private static final Pattern PATTERN_GETINT = Pattern.compile("[^0-9]");
diff --git a/app/src/main/java/com/hippo/ehviewer/ui/CommonOperations.java b/app/src/main/java/com/hippo/ehviewer/ui/CommonOperations.java
index 84e3bfa44..e9ff330e3 100644
--- a/app/src/main/java/com/hippo/ehviewer/ui/CommonOperations.java
+++ b/app/src/main/java/com/hippo/ehviewer/ui/CommonOperations.java
@@ -47,6 +47,10 @@ import java.util.Objects;
public final class CommonOperations {
+ public static int getPagesForFounds(int founds, int per) {
+ return (int)Math.ceil((double) founds/per);
+ }
+
private static void doAddToFavorites(Activity activity, GalleryInfo galleryInfo,
int slot, EhClient.Callback listener) {
if (slot == -1) {
diff --git a/app/src/main/java/com/hippo/ehviewer/ui/fragment/AdvancedFragment.java b/app/src/main/java/com/hippo/ehviewer/ui/fragment/AdvancedFragment.java
index bf029b962..7e9d2db45 100644
--- a/app/src/main/java/com/hippo/ehviewer/ui/fragment/AdvancedFragment.java
+++ b/app/src/main/java/com/hippo/ehviewer/ui/fragment/AdvancedFragment.java
@@ -312,7 +312,7 @@ public class AdvancedFragment extends BasePreferenceFragment {
Activity activity = requireActivity();
EhClient mClient = EhApplication.getEhClient(context);
FavListUrlBuilder favListUrlBuilder = new FavListUrlBuilder();
- favListUrlBuilder.setIndex(page.get());
+ // favListUrlBuilder.setNext(page.get());
EhRequest request = new EhRequest();
request.setMethod(EhClient.METHOD_GET_FAVORITES);
@@ -324,7 +324,7 @@ public class AdvancedFragment extends BasePreferenceFragment {
EhDB.putLocalFavorites(result1.galleryInfoList);
Log.d("LocalFavorites", "now backup page " + page.get());
if (!result1.galleryInfoList.isEmpty()) {
- favListUrlBuilder.setIndex(page.incrementAndGet());
+ // favListUrlBuilder.setNext(page.incrementAndGet());
request.setArgs(favListUrlBuilder.build(), Settings.getShowJpnTitle());
mClient.execute(request);
} else {
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 bce115a24..9689c7aa6 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
@@ -850,7 +850,14 @@ public class FavoritesScene extends BaseScene implements
}
updateSearchBar();
- mHelper.onGetPageData(taskId, result.pages, result.nextPage, result.galleryInfoList);
+ int pages = 0;
+ assert mUrlBuilder != null;
+ if (FavListUrlBuilder.isValidFavCat(mUrlBuilder.getFavCat()))
+ pages = CommonOperations.getPagesForFounds(mFavCountArray[mUrlBuilder.getFavCat()], 50);
+ else if (mUrlBuilder.getFavCat() == FavListUrlBuilder.FAV_CAT_ALL)
+ pages = CommonOperations.getPagesForFounds(mFavCountSum, 50);
+ mHelper.nextPg = result.nextPage;
+ mHelper.onGetPageData(taskId, pages, mHelper.pgCounter + 1, result.galleryInfoList);
if (mDrawerAdapter != null) {
mDrawerAdapter.notifyDataSetChanged();
@@ -1169,6 +1176,8 @@ public class FavoritesScene extends BaseScene implements
}
private class FavoritesHelper extends GalleryInfoContentHelper {
+ public int pgCounter = 0;
+ public String nextPg = "";
@Override
protected void getPageData(final int taskId, int type, int page) {
@@ -1176,6 +1185,7 @@ public class FavoritesScene extends BaseScene implements
if (null == activity || null == mUrlBuilder || null == mClient) {
return;
}
+ pgCounter = page;
if (mEnableModify) {
mEnableModify = false;
@@ -1215,7 +1225,7 @@ public class FavoritesScene extends BaseScene implements
url = mUrlBuilder.build();
}
- mUrlBuilder.setIndex(page);
+ mUrlBuilder.setNext(nextPg);
EhRequest request = new EhRequest();
request.setMethod(EhClient.METHOD_MODIFY_FAVORITES);
request.setCallback(new GetFavoritesListener(getContext(),
@@ -1228,7 +1238,7 @@ public class FavoritesScene extends BaseScene implements
final String keyword = mUrlBuilder.getKeyword();
SimpleHandler.getInstance().post(() -> onGetFavoritesLocal(keyword, taskId));
} else {
- mUrlBuilder.setIndex(page);
+ mUrlBuilder.setNext(nextPg);
String url = mUrlBuilder.build();
EhRequest request = new EhRequest();
request.setMethod(EhClient.METHOD_GET_FAVORITES);
diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java
index ede311179..ab3cb45fc 100644
--- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java
+++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java
@@ -1374,7 +1374,7 @@ public final class GalleryListScene extends BaseScene
? R.string.gallery_list_empty_hit_subscription
: R.string.gallery_list_empty_hit);
mHelper.setEmptyString(emptyString);
- mHelper.onGetPageData(taskId, result.founds / 25, mHelper.pgCounter + 1, result.galleryInfoList);
+ mHelper.onGetPageData(taskId, CommonOperations.getPagesForFounds(result.founds, 25), mHelper.pgCounter + 1, result.galleryInfoList);
}
}