feat(subscription): add expiry recovery flow
This commit is contained in:
@@ -66,6 +66,7 @@ class SettingsTab(QWidget):
|
||||
"""Tab 5: AI model definitions stored in data/config/ai_models.json."""
|
||||
|
||||
settingsSaved = Signal(str)
|
||||
subscriptionCheckRequested = Signal()
|
||||
|
||||
BACKEND_ITEMS = [
|
||||
("默认网关", "cmhub"),
|
||||
@@ -279,6 +280,9 @@ class SettingsTab(QWidget):
|
||||
self.cdp_ready_timeout_spin.setObjectName("cdpReadyTimeoutSpin")
|
||||
self.cdp_ready_timeout_spin.setRange(1, 3600)
|
||||
self.save_config_button = QPushButton("保存设置")
|
||||
self.subscription_check_button = QPushButton("重新检测会员状态")
|
||||
self.subscription_check_button.setObjectName("subscriptionCheckButton")
|
||||
self.subscription_check_button.setToolTip("重新查询当前 cmhub 账号的会员套餐状态")
|
||||
self.unsaved_changes_label = QLabel("● 未保存更改")
|
||||
self.unsaved_changes_label.setObjectName("settingsUnsavedChangesLabel")
|
||||
self.unsaved_changes_label.setStyleSheet("color: #bc4c00; font-weight: 600;")
|
||||
@@ -455,6 +459,7 @@ class SettingsTab(QWidget):
|
||||
save_settings_layout.addWidget(self.save_config_button)
|
||||
save_settings_layout.addWidget(self.unsaved_changes_label)
|
||||
save_settings_layout.addStretch(1)
|
||||
save_settings_layout.addWidget(self.subscription_check_button)
|
||||
panel_layout.addLayout(save_settings_layout)
|
||||
panel_layout.addStretch(1)
|
||||
|
||||
@@ -490,6 +495,9 @@ class SettingsTab(QWidget):
|
||||
self.chrome_path_browse_button.clicked.connect(self.browse_chrome_path)
|
||||
self.chrome_path_detect_button.clicked.connect(self.detect_chrome_path)
|
||||
self.save_config_button.clicked.connect(self.save_app_settings)
|
||||
self.subscription_check_button.clicked.connect(
|
||||
self._request_subscription_check
|
||||
)
|
||||
self._connect_dirty_signals()
|
||||
|
||||
with self._dirty_tracking_suspended():
|
||||
@@ -548,6 +556,16 @@ class SettingsTab(QWidget):
|
||||
def _set_status(self, message, level=None):
|
||||
_emit_status(self.status_callback, message, level=level)
|
||||
|
||||
def _request_subscription_check(self, checked=False):
|
||||
self.subscriptionCheckRequested.emit()
|
||||
|
||||
def set_subscription_check_running(self, running):
|
||||
running = bool(running)
|
||||
self.subscription_check_button.setEnabled(not running)
|
||||
self.subscription_check_button.setText(
|
||||
"正在检测会员状态..." if running else "重新检测会员状态"
|
||||
)
|
||||
|
||||
@contextmanager
|
||||
def _dirty_tracking_suspended(self):
|
||||
self._suspend_dirty += 1
|
||||
|
||||
Reference in New Issue
Block a user