From 2ee2c37479e3141fa9dbafc9aea8ddb88d96165a Mon Sep 17 00:00:00 2001 From: DLmaster Date: Thu, 13 Mar 2025 21:00:09 +0800 Subject: [PATCH] =?UTF-8?q?feat(utils):=20=E6=9B=B4=E6=96=B0=E5=99=A8?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=8C=87=E5=AE=9A=E7=BA=BF=E7=A8=8B=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/core/config.py | 3 +++ app/ui/Widget.py | 4 ++-- app/ui/member_manager.py | 10 +++++++++- app/ui/setting.py | 13 ++++++++++++- app/utils/downloader.py | 24 ++++++++++++++++++------ resources/version.json | 2 +- 6 files changed, 45 insertions(+), 11 deletions(-) diff --git a/app/core/config.py b/app/core/config.py index edd0f06..9dcd8fd 100644 --- a/app/core/config.py +++ b/app/core/config.py @@ -853,6 +853,9 @@ class GlobalConfig(QConfig): update_UpdateType = OptionsConfigItem( "Update", "UpdateType", "main", OptionsValidator(["main", "dev"]) ) + update_ThreadNumb = RangeConfigItem( + "Update", "ThreadNumb", 8, RangeValidator(1, 32) + ) update_ProxyUrlList = ConfigItem("Update", "ProxyUrlList", [], UrlListValidator()) diff --git a/app/ui/Widget.py b/app/ui/Widget.py index 406778f..edd58bb 100644 --- a/app/ui/Widget.py +++ b/app/ui/Widget.py @@ -447,9 +447,9 @@ class UrlListSettingCard(ExpandSettingCard): self.window(), ) if choice.exec(): - self.__removeFolder(item) + self.__removeUrl(item) - def __removeFolder(self, item: UrlItem): + def __removeUrl(self, item: UrlItem): """remove folder""" if item.url not in self.urls: return diff --git a/app/ui/member_manager.py b/app/ui/member_manager.py index 72e094d..4f63f1a 100644 --- a/app/ui/member_manager.py +++ b/app/ui/member_manager.py @@ -356,7 +356,15 @@ class MemberManager(QWidget): maa_version.append(0) self.downloader = DownloadManager( - Path(folder), "MAA", maa_version, [], {} + Path(folder), + "MAA", + maa_version, + [], + { + "thread_numb": Config.global_config.get( + Config.global_config.update_ThreadNumb + ) + }, ) self.downloader.show() self.downloader.run() diff --git a/app/ui/setting.py b/app/ui/setting.py index d696c24..9b70124 100644 --- a/app/ui/setting.py +++ b/app/ui/setting.py @@ -40,6 +40,7 @@ from qfluentwidgets import ( HyperlinkCard, HeaderCardWidget, SwitchSettingCard, + RangeSettingCard, ExpandGroupSettingCard, PushSettingCard, ComboBoxSettingCard, @@ -391,7 +392,10 @@ class Setting(QWidget): { "proxy_list": Config.global_config.get( Config.global_config.update_ProxyUrlList - ) + ), + "thread_numb": Config.global_config.get( + Config.global_config.update_ThreadNumb + ), }, ) # 完成更新器的更新后更新主程序 @@ -857,6 +861,12 @@ class UpdaterSettingCard(HeaderCardWidget): content="选择AUTO_MAA的更新类别", texts=["稳定版", "公测版"], ) + self.card_ThreadNumb = RangeSettingCard( + configItem=Config.global_config.update_ThreadNumb, + icon=FluentIcon.PAGE_RIGHT, + title="下载器线程数", + content="更新器的下载线程数,建议仅在下载速度较慢时适量拉高", + ) self.card_ProxyUrlList = UrlListSettingCard( icon=FluentIcon.SETTING, configItem=Config.global_config.update_ProxyUrlList, @@ -874,6 +884,7 @@ class UpdaterSettingCard(HeaderCardWidget): Layout = QVBoxLayout() Layout.addWidget(self.card_IfAutoUpdate) Layout.addWidget(self.card_UpdateType) + Layout.addWidget(self.card_ThreadNumb) Layout.addWidget(self.card_ProxyUrlList) Layout.addWidget(self.card_CheckUpdate) self.viewLayout.addLayout(Layout) diff --git a/app/utils/downloader.py b/app/utils/downloader.py index cda4b80..65e5b98 100644 --- a/app/utils/downloader.py +++ b/app/utils/downloader.py @@ -369,21 +369,25 @@ class DownloadManager(QDialog): response = requests.head(url) self.file_size = int(response.headers.get("content-length", 0)) - part_size = self.file_size // 8 + part_size = self.file_size // self.config["thread_numb"] self.downloaded_size = 0 self.last_download_size = 0 self.last_time = time.time() self.speed = 0 # 拆分下载任务,启用多线程下载 - for i in range(8): + for i in range(self.config["thread_numb"]): if self.isInterruptionRequested: break # 计算单任务下载范围 start_byte = i * part_size - end_byte = (i + 1) * part_size - 1 if i != 7 else self.file_size - 1 + end_byte = ( + (i + 1) * part_size - 1 + if (i != self.config["thread_numb"] - 1) + else self.file_size - 1 + ) # 创建下载子线程 self.download_process_dict[f"part{i}"] = DownloadProcess( @@ -445,7 +449,7 @@ class DownloadManager(QDialog): # 合并下载的分段文件 with self.download_path.open(mode="wb") as outfile: - for i in range(8): + for i in range(self.config["thread_numb"]): with self.download_path.with_suffix(f".part{i}").open( mode="rb" ) as infile: @@ -588,7 +592,7 @@ if __name__ == "__main__": else: main_version_current = [0, 0, 0, 0] - # 从本地配置文件获取更新类型 + # 从本地配置文件获取更新信息 if (app_path / "config/config.json").exists(): with (app_path / "config/config.json").open(mode="r", encoding="utf-8") as f: config = json.load(f) @@ -600,9 +604,14 @@ if __name__ == "__main__": proxy_list = config["Update"]["ProxyUrlList"] else: proxy_list = [] + if "Update" in config and "ThreadNumb" in config["Update"]: + thread_numb = config["Update"]["ThreadNumb"] + else: + thread_numb = 8 else: update_type = "main" proxy_list = [] + thread_numb = 8 # 从远程服务器获取最新版本信息 for _ in range(3): @@ -623,7 +632,10 @@ if __name__ == "__main__": sys.exit(f"获取版本信息时出错:\n{err}") # 合并代理列表 - download_config = {"proxy_list": list(set(proxy_list + remote_proxy_list))} + download_config = { + "proxy_list": list(set(proxy_list + remote_proxy_list)), + "thread_numb": thread_numb, + } # 启动更新线程 if main_version_remote > main_version_current: diff --git a/resources/version.json b/resources/version.json index ae8c695..d497dbf 100644 --- a/resources/version.json +++ b/resources/version.json @@ -1,6 +1,6 @@ { "main_version": "4.2.5.2", - "updater_version": "1.1.2.2", + "updater_version": "1.2.0.0", "announcement": "\n## 新增功能\n- 屏蔽MuMu模拟器开屏广告功能上线\n- 更新器支持多线程下载\n## 修复BUG\n- 修复统计信息HTML模板公招匹配错误\n## 程序优化\n- 暂无", "proxy_list": [ "",