Add accumulator preview reorder diagnostics

This commit is contained in:
2026-06-25 11:00:32 +02:00
parent c22c440d01
commit de7ca38a65
3 changed files with 151 additions and 8 deletions
+34 -5
View File
@@ -236,6 +236,18 @@ def _entry_infos(store: list[dict[str, Any]]) -> list[dict[str, Any]]:
return entries
def _attach_preview_images(entries: list[dict[str, Any]], images: list[dict[str, str]]) -> None:
by_key = {
str(image.get("preview_key") or ""): image
for image in images
if str(image.get("preview_key") or "")
}
for entry in entries:
image = by_key.get(str(entry.get("preview_key") or ""))
if image:
entry["preview_image"] = image
def _accumulator_status(key: str, store: list[dict[str, Any]]) -> str:
images = [entry.get("image") for entry in store if entry.get("image") is not None]
shapes = []
@@ -252,19 +264,23 @@ def accumulator_list_entries(store_key: str, preview_limit: int = 0) -> dict[str
if not key:
raise ValueError("store_key is required for accumulator preview actions")
store = _ACCUMULATOR_STORES.setdefault(key, [])
entries = _entry_infos(store)
result = {
"store_key": key,
"entries": _entry_infos(store),
"entries": entries,
"count": len(store),
"status": _accumulator_status(key, store),
}
if int(preview_limit) > 0:
result["images"] = _preview_image_results(store, preview_limit, None, None)
images = _preview_image_results(store, preview_limit, None, None)
_attach_preview_images(entries, images)
result["images"] = images
return result
def accumulator_delete_entries(
store_key: str,
preview_key: str = "",
entry_id: str = "",
index: int = 0,
clear: bool = False,
@@ -279,8 +295,13 @@ def accumulator_delete_entries(
removed = len(store)
store.clear()
else:
preview_key = str(preview_key or "").strip()
entry_id = str(entry_id or "").strip()
if entry_id:
if preview_key:
before = len(store)
store[:] = [entry for entry in store if _entry_preview_key(entry) != preview_key]
removed = before - len(store)
elif entry_id:
before = len(store)
store[:] = [entry for entry in store if str(entry.get("id") or "") != entry_id]
removed = before - len(store)
@@ -298,6 +319,7 @@ def accumulator_delete_entries(
def accumulator_move_entry(
store_key: str,
preview_key: str = "",
entry_id: str = "",
index: int = 0,
direction: str = "up",
@@ -313,8 +335,14 @@ def accumulator_move_entry(
result["moved"] = False
return result
zero_index = -1
preview_key = str(preview_key or "").strip()
entry_id = str(entry_id or "").strip()
if entry_id:
if preview_key:
for current_index, entry in enumerate(store):
if _entry_preview_key(entry) == preview_key:
zero_index = current_index
break
elif entry_id:
for current_index, entry in enumerate(store):
if str(entry.get("id") or "") == entry_id:
zero_index = current_index
@@ -1121,8 +1149,9 @@ class SxCPAccumulatorPreview:
images = []
save_status += "; cleared_after_save"
preview_images = _preview_image_results(store, preview_limit, prompt, extra_pnginfo)
entries = _entry_infos(store)
preview_images = _preview_image_results(store, preview_limit, prompt, extra_pnginfo)
_attach_preview_images(entries, preview_images)
status = _accumulator_status(key, store)
if removed:
status += f"; removed={removed}"