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); } }