Add nextPage field to avoid require duplicate page

This commit is contained in:
seven332 committed 2019-03-20 14:30:49 +08:00
1 parent 8b76eaa740
commit 1cbb725920
6 files changed
+37 -7

No files matched your search

@@ -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<GalleryInfo> 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;
@@ -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<GalleryInfo> 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</p>")) {
@@ -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)) {
@@ -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);
}
}
@@ -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);
}
}
@@ -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<E> data) {
public void onGetPageData(int taskId, int nextPage, List<E> 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();