From d19dd3496d9a08fc02f65719f0eb19b2a1b0a2cb Mon Sep 17 00:00:00 2001 From: DLmaster Date: Sat, 12 Apr 2025 06:18:20 +0800 Subject: [PATCH] =?UTF-8?q?feat(gui):=20=E4=BC=98=E5=8C=96=E4=B8=8E?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加用户仪表盘子界面 - 更新逻辑修复 - 获取关卡号,用户密码解密逻辑优化 --- app/core/config.py | 178 +++++++++----------- app/core/timer.py | 2 +- app/ui/Widget.py | 2 - app/ui/main_window.py | 2 +- app/ui/member_manager.py | 344 ++++++++++++++++++++++++++++++++------- app/ui/setting.py | 20 +-- resources/version.json | 15 +- 7 files changed, 388 insertions(+), 175 deletions(-) diff --git a/app/core/config.py b/app/core/config.py index 5248107..e14c017 100644 --- a/app/core/config.py +++ b/app/core/config.py @@ -599,9 +599,11 @@ class MaaUserConfig(QConfig): class AppConfig(GlobalConfig): - VERSION = "4.2.5.9" + VERSION = "4.2.5.10" gameid_refreshed = Signal() + PASSWORD_refreshed = Signal() + user_info_changed = Signal() def __init__(self) -> None: super().__init__() @@ -620,7 +622,10 @@ class AppConfig(GlobalConfig): self.PASSWORD = "" self.running_list = [] self.silence_list = [] - self.gameid_dict = {"value": [], "text": []} + self.gameid_dict = { + "ALL": {"value": [], "text": []}, + "Today": {"value": [], "text": []}, + } self.if_ignore_silence = False self.if_database_opened = False @@ -635,21 +640,12 @@ class AppConfig(GlobalConfig): (self.app_path / "debug").mkdir(parents=True, exist_ok=True) (self.app_path / "history").mkdir(parents=True, exist_ok=True) - # 生成版本信息文件 - if not self.version_path.exists(): - version = { - "main_version": "0.0.0.0", - "updater_version": "0.0.0.0", - } - with self.version_path.open(mode="w", encoding="utf-8") as f: - json.dump(version, f, ensure_ascii=False, indent=4) - self.load(self.config_path, self) self.save() self.init_logger() self.check_data() - self.get_gameid("ALL") + self.get_gameid() logger.info("程序初始化完成") def init_logger(self) -> None: @@ -676,7 +672,7 @@ class AppConfig(GlobalConfig): logger.info("日志记录器初始化完成") - def get_gameid(self, mode: str) -> list: + def get_gameid(self) -> None: # 从MAA服务器获取活动关卡信息 for _ in range(3): @@ -711,82 +707,81 @@ class AppConfig(GlobalConfig): gameid_dict["value"].append(gameid_info["Value"]) gameid_dict["text"].append(gameid_info["Value"]) - if mode == "ALL": - self.gameid_dict["value"] = gameid_dict["value"] + [ - "-", - "1-7", - "R8-11", - "12-17-HARD", - "CE-6", - "AP-5", - "CA-5", - "LS-6", - "SK-5", - "PR-A-1", - "PR-A-2", - "PR-B-1", - "PR-B-2", - "PR-C-1", - "PR-C-2", - "PR-D-1", - "PR-D-2", - ] - self.gameid_dict["text"] = gameid_dict["text"] + [ - "当前/上次", - "1-7", - "R8-11", - "12-17-HARD", - "龙门币-6/5", - "红票-5", - "技能-5", - "经验-6/5", - "碳-5", - "奶/盾芯片", - "奶/盾芯片组", - "术/狙芯片", - "术/狙芯片组", - "先/辅芯片", - "先/辅芯片组", - "近/特芯片", - "近/特芯片组", - ] + # 生成全部关卡信息 + self.gameid_dict["ALL"]["value"] = gameid_dict["value"] + [ + "-", + "1-7", + "R8-11", + "12-17-HARD", + "CE-6", + "AP-5", + "CA-5", + "LS-6", + "SK-5", + "PR-A-1", + "PR-A-2", + "PR-B-1", + "PR-B-2", + "PR-C-1", + "PR-C-2", + "PR-D-1", + "PR-D-2", + ] + self.gameid_dict["ALL"]["text"] = gameid_dict["text"] + [ + "当前/上次", + "1-7", + "R8-11", + "12-17-HARD", + "龙门币-6/5", + "红票-5", + "技能-5", + "经验-6/5", + "碳-5", + "奶/盾芯片", + "奶/盾芯片组", + "术/狙芯片", + "术/狙芯片组", + "先/辅芯片", + "先/辅芯片组", + "近/特芯片", + "近/特芯片组", + ] - self.gameid_refreshed.emit() + # 生成本日关卡信息 + days = datetime.strptime(self.server_date(), "%Y-%m-%d").isoweekday() - elif mode == "Week": + gameid_list = [ + {"value": "-", "text": "当前/上次", "days": [1, 2, 3, 4, 5, 6, 7]}, + {"value": "1-7", "text": "1-7", "days": [1, 2, 3, 4, 5, 6, 7]}, + {"value": "R8-11", "text": "R8-11", "days": [1, 2, 3, 4, 5, 6, 7]}, + { + "value": "12-17-HARD", + "text": "12-17-HARD", + "days": [1, 2, 3, 4, 5, 6, 7], + }, + {"value": "CE-6", "text": "龙门币-6/5", "days": [2, 4, 6, 7]}, + {"value": "AP-5", "text": "红票-5", "days": [1, 4, 6, 7]}, + {"value": "CA-5", "text": "技能-5", "days": [2, 3, 5, 7]}, + {"value": "LS-6", "text": "经验-6/5", "days": [1, 2, 3, 4, 5, 6, 7]}, + {"value": "SK-5", "text": "碳-5", "days": [1, 3, 5, 6]}, + {"value": "PR-A-1", "text": "奶/盾芯片", "days": [1, 4, 5, 7]}, + {"value": "PR-A-2", "text": "奶/盾芯片组", "days": [1, 4, 5, 7]}, + {"value": "PR-B-1", "text": "术/狙芯片", "days": [1, 2, 5, 6]}, + {"value": "PR-B-2", "text": "术/狙芯片组", "days": [1, 2, 5, 6]}, + {"value": "PR-C-1", "text": "先/辅芯片", "days": [3, 4, 6, 7]}, + {"value": "PR-C-2", "text": "先/辅芯片组", "days": [3, 4, 6, 7]}, + {"value": "PR-D-1", "text": "近/特芯片", "days": [2, 3, 6, 7]}, + {"value": "PR-D-2", "text": "近/特芯片组", "days": [2, 3, 6, 7]}, + ] - days = datetime.strptime(self.server_date(), "%Y-%m-%d").isoweekday() + for gameid_info in gameid_list: + if days in gameid_info["days"]: + gameid_dict["value"].append(gameid_info["value"]) + gameid_dict["text"].append(gameid_info["text"]) - gameid_list = [ - {"value": "-", "text": "当前/上次", "days": [1, 2, 3, 4, 5, 6, 7]}, - {"value": "1-7", "text": "1-7", "days": [1, 2, 3, 4, 5, 6, 7]}, - {"value": "R8-11", "text": "R8-11", "days": [1, 2, 3, 4, 5, 6, 7]}, - { - "value": "12-17-HARD", - "text": "12-17-HARD", - "days": [1, 2, 3, 4, 5, 6, 7], - }, - {"value": "CE-6", "text": "龙门币-6/5", "days": [2, 4, 6, 7]}, - {"value": "AP-5", "text": "红票-5", "days": [1, 4, 6, 7]}, - {"value": "CA-5", "text": "技能-5", "days": [2, 3, 5, 7]}, - {"value": "LS-6", "text": "经验-6/5", "days": [1, 2, 3, 4, 5, 6, 7]}, - {"value": "SK-5", "text": "碳-5", "days": [1, 3, 5, 6]}, - {"value": "PR-A-1", "text": "奶/盾芯片", "days": [1, 4, 5, 7]}, - {"value": "PR-A-2", "text": "奶/盾芯片组", "days": [1, 4, 5, 7]}, - {"value": "PR-B-1", "text": "术/狙芯片", "days": [1, 2, 5, 6]}, - {"value": "PR-B-2", "text": "术/狙芯片组", "days": [1, 2, 5, 6]}, - {"value": "PR-C-1", "text": "先/辅芯片", "days": [3, 4, 6, 7]}, - {"value": "PR-C-2", "text": "先/辅芯片组", "days": [3, 4, 6, 7]}, - {"value": "PR-D-1", "text": "近/特芯片", "days": [2, 3, 6, 7]}, - {"value": "PR-D-2", "text": "近/特芯片组", "days": [2, 3, 6, 7]}, - ] + self.gameid_dict["Today"] = gameid_dict - for gameid_info in gameid_list: - if days in gameid_info["days"]: - gameid_dict["value"].append(gameid_info["value"]) - gameid_dict["text"].append(gameid_info["text"]) - - return gameid_dict + self.gameid_refreshed.emit() def server_date(self) -> str: """获取当前的服务器日期""" @@ -1185,19 +1180,6 @@ class AppConfig(GlobalConfig): maa_config.load(maa_dir / "config.json", maa_config) maa_config.save() - # user_dict: Dict[str, Dict[str, Union[Path, MaaUserConfig]]] = {} - # for user_dir in (maa_dir / "UserData").iterdir(): - # if user_dir.is_dir(): - - # # user_config = MaaUserConfig() - # # user_config.load(user_dir / "config.json", user_config) - # # user_config.save() - - # user_dict[user_dir.stem] = { - # "Path": user_dir, - # "Config": None, - # } - self.member_dict[maa_dir.name] = { "Type": "Maa", "Path": maa_dir, @@ -1301,6 +1283,8 @@ class AppConfig(GlobalConfig): user_config.Data_IfPassCheck, info["Config"]["Data"]["IfPassCheck"] ) + self.user_info_changed.emit() + def save_maa_log(self, log_path: Path, logs: list, maa_result: str) -> bool: """保存MAA日志""" diff --git a/app/core/timer.py b/app/core/timer.py index 721477c..66cc434 100644 --- a/app/core/timer.py +++ b/app/core/timer.py @@ -54,7 +54,7 @@ class _MainTimer(QWidget): def long_timed_task(self): """长时间定期检定任务""" - Config.get_gameid("ALL") + Config.get_gameid() def timed_start(self): """定时启动代理任务""" diff --git a/app/ui/Widget.py b/app/ui/Widget.py index 0eacbc6..e0cda7b 100644 --- a/app/ui/Widget.py +++ b/app/ui/Widget.py @@ -512,8 +512,6 @@ class PasswordLineEditSettingCard(SettingCard): class UserLableSettingCard(SettingCard): """Setting card with User's Lable""" - textChanged = Signal(str) - def __init__( self, icon: Union[str, QIcon, FluentIconBase], diff --git a/app/ui/main_window.py b/app/ui/main_window.py index 53629e5..493d64a 100644 --- a/app/ui/main_window.py +++ b/app/ui/main_window.py @@ -183,7 +183,7 @@ class AUTO_MAA(MSFluentWindow): self.tray.setContextMenu(self.tray_menu) self.tray.activated.connect(self.on_tray_activated) - Config.gameid_refreshed.connect(self.member_manager.refresh_gameid) + Config.user_info_changed.connect(self.member_manager.refresh_dashboard) TaskManager.create_gui.connect(self.dispatch_center.add_board) TaskManager.connect_gui.connect(self.dispatch_center.connect_main_board) Notify.push_info_bar.connect(MainInfoBar.push_info_bar) diff --git a/app/ui/member_manager.py b/app/ui/member_manager.py index a605ac9..d28815a 100644 --- a/app/ui/member_manager.py +++ b/app/ui/member_manager.py @@ -32,6 +32,8 @@ from PySide6.QtWidgets import ( QHBoxLayout, QVBoxLayout, QStackedWidget, + QTableWidgetItem, + QHeaderView, ) from qfluentwidgets import ( Action, @@ -43,15 +45,20 @@ from qfluentwidgets import ( CommandBar, ExpandGroupSettingCard, PushSettingCard, + TableWidget, + PrimaryToolButton, ) -from PySide6.QtCore import Qt +from PySide6.QtCore import Qt, Signal import requests import time +from datetime import datetime +from functools import partial from pathlib import Path from typing import List import shutil from app.core import Config, MainInfoBar, TaskManager, MaaConfig, MaaUserConfig +from app.services import Crypto from app.utils import DownloadManager from .Widget import ( LineEditMessageBox, @@ -381,28 +388,25 @@ class MemberManager(QWidget): ) if choice.exec() and choice.input.text() != "": Config.PASSWORD = choice.input.text() - for script in self.member_manager.script_list: - script.user_setting.refresh_password() + Config.PASSWORD_refreshed.emit() self.key.setIcon(FluentIcon.VIEW) self.key.setChecked(True) else: Config.PASSWORD = "" - for script in self.member_manager.script_list: - script.user_setting.refresh_password() + Config.PASSWORD_refreshed.emit() self.key.setIcon(FluentIcon.HIDE) self.key.setChecked(False) else: Config.PASSWORD = "" - for script in self.member_manager.script_list: - script.user_setting.refresh_password() + Config.PASSWORD_refreshed.emit() self.key.setIcon(FluentIcon.HIDE) self.key.setChecked(False) - def refresh_gameid(self): - """刷新所有脚本实例的游戏ID列表""" + def refresh_dashboard(self): + """刷新所有脚本实例的用户仪表盘""" for script in self.member_manager.script_list: - script.user_setting.refresh_gameid() + script.user_setting.user_manager.user_dashboard.load_info() class MemberSettingBox(QWidget): """脚本管理子页面组""" @@ -453,6 +457,9 @@ class MemberManager(QWidget): if if_chang_pivot: self.pivot.setCurrentItem(self.script_list[index - 1].objectName()) self.stackedWidget.setCurrentWidget(self.script_list[index - 1]) + self.script_list[index - 1].user_setting.user_manager.switch_SettingBox( + "用户仪表盘" + ) def clear_SettingBox(self) -> None: """清空所有子界面""" @@ -746,7 +753,7 @@ class MemberManager(QWidget): } self.user_manager.add_userSettingBox(index) - self.user_manager.switch_SettingBox(index) + self.user_manager.switch_SettingBox(f"用户_{index}") logger.success(f"{self.name} 用户_{index} 添加成功") MainInfoBar.push_info_bar( @@ -764,6 +771,12 @@ class MemberManager(QWidget): "warning", "未选择用户", "请先选择一个用户", 5000 ) return None + if name == "用户仪表盘": + logger.warning("试图删除用户仪表盘") + MainInfoBar.push_info_bar( + "warning", "未选择用户", "请勿尝试删除用户仪表盘", 5000 + ) + return None if self.name in Config.running_list: logger.warning("所属脚本正在运行") @@ -799,7 +812,9 @@ class MemberManager(QWidget): ]["Path"].with_name(f"用户_{i-1}") ) - self.user_manager.show_SettingBox(max(int(name[3:]) - 1, 1)) + self.user_manager.show_SettingBox( + f"用户_{max(int(name[3:]) - 1, 1)}" + ) logger.success(f"{self.name} {name} 删除成功") MainInfoBar.push_info_bar( @@ -817,6 +832,12 @@ class MemberManager(QWidget): "warning", "未选择用户", "请先选择一个用户", 5000 ) return None + if name == "用户仪表盘": + logger.warning("试图移动用户仪表盘") + MainInfoBar.push_info_bar( + "warning", "未选择用户", "请勿尝试移动用户仪表盘", 5000 + ) + return None index = int(name[3:]) @@ -852,7 +873,7 @@ class MemberManager(QWidget): ] ) - self.user_manager.show_SettingBox(index - 1) + self.user_manager.show_SettingBox(f"用户_{index - 1}") logger.success(f"{self.name} {name} 前移成功") MainInfoBar.push_info_bar( @@ -870,6 +891,12 @@ class MemberManager(QWidget): "warning", "未选择用户", "请先选择一个用户", 5000 ) return None + if name == "用户仪表盘": + logger.warning("试图删除用户仪表盘") + MainInfoBar.push_info_bar( + "warning", "未选择用户", "请勿尝试移动用户仪表盘", 5000 + ) + return None index = int(name[3:]) @@ -905,47 +932,17 @@ class MemberManager(QWidget): ] ) - self.user_manager.show_SettingBox(index + 1) + self.user_manager.show_SettingBox(f"用户_{index + 1}") logger.success(f"{self.name} {name} 后移成功") MainInfoBar.push_info_bar( "success", "操作成功", f"{self.name} 后移 {name}", 3000 ) - def refresh_password(self): - """刷新用户密码栏""" - - for script in self.user_manager.script_list: - - script.card_Password.setValue( - script.card_Password.qconfig.get( - script.card_Password.configItem - ) - ) - - def refresh_gameid(self): - """刷新用户密码栏""" - - for script in self.user_manager.script_list: - - script.card_GameId.reLoadOptions( - Config.gameid_dict["value"], Config.gameid_dict["text"] - ) - script.card_GameId_1.reLoadOptions( - Config.gameid_dict["value"], Config.gameid_dict["text"] - ) - script.card_GameId_2.reLoadOptions( - Config.gameid_dict["value"], Config.gameid_dict["text"] - ) - class UserSettingBox(QWidget): """用户管理子页面组""" - def __init__( - self, - name: str, - parent=None, - ): + def __init__(self, name: str, parent=None): super().__init__(parent) self.setObjectName("用户管理") @@ -959,53 +956,74 @@ class MemberManager(QWidget): MemberManager.MemberSettingBox.MaaSettingBox.UserManager.UserSettingBox.UserMemberSettingBox ] = [] + self.user_dashboard = self.UserDashboard(self.name, self) + self.user_dashboard.switch_to.connect(self.switch_SettingBox) + self.stackedWidget.addWidget(self.user_dashboard) + self.pivot.addItem(routeKey="用户仪表盘", text="用户仪表盘") + self.Layout.addWidget(self.pivot, 0, Qt.AlignHCenter) self.Layout.addWidget(self.stackedWidget) self.Layout.setContentsMargins(0, 0, 0, 0) self.pivot.currentItemChanged.connect( lambda index: self.switch_SettingBox( - int(index[3:]), if_change_pivot=False + index, if_change_pivot=False ) ) - self.show_SettingBox(1) + self.show_SettingBox("用户仪表盘") - def show_SettingBox(self, index) -> None: + def show_SettingBox(self, index: str) -> None: """加载所有子界面""" Config.search_maa_user(self.name) for name in Config.member_dict[self.name]["UserData"].keys(): - self.add_userSettingBox(int(name[3:])) + self.add_userSettingBox(name[3:]) self.switch_SettingBox(index) def switch_SettingBox( - self, index: int, if_change_pivot: bool = True + self, index: str, if_change_pivot: bool = True ) -> None: """切换到指定的子界面""" if len(Config.member_dict[self.name]["UserData"]) == 0: + index = "用户仪表盘" + + if index != "用户仪表盘" and int(index[3:]) > len( + Config.member_dict[self.name]["UserData"] + ): return None - if index > len(Config.member_dict[self.name]["UserData"]): - return None + if index == "用户仪表盘": + self.user_dashboard.load_info() if if_change_pivot: - self.pivot.setCurrentItem( - self.script_list[index - 1].objectName() - ) - self.stackedWidget.setCurrentWidget(self.script_list[index - 1]) + self.pivot.setCurrentItem(index) + self.stackedWidget.setCurrentWidget( + self.user_dashboard + if index == "用户仪表盘" + else self.script_list[int(index[3:]) - 1] + ) def clear_SettingBox(self) -> None: """清空所有子界面""" for sub_interface in self.script_list: + Config.gameid_refreshed.disconnect( + sub_interface.refresh_gameid + ) + Config.PASSWORD_refreshed.disconnect( + sub_interface.refresh_password + ) self.stackedWidget.removeWidget(sub_interface) sub_interface.deleteLater() self.script_list.clear() self.pivot.clear() + self.user_dashboard.dashboard.setRowCount(0) + self.stackedWidget.addWidget(self.user_dashboard) + self.pivot.addItem(routeKey="用户仪表盘", text="用户仪表盘") def add_userSettingBox(self, uid: int) -> None: """添加一个用户设置界面""" @@ -1020,6 +1038,182 @@ class MemberManager(QWidget): self.pivot.addItem(routeKey=f"用户_{uid}", text=f"用户 {uid}") + class UserDashboard(HeaderCardWidget): + """用户仪表盘页面""" + + switch_to = Signal(str) + + def __init__(self, name: str, parent=None): + super().__init__(parent) + self.setObjectName("用户仪表盘") + self.setTitle("用户仪表盘") + self.name = name + + self.dashboard = TableWidget(self) + self.dashboard.setColumnCount(10) + self.dashboard.setHorizontalHeaderLabels( + [ + "用户名", + "账号ID", + "密码", + "状态", + "代理情况", + "给药量", + "关卡选择", + "备选关卡-1", + "备选关卡-2", + "详", + ] + ) + self.dashboard.setEditTriggers(TableWidget.NoEditTriggers) + self.dashboard.verticalHeader().setVisible(False) + for col in range(6): + self.dashboard.horizontalHeader().setSectionResizeMode( + col, QHeaderView.ResizeMode.ResizeToContents + ) + for col in range(6, 9): + self.dashboard.horizontalHeader().setSectionResizeMode( + col, QHeaderView.ResizeMode.Stretch + ) + self.dashboard.horizontalHeader().setSectionResizeMode( + 9, QHeaderView.ResizeMode.Fixed + ) + self.dashboard.setColumnWidth(9, 32) + + self.viewLayout.addWidget(self.dashboard) + self.viewLayout.setContentsMargins(3, 0, 3, 3) + + Config.PASSWORD_refreshed.connect(self.load_info) + + def load_info(self): + + self.user_data = Config.member_dict[self.name]["UserData"] + + self.dashboard.setRowCount(len(self.user_data)) + + for name, info in self.user_data.items(): + + config = info["Config"] + + text_list = [] + if not config.get(config.Data_IfPassCheck): + text_list.append("未通过人工排查") + text_list.append( + f"今日已代理{config.get(config.Data_ProxyTimes)}次" + if Config.server_date() + == config.get(config.Data_LastProxyDate) + else "今日未进行代理" + ) + text_list.append( + "本周剿灭已完成" + if datetime.strptime( + config.get(config.Data_LastAnnihilationDate), + "%Y-%m-%d", + ).isocalendar()[:2] + == datetime.strptime( + Config.server_date(), "%Y-%m-%d" + ).isocalendar()[:2] + else "本周剿灭未完成" + ) + + button = PrimaryToolButton( + FluentIcon.CHEVRON_RIGHT, self + ) + button.setFixedSize(32, 32) + button.clicked.connect( + partial(self.switch_to.emit, name) + ) + + self.dashboard.setItem( + int(name[3:]) - 1, + 0, + QTableWidgetItem(config.get(config.Info_Name)), + ) + self.dashboard.setItem( + int(name[3:]) - 1, + 1, + QTableWidgetItem(config.get(config.Info_Id)), + ) + self.dashboard.setItem( + int(name[3:]) - 1, + 2, + QTableWidgetItem( + Crypto.AUTO_decryptor( + config.get(config.Info_Password), + Config.PASSWORD, + ) + if Config.PASSWORD + else "******" + ), + ) + self.dashboard.setItem( + int(name[3:]) - 1, + 3, + QTableWidgetItem( + "启用" + if config.get(config.Info_Status) + and config.get(config.Info_RemainedDay) != 0 + else "禁用" + ), + ) + self.dashboard.setItem( + int(name[3:]) - 1, + 4, + QTableWidgetItem(" | ".join(text_list)), + ) + self.dashboard.setItem( + int(name[3:]) - 1, + 5, + QTableWidgetItem( + str(config.get(config.Info_MedicineNumb)) + ), + ) + self.dashboard.setItem( + int(name[3:]) - 1, + 6, + QTableWidgetItem( + Config.gameid_dict["ALL"]["text"][ + Config.gameid_dict["ALL"]["value"].index( + config.get(config.Info_GameId) + ) + ] + if config.get(config.Info_GameId) + in Config.gameid_dict["ALL"]["value"] + else config.get(config.Info_GameId) + ), + ) + self.dashboard.setItem( + int(name[3:]) - 1, + 7, + QTableWidgetItem( + Config.gameid_dict["ALL"]["text"][ + Config.gameid_dict["ALL"]["value"].index( + config.get(config.Info_GameId_1) + ) + ] + if config.get(config.Info_GameId_1) + in Config.gameid_dict["ALL"]["value"] + else config.get(config.Info_GameId_1) + ), + ) + self.dashboard.setItem( + int(name[3:]) - 1, + 8, + QTableWidgetItem( + Config.gameid_dict["ALL"]["text"][ + Config.gameid_dict["ALL"]["value"].index( + config.get(config.Info_GameId_2) + ) + ] + if config.get(config.Info_GameId_2) + in Config.gameid_dict["ALL"]["value"] + else config.get(config.Info_GameId_2) + ), + ) + self.dashboard.setCellWidget( + int(name[3:]) - 1, 9, button + ) + class UserMemberSettingBox(HeaderCardWidget): """用户管理子页面""" @@ -1157,8 +1351,8 @@ class MemberManager(QWidget): icon=FluentIcon.GAME, title="关卡选择", content="按下回车以添加自定义关卡号", - value=Config.gameid_dict["value"], - texts=Config.gameid_dict["text"], + value=Config.gameid_dict["ALL"]["value"], + texts=Config.gameid_dict["ALL"]["text"], qconfig=self.config, configItem=self.config.Info_GameId, parent=self, @@ -1167,8 +1361,8 @@ class MemberManager(QWidget): icon=FluentIcon.GAME, title="备选关卡-1", content="按下回车以添加自定义关卡号", - value=Config.gameid_dict["value"], - texts=Config.gameid_dict["text"], + value=Config.gameid_dict["ALL"]["value"], + texts=Config.gameid_dict["ALL"]["text"], qconfig=self.config, configItem=self.config.Info_GameId_1, parent=self, @@ -1177,8 +1371,8 @@ class MemberManager(QWidget): icon=FluentIcon.GAME, title="备选关卡-2", content="按下回车以添加自定义关卡号", - value=Config.gameid_dict["value"], - texts=Config.gameid_dict["text"], + value=Config.gameid_dict["ALL"]["value"], + texts=Config.gameid_dict["ALL"]["text"], qconfig=self.config, configItem=self.config.Info_GameId_2, parent=self, @@ -1233,6 +1427,7 @@ class MemberManager(QWidget): Layout.addLayout(h7_layout) self.viewLayout.addLayout(Layout) + self.viewLayout.setContentsMargins(3, 0, 3, 3) self.card_Mode.comboBox.currentIndexChanged.connect( self.switch_mode @@ -1246,6 +1441,8 @@ class MemberManager(QWidget): self.card_Infrastructure.clicked.connect( self.set_infrastructure ) + Config.gameid_refreshed.connect(self.refresh_gameid) + Config.PASSWORD_refreshed.connect(self.refresh_password) self.switch_mode() @@ -1265,6 +1462,29 @@ class MemberManager(QWidget): self.card_Annihilation.button.setVisible(True) self.card_Routine.setVisible(True) + def refresh_gameid(self): + + self.card_GameId.reLoadOptions( + Config.gameid_dict["ALL"]["value"], + Config.gameid_dict["ALL"]["text"], + ) + self.card_GameId_1.reLoadOptions( + Config.gameid_dict["ALL"]["value"], + Config.gameid_dict["ALL"]["text"], + ) + self.card_GameId_2.reLoadOptions( + Config.gameid_dict["ALL"]["value"], + Config.gameid_dict["ALL"]["text"], + ) + + def refresh_password(self): + + self.card_Password.setValue( + self.card_Password.qconfig.get( + self.card_Password.configItem + ) + ) + def set_infrastructure(self) -> None: """配置自定义基建""" diff --git a/app/ui/setting.py b/app/ui/setting.py index 6e3a00b..d5f82b2 100644 --- a/app/ui/setting.py +++ b/app/ui/setting.py @@ -335,17 +335,17 @@ class Setting(QWidget): ) ) - version_info_json: Dict[str, Dict[str, str]] = json.loads( - re.sub( - r"^$", - r"\1", - version_info["data"]["release_note"].splitlines()[0], - ) - ) - # 有版本更新 if remote_version > current_version: + version_info_json: Dict[str, Dict[str, str]] = json.loads( + re.sub( + r"^$", + r"\1", + version_info["data"]["release_note"].splitlines()[0], + ) + ) + # 生成版本更新信息 main_version_info = f"## 主程序:{version_text(current_version)} --> {version_text(remote_version)}" @@ -361,7 +361,7 @@ class Setting(QWidget): update_version_info[key] += value.copy() else: update_version_info[key] = value.copy() - for v_i in update_version_info.values(): + for v_i in version_info_json.values(): for key, value in v_i.items(): if key in all_version_info: all_version_info[key] += value.copy() @@ -373,7 +373,7 @@ class Setting(QWidget): "ALL~版本信息": version_info_markdown(all_version_info), **{ version_text(list(map(int, k.split(".")))): version_info_markdown(v) - for k, v in update_version_info.items() + for k, v in version_info_json.items() }, } diff --git a/resources/version.json b/resources/version.json index 316e368..a61f998 100644 --- a/resources/version.json +++ b/resources/version.json @@ -1,8 +1,19 @@ { - "main_version": "4.2.5.9", - "updater_version": "1.2.0.2", + "main_version": "4.2.5.10", + "updater_version": "1.2.1.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.2.5.10":{ + "新增功能": [ + "添加用户仪表盘子界面" + ], + "修复BUG": [ + "更新逻辑修复" + ], + "程序优化": [ + "获取关卡号,用户密码解密逻辑优化" + ] + }, "4.2.5.9":{ "新增功能": [ "添加理智药设置选项 #34",