fix(subscription): remove membership setup prompt

This commit is contained in:
chengma
2026-07-22 15:48:17 +08:00
parent 9ee48dc2aa
commit 953d98314b
3 changed files with 13 additions and 45 deletions
+8 -42
View File
@@ -117,7 +117,6 @@ class MainWindow(QMainWindow):
self._subscription_worker = None
self._subscription_thread = None
self._subscription_request_token = 0
self._subscription_prompt_key = ""
self._subscription_closed = False
self.tabs = QTabWidget()
self.tabs.setObjectName("mainTabs")
@@ -233,13 +232,13 @@ class MainWindow(QMainWindow):
widget.refresh_gateway_state()
label = "自定义网关" if str(backend) == "direct" else "默认网关"
self.show_status("设置已保存,当前使用%s" % label, level="success")
self.begin_subscription_check(show_prompt=False)
self.begin_subscription_check()
@property
def subscription_status(self):
return self._subscription_status
def begin_subscription_check(self, *, show_prompt=True):
def begin_subscription_check(self):
"""Refresh membership state without blocking the Qt GUI thread."""
self._subscription_request_token += 1
@@ -253,17 +252,15 @@ class MainWindow(QMainWindow):
cmhub_config_path=self.config.get("cmhub_config_path"),
)
worker.finished.connect(
lambda payload, token=token, show_prompt=show_prompt: self._on_subscription_checked(
lambda payload, token=token: self._on_subscription_checked(
token,
payload,
show_prompt=show_prompt,
)
)
worker.cancelled.connect(
lambda payload, token=token, show_prompt=show_prompt: self._on_subscription_checked(
lambda payload, token=token: self._on_subscription_checked(
token,
payload,
show_prompt=show_prompt,
)
)
thread = run_worker(worker, thread_name="SubscriptionCheckWorker", start=False)
@@ -282,24 +279,24 @@ class MainWindow(QMainWindow):
self.show_status("正在验证会员状态,请稍后再%s" % action_name, level="info")
return False
self.show_status("%s:%s" % (action_name, status.user_message), level="warning")
self._show_subscription_access_prompt(status)
self.open_settings_tab()
return False
def _on_subscription_checked(self, token, payload, *, show_prompt=True):
def _on_subscription_checked(self, token, payload):
if self._subscription_closed or token != self._subscription_request_token:
return
result = payload.get("subscription") if isinstance(payload, dict) else None
if not isinstance(result, subscription.SubscriptionStatus):
result = subscription.SubscriptionStatus(subscription.STATUS_UNAVAILABLE)
self._subscription_status = result
self._apply_subscription_status(result, show_prompt=show_prompt)
self._apply_subscription_status(result)
def _forget_subscription_thread(self, thread):
if self._subscription_thread is thread:
self._subscription_thread = None
self._subscription_worker = None
def _apply_subscription_status(self, status, *, show_prompt=True):
def _apply_subscription_status(self, status):
self._subscription_status = status
if status.state == subscription.STATUS_ACTIVE:
expiry = subscription.format_expiry(status.expires_at)
@@ -326,8 +323,6 @@ class MainWindow(QMainWindow):
return
self.open_settings_tab()
self.show_status(status.user_message, level=self._subscription_level(status))
if show_prompt:
self._show_subscription_access_prompt(status)
@staticmethod
def _subscription_level(status):
@@ -345,35 +340,6 @@ class MainWindow(QMainWindow):
for index, title in enumerate(TAB_TITLES):
self.tabs.setTabEnabled(index, bool(enabled) or title == "设置")
def _show_subscription_access_prompt(self, status):
if self._subscription_closed:
return
if status.state in {subscription.STATUS_ACTIVE, subscription.STATUS_GRACE, subscription.STATUS_LEGACY}:
return
prompt_key = "|".join((status.state, status.notice_id, status.manage_url))
if prompt_key and prompt_key == self._subscription_prompt_key:
return
self._subscription_prompt_key = prompt_key
box = QMessageBox(self)
box.setIcon(QMessageBox.Warning)
box.setWindowTitle("需要配置会员账号")
box.setText(status.user_message)
box.setInformativeText("请配置有效的 cmhub API Key,或前往线上会员中心开通、续费后重试。")
settings_button = box.addButton("打开设置", QMessageBox.AcceptRole)
manage_button = None
if status.manage_url:
manage_button = box.addButton("前往会员中心", QMessageBox.ActionRole)
exit_button = box.addButton("退出", QMessageBox.RejectRole)
box.setDefaultButton(settings_button)
box.setEscapeButton(exit_button)
box.exec()
if box.clickedButton() is settings_button:
self.open_settings_tab()
elif manage_button is not None and box.clickedButton() is manage_button:
QDesktopServices.openUrl(QUrl(status.manage_url))
elif box.clickedButton() is exit_button:
self.close()
def _show_subscription_notice_once(self, status):
notice_id = str(status.notice_id or "").strip()
if not notice_id or notice_id == appconfig.subscription_notice_id(self.config):