From 63292aa9ba74fa3bc90af750d3a524702da0ccad Mon Sep 17 00:00:00 2001 From: pax Date: Sun, 5 Apr 2026 13:25:32 -0500 Subject: [PATCH] =?UTF-8?q?Cache=20page=20results=20=E2=80=94=20prev/next?= =?UTF-8?q?=20loads=20instantly=20from=20memory?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Each page's results cached per search session. Going back to a previous page loads from cache instead of re-fetching. Cache cleared on new search. --- booru_viewer/gui/app.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/booru_viewer/gui/app.py b/booru_viewer/gui/app.py index 46bae30..5390385 100644 --- a/booru_viewer/gui/app.py +++ b/booru_viewer/gui/app.py @@ -536,19 +536,26 @@ class BooruApp(QMainWindow): def _on_search(self, tags: str) -> None: self._current_tags = tags self._current_page = 1 - self._shown_post_ids = set() # track shown posts across pages + self._shown_post_ids = set() + self._page_cache = {} # page_num -> list[Post] self._min_score = self._score_spin.value() self._do_search() def _prev_page(self) -> None: if self._current_page > 1: self._current_page -= 1 - self._do_search() + if self._current_page in self._page_cache: + self._signals.search_done.emit(self._page_cache[self._current_page]) + else: + self._do_search() def _next_page(self) -> None: if self._loading: return self._current_page += 1 + if self._current_page in getattr(self, '_page_cache', {}): + self._signals.search_done.emit(self._page_cache[self._current_page]) + return self._do_search() def _on_nav_past_end(self) -> None: @@ -677,10 +684,13 @@ class BooruApp(QMainWindow): def _on_search_done(self, posts: list) -> None: self._posts = posts - # Track shown post IDs to avoid duplicates on next/prev page + # Cache page results and track shown IDs if not hasattr(self, '_shown_post_ids'): self._shown_post_ids = set() + if not hasattr(self, '_page_cache'): + self._page_cache = {} self._shown_post_ids.update(p.id for p in posts) + self._page_cache[self._current_page] = posts self._status.showMessage(f"{len(posts)} results") thumbs = self._grid.set_posts(len(posts)) self._grid.scroll_to_top()