T-574 优化封面画廊保存反馈
This commit is contained in:
@@ -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
@@ -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`
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user