[gelbooru] add 'order-posts' option for favorites (#5220)

pull/5372/head
Mike Fährmann 6 months ago
parent 55e8fdad29
commit 31e7ca73b6
No known key found for this signature in database
GPG Key ID: 5680CA389D365A88

@ -2017,6 +2017,20 @@ Description
page. page.
extractor.gelbooru.favorite.order-posts
---------------------------------------
Type
``string``
Default
``"desc"``
Description
Controls the order in which favorited posts are returned.
* ``"asc"``: Ascending favorite date order (oldest first)
* ``"desc"``: Descending favorite date order (newest first)
* ``"reverse"``: Same as ``"asc"``
extractor.generic.enabled extractor.generic.enabled
------------------------- -------------------------
Type Type

@ -172,26 +172,31 @@ class GelbooruFavoriteExtractor(GelbooruBase,
"id" : self.favorite_id, "id" : self.favorite_id,
"limit": "2", "limit": "2",
} }
data = self._api_request(params, None, True) data = self._api_request(params, None, True)
count = data["@attributes"]["count"] count = data["@attributes"]["count"]
if count <= self.offset: self.log.debug("API reports %s favorite entries", count)
return ()
favs = data["favorite"] favs = data["favorite"]
try: try:
order = 1 if favs[0]["id"] < favs[1]["id"] else -1 order = 1 if favs[0]["id"] < favs[1]["id"] else -1
except LookupError: except LookupError as exc:
order = 0 self.log.debug(
"Error when determining API favorite order (%s: %s)",
exc.__class__.__name__, exc)
order = -1
else:
self.log.debug("API yields favorites in %sscending order",
"a" if order > 0 else "de")
if order > 0: order_favs = self.config("order-posts")
self.log.debug("API yields favorites in ascending order") if order_favs and order_favs[0] in ("r", "a"):
self.log.debug("Returning them in reverse") self.log.debug("Returning them in reverse")
return self._pagination_reverse(params, count) order = -order
self.log.debug("API yields favorites in descending order") if order < 0:
return self._pagination(params, count) return self._pagination(params, count)
return self._pagination_reverse(params, count)
def _pagination(self, params, count): def _pagination(self, params, count):
if self.offset: if self.offset:
@ -203,7 +208,7 @@ class GelbooruFavoriteExtractor(GelbooruBase,
params["limit"] = self.per_page params["limit"] = self.per_page
while True: while True:
favs = self._api_request(params, "favorite", True) favs = self._api_request(params, "favorite")
if not favs: if not favs:
return return
@ -232,7 +237,7 @@ class GelbooruFavoriteExtractor(GelbooruBase,
params["limit"] = self.per_page params["limit"] = self.per_page
while True: while True:
favs = self._api_request(params, "favorite", True) favs = self._api_request(params, "favorite")
favs.reverse() favs.reverse()
if skip: if skip:

@ -47,10 +47,30 @@ __tests__ = (
}, },
{ {
"#url" : "https://gelbooru.com/index.php?page=favorites&s=view&id=279415", "#url" : "https://gelbooru.com/index.php?page=favorites&s=view&id=1435674",
"#category": ("booru", "gelbooru", "favorite"), "#category": ("booru", "gelbooru", "favorite"),
"#class" : gelbooru.GelbooruFavoriteExtractor, "#class" : gelbooru.GelbooruFavoriteExtractor,
"#count" : 3, "#urls" : (
"https://img3.gelbooru.com/images/5d/30/5d30fc056ed8668616b3c440df9bac89.jpg",
"https://img3.gelbooru.com/images/4c/2d/4c2da867ed643acdadd8105177dcdaf0.png",
"https://img3.gelbooru.com/images/c8/26/c826f3cb90d9aaca8d0632a96bf4abe8.jpg",
"https://img3.gelbooru.com/images/c1/fe/c1fe59c0bc8ce955dd353544b1015d0c.jpg",
"https://img3.gelbooru.com/images/e6/6d/e66d8883c184f5d3b2591dfcdf0d007c.jpg",
),
},
{
"#url" : "https://gelbooru.com/index.php?page=favorites&s=view&id=1435674",
"#category": ("booru", "gelbooru", "favorite"),
"#class" : gelbooru.GelbooruFavoriteExtractor,
"#options" : {"order-posts": "reverse"},
"#urls" : (
"https://img3.gelbooru.com/images/e6/6d/e66d8883c184f5d3b2591dfcdf0d007c.jpg",
"https://img3.gelbooru.com/images/c1/fe/c1fe59c0bc8ce955dd353544b1015d0c.jpg",
"https://img3.gelbooru.com/images/c8/26/c826f3cb90d9aaca8d0632a96bf4abe8.jpg",
"https://img3.gelbooru.com/images/4c/2d/4c2da867ed643acdadd8105177dcdaf0.png",
"https://img3.gelbooru.com/images/5d/30/5d30fc056ed8668616b3c440df9bac89.jpg",
),
}, },
{ {

Loading…
Cancel
Save