Files
tingquanzhushou/gui/components/workers.py

98 lines
3.4 KiB
Python

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"机器码重置成功\n"
f"请重新启动 Cursor 编辑器"
)
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))