feat(gui): 优化与修复
- 添加用户仪表盘子界面 - 更新逻辑修复 - 获取关卡号,用户密码解密逻辑优化
This commit is contained in:
@@ -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日志"""
|
||||
|
||||
|
||||
@@ -54,7 +54,7 @@ class _MainTimer(QWidget):
|
||||
def long_timed_task(self):
|
||||
"""长时间定期检定任务"""
|
||||
|
||||
Config.get_gameid("ALL")
|
||||
Config.get_gameid()
|
||||
|
||||
def timed_start(self):
|
||||
"""定时启动代理任务"""
|
||||
|
||||
@@ -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],
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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:
|
||||
"""配置自定义基建"""
|
||||
|
||||
|
||||
@@ -335,17 +335,17 @@ class Setting(QWidget):
|
||||
)
|
||||
)
|
||||
|
||||
version_info_json: Dict[str, Dict[str, str]] = json.loads(
|
||||
re.sub(
|
||||
r"^<!--\s*(.*?)\s*-->$",
|
||||
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"^<!--\s*(.*?)\s*-->$",
|
||||
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()
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user