feat(core): 增强哈希验证机制和进度反馈

- 在下载管理器和离线模式管理器中集成哈希验证功能,确保补丁文件的完整性。
- 添加进度对话框以显示哈希验证过程,提升用户体验。
- 优化哈希验证线程,支持进度更新和错误处理,确保在验证失败时提供清晰反馈。
- 更新相关逻辑以支持新功能,提升代码可维护性和可读性。
This commit is contained in:
hyb-oyqq
2025-08-07 18:22:22 +08:00
parent 575116e45c
commit ba5e3cdbc1
4 changed files with 584 additions and 23 deletions

View File

@@ -11,10 +11,93 @@ import re
from PySide6.QtGui import QIcon, QPixmap
from data.config import APP_NAME, CONFIG_FILE
from utils.logger import setup_logger
import datetime
import traceback
import subprocess
from pathlib import Path
# 初始化logger
logger = setup_logger("helpers")
class ProgressHashVerifyDialog(QDialog):
"""带进度条的哈希验证对话框"""
def __init__(self, title, message, parent=None):
"""初始化对话框
Args:
title: 对话框标题
message: 对话框消息
parent: 父窗口
"""
super().__init__(parent)
self.setWindowTitle(title)
self.setMinimumWidth(400)
self.setWindowFlags(self.windowFlags() & ~Qt.WindowContextHelpButtonHint)
# 创建布局
layout = QVBoxLayout(self)
# 添加消息标签
self.message_label = QLabel(message)
self.message_label.setAlignment(Qt.AlignCenter)
layout.addWidget(self.message_label)
# 添加进度条
self.progress_bar = QProgressBar()
self.progress_bar.setRange(0, 100)
self.progress_bar.setValue(0)
layout.addWidget(self.progress_bar)
# 添加状态标签
self.status_label = QLabel("正在准备...")
self.status_label.setAlignment(Qt.AlignCenter)
layout.addWidget(self.status_label)
# 添加取消按钮
button_layout = QHBoxLayout()
self.cancel_button = QPushButton("取消")
self.cancel_button.clicked.connect(self.reject)
button_layout.addStretch()
button_layout.addWidget(self.cancel_button)
layout.addLayout(button_layout)
def update_progress(self, value):
"""更新进度条
Args:
value: 进度值 (0-100)
"""
self.progress_bar.setValue(value)
# 更新状态文本
if value < 10:
self.status_label.setText("正在准备...")
elif value < 50:
self.status_label.setText("正在解压文件...")
elif value < 70:
self.status_label.setText("正在查找补丁文件...")
elif value < 95:
self.status_label.setText("正在计算哈希值...")
else:
self.status_label.setText("正在验证哈希值...")
def set_message(self, message):
"""设置消息文本
Args:
message: 消息文本
"""
self.message_label.setText(message)
def set_status(self, status):
"""设置状态文本
Args:
status: 状态文本
"""
self.status_label.setText(status)
def resource_path(relative_path):
"""获取资源的绝对路径适用于开发环境和Nuitka打包环境"""
if getattr(sys, 'frozen', False):