T-574 优化封面画廊保存反馈

This commit is contained in:
chengma
2026-07-09 16:06:13 +08:00
parent 36d017953d
commit aac5c5d177
3 changed files with 35 additions and 5 deletions
+19 -3
View File
@@ -137,8 +137,11 @@ class CoverGalleryDialog(QDialog):
self.regenerate_button.clicked.connect(self.regenerate_cover)
button_layout.addWidget(self.regenerate_button)
button_layout.addStretch(1)
self.save_hint_label = QLabel("")
self.save_hint_label.setObjectName("coverGallerySaveHintLabel")
button_layout.addWidget(self.save_hint_label)
self.save_button = QPushButton("保存")
self.cancel_button = QPushButton("取消")
self.cancel_button = QPushButton("关闭")
self.save_button.clicked.connect(self.save_selection)
self.cancel_button.clicked.connect(self.reject)
button_layout.addWidget(self.save_button)
@@ -297,6 +300,8 @@ class CoverGalleryDialog(QDialog):
def _select_candidate(self, candidate_path):
self.selected_path = candidate_path
self.save_button.setEnabled(True)
if not _same_file(candidate_path, self.current_path):
self._set_save_hint("")
self._update_status()
def _update_status(self):
@@ -322,14 +327,16 @@ class CoverGalleryDialog(QDialog):
self.status_label.setText("已选择新的生成封面,保存后用于后续更新蝦皮")
def save_selection(self, checked=False):
return self._save_selected_cover(close_on_success=True)
return self._save_selected_cover(close_on_success=False, show_success_hint=True)
def _save_selected_cover(self, close_on_success=False):
def _save_selected_cover(self, close_on_success=False, show_success_hint=False):
if not self.selected_path:
QMessageBox.warning(self, "封面画廊", "请先选择一张生成封面")
return False
if _same_file(self.selected_path, self.current_path):
self.changed = False
if show_success_hint:
self._set_save_hint("已保存为本次更新封面")
if close_on_success:
self.accept()
return True
@@ -338,6 +345,7 @@ class CoverGalleryDialog(QDialog):
try:
db.update_generated_cover(self.task.id, self.selected_path, path=self.db_path)
except Exception as exc:
self._set_save_hint("")
QMessageBox.warning(self, "封面画廊", f"保存当前封面失败:{exc}")
return False
fresh_task = db.get_task(self.task.id, path=self.db_path)
@@ -346,13 +354,20 @@ class CoverGalleryDialog(QDialog):
self.visible_tasks[self.task_index] = fresh_task
self.current_path = _normalize_file_path(self.selected_path)
self.changed = True
self._rebuild_candidate_items()
self._sync_initial_selection()
self._update_status()
if show_success_hint:
self._set_save_hint("已保存为本次更新封面")
if self.gallery_updated_callback is not None:
self.gallery_updated_callback(self.task)
if close_on_success:
self.accept()
return True
def _set_save_hint(self, message):
self.save_hint_label.setText(str(message or ""))
def regenerate_cover(self, checked=False):
if self.regenerate_thread is not None:
return False
@@ -574,6 +589,7 @@ class CoverGalleryDialog(QDialog):
self.account = self._account_for_task(task)
self.current_path = _normalize_file_path(getattr(self.task, "new_cover_path", None))
self.selected_path = None
self._set_save_hint("")
self.candidates = image_paths.list_task_cover_candidates(self.image_root, self.task, account=self.account)
self._rebuild_candidate_items()
self._sync_initial_selection()
+10 -2
View File
@@ -3,7 +3,7 @@ id: T-574
title: ②封面画廊保存后停留并提示已保存
phase: 7
deps: [T-573]
status: TODO
status: DONE
created: 2026-07-09
---
@@ -63,4 +63,12 @@ created: 2026-07-09
## 执行记录
(做完在这里写:改了什么文件、跑了什么验证命令及结果、关键决策。)
- 2026-07-09:已完成。
- `app/gui/tabs/generate.py`:封面画廊底部新增保存提示 label;「保存」后不再关闭弹窗,成功写入本地 `new_cover_path` 后显示「已保存为本次更新封面」,并重建候选项刷新「当前生效封面」标记;原「取消」按钮改为「关闭」,仍走原关闭/未保存保护逻辑。
- `tests/test_gui.py`:更新封面画廊保存测试,覆盖保存后弹窗不退出、DB 生效、提示文案显示、关闭按钮文案以及新候选项立即标记为当前生效。
- 验证通过:
- `py -3.10 -m unittest tests.test_gui`
- `python -m ruff check app tests main.py`
- `py -3.10 -m compileall app main.py`
- `py -3.10 -m unittest discover -s tests`
- `git diff --check`
+6
View File
@@ -2368,6 +2368,12 @@ class GuiTests(TempDirMixin, unittest.TestCase):
self.assertEqual("generated", updated.stage)
self.assertEqual("pending", updated.status)
self.assertTrue(dialog.changed)
self.assertEqual(0, dialog.result())
self.assertEqual("关闭", dialog.cancel_button.text())
self.assertEqual("已保存为本次更新封面", dialog.save_hint_label.text())
self.assertEqual(os.path.abspath(selected), dialog.current_path)
self.assertTrue(dialog.candidate_buttons[selected].isChecked())
self.assertEqual("当前生效", dialog.candidate_buttons[selected].text())
self.assert_removed(temp_dir)