[patch] 修改逻辑: 在用户误触或开了多个GUI程序的时候不能同时建立多个连接 确保一个账号只能建立一个与后端的连接 友好提示的集成review 修改powershell语法问题
This commit is contained in:
@@ -18,6 +18,7 @@ class PlatformConnectionSignals(QObject):
|
|||||||
"""平台连接信号(线程安全)"""
|
"""平台连接信号(线程安全)"""
|
||||||
platform_connected = pyqtSignal(str, str) # (platform_name, store_id)
|
platform_connected = pyqtSignal(str, str) # (platform_name, store_id)
|
||||||
|
|
||||||
|
|
||||||
_backend_client = None
|
_backend_client = None
|
||||||
|
|
||||||
|
|
||||||
@@ -43,11 +44,11 @@ class WebSocketManager:
|
|||||||
self.gui_update_callback = None
|
self.gui_update_callback = None
|
||||||
self.platform_listeners = {} # 存储各平台的监听器
|
self.platform_listeners = {} # 存储各平台的监听器
|
||||||
self.connected_platforms = [] # 存储已连接的平台列表 # <- 新增
|
self.connected_platforms = [] # 存储已连接的平台列表 # <- 新增
|
||||||
|
|
||||||
# 平台连接信号(线程安全)
|
# 平台连接信号(线程安全)
|
||||||
self.platform_signals = PlatformConnectionSignals()
|
self.platform_signals = PlatformConnectionSignals()
|
||||||
self.platform_signals.platform_connected.connect(self._on_platform_signal_received)
|
self.platform_signals.platform_connected.connect(self._on_platform_signal_received)
|
||||||
|
|
||||||
self.callbacks = {
|
self.callbacks = {
|
||||||
'log': None,
|
'log': None,
|
||||||
'success': None,
|
'success': None,
|
||||||
@@ -87,7 +88,7 @@ class WebSocketManager:
|
|||||||
self._notify_platform_connected(platform_name)
|
self._notify_platform_connected(platform_name)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self._log(f"处理平台连接信号失败: {e}", "ERROR")
|
self._log(f"处理平台连接信号失败: {e}", "ERROR")
|
||||||
|
|
||||||
def _notify_platform_connected(self, platform_name: str):
|
def _notify_platform_connected(self, platform_name: str):
|
||||||
"""通知GUI平台连接成功(仅在主线程中调用)"""
|
"""通知GUI平台连接成功(仅在主线程中调用)"""
|
||||||
try:
|
try:
|
||||||
|
|||||||
52
main.py
52
main.py
@@ -11,6 +11,8 @@ import config
|
|||||||
from WebSocket.backend_singleton import get_websocket_manager
|
from WebSocket.backend_singleton import get_websocket_manager
|
||||||
from windows_taskbar_fix import setup_windows_taskbar_icon
|
from windows_taskbar_fix import setup_windows_taskbar_icon
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
|
||||||
# ===================== 文件日志系统 - 生产环境启用 =====================
|
# ===================== 文件日志系统 - 生产环境启用 =====================
|
||||||
# 重定向所有输出到文件,确保有日志记录
|
# 重定向所有输出到文件,确保有日志记录
|
||||||
# from exe_file_logger import setup_file_logging, log_to_file # 生产环境禁用
|
# from exe_file_logger import setup_file_logging, log_to_file # 生产环境禁用
|
||||||
@@ -463,7 +465,7 @@ class LoginWindow(QMainWindow):
|
|||||||
"""显示断开连接提示框(信号槽函数,始终在主线程中执行)"""
|
"""显示断开连接提示框(信号槽函数,始终在主线程中执行)"""
|
||||||
try:
|
try:
|
||||||
self.add_log(f"🎯 主线程收到断开信号: {disconnect_msg}", "INFO")
|
self.add_log(f"🎯 主线程收到断开信号: {disconnect_msg}", "INFO")
|
||||||
|
|
||||||
# 在状态标签显示警告信息
|
# 在状态标签显示警告信息
|
||||||
self.status_label.setText(f"⚠️ 账号在其他设备登录")
|
self.status_label.setText(f"⚠️ 账号在其他设备登录")
|
||||||
self.status_label.setStyleSheet(
|
self.status_label.setStyleSheet(
|
||||||
@@ -783,7 +785,7 @@ class LoginWindow(QMainWindow):
|
|||||||
self.add_log("⚠️ WebSocket管理器未初始化", "WARNING")
|
self.add_log("⚠️ WebSocket管理器未初始化", "WARNING")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.add_log(f"❌ 设置版本检查器失败: {e}", "ERROR")
|
self.add_log(f"❌ 设置版本检查器失败: {e}", "ERROR")
|
||||||
|
|
||||||
def emit_update_signal(self, latest_version, download_url):
|
def emit_update_signal(self, latest_version, download_url):
|
||||||
"""发射更新信号(可以在任何线程中调用)"""
|
"""发射更新信号(可以在任何线程中调用)"""
|
||||||
try:
|
try:
|
||||||
@@ -795,7 +797,7 @@ class LoginWindow(QMainWindow):
|
|||||||
self.add_log(f"❌ 发射更新信号失败: {e}", "ERROR")
|
self.add_log(f"❌ 发射更新信号失败: {e}", "ERROR")
|
||||||
import traceback
|
import traceback
|
||||||
self.add_log(f"详细错误: {traceback.format_exc()}", "ERROR")
|
self.add_log(f"详细错误: {traceback.format_exc()}", "ERROR")
|
||||||
|
|
||||||
def _show_update_dialog(self, latest_version, download_url):
|
def _show_update_dialog(self, latest_version, download_url):
|
||||||
"""显示更新对话框(信号槽函数,始终在主线程中执行)"""
|
"""显示更新对话框(信号槽函数,始终在主线程中执行)"""
|
||||||
try:
|
try:
|
||||||
@@ -811,10 +813,10 @@ class LoginWindow(QMainWindow):
|
|||||||
try:
|
try:
|
||||||
self.add_log(f"🔔 准备显示更新通知: v{latest_version}", "INFO")
|
self.add_log(f"🔔 准备显示更新通知: v{latest_version}", "INFO")
|
||||||
self.add_log(f" 下载地址: {download_url if download_url else '(空)'}", "INFO")
|
self.add_log(f" 下载地址: {download_url if download_url else '(空)'}", "INFO")
|
||||||
|
|
||||||
# 读取更新内容
|
# 读取更新内容
|
||||||
update_content = self._get_update_content(latest_version)
|
update_content = self._get_update_content(latest_version)
|
||||||
|
|
||||||
# 检查下载地址
|
# 检查下载地址
|
||||||
if not download_url or download_url.strip() == "":
|
if not download_url or download_url.strip() == "":
|
||||||
# 下载地址为空,只显示通知,不提供下载
|
# 下载地址为空,只显示通知,不提供下载
|
||||||
@@ -822,7 +824,7 @@ class LoginWindow(QMainWindow):
|
|||||||
if update_content:
|
if update_content:
|
||||||
message += f"更新内容:\n{update_content}\n\n"
|
message += f"更新内容:\n{update_content}\n\n"
|
||||||
message += "下载地址暂未配置,请稍后再试或联系管理员。"
|
message += "下载地址暂未配置,请稍后再试或联系管理员。"
|
||||||
|
|
||||||
QMessageBox.information(
|
QMessageBox.information(
|
||||||
self,
|
self,
|
||||||
"版本更新",
|
"版本更新",
|
||||||
@@ -831,15 +833,15 @@ class LoginWindow(QMainWindow):
|
|||||||
)
|
)
|
||||||
self.add_log(f"⚠️ 新版本 {latest_version} 的下载地址为空,已通知用户", "WARNING")
|
self.add_log(f"⚠️ 新版本 {latest_version} 的下载地址为空,已通知用户", "WARNING")
|
||||||
return # 安全返回,不崩溃
|
return # 安全返回,不崩溃
|
||||||
|
|
||||||
# 下载地址有效,显示更新对话框
|
# 下载地址有效,显示更新对话框
|
||||||
message = f"发现新版本 {latest_version},是否立即更新?\n\n"
|
message = f"发现新版本 {latest_version},是否立即更新?\n\n"
|
||||||
|
|
||||||
if update_content:
|
if update_content:
|
||||||
message += f"更新内容:\n{update_content}\n\n"
|
message += f"更新内容:\n{update_content}\n\n"
|
||||||
|
|
||||||
message += "点击确定将打开下载页面。"
|
message += "点击确定将打开下载页面。"
|
||||||
|
|
||||||
reply = QMessageBox.question(
|
reply = QMessageBox.question(
|
||||||
self,
|
self,
|
||||||
"版本更新",
|
"版本更新",
|
||||||
@@ -847,31 +849,31 @@ class LoginWindow(QMainWindow):
|
|||||||
QMessageBox.Yes | QMessageBox.No,
|
QMessageBox.Yes | QMessageBox.No,
|
||||||
QMessageBox.Yes
|
QMessageBox.Yes
|
||||||
)
|
)
|
||||||
|
|
||||||
if reply == QMessageBox.Yes:
|
if reply == QMessageBox.Yes:
|
||||||
self.add_log("用户选择立即更新", "INFO")
|
self.add_log("用户选择立即更新", "INFO")
|
||||||
self.trigger_update(download_url, latest_version)
|
self.trigger_update(download_url, latest_version)
|
||||||
else:
|
else:
|
||||||
self.add_log("用户选择稍后更新", "INFO")
|
self.add_log("用户选择稍后更新", "INFO")
|
||||||
# 用户点击"否",不做任何操作,程序继续运行
|
# 用户点击"否",不做任何操作,程序继续运行
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.add_log(f"❌ 显示更新通知失败: {e}", "ERROR")
|
self.add_log(f"❌ 显示更新通知失败: {e}", "ERROR")
|
||||||
import traceback
|
import traceback
|
||||||
self.add_log(f"详细错误: {traceback.format_exc()}", "ERROR")
|
self.add_log(f"详细错误: {traceback.format_exc()}", "ERROR")
|
||||||
|
|
||||||
def _get_update_content(self, version):
|
def _get_update_content(self, version):
|
||||||
"""获取版本更新内容"""
|
"""获取版本更新内容"""
|
||||||
try:
|
try:
|
||||||
import json
|
import json
|
||||||
version_file = "version_history.json"
|
version_file = "version_history.json"
|
||||||
|
|
||||||
if not os.path.exists(version_file):
|
if not os.path.exists(version_file):
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
with open(version_file, 'r', encoding='utf-8') as f:
|
with open(version_file, 'r', encoding='utf-8') as f:
|
||||||
history = json.load(f)
|
history = json.load(f)
|
||||||
|
|
||||||
# 查找对应版本
|
# 查找对应版本
|
||||||
for record in history:
|
for record in history:
|
||||||
if record.get('version') == version:
|
if record.get('version') == version:
|
||||||
@@ -883,9 +885,9 @@ class LoginWindow(QMainWindow):
|
|||||||
if len(content) > 150:
|
if len(content) > 150:
|
||||||
content = content[:150] + "..."
|
content = content[:150] + "..."
|
||||||
return content
|
return content
|
||||||
|
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.add_log(f"⚠️ 读取更新内容失败: {e}", "DEBUG")
|
self.add_log(f"⚠️ 读取更新内容失败: {e}", "DEBUG")
|
||||||
return ""
|
return ""
|
||||||
@@ -894,7 +896,7 @@ class LoginWindow(QMainWindow):
|
|||||||
"""触发更新下载(不阻塞主程序)"""
|
"""触发更新下载(不阻塞主程序)"""
|
||||||
import webbrowser
|
import webbrowser
|
||||||
import threading
|
import threading
|
||||||
|
|
||||||
# 检查下载地址是否有效
|
# 检查下载地址是否有效
|
||||||
if not download_url or download_url.strip() == "":
|
if not download_url or download_url.strip() == "":
|
||||||
self.add_log("⚠️ 下载地址为空,无法打开更新页面", "WARNING")
|
self.add_log("⚠️ 下载地址为空,无法打开更新页面", "WARNING")
|
||||||
@@ -905,7 +907,7 @@ class LoginWindow(QMainWindow):
|
|||||||
QMessageBox.Ok
|
QMessageBox.Ok
|
||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
# 明确提示用户即将下载
|
# 明确提示用户即将下载
|
||||||
reply = QMessageBox.information(
|
reply = QMessageBox.information(
|
||||||
self,
|
self,
|
||||||
@@ -919,13 +921,13 @@ class LoginWindow(QMainWindow):
|
|||||||
QMessageBox.Ok | QMessageBox.Cancel,
|
QMessageBox.Ok | QMessageBox.Cancel,
|
||||||
QMessageBox.Ok
|
QMessageBox.Ok
|
||||||
)
|
)
|
||||||
|
|
||||||
if reply == QMessageBox.Cancel:
|
if reply == QMessageBox.Cancel:
|
||||||
self.add_log("用户取消下载", "INFO")
|
self.add_log("用户取消下载", "INFO")
|
||||||
return
|
return
|
||||||
|
|
||||||
self.add_log(f"📂 准备打开下载页面: {download_url}", "INFO")
|
self.add_log(f"📂 准备打开下载页面: {download_url}", "INFO")
|
||||||
|
|
||||||
# 在独立线程中打开浏览器,确保不阻塞GUI主线程
|
# 在独立线程中打开浏览器,确保不阻塞GUI主线程
|
||||||
def open_browser_thread():
|
def open_browser_thread():
|
||||||
try:
|
try:
|
||||||
@@ -933,10 +935,10 @@ class LoginWindow(QMainWindow):
|
|||||||
self.add_log("✅ 浏览器已打开,下载即将开始", "SUCCESS")
|
self.add_log("✅ 浏览器已打开,下载即将开始", "SUCCESS")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.add_log(f"❌ 打开浏览器失败: {e}", "ERROR")
|
self.add_log(f"❌ 打开浏览器失败: {e}", "ERROR")
|
||||||
|
|
||||||
thread = threading.Thread(target=open_browser_thread, daemon=True)
|
thread = threading.Thread(target=open_browser_thread, daemon=True)
|
||||||
thread.start()
|
thread.start()
|
||||||
|
|
||||||
self.add_log("✅ 已启动下载,程序继续运行", "INFO")
|
self.add_log("✅ 已启动下载,程序继续运行", "INFO")
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user