From d94aa1ee02c49c64370c4bc26a097381276aa3f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20F=C3=A4hrmann?= Date: Thu, 23 Mar 2023 22:58:13 +0100 Subject: [PATCH] [gelbooru] fix --range for favorites (#3704) --- gallery_dl/extractor/gelbooru.py | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/gallery_dl/extractor/gelbooru.py b/gallery_dl/extractor/gelbooru.py index 81b07f77..e2173de9 100644 --- a/gallery_dl/extractor/gelbooru.py +++ b/gallery_dl/extractor/gelbooru.py @@ -173,23 +173,39 @@ class GelbooruFavoriteExtractor(GelbooruBase, "count": 3, }) + skip = GelbooruBase._skip_offset + def posts(self): # get number of favorites params = { "s" : "favorite", "id" : self.favorite_id, - "limit": "1" + "limit": "1", } count = self._api_request(params, "@attributes")[0]["count"] + if count <= self.offset: + return + pnum, last = divmod(count + 1, self.per_page) + + if self.offset >= last: + self.offset -= last + diff, self.offset = divmod(self.offset, self.per_page) + pnum -= diff + 1 + skip = self.offset + # paginate over them in reverse - params["pid"] = count // self.per_page + params["pid"] = pnum params["limit"] = self.per_page while True: favs = self._api_request(params, "favorite") favs.reverse() + if skip: + favs = favs[skip:] + skip = 0 + for fav in favs: yield from self._api_request({"id": fav["favorite"]})