mirror of
https://github.com/hyb-oyqq/FRAISEMOE-Addons-Installer-NEXT.git
synced 2025-12-16 20:10:28 +00:00
- 重构 __init__.py,引入新模块:WindowManager, GameDetector, PatchManager, ConfigManager - 更新 DebugManager,添加 set_ui_manager 方法 - 改进 DownloadManager,优化下载流程和错误处理 - 重构 MainWindow 类,移除冗余代码,委托部分功能给新模块 - 更新 UI 组件,简化界面逻辑 - 优化导入结构,提高代码可维护性
169 lines
6.1 KiB
Python
169 lines
6.1 KiB
Python
import json
|
||
import webbrowser
|
||
from PySide6.QtWidgets import QMessageBox
|
||
|
||
from utils import load_config, save_config, msgbox_frame
|
||
|
||
class ConfigManager:
|
||
"""配置管理器,用于处理配置的加载、保存和获取云端配置"""
|
||
|
||
def __init__(self, app_name, config_url, ua, debug_manager=None):
|
||
"""初始化配置管理器
|
||
|
||
Args:
|
||
app_name: 应用程序名称,用于显示消息框标题
|
||
config_url: 云端配置URL
|
||
ua: User-Agent字符串
|
||
debug_manager: 调试管理器实例,用于输出调试信息
|
||
"""
|
||
self.app_name = app_name
|
||
self.config_url = config_url
|
||
self.ua = ua
|
||
self.debug_manager = debug_manager
|
||
self.cloud_config = None
|
||
self.config_valid = False
|
||
self.last_error_message = ""
|
||
|
||
def _is_debug_mode(self):
|
||
"""检查是否处于调试模式
|
||
|
||
Returns:
|
||
bool: 是否处于调试模式
|
||
"""
|
||
if hasattr(self.debug_manager, 'ui_manager') and hasattr(self.debug_manager.ui_manager, 'debug_action'):
|
||
return self.debug_manager.ui_manager.debug_action.isChecked()
|
||
return False
|
||
|
||
def load_config(self):
|
||
"""加载本地配置
|
||
|
||
Returns:
|
||
dict: 加载的配置
|
||
"""
|
||
return load_config()
|
||
|
||
def save_config(self, config):
|
||
"""保存配置
|
||
|
||
Args:
|
||
config: 要保存的配置
|
||
"""
|
||
save_config(config)
|
||
|
||
def fetch_cloud_config(self, config_fetch_thread_class, callback=None):
|
||
"""获取云端配置
|
||
|
||
Args:
|
||
config_fetch_thread_class: 用于获取云端配置的线程类
|
||
callback: 获取完成后的回调函数,接受两个参数(data, error_message)
|
||
"""
|
||
headers = {"User-Agent": self.ua}
|
||
debug_mode = self._is_debug_mode()
|
||
self.config_fetch_thread = config_fetch_thread_class(self.config_url, headers, debug_mode)
|
||
|
||
# 如果提供了回调,使用它;否则使用内部的on_config_fetched方法
|
||
if callback:
|
||
self.config_fetch_thread.finished.connect(callback)
|
||
else:
|
||
self.config_fetch_thread.finished.connect(self.on_config_fetched)
|
||
|
||
self.config_fetch_thread.start()
|
||
|
||
def on_config_fetched(self, data, error_message):
|
||
"""云端配置获取完成的回调处理
|
||
|
||
Args:
|
||
data: 获取到的配置数据
|
||
error_message: 错误信息,如果有
|
||
"""
|
||
debug_mode = self._is_debug_mode()
|
||
|
||
if error_message:
|
||
# 标记配置无效
|
||
self.config_valid = False
|
||
|
||
# 记录错误信息,用于按钮点击时显示
|
||
if error_message == "update_required":
|
||
self.last_error_message = "update_required"
|
||
msg_box = msgbox_frame(
|
||
f"更新提示 - {self.app_name}",
|
||
"\n当前版本过低,请及时更新。\n",
|
||
QMessageBox.StandardButton.Ok,
|
||
)
|
||
msg_box.exec()
|
||
# 在浏览器中打开项目主页
|
||
webbrowser.open("https://github.com/hyb-oyqq/FRAISEMOE-Addons-Installer-NEXT/")
|
||
# 版本过低,应当显示"无法安装"
|
||
return {"action": "disable_button", "then": "exit"}
|
||
|
||
elif "missing_keys" in error_message:
|
||
self.last_error_message = "missing_keys"
|
||
missing_versions = error_message.split(":")[1]
|
||
msg_box = msgbox_frame(
|
||
f"配置缺失 - {self.app_name}",
|
||
f'\n云端缺失下载链接,可能云服务器正在维护,不影响其他版本下载。\n当前缺失版本:"{missing_versions}"\n',
|
||
QMessageBox.StandardButton.Ok,
|
||
)
|
||
msg_box.exec()
|
||
# 对于部分缺失,仍然允许使用,因为可能只影响部分游戏版本
|
||
self.config_valid = True
|
||
return {"action": "enable_button"}
|
||
else:
|
||
# 设置网络错误标记
|
||
self.last_error_message = "network_error"
|
||
|
||
# 显示通用错误消息,只在debug模式下显示详细错误
|
||
error_msg = "访问云端配置失败,请检查网络状况或稍后再试。"
|
||
if debug_mode and "详细错误:" in error_message:
|
||
msg_box = msgbox_frame(
|
||
f"错误 - {self.app_name}",
|
||
f"\n{error_message}\n",
|
||
QMessageBox.StandardButton.Ok,
|
||
)
|
||
else:
|
||
msg_box = msgbox_frame(
|
||
f"错误 - {self.app_name}",
|
||
f"\n{error_msg}\n",
|
||
QMessageBox.StandardButton.Ok,
|
||
)
|
||
msg_box.exec()
|
||
|
||
# 网络错误时应当显示"无法安装"
|
||
return {"action": "disable_button"}
|
||
else:
|
||
self.cloud_config = data
|
||
# 标记配置有效
|
||
self.config_valid = True
|
||
# 清除错误信息
|
||
self.last_error_message = ""
|
||
|
||
if debug_mode:
|
||
print("--- Cloud config fetched successfully ---")
|
||
print(json.dumps(data, indent=2))
|
||
|
||
# 获取配置成功,允许安装
|
||
return {"action": "enable_button"}
|
||
|
||
def is_config_valid(self):
|
||
"""检查配置是否有效
|
||
|
||
Returns:
|
||
bool: 配置是否有效
|
||
"""
|
||
return self.config_valid
|
||
|
||
def get_cloud_config(self):
|
||
"""获取云端配置
|
||
|
||
Returns:
|
||
dict: 云端配置
|
||
"""
|
||
return self.cloud_config
|
||
|
||
def get_last_error(self):
|
||
"""获取最后一次错误信息
|
||
|
||
Returns:
|
||
str: 错误信息
|
||
"""
|
||
return self.last_error_message |