feat(listing): add per-page methods with HasNext flag
GalleryPage / ScrapsPage / FavoritesPage return a ListingPage struct carrying the page items, the 1-based page number, and a HasNext flag that mirrors FA's "next page" link. This lets external scrapers drive their own pagination loop (checkpoint resume, parallel workers, custom throttling) without re-implementing the page-walking code. The existing iter.Seq2-shaped methods now share the same per-page primitive internally so behaviour stays in lock-step.
This commit is contained in:
@@ -6,6 +6,24 @@ import (
|
||||
"github.com/PuerkitoBio/goquery"
|
||||
)
|
||||
|
||||
// ListingPage is one page of a listing endpoint (Gallery / Scraps /
|
||||
// Favorites). It carries everything an external caller needs to drive
|
||||
// pagination by hand: the items, the 1-based page number that produced
|
||||
// them, and whether FA exposed a "next page" link.
|
||||
//
|
||||
// External scrapers that want to manage their own loop (resume from a
|
||||
// checkpoint, run pages in parallel, throttle differently) should call
|
||||
// the per-page methods ([Client.GalleryPage], [Client.ScrapsPage],
|
||||
// [Client.FavoritesPage]) and stop when HasNext is false. Callers that
|
||||
// just want every item in order should keep using the iter.Seq2-shaped
|
||||
// methods ([Client.Gallery] et al.), which use the same primitive
|
||||
// internally.
|
||||
type ListingPage struct {
|
||||
Items []*Submission
|
||||
HasNext bool
|
||||
Page int // 1-based page number this result corresponds to
|
||||
}
|
||||
|
||||
// ListOptions configures the pagination of a simple iterator method like
|
||||
// [Client.Gallery] or [Client.Notes]. Filtered iterators ([Client.Search],
|
||||
// [Client.Browse]) use their own option structs that fold the same fields
|
||||
|
||||
Reference in New Issue
Block a user