Cache page results — prev/next loads instantly from memory
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.
This commit is contained in:
parent
5bfc086931
commit
63292aa9ba
@ -536,19 +536,26 @@ class BooruApp(QMainWindow):
|
|||||||
def _on_search(self, tags: str) -> None:
|
def _on_search(self, tags: str) -> None:
|
||||||
self._current_tags = tags
|
self._current_tags = tags
|
||||||
self._current_page = 1
|
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._min_score = self._score_spin.value()
|
||||||
self._do_search()
|
self._do_search()
|
||||||
|
|
||||||
def _prev_page(self) -> None:
|
def _prev_page(self) -> None:
|
||||||
if self._current_page > 1:
|
if self._current_page > 1:
|
||||||
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:
|
def _next_page(self) -> None:
|
||||||
if self._loading:
|
if self._loading:
|
||||||
return
|
return
|
||||||
self._current_page += 1
|
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()
|
self._do_search()
|
||||||
|
|
||||||
def _on_nav_past_end(self) -> None:
|
def _on_nav_past_end(self) -> None:
|
||||||
@ -677,10 +684,13 @@ class BooruApp(QMainWindow):
|
|||||||
|
|
||||||
def _on_search_done(self, posts: list) -> None:
|
def _on_search_done(self, posts: list) -> None:
|
||||||
self._posts = posts
|
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'):
|
if not hasattr(self, '_shown_post_ids'):
|
||||||
self._shown_post_ids = set()
|
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._shown_post_ids.update(p.id for p in posts)
|
||||||
|
self._page_cache[self._current_page] = posts
|
||||||
self._status.showMessage(f"{len(posts)} results")
|
self._status.showMessage(f"{len(posts)} results")
|
||||||
thumbs = self._grid.set_posts(len(posts))
|
thumbs = self._grid.set_posts(len(posts))
|
||||||
self._grid.scroll_to_top()
|
self._grid.scroll_to_top()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user