feat(core): 增强配置管理和日志文件处理功能

- 在ConfigManager中添加切换禁用安装前哈希预检查的功能,支持通过主窗口更新配置并保存。
- 在DebugManager中实现打开日志文件的功能,增加对日志文件存在性和大小的检查,提供用户友好的提示。
- 在UIManager中更新信号连接,确保调试管理器的正确初始化,并优化哈希预检查的状态切换逻辑,提升代码可读性和用户体验。
This commit is contained in:
hyb-oyqq
2025-08-13 12:06:31 +08:00
parent d07ef20e51
commit 979c23f8b8
3 changed files with 196 additions and 145 deletions

View File

@@ -144,4 +144,133 @@ class DebugManager:
# 关闭日志文件
if hasattr(self.logger, 'close'):
self.logger.close()
self.logger = None
self.logger = None
def open_log_file(self):
"""打开当前日志文件"""
try:
# 检查日志文件是否存在
if os.path.exists(LOG_FILE):
# 获取日志文件大小
file_size = os.path.getsize(LOG_FILE)
if file_size == 0:
from utils import msgbox_frame
msg_box = msgbox_frame(
f"提示 - {APP_NAME}",
f"\n当前日志文件 {os.path.basename(LOG_FILE)} 存在但为空。\n\n日志文件位置:{os.path.abspath(LOG_FILE)}",
QtWidgets.QMessageBox.StandardButton.Ok
)
msg_box.exec()
return
# 根据文件大小决定是使用文本查看器还是直接打开
if file_size > 1024 * 1024: # 大于1MB
# 文件较大,显示警告
from utils import msgbox_frame
msg_box = msgbox_frame(
f"警告 - {APP_NAME}",
f"\n日志文件较大 ({file_size / 1024 / 1024:.2f} MB),是否仍要打开?\n\n日志文件位置:{os.path.abspath(LOG_FILE)}",
QtWidgets.QMessageBox.StandardButton.Yes | QtWidgets.QMessageBox.StandardButton.No
)
if msg_box.exec() != QtWidgets.QMessageBox.StandardButton.Yes:
return
# 使用操作系统默认程序打开日志文件
if os.name == 'nt': # Windows
os.startfile(LOG_FILE)
else: # macOS 和 Linux
import subprocess
subprocess.call(['xdg-open', LOG_FILE])
else:
# 文件不存在,显示信息和搜索其他日志文件
root_dir = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
log_dir = os.path.join(root_dir, "log")
# 如果log文件夹不存在尝试创建它
if not os.path.exists(log_dir):
try:
os.makedirs(log_dir, exist_ok=True)
from utils import msgbox_frame
msg_box = msgbox_frame(
f"信息 - {APP_NAME}",
f"\n日志文件夹不存在,已创建新的日志文件夹:\n{log_dir}\n\n请在启用调试模式后重试。",
QtWidgets.QMessageBox.StandardButton.Ok
)
msg_box.exec()
return
except Exception as e:
from utils import msgbox_frame
msg_box = msgbox_frame(
f"错误 - {APP_NAME}",
f"\n创建日志文件夹失败:\n\n{str(e)}",
QtWidgets.QMessageBox.StandardButton.Ok
)
msg_box.exec()
return
# 搜索log文件夹中的日志文件
try:
log_files = [f for f in os.listdir(log_dir) if f.startswith("log-") and f.endswith(".txt")]
except Exception as e:
from utils import msgbox_frame
msg_box = msgbox_frame(
f"错误 - {APP_NAME}",
f"\n无法读取日志文件夹:\n\n{str(e)}",
QtWidgets.QMessageBox.StandardButton.Ok
)
msg_box.exec()
return
if log_files:
# 按照修改时间排序,获取最新的日志文件
log_files.sort(key=lambda x: os.path.getmtime(os.path.join(log_dir, x)), reverse=True)
latest_log = os.path.join(log_dir, log_files[0])
# 获取最新日志文件的创建时间信息
try:
log_datetime = "-".join(os.path.basename(latest_log)[4:-4].split("-")[:2])
log_date = log_datetime.split("-")[0]
log_time = log_datetime.split("-")[1] if "-" in log_datetime else "未知时间"
date_info = f"日期: {log_date[:4]}-{log_date[4:6]}-{log_date[6:]}"
time_info = f"时间: {log_time[:2]}:{log_time[2:4]}:{log_time[4:]}"
except:
date_info = "日期未知"
time_info = "时间未知"
from utils import msgbox_frame
msg_box = msgbox_frame(
f"信息 - {APP_NAME}",
f"\n当前日志文件 {os.path.basename(LOG_FILE)} 不存在。\n\n"
f"发现最新的日志文件: {os.path.basename(latest_log)}\n"
f"({date_info} {time_info})\n\n"
f"是否打开此文件?",
QtWidgets.QMessageBox.StandardButton.Yes | QtWidgets.QMessageBox.StandardButton.No
)
if msg_box.exec() == QtWidgets.QMessageBox.StandardButton.Yes:
if os.name == 'nt': # Windows
os.startfile(latest_log)
else: # macOS 和 Linux
import subprocess
subprocess.call(['xdg-open', latest_log])
return
# 如果没有找到任何日志文件
from utils import msgbox_frame
msg_box = msgbox_frame(
f"信息 - {APP_NAME}",
f"\n没有找到有效的日志文件。\n\n"
f"预期的日志文件夹:{log_dir}\n\n"
f"请确认调试模式已启用,并执行一些操作后再查看日志。",
QtWidgets.QMessageBox.StandardButton.Ok
)
msg_box.exec()
except Exception as e:
from utils import msgbox_frame
msg_box = msgbox_frame(
f"错误 - {APP_NAME}",
f"\n处理日志文件时出错:\n\n{str(e)}\n\n文件位置:{os.path.abspath(LOG_FILE)}",
QtWidgets.QMessageBox.StandardButton.Ok
)
msg_box.exec()