main_window: pass category_fetcher to all save_post_file call sites
Four save call sites updated to await save_post_file (now async)
and pass category_fetcher so the template-render ensure check can
fire when needed.
_bulk_save: creates fetcher once at the top of the async closure,
shared across all posts in the batch. Probe state persists
within the batch.
_save_to_library: creates fetcher per invocation (single post).
_save_as: wrapped in an async closure (was sync before) since
save_post_file is now async. Uses bookmark_done/error signals
for status instead of direct showMessage.
_batch_download_to: creates fetcher once at the top, shared
across the batch.
New _get_category_fetcher helper returns the fetcher from a fresh
client (lightweight — shares the global httpx pool) or None if no
site is active.
This commit is contained in:
parent
8f8db62a5a
commit
e2a666885f
@ -155,6 +155,11 @@ class BooruApp(QMainWindow):
|
|||||||
if 0 <= index < len(self._grid._thumbs):
|
if 0 <= index < len(self._grid._thumbs):
|
||||||
self._grid._thumbs[index].set_prefetch_progress(progress)
|
self._grid._thumbs[index].set_prefetch_progress(progress)
|
||||||
|
|
||||||
|
def _get_category_fetcher(self):
|
||||||
|
"""Return the CategoryFetcher for the active site, or None."""
|
||||||
|
client = self._make_client()
|
||||||
|
return client.category_fetcher if client else None
|
||||||
|
|
||||||
def _ensure_post_categories_async(self, post) -> None:
|
def _ensure_post_categories_async(self, post) -> None:
|
||||||
"""Schedule an async ensure_categories if the post needs it.
|
"""Schedule an async ensure_categories if the post needs it.
|
||||||
|
|
||||||
@ -2677,10 +2682,11 @@ class BooruApp(QMainWindow):
|
|||||||
in_flight: set[str] = set()
|
in_flight: set[str] = set()
|
||||||
|
|
||||||
async def _do():
|
async def _do():
|
||||||
|
fetcher = self._get_category_fetcher()
|
||||||
for i, (idx, post) in enumerate(zip(indices, posts)):
|
for i, (idx, post) in enumerate(zip(indices, posts)):
|
||||||
try:
|
try:
|
||||||
src = Path(await download_image(post.file_url))
|
src = Path(await download_image(post.file_url))
|
||||||
save_post_file(src, post, dest_dir, self._db, in_flight)
|
await save_post_file(src, post, dest_dir, self._db, in_flight, category_fetcher=fetcher)
|
||||||
self._copy_library_thumb(post)
|
self._copy_library_thumb(post)
|
||||||
self._signals.bookmark_done.emit(idx, f"Saved {i+1}/{len(posts)} to {where}")
|
self._signals.bookmark_done.emit(idx, f"Saved {i+1}/{len(posts)} to {where}")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@ -2830,7 +2836,7 @@ class BooruApp(QMainWindow):
|
|||||||
async def _save():
|
async def _save():
|
||||||
try:
|
try:
|
||||||
src = Path(await download_image(post.file_url))
|
src = Path(await download_image(post.file_url))
|
||||||
save_post_file(src, post, dest_dir, self._db)
|
await save_post_file(src, post, dest_dir, self._db, category_fetcher=self._get_category_fetcher())
|
||||||
self._copy_library_thumb(post)
|
self._copy_library_thumb(post)
|
||||||
where = folder or "Unfiled"
|
where = folder or "Unfiled"
|
||||||
self._signals.bookmark_done.emit(
|
self._signals.bookmark_done.emit(
|
||||||
@ -2868,15 +2874,22 @@ class BooruApp(QMainWindow):
|
|||||||
if not dest:
|
if not dest:
|
||||||
return
|
return
|
||||||
dest_path = Path(dest)
|
dest_path = Path(dest)
|
||||||
|
|
||||||
|
async def _do_save():
|
||||||
try:
|
try:
|
||||||
actual = save_post_file(
|
actual = await save_post_file(
|
||||||
src, post, dest_path.parent, self._db,
|
src, post, dest_path.parent, self._db,
|
||||||
explicit_name=dest_path.name,
|
explicit_name=dest_path.name,
|
||||||
|
category_fetcher=self._get_category_fetcher(),
|
||||||
|
)
|
||||||
|
self._signals.bookmark_done.emit(
|
||||||
|
self._grid.selected_index,
|
||||||
|
f"Saved to {actual}",
|
||||||
)
|
)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self._status.showMessage(f"Save failed: {e}")
|
self._signals.bookmark_error.emit(f"Save failed: {e}")
|
||||||
return
|
|
||||||
self._status.showMessage(f"Saved to {actual}")
|
self._run_async(_do_save)
|
||||||
|
|
||||||
# -- Batch download --
|
# -- Batch download --
|
||||||
|
|
||||||
@ -2899,10 +2912,11 @@ class BooruApp(QMainWindow):
|
|||||||
in_flight: set[str] = set()
|
in_flight: set[str] = set()
|
||||||
|
|
||||||
async def _batch():
|
async def _batch():
|
||||||
|
fetcher = self._get_category_fetcher()
|
||||||
for i, post in enumerate(posts):
|
for i, post in enumerate(posts):
|
||||||
try:
|
try:
|
||||||
src = Path(await download_image(post.file_url))
|
src = Path(await download_image(post.file_url))
|
||||||
save_post_file(src, post, dest_dir, self._db, in_flight)
|
await save_post_file(src, post, dest_dir, self._db, in_flight, category_fetcher=fetcher)
|
||||||
self._signals.batch_progress.emit(i + 1, len(posts), post.id)
|
self._signals.batch_progress.emit(i + 1, len(posts), post.id)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
log.warning(f"Batch #{post.id} failed: {e}")
|
log.warning(f"Batch #{post.id} failed: {e}")
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user