From e6a97f2b177a2875b1827fed63cbda92a4290e87 Mon Sep 17 00:00:00 2001 From: DLmaster361 Date: Sat, 26 Apr 2025 22:40:47 +0800 Subject: [PATCH] =?UTF-8?q?feat(ui):=20=E4=B8=BB=E8=B0=83=E5=BA=A6?= =?UTF-8?q?=E5=8F=B0=E6=94=AF=E6=8C=81=E7=9B=B4=E6=8E=A5=E5=90=AF=E5=8A=A8?= =?UTF-8?q?=E5=A4=9A=E5=BC=80=E8=B0=83=E5=BA=A6=E5=8F=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + app/core/config.py | 7 ++- app/ui/Widget.py | 15 +++++- app/ui/dispatch_center.py | 104 ++++++++++++++++++++++++++++++++------ app/ui/setting.py | 2 +- resources/version.json | 10 +++- 6 files changed, 118 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 982301c..3f55221 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@ MAA多账号管理与自动化软件 [![GitHub Stars](https://img.shields.io/github/stars/DLmaster361/AUTO_MAA?style=flat-square)](https://github.com/DLmaster361/AUTO_MAA/stargazers) [![GitHub Forks](https://img.shields.io/github/forks/DLmaster361/AUTO_MAA?style=flat-square)](https://github.com/DLmaster361/AUTO_MAA/network) +[![GitHub Downloads](https://img.shields.io/github/downloads/DLmaster361/AUTO_MAA/total?style=flat-square)](https://github.com/DLmaster361/AUTO_MAA/releases/latest) [![GitHub Issues](https://img.shields.io/github/issues/DLmaster361/AUTO_MAA?style=flat-square)](https://github.com/DLmaster361/AUTO_MAA/issues) [![GitHub Contributors](https://img.shields.io/github/contributors/DLmaster361/AUTO_MAA?style=flat-square)](https://github.com/DLmaster361/AUTO_MAA/graphs/contributors) [![GitHub License](https://img.shields.io/github/license/DLmaster361/AUTO_MAA?style=flat-square)](https://github.com/DLmaster361/AUTO_MAA/blob/main/LICENSE) diff --git a/app/core/config.py b/app/core/config.py index c18f732..445160a 100644 --- a/app/core/config.py +++ b/app/core/config.py @@ -91,7 +91,10 @@ class GlobalConfig(QConfig): OptionsValidator(["默认", "自定义", "主题图像"]), ) self.function_HistoryRetentionTime = OptionsConfigItem( - "Function", "HistoryRetentionTime", 0, OptionsValidator([7, 15, 30, 60, 0]) + "Function", + "HistoryRetentionTime", + 0, + OptionsValidator([7, 15, 30, 60, 90, 180, 365, 0]), ) self.function_IfAllowSleep = ConfigItem( "Function", "IfAllowSleep", False, BoolValidator() @@ -606,7 +609,7 @@ class MaaUserConfig(QConfig): class AppConfig(GlobalConfig): - VERSION = "4.3.4.6" + VERSION = "4.3.4.7" gameid_refreshed = Signal() PASSWORD_refreshed = Signal() diff --git a/app/ui/Widget.py b/app/ui/Widget.py index 45a9531..bfd7901 100644 --- a/app/ui/Widget.py +++ b/app/ui/Widget.py @@ -109,7 +109,14 @@ class LineEditMessageBox(MessageBoxBase): class ComboBoxMessageBox(MessageBoxBase): """选择对话框""" - def __init__(self, parent, title: str, content: List[str], list: List[List[str]]): + def __init__( + self, + parent, + title: str, + content: List[str], + text_list: List[List[str]], + data_list: List[List[str]] = None, + ): super().__init__(parent) self.title = SubtitleLabel(title) @@ -121,7 +128,11 @@ class ComboBoxMessageBox(MessageBoxBase): for i in range(len(content)): self.input.append(ComboBox()) - self.input[i].addItems(list[i]) + if data_list: + for j in range(len(text_list[i])): + self.input[i].addItem(text_list[i][j], userData=data_list[i][j]) + else: + self.input[i].addItems(text_list[i]) self.input[i].setCurrentIndex(-1) self.input[i].setPlaceholderText(content[i]) Layout.addWidget(self.input[i]) diff --git a/app/ui/dispatch_center.py b/app/ui/dispatch_center.py index 8ea8c68..1e9086a 100644 --- a/app/ui/dispatch_center.py +++ b/app/ui/dispatch_center.py @@ -50,7 +50,7 @@ from typing import List, Dict from app.core import Config, TaskManager, Task, MainInfoBar -from .Widget import StatefulItemCard +from .Widget import StatefulItemCard, ComboBoxMessageBox class DispatchCenter(QWidget): @@ -89,7 +89,7 @@ class DispatchCenter(QWidget): dispatch_box = DispatchBox(task.name, self) - dispatch_box.top_bar.button.clicked.connect( + dispatch_box.top_bar.main_button.clicked.connect( lambda: TaskManager.stop_task(task.name) ) @@ -123,9 +123,10 @@ class DispatchCenter(QWidget): self.script_list["主调度台"].top_bar.Lable.show() self.script_list["主调度台"].top_bar.object.hide() self.script_list["主调度台"].top_bar.mode.hide() - self.script_list["主调度台"].top_bar.button.clicked.disconnect() - self.script_list["主调度台"].top_bar.button.setText("中止任务") - self.script_list["主调度台"].top_bar.button.clicked.connect( + self.script_list["主调度台"].top_bar.multi_button.show() + self.script_list["主调度台"].top_bar.main_button.clicked.disconnect() + self.script_list["主调度台"].top_bar.main_button.setText("中止任务") + self.script_list["主调度台"].top_bar.main_button.clicked.connect( lambda: TaskManager.stop_task(task.name) ) task.create_task_list.connect( @@ -153,10 +154,11 @@ class DispatchCenter(QWidget): self.script_list["主调度台"].top_bar.Lable.hide() self.script_list["主调度台"].top_bar.object.show() self.script_list["主调度台"].top_bar.mode.show() - self.script_list["主调度台"].top_bar.button.clicked.disconnect() - self.script_list["主调度台"].top_bar.button.setText("开始任务") - self.script_list["主调度台"].top_bar.button.clicked.connect( - self.script_list["主调度台"].top_bar.start_task + self.script_list["主调度台"].top_bar.multi_button.hide() + self.script_list["主调度台"].top_bar.main_button.clicked.disconnect() + self.script_list["主调度台"].top_bar.main_button.setText("开始任务") + self.script_list["主调度台"].top_bar.main_button.clicked.connect( + self.script_list["主调度台"].top_bar.start_main_task ) if len(logs) > 0: history = "" @@ -250,25 +252,29 @@ class DispatchBox(QWidget): self.mode = ComboBox() self.mode.setPlaceholderText("请选择调度模式") - self.button = PushButton("开始任务") - self.button.clicked.connect(self.start_task) + self.multi_button = PushButton("添加任务") + self.multi_button.clicked.connect(self.start_multi_task) + self.main_button = PushButton("开始任务") + self.main_button.clicked.connect(self.start_main_task) + self.multi_button.hide() Layout.addWidget(self.Lable) Layout.addWidget(self.object) Layout.addWidget(self.mode) Layout.addStretch(1) - Layout.addWidget(self.button) + Layout.addWidget(self.multi_button) + Layout.addWidget(self.main_button) else: self.Lable = SubtitleLabel(name, self) - self.button = PushButton("中止任务") + self.main_button = PushButton("中止任务") Layout.addWidget(self.Lable) Layout.addStretch(1) - Layout.addWidget(self.button) + Layout.addWidget(self.main_button) - def start_task(self): + def start_main_task(self): """开始任务""" if self.object.currentIndex() == -1: @@ -312,6 +318,74 @@ class DispatchBox(QWidget): {"Queue": {"Member_1": self.object.currentData()}}, ) + def start_multi_task(self): + """开始任务""" + + # 获取所有可用的队列和实例 + text_list = [] + data_list = [] + for name, info in Config.queue_dict.items(): + if name in Config.running_list: + continue + text_list.append( + "队列" + if info["Config"].get(info["Config"].queueSet_Name) == "" + else f"队列 - {info["Config"].get(info["Config"].queueSet_Name)}" + ) + data_list.append(name) + + for name, info in Config.member_dict.items(): + if name in Config.running_list: + continue + text_list.append( + f"实例 - {info['Type']}" + if info["Config"].get(info["Config"].MaaSet_Name) == "" + else f"实例 - {info['Type']} - {info["Config"].get(info["Config"].MaaSet_Name)}" + ) + data_list.append(name) + + choice = ComboBoxMessageBox( + self.window(), + "选择一个对象以添加相应多开任务", + ["选择调度对象"], + [text_list], + [data_list], + ) + + if choice.exec() and choice.input[0].currentIndex() != -1: + + if choice.input[0].currentData() in Config.running_list: + logger.warning(f"任务已存在:{choice.input[0].currentData()}") + MainInfoBar.push_info_bar( + "warning", "任务已存在", choice.input[0].currentData(), 5000 + ) + return None + + if "调度队列" in choice.input[0].currentData(): + + logger.info(f"用户添加任务:{choice.input[0].currentData()}") + TaskManager.add_task( + "自动代理_新调度台", + choice.input[0].currentData(), + Config.queue_dict[choice.input[0].currentData()][ + "Config" + ].toDict(), + ) + + elif "脚本" in choice.input[0].currentData(): + + if ( + Config.member_dict[choice.input[0].currentData()]["Type"] + == "Maa" + ): + + logger.info(f"用户添加任务:{choice.input[0].currentData()}") + TaskManager.add_task( + "自动代理_新调度台", + f"自定义队列 - {choice.input[0].currentData()}", + {"Queue": {"Member_1": choice.input[0].currentData()}}, + ) + class DispatchInfoCard(HeaderCardWidget): def __init__(self, parent=None): diff --git a/app/ui/setting.py b/app/ui/setting.py index bdbaca0..a6780df 100644 --- a/app/ui/setting.py +++ b/app/ui/setting.py @@ -487,7 +487,7 @@ class FunctionSettingCard(HeaderCardWidget): icon=FluentIcon.PAGE_RIGHT, title="历史记录保留时间", content="选择历史记录的保留时间,超期自动清理", - texts=["7 天", "15 天", "30 天", "60 天", "永久"], + texts=["7 天", "15 天", "30 天", "60 天", "90 天", "半年", "一年", "永久"], qconfig=Config, configItem=Config.function_HistoryRetentionTime, parent=self, diff --git a/resources/version.json b/resources/version.json index a0564ac..1f6f834 100644 --- a/resources/version.json +++ b/resources/version.json @@ -1,8 +1,16 @@ { - "main_version": "4.3.4.6", + "main_version": "4.3.4.7", "updater_version": "1.0.0.0", "announcement": "\n## 新增功能\n- 屏蔽MuMu模拟器开屏广告功能上线\n- 更新器支持多线程下载\n- 添加强制关闭ADB与模拟器等增强任务项\n## 修复BUG\n- 修复统计信息HTML模板公招匹配错误\n- 修复密码显示按钮动画异常\n- 修复`检测到MAA未能实际执行任务`报错被异常屏蔽\n- 修复MAA超时判定异常失效\n## 程序优化\n- 关机等电源操作添加100s倒计时\n- 人工排查弹窗方法优化\n- 人工排查时自动屏蔽静默操作\n- 公告样式优化", "version_info": { + "4.3.4.7": { + "新增功能": [ + "主调度台支持直接启动多开调度台" + ], + "程序优化": [ + "历史记录保留时间选项扩展" + ] + }, "4.3.4.6": { "新增功能": [ "历史记录添加`按周合并`、`按月合并`功能",