Fix disappearing entries on save: delete/recreate thumbnail textures, avoid full UI refresh on feedback save
This commit is contained in:
+9
-5
@@ -20,7 +20,7 @@ THUMB_SIZE = 96
|
|||||||
|
|
||||||
_db = FeedbackDB.open(DB_PATH)
|
_db = FeedbackDB.open(DB_PATH)
|
||||||
_entries = []
|
_entries = []
|
||||||
_thumbnails = {}
|
_thumbnails = set()
|
||||||
_filter = "all"
|
_filter = "all"
|
||||||
_texture_registry = None
|
_texture_registry = None
|
||||||
|
|
||||||
@@ -28,9 +28,9 @@ _texture_registry = None
|
|||||||
def _load_thumbnail(path, tag):
|
def _load_thumbnail(path, tag):
|
||||||
if not path or not os.path.exists(path):
|
if not path or not os.path.exists(path):
|
||||||
return False
|
return False
|
||||||
if dpg.does_item_exist(tag):
|
|
||||||
return True
|
|
||||||
try:
|
try:
|
||||||
|
if dpg.does_item_exist(tag):
|
||||||
|
dpg.delete_item(tag)
|
||||||
img = Image.open(path).convert("RGBA")
|
img = Image.open(path).convert("RGBA")
|
||||||
img.thumbnail((THUMB_SIZE, THUMB_SIZE), Image.NEAREST)
|
img.thumbnail((THUMB_SIZE, THUMB_SIZE), Image.NEAREST)
|
||||||
|
|
||||||
@@ -48,7 +48,7 @@ def _load_thumbnail(path, tag):
|
|||||||
tag=tag,
|
tag=tag,
|
||||||
parent=_texture_registry,
|
parent=_texture_registry,
|
||||||
)
|
)
|
||||||
_thumbnails[tag] = True
|
_thumbnails.add(tag)
|
||||||
return True
|
return True
|
||||||
except Exception:
|
except Exception:
|
||||||
return False
|
return False
|
||||||
@@ -71,6 +71,10 @@ def _refresh():
|
|||||||
)
|
)
|
||||||
|
|
||||||
dpg.delete_item("sprite_list", children_only=True)
|
dpg.delete_item("sprite_list", children_only=True)
|
||||||
|
for tag in list(_thumbnails):
|
||||||
|
if dpg.does_item_exist(tag):
|
||||||
|
dpg.delete_item(tag)
|
||||||
|
_thumbnails.clear()
|
||||||
|
|
||||||
if not _entries:
|
if not _entries:
|
||||||
dpg.add_text(
|
dpg.add_text(
|
||||||
@@ -236,7 +240,7 @@ def _save_feedback_by_id(sender, app_data, user_data):
|
|||||||
feedback = dpg.get_value(fb_tag) if dpg.does_item_exist(fb_tag) else ""
|
feedback = dpg.get_value(fb_tag) if dpg.does_item_exist(fb_tag) else ""
|
||||||
rating = _get_current_rating(entry_id)
|
rating = _get_current_rating(entry_id)
|
||||||
_db.update_rating(entry_id, rating, feedback if feedback else None)
|
_db.update_rating(entry_id, rating, feedback if feedback else None)
|
||||||
_refresh()
|
# Don't refresh the whole UI — preserves text in other feedback fields.
|
||||||
|
|
||||||
|
|
||||||
def _delete_by_id(sender, app_data, user_data):
|
def _delete_by_id(sender, app_data, user_data):
|
||||||
|
|||||||
Reference in New Issue
Block a user