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