初步实现提示用户更新
This commit is contained in:
@@ -30,6 +30,7 @@ class BackendClient:
|
||||
self.login_callback: Optional[Callable] = None # 新增:平台登录(下发cookies)回调
|
||||
self.success_callback: Optional[Callable] = None # 新增:后端连接成功回调
|
||||
self.token_error_callback: Optional[Callable] = None # 新增:token错误回调
|
||||
self.version_callback: Optional[Callable] = None # 新增:版本检查回调
|
||||
|
||||
self.is_connected = False
|
||||
|
||||
@@ -263,7 +264,8 @@ class BackendClient:
|
||||
error: Callable = None,
|
||||
login: Callable = None,
|
||||
success: Callable = None,
|
||||
token_error: Callable = None):
|
||||
token_error: Callable = None,
|
||||
version: Callable = None):
|
||||
"""设置各种消息类型的回调函数"""
|
||||
if store_list:
|
||||
self.store_list_callback = store_list
|
||||
@@ -283,6 +285,8 @@ class BackendClient:
|
||||
self.success_callback = success
|
||||
if token_error:
|
||||
self.token_error_callback = token_error
|
||||
if version:
|
||||
self.version_callback = version
|
||||
|
||||
def on_connected(self):
|
||||
"""连接成功时的处理"""
|
||||
@@ -437,6 +441,8 @@ class BackendClient:
|
||||
self._handle_token_error(message)
|
||||
elif msg_type == 'staff_list':
|
||||
self._handle_staff_list(message)
|
||||
elif msg_type == 'version_response': # 新增:版本检查响应
|
||||
self._handle_version_response(message)
|
||||
else:
|
||||
print(f"未知消息类型: {msg_type}")
|
||||
|
||||
@@ -1213,6 +1219,16 @@ class BackendClient:
|
||||
if self.customers_callback: # 假设客服列表更新也触发客服列表回调
|
||||
self.customers_callback(staff_list, store_id)
|
||||
|
||||
def _handle_version_response(self, message: Dict[str, Any]):
|
||||
"""处理版本检查响应"""
|
||||
latest_version = message.get('latest_version')
|
||||
download_url = message.get('download_url')
|
||||
|
||||
print(f"收到版本检查响应: 最新版本={latest_version}, 下载地址={download_url}")
|
||||
|
||||
if self.version_callback:
|
||||
self.version_callback(message)
|
||||
|
||||
# ==================== 辅助方法 ====================
|
||||
|
||||
def set_token(self, token: str):
|
||||
|
||||
@@ -27,7 +27,13 @@ class WebSocketManager:
|
||||
"""WebSocket连接管理器,统一处理后端连接和平台监听"""
|
||||
|
||||
def __init__(self):
|
||||
# 后端客户端
|
||||
self.backend_client = None
|
||||
self.is_connected = False
|
||||
|
||||
# 版本检查器
|
||||
self.version_checker = None
|
||||
self.gui_update_callback = None
|
||||
self.platform_listeners = {} # 存储各平台的监听器
|
||||
self.connected_platforms = [] # 存储已连接的平台列表 # <- 新增
|
||||
self.callbacks = {
|
||||
@@ -105,6 +111,8 @@ class WebSocketManager:
|
||||
self._log("连接服务成功", "SUCCESS")
|
||||
if self.callbacks['success']:
|
||||
self.callbacks['success']()
|
||||
# 启动版本检查器
|
||||
self._start_version_checker()
|
||||
except Exception as e:
|
||||
self._log(f"成功回调执行失败: {e}", "ERROR")
|
||||
|
||||
@@ -144,6 +152,8 @@ class WebSocketManager:
|
||||
self._log("连接服务成功", "SUCCESS")
|
||||
if self.callbacks['success']:
|
||||
self.callbacks['success']()
|
||||
# 启动版本检查器
|
||||
self._start_version_checker()
|
||||
except Exception as e:
|
||||
self._log(f"成功回调执行失败: {e}", "ERROR")
|
||||
|
||||
@@ -220,6 +230,27 @@ class WebSocketManager:
|
||||
import traceback
|
||||
self._log(f"错误详情: {traceback.format_exc()}", "DEBUG")
|
||||
|
||||
def _start_version_checker(self):
|
||||
"""启动版本检查器"""
|
||||
try:
|
||||
from version_checker import VersionChecker
|
||||
self.version_checker = VersionChecker(
|
||||
backend_client=self.backend_client,
|
||||
update_callback=self._on_update_available
|
||||
)
|
||||
self.backend_client.version_callback = self.version_checker.handle_version_response
|
||||
self.version_checker.start()
|
||||
self._log("✅ 版本检查器已启动,将每10分钟检查一次更新", "SUCCESS")
|
||||
except Exception as e:
|
||||
self._log(f"❌ 启动版本检查器失败: {e}", "ERROR")
|
||||
|
||||
def _on_update_available(self, latest_version, download_url):
|
||||
"""发现新版本时的处理"""
|
||||
self._log(f"🔔 发现新版本 {latest_version}", "INFO")
|
||||
# 通知主GUI显示更新提醒
|
||||
if hasattr(self, 'gui_update_callback') and self.gui_update_callback:
|
||||
self.gui_update_callback(latest_version, download_url)
|
||||
|
||||
def _start_jd_listener(self, store_id: str, cookies: str):
|
||||
"""启动京东平台监听"""
|
||||
try:
|
||||
|
||||
41
main.py
41
main.py
@@ -42,6 +42,9 @@ class LoginWindow(QMainWindow):
|
||||
# 日志管理相关变量已删除
|
||||
|
||||
self.initUI()
|
||||
|
||||
# 延迟设置版本检查器,确保WebSocket连接已建立
|
||||
QTimer.singleShot(5000, self.setup_version_checker)
|
||||
|
||||
def initUI(self):
|
||||
# 设置窗口基本属性
|
||||
@@ -699,6 +702,44 @@ class LoginWindow(QMainWindow):
|
||||
self.quit_application()
|
||||
event.accept()
|
||||
|
||||
def setup_version_checker(self):
|
||||
"""设置版本检查器的GUI回调"""
|
||||
try:
|
||||
from WebSocket.backend_singleton import get_websocket_manager
|
||||
ws_manager = get_websocket_manager()
|
||||
if ws_manager:
|
||||
ws_manager.gui_update_callback = self.show_update_notification
|
||||
self.add_log("✅ 版本检查器GUI回调已设置", "SUCCESS")
|
||||
else:
|
||||
self.add_log("⚠️ WebSocket管理器未初始化", "WARNING")
|
||||
except Exception as e:
|
||||
self.add_log(f"❌ 设置版本检查器失败: {e}", "ERROR")
|
||||
|
||||
def show_update_notification(self, latest_version, download_url):
|
||||
"""显示版本更新通知"""
|
||||
try:
|
||||
reply = QMessageBox.question(
|
||||
self,
|
||||
"版本更新",
|
||||
f"发现新版本 {latest_version},是否立即更新?\n\n点击确定将打开下载页面。",
|
||||
QMessageBox.Yes | QMessageBox.No,
|
||||
QMessageBox.Yes
|
||||
)
|
||||
|
||||
if reply == QMessageBox.Yes:
|
||||
self.trigger_update(download_url)
|
||||
except Exception as e:
|
||||
self.add_log(f"❌ 显示更新通知失败: {e}", "ERROR")
|
||||
|
||||
def trigger_update(self, download_url):
|
||||
"""触发更新下载"""
|
||||
import webbrowser
|
||||
try:
|
||||
webbrowser.open(download_url)
|
||||
self.add_log("✅ 已打开更新下载页面", "SUCCESS")
|
||||
except Exception as e:
|
||||
self.add_log(f"❌ 打开下载页面失败: {e}", "ERROR")
|
||||
|
||||
|
||||
def main():
|
||||
"""主函数,用于测试界面"""
|
||||
|
||||
Reference in New Issue
Block a user