From 1cbb72592063471ebac38f1b8d647def7427e697 Mon Sep 17 00:00:00 2001 From: seven332 Date: Wed, 20 Mar 2019 14:30:49 +0800 Subject: [PATCH] Add nextPage field to avoid require duplicate page --- .../client/parser/FavoritesParser.java | 2 ++ .../client/parser/GalleryListParser.java | 11 ++++++++++ .../ehviewer/ui/scene/FavoritesScene.java | 6 +++--- .../ehviewer/ui/scene/GalleryListScene.java | 2 +- .../ui/scene/GalleryPreviewsScene.java | 2 +- .../java/com/hippo/widget/ContentLayout.java | 21 +++++++++++++++++-- 6 files changed, 37 insertions(+), 7 deletions(-) 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 5abb0d030..b6450b752 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 @@ -36,6 +36,7 @@ public class FavoritesParser { public String[] catArray; // Size 10 public int[] countArray; // Size 10 public int pages; + public int nextPage; public List galleryInfoList; } @@ -71,6 +72,7 @@ public class FavoritesParser { re.catArray = catArray; re.countArray = countArray; re.pages = result.pages; + re.nextPage = result.nextPage; re.galleryInfoList = result.galleryInfoList; return re; 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 99694161f..c2122e207 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 @@ -46,6 +46,7 @@ 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 String[][] FAVORITE_SLOT_RGB = new String[][] { new String[] { "0", "0", "0"}, @@ -62,6 +63,7 @@ public class GalleryListParser { public static class Result { public int pages; + public int nextPage; public List galleryInfoList; } @@ -269,6 +271,15 @@ public class GalleryListParser { Element ptt = d.getElementsByClass("ptt").first(); Elements es = ptt.child(0).child(0).children(); result.pages = Integer.parseInt(es.get(es.size() - 2).text().trim()); + + Element e = es.get(es.size() - 1); + if (e != null) { + String href = e.child(0).attr("href"); + Matcher matcher = PATTERN_NEXT_PAGE.matcher(href); + if (matcher.find()) { + result.nextPage = Integer.parseInt(matcher.group(1)); + } + } } catch (Throwable e) { ExceptionUtils.throwIfFatal(e); if (body.contains("No hits found

")) { 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 ef814c73d..b2c37836d 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 @@ -879,7 +879,7 @@ public class FavoritesScene extends BaseScene implements updateSearchBar(); mHelper.setPages(taskId, result.pages); - mHelper.onGetPageData(taskId, result.galleryInfoList); + mHelper.onGetPageData(taskId, result.nextPage, result.galleryInfoList); if (mDrawerAdapter != null) { mDrawerAdapter.notifyDataSetChanged(); @@ -906,10 +906,10 @@ public class FavoritesScene extends BaseScene implements if (list.size() == 0) { mHelper.setPages(taskId, 0); - mHelper.onGetPageData(taskId, Collections.EMPTY_LIST); + mHelper.onGetPageData(taskId, 0, Collections.EMPTY_LIST); } else { mHelper.setPages(taskId, 1); - mHelper.onGetPageData(taskId, list); + mHelper.onGetPageData(taskId, 0, list); } if (TextUtils.isEmpty(keyword)) { 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 d8504edc5..2329b8c69 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 @@ -1445,7 +1445,7 @@ public final class GalleryListScene extends BaseScene if (mHelper != null && mSearchBarMover != null && mHelper.isCurrentTask(taskId)) { mHelper.setPages(taskId, result.pages); - mHelper.onGetPageData(taskId, result.galleryInfoList); + mHelper.onGetPageData(taskId, result.nextPage, result.galleryInfoList); } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsScene.java index dcccc3070..a23b7786c 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsScene.java @@ -347,7 +347,7 @@ public class GalleryPreviewsScene extends ToolbarScene implements EasyRecyclerVi } mHelper.setPages(taskId, result.second); - mHelper.onGetPageData(taskId, list); + mHelper.onGetPageData(taskId, 0, list); } } diff --git a/app/src/main/java/com/hippo/widget/ContentLayout.java b/app/src/main/java/com/hippo/widget/ContentLayout.java index 3197c398e..ce714e574 100644 --- a/app/src/main/java/com/hippo/widget/ContentLayout.java +++ b/app/src/main/java/com/hippo/widget/ContentLayout.java @@ -46,6 +46,7 @@ import com.hippo.yorozuya.IntIdGenerator; import com.hippo.yorozuya.LayoutUtils; import com.hippo.yorozuya.collect.IntList; import java.util.ArrayList; +import java.util.Collections; import java.util.Iterator; import java.util.List; @@ -235,6 +236,8 @@ public class ContentLayout extends FrameLayout { */ private int mPages; + private int mNextPage; + private int mCurrentTaskId; private int mCurrentTaskType; private int mCurrentTaskPage; @@ -271,6 +274,13 @@ public class ContentLayout extends FrameLayout { public void onFooterRefresh() { if (mEndPage < mPages) { // Get next page + // Fill pages before NextPage with empty list + while (mNextPage > mEndPage) { + mCurrentTaskId = mIdGenerator.nextId(); + mCurrentTaskType = TYPE_NEXT_PAGE_KEEP_POS; + mCurrentTaskPage = mEndPage; + onGetPageData(mCurrentTaskId, mNextPage, Collections.emptyList()); + } mCurrentTaskId = mIdGenerator.nextId(); mCurrentTaskType = TYPE_NEXT_PAGE_KEEP_POS; mCurrentTaskPage = mEndPage; @@ -324,7 +334,7 @@ public class ContentLayout extends FrameLayout { } /** - * Call {@link #onGetPageData(int, List)} when get data + * Call {@link #onGetPageData(int, int, List)} when get data * * @param taskId task id * @param page the page to get @@ -442,7 +452,7 @@ public class ContentLayout extends FrameLayout { } } - public void onGetPageData(int taskId, List data) { + public void onGetPageData(int taskId, int nextPage, List data) { if (mCurrentTaskId == taskId) { int dataSize; @@ -450,6 +460,7 @@ public class ContentLayout extends FrameLayout { case TYPE_REFRESH: mStartPage = 0; mEndPage = 1; + mNextPage = nextPage; mPageDivider.clear(); mPageDivider.add(data.size()); @@ -562,6 +573,7 @@ public class ContentLayout extends FrameLayout { int oldDataSize = mData.size(); mPageDivider.add(oldDataSize + dataSize); mEndPage++; + mNextPage = nextPage; if (data.isEmpty()) { if (true || mEndPage >= mPages) { // OK, that's all @@ -616,6 +628,7 @@ public class ContentLayout extends FrameLayout { case TYPE_SOMEWHERE: mStartPage = mCurrentTaskPage; mEndPage = mCurrentTaskPage + 1; + mNextPage = nextPage; mPageDivider.clear(); mPageDivider.add(data.size()); @@ -665,6 +678,10 @@ public class ContentLayout extends FrameLayout { break; } + if (mCurrentTaskPage == mEndPage - 1) { + mNextPage = nextPage; + } + int oldIndexStart = mCurrentTaskPage == mStartPage ? 0 : mPageDivider.get(mCurrentTaskPage - mStartPage - 1); int oldIndexEnd = mPageDivider.get(mCurrentTaskPage - mStartPage); mData.subList(oldIndexStart, oldIndexEnd).clear();