From 84b328b60b84e5491d0033db6af4709ae853f21f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E7=99=BD-=E7=99=BD?= Date: Tue, 15 Nov 2022 12:08:08 +0800 Subject: [PATCH] Init prev page load --- .../client/data/FavListUrlBuilder.java | 10 +++++ .../ehviewer/client/data/ListUrlBuilder.kt | 34 +++++++++------ .../client/parser/FavoritesParser.java | 23 +++++----- .../client/parser/GalleryListParser.java | 42 ++++++++++++------- .../hippo/ehviewer/ui/CommonOperations.java | 4 -- .../ehviewer/ui/scene/FavoritesScene.java | 12 +++--- .../ehviewer/ui/scene/GalleryListScene.java | 19 ++++++--- 7 files changed, 94 insertions(+), 50 deletions(-) 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 dda1924e9..35f904239 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,6 +44,7 @@ public class FavListUrlBuilder implements Parcelable { } }; private static final String TAG = FavListUrlBuilder.class.getSimpleName(); + private String mPrev; private String mNext; private String mJumpTo; private String mKeyword; @@ -53,6 +54,7 @@ public class FavListUrlBuilder implements Parcelable { } protected FavListUrlBuilder(Parcel in) { + this.mPrev = in.readString(); this.mNext = in.readString(); this.mJumpTo = in.readString(); this.mKeyword = in.readString(); @@ -63,6 +65,10 @@ public class FavListUrlBuilder implements Parcelable { return favCat >= 0 && favCat <= 9; } + public void setPrev(String prev) { + mPrev = prev; + } + public void setNext(String next) { mNext = next; } @@ -111,6 +117,9 @@ public class FavListUrlBuilder implements Parcelable { Log.e(TAG, "Can't URLEncoder.encode " + mKeyword); } } + if (mPrev != null && !mPrev.isEmpty()) { + ub.addQuery("prev", mPrev); + } if (mNext != null && !mNext.isEmpty()) { ub.addQuery("next", mNext); } @@ -127,6 +136,7 @@ public class FavListUrlBuilder implements Parcelable { @Override public void writeToParcel(Parcel dest, int flags) { + dest.writeString(this.mPrev); dest.writeString(this.mNext); dest.writeString(this.mJumpTo); dest.writeString(this.mKeyword); diff --git a/app/src/main/java/com/hippo/ehviewer/client/data/ListUrlBuilder.kt b/app/src/main/java/com/hippo/ehviewer/client/data/ListUrlBuilder.kt index fdb5e23ad..3696a48db 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/data/ListUrlBuilder.kt +++ b/app/src/main/java/com/hippo/ehviewer/client/data/ListUrlBuilder.kt @@ -36,8 +36,8 @@ open class ListUrlBuilder : Cloneable, Parcelable { @get:Mode @Mode var mode = MODE_NORMAL - private var mNextGid = 0 private var mPrevGid = 0 + private var mNextGid = 0 private var mJumpTo: String? = null var category = EhUtils.NONE private var mKeyword: String? = null @@ -54,8 +54,8 @@ open class ListUrlBuilder : Cloneable, Parcelable { constructor() protected constructor(parcel: Parcel) { mode = parcel.readInt() - mNextGid = parcel.readInt() mPrevGid = parcel.readInt() + mNextGid = parcel.readInt() mJumpTo = parcel.readString() this.category = parcel.readInt() mKeyword = parcel.readString() @@ -72,8 +72,8 @@ open class ListUrlBuilder : Cloneable, Parcelable { fun reset() { mode = MODE_NORMAL - mNextGid = 0 mPrevGid = 0 + mNextGid = 0 mJumpTo = null this.category = EhUtils.NONE mKeyword = null @@ -96,6 +96,10 @@ open class ListUrlBuilder : Cloneable, Parcelable { } } + fun setPrevGid(prevGid: Int) { + mPrevGid = prevGid + } + fun setNextGid(nextGid: Int) { mNextGid = nextGid } @@ -117,8 +121,8 @@ open class ListUrlBuilder : Cloneable, Parcelable { */ fun set(lub: ListUrlBuilder) { mode = lub.mode - mNextGid = lub.mNextGid mPrevGid = lub.mPrevGid + mNextGid = lub.mNextGid mJumpTo = lub.mJumpTo this.category = lub.category mKeyword = lub.mKeyword @@ -349,15 +353,15 @@ open class ListUrlBuilder : Cloneable, Parcelable { } mJumpTo?.let { ub.addQuery("seek", mJumpTo!!) - mNextGid = 0 mPrevGid = 0 - } - if (mNextGid != 0) { - ub.addQuery("next", mNextGid) + mNextGid = 0 } if (mPrevGid != 0) { ub.addQuery("prev", mPrevGid) } + if (mNextGid != 0) { + ub.addQuery("next", mNextGid) + } // Advance search if (advanceSearch != -1) { ub.addQuery("advsearch", "1") @@ -389,6 +393,9 @@ open class ListUrlBuilder : Cloneable, Parcelable { } catch (e: UnsupportedEncodingException) { // Empty } + if (mPrevGid != 0) { + sb.append("?prev=").append(mPrevGid) + } if (mNextGid != 0) { sb.append("?next=").append(mNextGid) } @@ -403,6 +410,9 @@ open class ListUrlBuilder : Cloneable, Parcelable { } catch (e: UnsupportedEncodingException) { // Empty } + if (mPrevGid != 0) { + sb.append("?prev=").append(mPrevGid) + } if (mNextGid != 0) { sb.append("?next=").append(mNextGid) } @@ -447,12 +457,12 @@ open class ListUrlBuilder : Cloneable, Parcelable { if (mSHash != null) { ub.addQuery("f_shash", mSHash!!) } - if (mNextGid != 0) { - ub.addQuery("next", mNextGid) - } if (mPrevGid != 0) { ub.addQuery("prev", mPrevGid) } + if (mNextGid != 0) { + ub.addQuery("next", mNextGid) + } if (advanceSearch != -1) { ub.addQuery("advsearch", "1") if (advanceSearch and AdvanceSearchTable.SH != 0) ub.addQuery("f_sh", "on") @@ -481,8 +491,8 @@ open class ListUrlBuilder : Cloneable, Parcelable { override fun writeToParcel(dest: Parcel, flags: Int) { dest.writeInt(mode) - dest.writeInt(mNextGid) dest.writeInt(mPrevGid) + dest.writeInt(mNextGid) dest.writeString(mJumpTo) dest.writeInt(this.category) dest.writeString(mKeyword) 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 4a940bfa4..fea25f709 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,20 +31,22 @@ import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.util.List; +import java.util.regex.Matcher; import java.util.regex.Pattern; public class FavoritesParser { + private static final Pattern PATTERN_PREV_PAGE = Pattern.compile("prev=(\\d+(-\\d+)?)"); 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.
")) { throw new EhException(GetText.getString(R.string.need_sign_in)); } + Document d = Jsoup.parse(body); + String[] catArray = new String[10]; int[] countArray = new int[10]; - try { - Document d = Jsoup.parse(body); Element ido = JsoupUtils.getElementByClass(d, "ido"); //noinspection ConstantConditions Elements fps = ido.getElementsByClass("fp"); @@ -61,17 +63,17 @@ public class FavoritesParser { e.printStackTrace(); throw new ParseException("Parse favorites error", body); } - Result re = new Result(); + Result re = new Result(); try { - var d = Jsoup.parse(body); - var next = d.getElementById("unext"); + Element prev = d.getElementById("uprev"); + Element next = d.getElementById("unext"); + assert prev != null; assert next != null; - var href = next.attr("href"); - var matcher = PATTERN_NEXT_PAGE.matcher(href); - if (matcher.find()) { - re.nextPage = matcher.group(1); - } + Matcher matcherPrev = PATTERN_PREV_PAGE.matcher(prev.attr("href")); + Matcher matcherNext = PATTERN_NEXT_PAGE.matcher(next.attr("href")); + if (matcherPrev.find()) re.prevPage = matcherPrev.group(1); + if (matcherNext.find()) re.nextPage = matcherNext.group(1); } catch (Throwable e) { e.printStackTrace(); } @@ -88,6 +90,7 @@ public class FavoritesParser { public static class Result { public String[] catArray; // Size 10 public int[] countArray; // Size 10 + public String prevPage; public String nextPage; public ListYou do not have any watched tags"); - if (body.contains("No hits found
")) { - result.founds = 0; - result.galleryInfoList = Collections.EMPTY_LIST; - return result; + try { + Element prev = d.getElementById("uprev"); + Element next = d.getElementById("unext"); + assert prev != null; + assert next != null; + Matcher matcherPrev = PATTERN_PREV_PAGE.matcher(prev.attr("href")); + Matcher matcherNext = PATTERN_NEXT_PAGE.matcher(next.attr("href")); + if (matcherPrev.find()) result.prevGid = NumberUtils.parseIntSafely(matcherPrev.group(1), 0); + if (matcherNext.find()) result.nextGid = NumberUtils.parseIntSafely(matcherNext.group(1), 0); + result.founds = Integer.MAX_VALUE; + } catch (Throwable e) { + ExceptionUtils.throwIfFatal(e); + result.noWatchedTags = body.contains("You do not have any watched tags"); + if (body.contains("No hits found
")) { + result.founds = 0; + //noinspection unchecked + result.galleryInfoList = Collections.EMPTY_LIST; + return result; + } else if (d.getElementsByClass("ptt").isEmpty()) { + result.founds = 1; + } else { + result.founds = Integer.MAX_VALUE; + } } try { @@ -348,6 +360,8 @@ public class GalleryListParser { public static class Result { public int founds; + public int prevGid; + public int nextGid; public boolean noWatchedTags; public List