feat: complete T-528 cmhub billing feedback
This commit is contained in:
@@ -102,6 +102,8 @@ class GenerateTab(QWidget):
|
||||
self.cover_progress_bar.setValue(0)
|
||||
self.failed_progress_label = QLabel("失败 0")
|
||||
self.failed_progress_label.setObjectName("generateFailedProgressLabel")
|
||||
self.cmhub_balance_label = QLabel("cmhub余额:未获取")
|
||||
self.cmhub_balance_label.setObjectName("generateCmhubBalanceLabel")
|
||||
|
||||
left_panel = QWidget()
|
||||
left_layout = QVBoxLayout(left_panel)
|
||||
@@ -196,6 +198,7 @@ class GenerateTab(QWidget):
|
||||
cover_progress_layout.addWidget(self.cover_progress_label)
|
||||
cover_progress_layout.addWidget(self.cover_progress_bar, 1)
|
||||
cover_progress_layout.addWidget(self.failed_progress_label)
|
||||
cover_progress_layout.addWidget(self.cmhub_balance_label)
|
||||
progress_layout = QVBoxLayout()
|
||||
progress_layout.addLayout(title_progress_layout)
|
||||
progress_layout.addLayout(cover_progress_layout)
|
||||
@@ -239,6 +242,7 @@ class GenerateTab(QWidget):
|
||||
self.refresh_cover_templates()
|
||||
self.refresh_tasks()
|
||||
self._show_current_run_log_empty()
|
||||
self._update_cmhub_balance_label({})
|
||||
|
||||
def _set_status(self, message):
|
||||
if self.status_callback is not None:
|
||||
@@ -278,7 +282,7 @@ class GenerateTab(QWidget):
|
||||
payload = {
|
||||
key: value
|
||||
for key, value in self.config.items()
|
||||
if key not in {"config_path", "ai_models_path"}
|
||||
if key not in {"config_path", "ai_models_path", "cmhub_config_path"}
|
||||
}
|
||||
payload["ai"] = ai_settings
|
||||
try:
|
||||
@@ -289,7 +293,7 @@ class GenerateTab(QWidget):
|
||||
internal = {
|
||||
key: value
|
||||
for key, value in self.config.items()
|
||||
if key in {"config_path", "ai_models_path"}
|
||||
if key in {"config_path", "ai_models_path", "cmhub_config_path"}
|
||||
}
|
||||
self.config.clear()
|
||||
self.config.update(saved)
|
||||
@@ -489,6 +493,7 @@ class GenerateTab(QWidget):
|
||||
worker.finished.connect(self._on_generate_finished)
|
||||
worker.cancelled.connect(self._on_generate_cancelled)
|
||||
self._reset_generate_run_log(tasks, generate_cover)
|
||||
self._reset_cmhub_balance_label()
|
||||
thread = run_worker(worker, thread_name="GenerateWorker", start=False)
|
||||
thread.finished.connect(lambda: self._forget_generate_thread(thread))
|
||||
self.generate_worker = worker
|
||||
@@ -640,6 +645,7 @@ class GenerateTab(QWidget):
|
||||
|
||||
def _on_generate_progress(self, payload):
|
||||
self._update_generate_progress(payload)
|
||||
self._update_cmhub_balance_label(payload)
|
||||
self._set_status("生成进度:" + self._generate_progress_text(payload))
|
||||
|
||||
def _on_generate_row_updated(self, task_id, fields):
|
||||
@@ -652,6 +658,11 @@ class GenerateTab(QWidget):
|
||||
self._set_generate_running(False)
|
||||
self.refresh_tasks()
|
||||
self._update_generate_progress(payload)
|
||||
self._update_cmhub_balance_label(payload)
|
||||
billing_error = payload.get("billing_error")
|
||||
if billing_error:
|
||||
self._show_billing_error(billing_error)
|
||||
return
|
||||
if payload.get("error"):
|
||||
self._set_status(f"AI 生成失败:{payload.get('error')}")
|
||||
return
|
||||
@@ -661,6 +672,11 @@ class GenerateTab(QWidget):
|
||||
self._set_generate_running(False)
|
||||
self.refresh_tasks()
|
||||
self._update_generate_progress(payload)
|
||||
self._update_cmhub_balance_label(payload)
|
||||
billing_error = payload.get("billing_error")
|
||||
if billing_error:
|
||||
self._show_billing_error(billing_error)
|
||||
return
|
||||
self._set_status("AI 生成已停止:" + self._generate_progress_text(payload))
|
||||
|
||||
def _update_generate_progress(self, payload):
|
||||
@@ -676,6 +692,36 @@ class GenerateTab(QWidget):
|
||||
self._set_progress_bar(self.title_progress_bar, title_done, total)
|
||||
self._set_progress_bar(self.cover_progress_bar, cover_done, cover_total)
|
||||
|
||||
def _reset_cmhub_balance_label(self):
|
||||
if self._is_cmhub_backend():
|
||||
self.cmhub_balance_label.setVisible(True)
|
||||
self.cmhub_balance_label.setText("cmhub余额:生成后刷新")
|
||||
else:
|
||||
self.cmhub_balance_label.setVisible(False)
|
||||
|
||||
def _update_cmhub_balance_label(self, payload):
|
||||
if not self._is_cmhub_backend():
|
||||
self.cmhub_balance_label.setVisible(False)
|
||||
return
|
||||
self.cmhub_balance_label.setVisible(True)
|
||||
balance = payload.get("points_balance") if isinstance(payload, dict) else None
|
||||
if balance is None:
|
||||
if not self.cmhub_balance_label.text():
|
||||
self.cmhub_balance_label.setText("cmhub余额:未获取")
|
||||
return
|
||||
self.cmhub_balance_label.setText(f"cmhub余额:{balance}")
|
||||
|
||||
def _is_cmhub_backend(self):
|
||||
try:
|
||||
return appconfig.ai_config(self.config).get("backend") == "cmhub"
|
||||
except Exception:
|
||||
return False
|
||||
|
||||
def _show_billing_error(self, billing_error):
|
||||
message = billing_error.get("message") or "点数不足,请先充值。"
|
||||
QMessageBox.warning(self, "AI生成", message)
|
||||
self._set_status("AI 生成已中止:" + message)
|
||||
|
||||
def _set_progress_bar(self, bar, done, total):
|
||||
maximum = max(1, int(total or 0))
|
||||
value = min(max(0, int(done or 0)), maximum)
|
||||
|
||||
Reference in New Issue
Block a user