from services.cursor_service import CursorService from common_utils import get_hardware_id from exit_cursor import ExitCursor from PyQt5.QtCore import QThread, pyqtSignal class BaseWorker(QThread): """基础工作线程类""" progress = pyqtSignal(dict) # 进度信号 finished = pyqtSignal(tuple) # 完成信号 error = pyqtSignal(str) # 错误信号 def __init__(self): super().__init__() self._is_running = True def stop(self): """停止线程""" self._is_running = False self.wait() class RefreshTokenWorker(BaseWorker): """刷新 Cursor Token 工作线程""" def run(self): try: # 以下是原有代码 service = CursorService() machine_id = get_hardware_id() # 更新进度 - 退出 Cursor self.progress.emit({ "status": "exiting", "message": "正在关闭 Cursor 进程..." }) # 退出 Cursor if not ExitCursor(): raise Exception("无法完全关闭 Cursor 进程,请手动关闭后重试") # 更新进度 - 开始刷新 self.progress.emit({ "status": "refreshing", "message": "正在刷新 Cursor 授权..." }) # 调用刷新服务 success, msg, account_info = service.refresh_account(machine_id) if success and account_info: # 更新进度 - 开始重置机器码 self.progress.emit({ "status": "resetting", "message": "正在重置机器码..." }) # 调用重置机器码 reset_success, reset_msg, reset_data = service.reset_machine() if reset_success: # 更新进度 self.progress.emit({ "status": "success", "message": f"授权刷新成功: {account_info.get('email')}" }) result_msg = ( f"授权刷新成功\n" f"账号: {account_info.get('email')}\n" f"密码: {account_info.get('password')}\n" f"出现3.7拥挤或者vpn等均不是账号问题切勿多次刷新账号\n" f"现在账号紧缺后台防止盗号有限制共日常重度使用也是够的账号用干了在刷新。\n" f"机器码重置成功\n" f"请重新启动 Cursor 编辑器" ) else: # 检查是否是权限错误 if "Permission denied" in reset_msg or "Errno 13" in reset_msg: result_msg = ( f"授权刷新成功,但机器码重置失败(权限不足)\n" f"账号: {account_info.get('email')}\n" f"密码: {account_info.get('password')}\n" f"这是正常现象,不影响使用\n" f"请重新启动 Cursor 编辑器" ) # 将结果标记为成功,因为这种情况下仍然可以正常使用 success = True else: result_msg = f"授权刷新成功,但机器码重置失败: {reset_msg}" else: result_msg = f"授权刷新失败: {msg}" self.finished.emit(('refresh', (success, result_msg))) except Exception as e: self.error.emit(str(e)) class ResetWorker(BaseWorker): """重置机器码工作线程""" def run(self): try: service = CursorService() success, msg, data = service.reset_machine() self.finished.emit(('reset', (success, msg, data))) except Exception as e: self.error.emit(str(e)) class DisableWorker(BaseWorker): """禁用更新工作线程""" def run(self): try: service = CursorService() success, msg = service.disable_update() # 始终传递失败状态和错误消息,让主窗口处理解决方案 self.finished.emit(('disable', (success, msg))) except Exception as e: self.error.emit(str(e))