chore(core): 优化调度队列配置逻辑

This commit is contained in:
DLmaster361
2025-07-31 01:01:30 +08:00
parent 9f330e2245
commit 67c41ab3ee
9 changed files with 342 additions and 541 deletions

View File

@@ -276,78 +276,49 @@ class QueueConfig(LQConfig):
super().__init__()
self.queueSet_Name = ConfigItem("QueueSet", "Name", "")
self.queueSet_Enabled = ConfigItem(
"QueueSet", "Enabled", False, BoolValidator()
self.queueSet_TimeEnabled = ConfigItem(
"QueueSet", "TimeEnabled", False, BoolValidator()
)
self.queueSet_AfterAccomplish = OptionsConfigItem(
"QueueSet",
"AfterAccomplish",
"NoAction",
OptionsValidator(
["NoAction", "KillSelf", "Sleep", "Hibernate", "Shutdown"]
[
"NoAction",
"KillSelf",
"Sleep",
"Hibernate",
"Shutdown",
"ShutdownForce",
]
),
)
self.time_TimeEnabled_0 = ConfigItem(
"Time", "TimeEnabled_0", False, BoolValidator()
)
self.time_TimeSet_0 = ConfigItem("Time", "TimeSet_0", "00:00")
self.config_item_dict: dict[str, Dict[str, ConfigItem]] = {
"Queue": {},
"Time": {},
}
self.time_TimeEnabled_1 = ConfigItem(
"Time", "TimeEnabled_1", False, BoolValidator()
)
self.time_TimeSet_1 = ConfigItem("Time", "TimeSet_1", "00:00")
for i in range(10):
self.time_TimeEnabled_2 = ConfigItem(
"Time", "TimeEnabled_2", False, BoolValidator()
)
self.time_TimeSet_2 = ConfigItem("Time", "TimeSet_2", "00:00")
self.config_item_dict["Time"][f"Enabled_{i}"] = ConfigItem(
"Time", f"Enabled_{i}", False, BoolValidator()
)
self.config_item_dict["Time"][f"Set_{i}"] = ConfigItem(
"Time", f"Set_{i}", "00:00"
)
self.config_item_dict["Queue"][f"Script_{i}"] = OptionsConfigItem(
"Queue", f"Script_{i}", "禁用"
)
self.time_TimeEnabled_3 = ConfigItem(
"Time", "TimeEnabled_3", False, BoolValidator()
)
self.time_TimeSet_3 = ConfigItem("Time", "TimeSet_3", "00:00")
self.time_TimeEnabled_4 = ConfigItem(
"Time", "TimeEnabled_4", False, BoolValidator()
)
self.time_TimeSet_4 = ConfigItem("Time", "TimeSet_4", "00:00")
self.time_TimeEnabled_5 = ConfigItem(
"Time", "TimeEnabled_5", False, BoolValidator()
)
self.time_TimeSet_5 = ConfigItem("Time", "TimeSet_5", "00:00")
self.time_TimeEnabled_6 = ConfigItem(
"Time", "TimeEnabled_6", False, BoolValidator()
)
self.time_TimeSet_6 = ConfigItem("Time", "TimeSet_6", "00:00")
self.time_TimeEnabled_7 = ConfigItem(
"Time", "TimeEnabled_7", False, BoolValidator()
)
self.time_TimeSet_7 = ConfigItem("Time", "TimeSet_7", "00:00")
self.time_TimeEnabled_8 = ConfigItem(
"Time", "TimeEnabled_8", False, BoolValidator()
)
self.time_TimeSet_8 = ConfigItem("Time", "TimeSet_8", "00:00")
self.time_TimeEnabled_9 = ConfigItem(
"Time", "TimeEnabled_9", False, BoolValidator()
)
self.time_TimeSet_9 = ConfigItem("Time", "TimeSet_9", "00:00")
self.queue_Member_1 = OptionsConfigItem("Queue", "Member_1", "禁用")
self.queue_Member_2 = OptionsConfigItem("Queue", "Member_2", "禁用")
self.queue_Member_3 = OptionsConfigItem("Queue", "Member_3", "禁用")
self.queue_Member_4 = OptionsConfigItem("Queue", "Member_4", "禁用")
self.queue_Member_5 = OptionsConfigItem("Queue", "Member_5", "禁用")
self.queue_Member_6 = OptionsConfigItem("Queue", "Member_6", "禁用")
self.queue_Member_7 = OptionsConfigItem("Queue", "Member_7", "禁用")
self.queue_Member_8 = OptionsConfigItem("Queue", "Member_8", "禁用")
self.queue_Member_9 = OptionsConfigItem("Queue", "Member_9", "禁用")
self.queue_Member_10 = OptionsConfigItem("Queue", "Member_10", "禁用")
setattr(
self, f"Time_Enabled_{i}", self.config_item_dict["Time"][f"Enabled_{i}"]
)
setattr(self, f"Time_Set_{i}", self.config_item_dict["Time"][f"Set_{i}"])
setattr(
self, f"Queue_Script_{i}", self.config_item_dict["Queue"][f"Script_{i}"]
)
self.Data_LastProxyTime = ConfigItem(
"Data", "LastProxyTime", "2000-01-01 00:00:00"
@@ -713,7 +684,7 @@ class GeneralSubConfig(LQConfig):
class AppConfig(GlobalConfig):
VERSION = "4.4.1.4"
VERSION = "4.4.1.5"
stage_refreshed = Signal()
PASSWORD_refreshed = Signal()
@@ -750,7 +721,9 @@ class AppConfig(GlobalConfig):
self.if_ignore_silence = False
self.if_database_opened = False
self.search_member()
self.initialize()
self.search_script()
self.search_queue()
parser = argparse.ArgumentParser(
@@ -766,12 +739,15 @@ class AppConfig(GlobalConfig):
parser.add_argument(
"--config",
nargs="+",
choices=list(self.member_dict.keys()) + list(self.queue_dict.keys()),
choices=list(self.script_dict.keys()) + list(self.queue_dict.keys()),
help="指定需要运行哪些配置项",
)
self.args = parser.parse_args()
self.initialize()
logger.info(
f"运行模式: {'图形化界面' if self.args.mode == 'gui' else '命令行界面'},配置项: {self.args.config if self.args.config else '启动时运行的调度队列'}",
module="配置管理",
)
def initialize(self) -> None:
"""初始化程序配置管理模块"""
@@ -818,14 +794,8 @@ class AppConfig(GlobalConfig):
logger.info("AUTO_MAA 主程序", module="配置管理")
logger.info(f"版本号: v{self.VERSION}", module="配置管理")
logger.info(f"根目录: {self.app_path}", module="配置管理")
logger.info(
f"运行模式: {'图形化界面' if self.args.mode == 'gui' else '命令行界面'}",
module="配置管理",
)
logger.info("===================================", module="配置管理")
logger.info("日志记录器初始化完成", module="配置管理")
def check_data(self) -> None:
"""检查用户数据文件并处理数据文件版本更新"""
@@ -834,7 +804,7 @@ class AppConfig(GlobalConfig):
db = sqlite3.connect(self.database_path)
cur = db.cursor()
cur.execute("CREATE TABLE version(v text)")
cur.execute("INSERT INTO version VALUES(?)", ("v1.7",))
cur.execute("INSERT INTO version VALUES(?)", ("v1.8",))
db.commit()
cur.close()
db.close()
@@ -845,7 +815,7 @@ class AppConfig(GlobalConfig):
cur.execute("SELECT * FROM version WHERE True")
version = cur.fetchall()
if version[0][0] != "v1.7":
if version[0][0] != "v1.8":
logger.info("数据文件版本更新开始", module="配置管理")
if_streaming = False
# v1.4-->v1.5
@@ -975,7 +945,6 @@ class AppConfig(GlobalConfig):
cur.execute("DELETE FROM version WHERE v = ?", ("v1.4",))
cur.execute("INSERT INTO version VALUES(?)", ("v1.5",))
db.commit()
# v1.5-->v1.6
if version[0][0] == "v1.5" or if_streaming:
logger.info("数据文件版本更新v1.5-->v1.6", module="配置管理")
@@ -1077,6 +1046,39 @@ class AppConfig(GlobalConfig):
cur.execute("DELETE FROM version WHERE v = ?", ("v1.6",))
cur.execute("INSERT INTO version VALUES(?)", ("v1.7",))
db.commit()
# v1.7-->v1.8
if version[0][0] == "v1.7" or if_streaming:
logger.info("数据文件版本更新v1.7-->v1.8", module="配置管理")
if_streaming = True
if (self.app_path / "config/QueueConfig").exists():
for QueueConfig in (self.app_path / "config/QueueConfig").glob(
"*.json"
):
with QueueConfig.open(encoding="utf-8") as f:
queue_config = json.load(f)
queue_config["QueueSet"]["TimeEnabled"] = queue_config[
"QueueSet"
]["Enabled"]
for i in range(10):
queue_config["Queue"][f"Script_{i}"] = queue_config[
"Queue"
][f"Member_{i + 1}"]
queue_config["Time"][f"Enabled_{i}"] = queue_config["Time"][
f"TimeEnabled_{i}"
]
queue_config["Time"][f"Set_{i}"] = queue_config["Time"][
f"TimeSet_{i}"
]
with QueueConfig.open("w", encoding="utf-8") as f:
json.dump(queue_config, f, ensure_ascii=False, indent=4)
cur.execute("DELETE FROM version WHERE v = ?", ("v1.7",))
cur.execute("INSERT INTO version VALUES(?)", ("v1.8",))
db.commit()
cur.close()
db.close()
@@ -1176,11 +1178,11 @@ class AppConfig(GlobalConfig):
dt = dt - timedelta(days=1)
return dt.date()
def search_member(self) -> None:
def search_script(self) -> None:
"""更新脚本实例配置信息"""
logger.info("开始搜索并读入脚本实例配置", module="配置管理")
self.member_dict: Dict[
self.script_dict: Dict[
str,
Dict[
str,
@@ -1200,7 +1202,7 @@ class AppConfig(GlobalConfig):
maa_config.load(maa_dir / "config.json", maa_config)
maa_config.save()
self.member_dict[maa_dir.name] = {
self.script_dict[maa_dir.name] = {
"Type": "Maa",
"Path": maa_dir,
"Config": maa_config,
@@ -1214,19 +1216,19 @@ class AppConfig(GlobalConfig):
general_config.load(general_dir / "config.json", general_config)
general_config.save()
self.member_dict[general_dir.name] = {
self.script_dict[general_dir.name] = {
"Type": "General",
"Path": general_dir,
"Config": general_config,
"SubData": None,
}
self.member_dict = dict(
sorted(self.member_dict.items(), key=lambda x: int(x[0][3:]))
self.script_dict = dict(
sorted(self.script_dict.items(), key=lambda x: int(x[0][3:]))
)
logger.success(
f"脚本实例配置搜索完成,共找到 {len(self.member_dict)} 个实例",
f"脚本实例配置搜索完成,共找到 {len(self.script_dict)} 个实例",
module="配置管理",
)
@@ -1241,7 +1243,7 @@ class AppConfig(GlobalConfig):
logger.info(f"开始搜索并读入 MAA 脚本实例 {name} 的用户信息", module="配置管理")
user_dict: Dict[str, Dict[str, Union[Path, MaaUserConfig]]] = {}
for user_dir in (Config.member_dict[name]["Path"] / "UserData").iterdir():
for user_dir in (Config.script_dict[name]["Path"] / "UserData").iterdir():
if user_dir.is_dir():
user_config = MaaUserConfig()
@@ -1250,7 +1252,7 @@ class AppConfig(GlobalConfig):
user_dict[user_dir.stem] = {"Path": user_dir, "Config": user_config}
self.member_dict[name]["UserData"] = dict(
self.script_dict[name]["UserData"] = dict(
sorted(user_dict.items(), key=lambda x: int(x[0][3:]))
)
@@ -1272,7 +1274,7 @@ class AppConfig(GlobalConfig):
)
user_dict: Dict[str, Dict[str, Union[Path, GeneralSubConfig]]] = {}
for sub_dir in (Config.member_dict[name]["Path"] / "SubData").iterdir():
for sub_dir in (Config.script_dict[name]["Path"] / "SubData").iterdir():
if sub_dir.is_dir():
sub_config = GeneralSubConfig()
@@ -1281,7 +1283,7 @@ class AppConfig(GlobalConfig):
user_dict[sub_dir.stem] = {"Path": sub_dir, "Config": sub_config}
self.member_dict[name]["SubData"] = dict(
self.script_dict[name]["SubData"] = dict(
sorted(user_dict.items(), key=lambda x: int(x[0][3:]))
)
@@ -1359,26 +1361,17 @@ class AppConfig(GlobalConfig):
for queue in self.queue_dict.values():
if queue["Config"].get(queue["Config"].queue_Member_1) == old:
queue["Config"].set(queue["Config"].queue_Member_1, new)
if queue["Config"].get(queue["Config"].queue_Member_2) == old:
queue["Config"].set(queue["Config"].queue_Member_2, new)
if queue["Config"].get(queue["Config"].queue_Member_3) == old:
queue["Config"].set(queue["Config"].queue_Member_3, new)
if queue["Config"].get(queue["Config"].queue_Member_4) == old:
queue["Config"].set(queue["Config"].queue_Member_4, new)
if queue["Config"].get(queue["Config"].queue_Member_5) == old:
queue["Config"].set(queue["Config"].queue_Member_5, new)
if queue["Config"].get(queue["Config"].queue_Member_6) == old:
queue["Config"].set(queue["Config"].queue_Member_6, new)
if queue["Config"].get(queue["Config"].queue_Member_7) == old:
queue["Config"].set(queue["Config"].queue_Member_7, new)
if queue["Config"].get(queue["Config"].queue_Member_8) == old:
queue["Config"].set(queue["Config"].queue_Member_8, new)
if queue["Config"].get(queue["Config"].queue_Member_9) == old:
queue["Config"].set(queue["Config"].queue_Member_9, new)
if queue["Config"].get(queue["Config"].queue_Member_10) == old:
queue["Config"].set(queue["Config"].queue_Member_10, new)
for i in range(10):
if (
queue["Config"].get(
queue["Config"].config_item_dict["Queue"][f"Script_{i}"]
)
== old
):
queue["Config"].set(
queue["Config"].config_item_dict["Queue"][f"Script_{i}"], new
)
logger.success(f"调度队列参数修改完成:{old} -> {new}", module="配置管理")
@@ -1392,9 +1385,9 @@ class AppConfig(GlobalConfig):
logger.info(f"开始修改计划表参数:{old} -> {new}", module="配置管理")
for member in self.member_dict.values():
for script in self.script_dict.values():
for user in member["UserData"].values():
for user in script["UserData"].values():
if user["Config"].get(user["Config"].Info_StageMode) == old:
user["Config"].set(user["Config"].Info_StageMode, new)
@@ -1417,7 +1410,7 @@ class AppConfig(GlobalConfig):
for user, info in user_data.items():
user_config = self.member_dict[name]["UserData"][user]["Config"]
user_config = self.script_dict[name]["UserData"][user]["Config"]
user_config.set(
user_config.Info_RemainedDay, info["Config"]["Info"]["RemainedDay"]
@@ -1464,7 +1457,7 @@ class AppConfig(GlobalConfig):
for sub, info in sub_data.items():
sub_config = self.member_dict[name]["SubData"][sub]["Config"]
sub_config = self.script_dict[name]["SubData"][sub]["Config"]
sub_config.set(
sub_config.Info_RemainedDay, info["Config"]["Info"]["RemainedDay"]

View File

@@ -81,7 +81,7 @@ class Task(QThread):
self.task = MaaManager(
self.mode,
Config.member_dict[self.name],
Config.script_dict[self.name],
(None if "全局" in self.mode else self.info["SetMaaInfo"]["Path"]),
)
self.task.check_maa_version.connect(self.check_maa_version.emit)
@@ -104,7 +104,7 @@ class Task(QThread):
self.task = GeneralManager(
self.mode,
Config.member_dict[self.name],
Config.script_dict[self.name],
self.info["SetSubInfo"]["Path"],
)
self.task.push_info_bar.connect(self.push_info_bar.emit)
@@ -126,8 +126,8 @@ class Task(QThread):
[
(
value
if Config.member_dict[value]["Config"].get_name() == ""
else f"{value} - {Config.member_dict[value]["Config"].get_name()}"
if Config.script_dict[value]["Config"].get_name() == ""
else f"{value} - {Config.script_dict[value]["Config"].get_name()}"
),
"等待",
value,
@@ -165,11 +165,11 @@ class Task(QThread):
logger.info(f"任务开始:{task[0]}", module=f"业务 {self.name}")
self.push_info_bar.emit("info", "任务开始", task[0], 3000)
if Config.member_dict[task[2]]["Type"] == "Maa":
if Config.script_dict[task[2]]["Type"] == "Maa":
self.task = MaaManager(
self.mode[0:4],
Config.member_dict[task[2]],
Config.script_dict[task[2]],
)
self.task.check_maa_version.connect(self.check_maa_version.emit)
@@ -186,11 +186,11 @@ class Task(QThread):
lambda log: self.task_accomplish(task[2], log)
)
elif Config.member_dict[task[2]]["Type"] == "General":
elif Config.script_dict[task[2]]["Type"] == "General":
self.task = GeneralManager(
self.mode[0:4],
Config.member_dict[task[2]],
Config.script_dict[task[2]],
)
self.task.question.connect(self.question.emit)

View File

@@ -79,15 +79,15 @@ class _MainTimer(QObject):
for name, info in Config.queue_dict.items():
if not info["Config"].get(info["Config"].queueSet_Enabled):
if not info["Config"].get(info["Config"].queueSet_TimeEnabled):
continue
data = info["Config"].toDict()
time_set = [
data["Time"][f"TimeSet_{_}"]
data["Time"][f"Set_{_}"]
for _ in range(10)
if data["Time"][f"TimeEnabled_{_}"]
if data["Time"][f"Enabled_{_}"]
]
# 按时间调起代理任务
curtime = datetime.now().strftime("%Y-%m-%d %H:%M")

View File

@@ -167,22 +167,22 @@ class CryptoHandler:
:type PASSWORD_new: str
"""
for member in Config.member_dict.values():
for script in Config.script_dict.values():
# 使用旧管理密钥解密
if member["Type"] == "Maa":
for user in member["UserData"].values():
if script["Type"] == "Maa":
for user in script["UserData"].values():
user["Password"] = self.AUTO_decryptor(
user["Config"].get(user["Config"].Info_Password), PASSWORD_old
)
self.get_PASSWORD(PASSWORD_new)
for member in Config.member_dict.values():
for script in Config.script_dict.values():
# 使用新管理密钥重新加密
if member["Type"] == "Maa":
for user in member["UserData"].values():
if script["Type"] == "Maa":
for user in script["UserData"].values():
user["Config"].set(
user["Config"].Info_Password,
self.AUTO_encryptor(user["Password"]),
@@ -200,10 +200,10 @@ class CryptoHandler:
self.get_PASSWORD(PASSWORD_new)
for member in Config.member_dict.values():
for script in Config.script_dict.values():
if member["Type"] == "Maa":
for user in member["UserData"].values():
if script["Type"] == "Maa":
for user in script["UserData"].values():
user["Config"].set(
user["Config"].Info_Password, self.AUTO_encryptor("数据已重置")
)

View File

@@ -246,7 +246,7 @@ class DispatchCenter(QWidget):
userData=name,
)
for name, info in Config.member_dict.items():
for name, info in Config.script_dict.items():
self.script_list["主调度台"].top_bar.object.addItem(
(
f"实例 - {info['Type']}"
@@ -258,7 +258,7 @@ class DispatchCenter(QWidget):
if len(Config.queue_dict) == 1:
self.script_list["主调度台"].top_bar.object.setCurrentIndex(0)
elif len(Config.member_dict) == 1:
elif len(Config.script_dict) == 1:
self.script_list["主调度台"].top_bar.object.setCurrentIndex(
len(Config.queue_dict)
)
@@ -278,7 +278,7 @@ class DispatchCenter(QWidget):
"Sleep": "睡眠",
"Hibernate": "休眠",
"Shutdown": "关机",
"ShutdownForce": "关机(强制)"
"ShutdownForce": "关机(强制)",
}
self.power_combox.currentIndexChanged.disconnect()
self.power_combox.setCurrentText(mode_book[Config.power_sign])
@@ -317,7 +317,7 @@ class DispatchCenter(QWidget):
)
data_list.append(name)
for name, info in Config.member_dict.items():
for name, info in Config.script_dict.items():
if name in Config.running_list:
continue
text_list.append(
@@ -365,7 +365,7 @@ class DispatchCenter(QWidget):
TaskManager.add_task(
"自动代理_新调度台",
f"自定义队列 - {choice.input[0].currentData()}",
{"Queue": {"Member_1": choice.input[0].currentData()}},
{"Queue": {"Script_0": choice.input[0].currentData()}},
)
class DispatchBox(QWidget):
@@ -455,7 +455,7 @@ class DispatchCenter(QWidget):
if (
"脚本" in self.object.currentData()
and Config.member_dict[self.object.currentData()]["Type"]
and Config.script_dict[self.object.currentData()]["Type"]
== "General"
and self.mode.currentData() == "人工排查"
):
@@ -484,7 +484,7 @@ class DispatchCenter(QWidget):
TaskManager.add_task(
f"{self.mode.currentText()}_主调度台",
"自定义队列",
{"Queue": {"Member_1": self.object.currentData()}},
{"Queue": {"Script_0": self.object.currentData()}},
)
class DispatchInfoCard(HeaderCardWidget):

View File

@@ -40,14 +40,12 @@ from qfluentwidgets import (
)
from PySide6.QtGui import QIcon, QCloseEvent
from PySide6.QtCore import QTimer
from datetime import datetime, timedelta
import shutil
import darkdetect
from app.core import Config, logger, TaskManager, MainTimer, MainInfoBar, SoundPlayer
from app.services import Notify, Crypto, System
from .home import Home
from .member_manager import MemberManager
from .script_manager import ScriptManager
from .plan_manager import PlanManager
from .queue_manager import QueueManager
from .dispatch_center import DispatchCenter
@@ -84,7 +82,7 @@ class AUTO_MAA(MSFluentWindow):
logger.info("正在创建各子窗口", module="主窗口")
self.home = Home(self)
self.plan_manager = PlanManager(self)
self.member_manager = MemberManager(self)
self.script_manager = ScriptManager(self)
self.queue_manager = QueueManager(self)
self.dispatch_center = DispatchCenter(self)
self.history = History(self)
@@ -98,7 +96,7 @@ class AUTO_MAA(MSFluentWindow):
NavigationItemPosition.TOP,
)
self.addSubInterface(
self.member_manager,
self.script_manager,
FluentIcon.ROBOT,
"脚本管理",
FluentIcon.ROBOT,
@@ -190,7 +188,7 @@ class AUTO_MAA(MSFluentWindow):
self.set_min_method()
# 绑定各组件信号
Config.sub_info_changed.connect(self.member_manager.refresh_dashboard)
Config.sub_info_changed.connect(self.script_manager.refresh_dashboard)
Config.power_sign_changed.connect(self.dispatch_center.update_power_sign)
TaskManager.create_gui.connect(self.dispatch_center.add_board)
TaskManager.connect_gui.connect(self.dispatch_center.connect_main_board)
@@ -408,16 +406,16 @@ class AUTO_MAA(MSFluentWindow):
Config.queue_dict["调度队列_1"]["Config"].toDict(),
)
for config in [_ for _ in Config.args.config if _ in Config.member_dict]:
for config in [_ for _ in Config.args.config if _ in Config.script_dict]:
TaskManager.add_task(
"自动代理_新调度台",
"自定义队列",
{"Queue": {"Member_1": config}},
{"Queue": {"Script_0": config}},
)
if not any(
_ in (list(Config.member_dict.keys()) + list(Config.queue_dict.keys()))
_ in (list(Config.script_dict.keys()) + list(Config.queue_dict.keys()))
for _ in Config.args.config
):
@@ -449,11 +447,11 @@ class AUTO_MAA(MSFluentWindow):
Config.queue_dict["调度队列_1"]["Config"].toDict(),
)
elif "脚本_1" in Config.member_dict:
elif "脚本_1" in Config.script_dict:
logger.info("自动添加任务脚本_1", module="主窗口")
TaskManager.add_task(
"自动代理_主调度台", "自定义队列", {"Queue": {"Member_1": "脚本_1"}}
"自动代理_主调度台", "自定义队列", {"Queue": {"Script_0": "脚本_1"}}
)
else:
@@ -471,9 +469,9 @@ class AUTO_MAA(MSFluentWindow):
"""切换界面时任务"""
if index == 1:
self.member_manager.reload_plan_name()
self.script_manager.reload_plan_name()
elif index == 3:
self.queue_manager.reload_member_name()
self.queue_manager.reload_script_name()
elif index == 4:
self.dispatch_center.pivot.setCurrentItem("主调度台")
self.dispatch_center.update_top_bar()

View File

@@ -39,7 +39,7 @@ from qfluentwidgets import (
HeaderCardWidget,
CommandBar,
)
from typing import List
from typing import List, Dict
from app.core import QueueConfig, Config, MainInfoBar, SoundPlayer, logger
from .Widget import (
@@ -251,12 +251,12 @@ class QueueManager(QWidget):
logger.success(f"{name} 右移成功", module="队列管理")
MainInfoBar.push_info_bar("success", "操作成功", f"右移 {name}", 3000)
def reload_member_name(self):
"""刷新调度队列成员"""
def reload_script_name(self):
"""刷新调度队列脚本成员名称"""
# 获取成员列表
member_list = [
["禁用"] + [_ for _ in Config.member_dict.keys()],
# 获取脚本成员列表
script_list = [
["禁用"] + [_ for _ in Config.script_dict.keys()],
["未启用"]
+ [
(
@@ -264,41 +264,12 @@ class QueueManager(QWidget):
if v["Config"].get_name() == ""
else f"{k} - {v["Config"].get_name()}"
)
for k, v in Config.member_dict.items()
for k, v in Config.script_dict.items()
],
]
for script in self.queue_manager.script_list:
script.task.card_Member_1.reLoadOptions(
value=member_list[0], texts=member_list[1]
)
script.task.card_Member_2.reLoadOptions(
value=member_list[0], texts=member_list[1]
)
script.task.card_Member_3.reLoadOptions(
value=member_list[0], texts=member_list[1]
)
script.task.card_Member_4.reLoadOptions(
value=member_list[0], texts=member_list[1]
)
script.task.card_Member_5.reLoadOptions(
value=member_list[0], texts=member_list[1]
)
script.task.card_Member_6.reLoadOptions(
value=member_list[0], texts=member_list[1]
)
script.task.card_Member_7.reLoadOptions(
value=member_list[0], texts=member_list[1]
)
script.task.card_Member_8.reLoadOptions(
value=member_list[0], texts=member_list[1]
)
script.task.card_Member_9.reLoadOptions(
value=member_list[0], texts=member_list[1]
)
script.task.card_Member_10.reLoadOptions(
value=member_list[0], texts=member_list[1]
)
for card in script.task.card_dict.values():
card.reLoadOptions(value=script_list[0], texts=script_list[1])
class QueueSettingBox(QWidget):
@@ -432,11 +403,11 @@ class QueueManager(QWidget):
parent=self,
)
self.card_Enable = SwitchSettingCard(
icon=FluentIcon.HOME,
title="状态",
content="调度队列状态,仅启用时会执行定时任务",
icon=FluentIcon.CHECKBOX,
title="定时运行状态",
content="调度队列定时运行状态,仅启用时会执行定时任务",
qconfig=self.config,
configItem=self.config.queueSet_Enabled,
configItem=self.config.queueSet_TimeEnabled,
parent=self,
)
self.card_AfterAccomplish = ComboBoxSettingCard(
@@ -449,6 +420,7 @@ class QueueManager(QWidget):
"睡眠win系统需禁用休眠",
"休眠",
"关机",
"关机(强制)",
],
qconfig=self.config,
configItem=self.config.queueSet_AfterAccomplish,
@@ -476,107 +448,29 @@ class QueueManager(QWidget):
Layout_2 = QVBoxLayout(widget_2)
Layout = QHBoxLayout()
self.card_Time_0 = TimeEditSettingCard(
icon=FluentIcon.STOP_WATCH,
title="定时 1",
content=None,
qconfig=self.config,
configItem_bool=self.config.time_TimeEnabled_0,
configItem_time=self.config.time_TimeSet_0,
parent=self,
)
self.card_Time_1 = TimeEditSettingCard(
icon=FluentIcon.STOP_WATCH,
title="定时 2",
content=None,
qconfig=self.config,
configItem_bool=self.config.time_TimeEnabled_1,
configItem_time=self.config.time_TimeSet_1,
parent=self,
)
self.card_Time_2 = TimeEditSettingCard(
icon=FluentIcon.STOP_WATCH,
title="定时 3",
content=None,
qconfig=self.config,
configItem_bool=self.config.time_TimeEnabled_2,
configItem_time=self.config.time_TimeSet_2,
parent=self,
)
self.card_Time_3 = TimeEditSettingCard(
icon=FluentIcon.STOP_WATCH,
title="定时 4",
content=None,
qconfig=self.config,
configItem_bool=self.config.time_TimeEnabled_3,
configItem_time=self.config.time_TimeSet_3,
parent=self,
)
self.card_Time_4 = TimeEditSettingCard(
icon=FluentIcon.STOP_WATCH,
title="定时 5",
content=None,
qconfig=self.config,
configItem_bool=self.config.time_TimeEnabled_4,
configItem_time=self.config.time_TimeSet_4,
parent=self,
)
self.card_Time_5 = TimeEditSettingCard(
icon=FluentIcon.STOP_WATCH,
title="定时 6",
content=None,
qconfig=self.config,
configItem_bool=self.config.time_TimeEnabled_5,
configItem_time=self.config.time_TimeSet_5,
parent=self,
)
self.card_Time_6 = TimeEditSettingCard(
icon=FluentIcon.STOP_WATCH,
title="定时 7",
content=None,
qconfig=self.config,
configItem_bool=self.config.time_TimeEnabled_6,
configItem_time=self.config.time_TimeSet_6,
parent=self,
)
self.card_Time_7 = TimeEditSettingCard(
icon=FluentIcon.STOP_WATCH,
title="定时 8",
content=None,
qconfig=self.config,
configItem_bool=self.config.time_TimeEnabled_7,
configItem_time=self.config.time_TimeSet_7,
parent=self,
)
self.card_Time_8 = TimeEditSettingCard(
icon=FluentIcon.STOP_WATCH,
title="定时 9",
content=None,
qconfig=self.config,
configItem_bool=self.config.time_TimeEnabled_8,
configItem_time=self.config.time_TimeSet_8,
parent=self,
)
self.card_Time_9 = TimeEditSettingCard(
icon=FluentIcon.STOP_WATCH,
title="定时 10",
content=None,
qconfig=self.config,
configItem_bool=self.config.time_TimeEnabled_9,
configItem_time=self.config.time_TimeSet_9,
parent=self,
)
self.card_dict: Dict[str, TimeEditSettingCard] = {}
for i in range(10):
self.card_dict[f"Time_{i}"] = TimeEditSettingCard(
icon=FluentIcon.STOP_WATCH,
title=f"定时 {i + 1}",
content=None,
qconfig=self.config,
configItem_bool=self.config.config_item_dict["Time"][
f"Enabled_{i}"
],
configItem_time=self.config.config_item_dict["Time"][
f"Set_{i}"
],
parent=self,
)
if i < 5:
Layout_1.addWidget(self.card_dict[f"Time_{i}"])
else:
Layout_2.addWidget(self.card_dict[f"Time_{i}"])
Layout_1.addWidget(self.card_Time_0)
Layout_1.addWidget(self.card_Time_1)
Layout_1.addWidget(self.card_Time_2)
Layout_1.addWidget(self.card_Time_3)
Layout_1.addWidget(self.card_Time_4)
Layout_2.addWidget(self.card_Time_5)
Layout_2.addWidget(self.card_Time_6)
Layout_2.addWidget(self.card_Time_7)
Layout_2.addWidget(self.card_Time_8)
Layout_2.addWidget(self.card_Time_9)
Layout.addWidget(widget_1)
Layout.addWidget(widget_2)
@@ -590,8 +484,8 @@ class QueueManager(QWidget):
self.setTitle("任务队列")
self.config = config
member_list = [
["禁用"] + [_ for _ in Config.member_dict.keys()],
script_list = [
["禁用"] + [_ for _ in Config.script_dict.keys()],
["未启用"]
+ [
(
@@ -599,121 +493,32 @@ class QueueManager(QWidget):
if v["Config"].get_name() == ""
else f"{k} - {v["Config"].get_name()}"
)
for k, v in Config.member_dict.items()
for k, v in Config.script_dict.items()
],
]
self.card_Member_1 = NoOptionComboBoxSettingCard(
icon=FluentIcon.APPLICATION,
title="任务实例 1",
content="第一个调起的脚本任务实例",
value=member_list[0],
texts=member_list[1],
qconfig=self.config,
configItem=self.config.queue_Member_1,
parent=self,
)
self.card_Member_2 = NoOptionComboBoxSettingCard(
icon=FluentIcon.APPLICATION,
title="任务实例 2",
content="第二个调起的脚本任务实例",
value=member_list[0],
texts=member_list[1],
qconfig=self.config,
configItem=self.config.queue_Member_2,
parent=self,
)
self.card_Member_3 = NoOptionComboBoxSettingCard(
icon=FluentIcon.APPLICATION,
title="任务实例 3",
content="第三个调起的脚本任务实例",
value=member_list[0],
texts=member_list[1],
qconfig=self.config,
configItem=self.config.queue_Member_3,
parent=self,
)
self.card_Member_4 = NoOptionComboBoxSettingCard(
icon=FluentIcon.APPLICATION,
title="任务实例 4",
content="第四个调起的脚本任务实例",
value=member_list[0],
texts=member_list[1],
qconfig=self.config,
configItem=self.config.queue_Member_4,
parent=self,
)
self.card_Member_5 = NoOptionComboBoxSettingCard(
icon=FluentIcon.APPLICATION,
title="任务实例 5",
content="第五个调起的脚本任务实例",
value=member_list[0],
texts=member_list[1],
qconfig=self.config,
configItem=self.config.queue_Member_5,
parent=self,
)
self.card_Member_6 = NoOptionComboBoxSettingCard(
icon=FluentIcon.APPLICATION,
title="任务实例 6",
content="第六个调起的脚本任务实例",
value=member_list[0],
texts=member_list[1],
qconfig=self.config,
configItem=self.config.queue_Member_6,
parent=self,
)
self.card_Member_7 = NoOptionComboBoxSettingCard(
icon=FluentIcon.APPLICATION,
title="任务实例 7",
content="第七个调起的脚本任务实例",
value=member_list[0],
texts=member_list[1],
qconfig=self.config,
configItem=self.config.queue_Member_7,
parent=self,
)
self.card_Member_8 = NoOptionComboBoxSettingCard(
icon=FluentIcon.APPLICATION,
title="任务实例 8",
content="第八个调起的脚本任务实例",
value=member_list[0],
texts=member_list[1],
qconfig=self.config,
configItem=self.config.queue_Member_8,
parent=self,
)
self.card_Member_9 = NoOptionComboBoxSettingCard(
icon=FluentIcon.APPLICATION,
title="任务实例 9",
content="第九个调起的脚本任务实例",
value=member_list[0],
texts=member_list[1],
qconfig=self.config,
configItem=self.config.queue_Member_9,
parent=self,
)
self.card_Member_10 = NoOptionComboBoxSettingCard(
icon=FluentIcon.APPLICATION,
title="任务实例 10",
content="第十个调起的脚本任务实例",
value=member_list[0],
texts=member_list[1],
qconfig=self.config,
configItem=self.config.queue_Member_10,
parent=self,
)
self.card_dict: Dict[
str,
NoOptionComboBoxSettingCard,
] = {}
Layout = QVBoxLayout()
Layout.addWidget(self.card_Member_1)
Layout.addWidget(self.card_Member_2)
Layout.addWidget(self.card_Member_3)
Layout.addWidget(self.card_Member_4)
Layout.addWidget(self.card_Member_5)
Layout.addWidget(self.card_Member_6)
Layout.addWidget(self.card_Member_7)
Layout.addWidget(self.card_Member_8)
Layout.addWidget(self.card_Member_9)
Layout.addWidget(self.card_Member_10)
for i in range(10):
self.card_dict[f"Script_{i}"] = NoOptionComboBoxSettingCard(
icon=FluentIcon.APPLICATION,
title=f"任务实例 {i + 1}",
content=f"{i + 1}个调起的脚本任务实例",
value=script_list[0],
texts=script_list[1],
qconfig=self.config,
configItem=self.config.config_item_dict["Queue"][
f"Script_{i}"
],
parent=self,
)
Layout.addWidget(self.card_dict[f"Script_{i}"])
self.viewLayout.addLayout(Layout)

View File

@@ -99,7 +99,7 @@ from .Widget import (
)
class MemberManager(QWidget):
class ScriptManager(QWidget):
"""脚本管理父界面"""
def __init__(self, parent=None):
@@ -110,22 +110,22 @@ class MemberManager(QWidget):
layout = QVBoxLayout(self)
self.tools = CommandBar()
self.member_manager = self.MemberSettingBox(self)
self.script_manager = self.ScriptSettingBox(self)
# 逐个添加动作
self.tools.addActions(
[
Action(FluentIcon.ADD_TO, "新建脚本实例", triggered=self.add_member),
Action(FluentIcon.ADD_TO, "新建脚本实例", triggered=self.add_script),
Action(
FluentIcon.REMOVE_FROM, "删除脚本实例", triggered=self.del_member
FluentIcon.REMOVE_FROM, "删除脚本实例", triggered=self.del_script
),
]
)
self.tools.addSeparator()
self.tools.addActions(
[
Action(FluentIcon.LEFT_ARROW, "向左移动", triggered=self.left_member),
Action(FluentIcon.RIGHT_ARROW, "向右移动", triggered=self.right_member),
Action(FluentIcon.LEFT_ARROW, "向左移动", triggered=self.left_script),
Action(FluentIcon.RIGHT_ARROW, "向右移动", triggered=self.right_script),
]
)
self.tools.addSeparator()
@@ -133,7 +133,7 @@ class MemberManager(QWidget):
Action(
FluentIcon.DOWNLOAD,
"脚本下载器",
triggered=self.member_downloader,
triggered=self.script_downloader,
)
)
self.tools.addSeparator()
@@ -146,9 +146,9 @@ class MemberManager(QWidget):
self.tools.addAction(self.key)
layout.addWidget(self.tools)
layout.addWidget(self.member_manager)
layout.addWidget(self.script_manager)
def add_member(self):
def add_script(self):
"""添加一个脚本实例"""
choice = ComboBoxMessageBox(
@@ -165,7 +165,7 @@ class MemberManager(QWidget):
if choice.input[0].currentText() == "MAA":
index = len(Config.member_dict) + 1
index = len(Config.script_dict) + 1
# 初始化 MAA 配置
maa_config = MaaConfig()
@@ -178,7 +178,7 @@ class MemberManager(QWidget):
parents=True, exist_ok=True
)
Config.member_dict[f"脚本_{index}"] = {
Config.script_dict[f"脚本_{index}"] = {
"Type": "Maa",
"Path": Config.app_path / f"config/MaaConfig/脚本_{index}",
"Config": maa_config,
@@ -186,10 +186,10 @@ class MemberManager(QWidget):
}
# 添加 MAA 实例设置界面
self.member_manager.add_SettingBox(
index, self.MemberSettingBox.MaaSettingBox
self.script_manager.add_SettingBox(
index, self.ScriptSettingBox.MaaSettingBox
)
self.member_manager.switch_SettingBox(index)
self.script_manager.switch_SettingBox(index)
logger.success(f"MAA实例 脚本_{index} 添加成功", module="脚本管理")
MainInfoBar.push_info_bar(
@@ -199,7 +199,7 @@ class MemberManager(QWidget):
elif choice.input[0].currentText() == "通用":
index = len(Config.member_dict) + 1
index = len(Config.script_dict) + 1
# 初始化通用配置
general_config = GeneralConfig()
@@ -212,7 +212,7 @@ class MemberManager(QWidget):
parents=True, exist_ok=True
)
Config.member_dict[f"脚本_{index}"] = {
Config.script_dict[f"脚本_{index}"] = {
"Type": "General",
"Path": Config.app_path / f"config/GeneralConfig/脚本_{index}",
"Config": general_config,
@@ -220,10 +220,10 @@ class MemberManager(QWidget):
}
# 添加通用实例设置界面
self.member_manager.add_SettingBox(
index, self.MemberSettingBox.GeneralSettingBox
self.script_manager.add_SettingBox(
index, self.ScriptSettingBox.GeneralSettingBox
)
self.member_manager.switch_SettingBox(index)
self.script_manager.switch_SettingBox(index)
logger.success(f"通用实例 脚本_{index} 添加成功", module="脚本管理")
MainInfoBar.push_info_bar(
@@ -231,10 +231,10 @@ class MemberManager(QWidget):
)
SoundPlayer.play("添加脚本实例")
def del_member(self):
def del_script(self):
"""删除一个脚本实例"""
name = self.member_manager.pivot.currentRouteKey()
name = self.script_manager.pivot.currentRouteKey()
if name is None:
logger.warning("删除脚本实例时未选择脚本实例", module="脚本管理")
@@ -255,19 +255,19 @@ class MemberManager(QWidget):
logger.info(f"正在删除脚本实例: {name}", module="脚本管理")
self.member_manager.clear_SettingBox()
self.script_manager.clear_SettingBox()
# 删除脚本实例的配置文件并同步修改相应配置项
shutil.rmtree(Config.member_dict[name]["Path"])
shutil.rmtree(Config.script_dict[name]["Path"])
Config.change_queue(name, "禁用")
for i in range(int(name[3:]) + 1, len(Config.member_dict) + 1):
if Config.member_dict[f"脚本_{i}"]["Path"].exists():
Config.member_dict[f"脚本_{i}"]["Path"].rename(
Config.member_dict[f"脚本_{i}"]["Path"].with_name(f"脚本_{i-1}")
for i in range(int(name[3:]) + 1, len(Config.script_dict) + 1):
if Config.script_dict[f"脚本_{i}"]["Path"].exists():
Config.script_dict[f"脚本_{i}"]["Path"].rename(
Config.script_dict[f"脚本_{i}"]["Path"].with_name(f"脚本_{i-1}")
)
Config.change_queue(f"脚本_{i}", f"脚本_{i-1}")
self.member_manager.show_SettingBox(max(int(name[3:]) - 1, 1))
self.script_manager.show_SettingBox(max(int(name[3:]) - 1, 1))
logger.success(f"脚本实例 {name} 删除成功", module="脚本管理")
MainInfoBar.push_info_bar(
@@ -275,10 +275,10 @@ class MemberManager(QWidget):
)
SoundPlayer.play("删除脚本实例")
def left_member(self):
def left_script(self):
"""向左移动脚本实例"""
name = self.member_manager.pivot.currentRouteKey()
name = self.script_manager.pivot.currentRouteKey()
if name is None:
logger.warning("向左移动脚本实例时未选择脚本实例", module="脚本管理")
@@ -305,31 +305,31 @@ class MemberManager(QWidget):
logger.info(f"正在向左移动脚本实例: {name}", module="脚本管理")
self.member_manager.clear_SettingBox()
self.script_manager.clear_SettingBox()
# 移动脚本实例配置文件并同步修改配置项
Config.member_dict[name]["Path"].rename(
Config.member_dict[name]["Path"].with_name("脚本_0")
Config.script_dict[name]["Path"].rename(
Config.script_dict[name]["Path"].with_name("脚本_0")
)
Config.change_queue(name, "脚本_0")
Config.member_dict[f"脚本_{index-1}"]["Path"].rename(
Config.member_dict[f"脚本_{index-1}"]["Path"].with_name(name)
Config.script_dict[f"脚本_{index-1}"]["Path"].rename(
Config.script_dict[f"脚本_{index-1}"]["Path"].with_name(name)
)
Config.change_queue(f"脚本_{index-1}", name)
Config.member_dict[name]["Path"].with_name("脚本_0").rename(
Config.member_dict[name]["Path"].with_name(f"脚本_{index-1}")
Config.script_dict[name]["Path"].with_name("脚本_0").rename(
Config.script_dict[name]["Path"].with_name(f"脚本_{index-1}")
)
Config.change_queue("脚本_0", f"脚本_{index-1}")
self.member_manager.show_SettingBox(index - 1)
self.script_manager.show_SettingBox(index - 1)
logger.success(f"脚本实例 {name} 左移成功", module="脚本管理")
MainInfoBar.push_info_bar("success", "操作成功", f"左移脚本实例 {name}", 3000)
def right_member(self):
def right_script(self):
"""向右移动脚本实例"""
name = self.member_manager.pivot.currentRouteKey()
name = self.script_manager.pivot.currentRouteKey()
if name is None:
logger.warning("向右移动脚本实例时未选择脚本实例", module="脚本管理")
@@ -340,7 +340,7 @@ class MemberManager(QWidget):
index = int(name[3:])
if index == len(Config.member_dict):
if index == len(Config.script_dict):
logger.warning("向右移动脚本实例时已到达最右端", module="脚本管理")
MainInfoBar.push_info_bar(
"warning", "已经是最后一个脚本实例", "无法向右移动", 5000
@@ -356,28 +356,28 @@ class MemberManager(QWidget):
logger.info(f"正在向右移动脚本实例: {name}", module="脚本管理")
self.member_manager.clear_SettingBox()
self.script_manager.clear_SettingBox()
# 移动脚本实例配置文件并同步修改配置项
Config.member_dict[name]["Path"].rename(
Config.member_dict[name]["Path"].with_name("脚本_0")
Config.script_dict[name]["Path"].rename(
Config.script_dict[name]["Path"].with_name("脚本_0")
)
Config.change_queue(name, "脚本_0")
Config.member_dict[f"脚本_{index+1}"]["Path"].rename(
Config.member_dict[f"脚本_{index+1}"]["Path"].with_name(name)
Config.script_dict[f"脚本_{index+1}"]["Path"].rename(
Config.script_dict[f"脚本_{index+1}"]["Path"].with_name(name)
)
Config.change_queue(f"脚本_{index+1}", name)
Config.member_dict[name]["Path"].with_name("脚本_0").rename(
Config.member_dict[name]["Path"].with_name(f"脚本_{index+1}")
Config.script_dict[name]["Path"].with_name("脚本_0").rename(
Config.script_dict[name]["Path"].with_name(f"脚本_{index+1}")
)
Config.change_queue("脚本_0", f"脚本_{index+1}")
self.member_manager.show_SettingBox(index + 1)
self.script_manager.show_SettingBox(index + 1)
logger.success(f"脚本实例 {name} 右移成功", module="脚本管理")
MainInfoBar.push_info_bar("success", "操作成功", f"右移脚本实例 {name}", 3000)
def member_downloader(self):
def script_downloader(self):
"""脚本下载器"""
if not Config.get(Config.update_MirrorChyanCDK):
@@ -567,11 +567,11 @@ class MemberManager(QWidget):
]
# 刷新所有脚本实例的计划表名称
for member in self.member_manager.script_list:
for script in self.script_manager.script_list:
if isinstance(member, MemberManager.MemberSettingBox.MaaSettingBox):
if isinstance(script, ScriptManager.ScriptSettingBox.MaaSettingBox):
for user_setting in member.user_setting.user_manager.script_list:
for user_setting in script.user_setting.user_manager.script_list:
user_setting.card_StageMode.comboBox.currentIndexChanged.disconnect(
user_setting.switch_stage_mode
@@ -588,25 +588,25 @@ class MemberManager(QWidget):
def refresh_dashboard(self):
"""刷新所有脚本实例的仪表盘"""
for member in self.member_manager.script_list:
for script in self.script_manager.script_list:
if isinstance(member, MemberManager.MemberSettingBox.MaaSettingBox):
member.user_setting.user_manager.user_dashboard.load_info()
elif isinstance(member, MemberManager.MemberSettingBox.GeneralSettingBox):
member.branch_manager.sub_manager.sub_dashboard.load_info()
if isinstance(script, ScriptManager.ScriptSettingBox.MaaSettingBox):
script.user_setting.user_manager.user_dashboard.load_info()
elif isinstance(script, ScriptManager.ScriptSettingBox.GeneralSettingBox):
script.branch_manager.sub_manager.sub_dashboard.load_info()
def refresh_plan_info(self):
"""刷新所有计划信息"""
for member in self.member_manager.script_list:
for script in self.script_manager.script_list:
if isinstance(member, MemberManager.MemberSettingBox.MaaSettingBox):
if isinstance(script, ScriptManager.ScriptSettingBox.MaaSettingBox):
member.user_setting.user_manager.user_dashboard.load_info()
for user_setting in member.user_setting.user_manager.script_list:
script.user_setting.user_manager.user_dashboard.load_info()
for user_setting in script.user_setting.user_manager.script_list:
user_setting.switch_stage_mode()
class MemberSettingBox(QWidget):
class ScriptSettingBox(QWidget):
"""脚本管理子页面组"""
def __init__(self, parent=None):
@@ -623,8 +623,8 @@ class MemberManager(QWidget):
self.script_list: List[
Union[
MemberManager.MemberSettingBox.MaaSettingBox,
MemberManager.MemberSettingBox.GeneralSettingBox,
ScriptManager.ScriptSettingBox.MaaSettingBox,
ScriptManager.ScriptSettingBox.GeneralSettingBox,
]
] = []
@@ -649,9 +649,9 @@ class MemberManager(QWidget):
:type index: int
"""
Config.search_member()
Config.search_script()
for name, info in Config.member_dict.items():
for name, info in Config.script_dict.items():
if info["Type"] == "Maa":
self.add_SettingBox(int(name[3:]), self.MaaSettingBox)
elif info["Type"] == "General":
@@ -669,10 +669,10 @@ class MemberManager(QWidget):
:type if_chang_pivot: bool
"""
if len(Config.member_dict) == 0:
if len(Config.script_dict) == 0:
return None
if index > len(Config.member_dict):
if index > len(Config.script_dict):
return None
if if_chang_pivot:
@@ -681,14 +681,14 @@ class MemberManager(QWidget):
if isinstance(
self.script_list[index - 1],
MemberManager.MemberSettingBox.MaaSettingBox,
ScriptManager.ScriptSettingBox.MaaSettingBox,
):
self.script_list[index - 1].user_setting.user_manager.switch_SettingBox(
"用户仪表盘"
)
elif isinstance(
self.script_list[index - 1],
MemberManager.MemberSettingBox.GeneralSettingBox,
ScriptManager.ScriptSettingBox.GeneralSettingBox,
):
self.script_list[
index - 1
@@ -731,7 +731,7 @@ class MemberManager(QWidget):
super().__init__(parent)
self.setObjectName(f"脚本_{uid}")
self.config = Config.member_dict[f"脚本_{uid}"]["Config"]
self.config = Config.script_dict[f"脚本_{uid}"]["Config"]
self.app_setting = self.AppSettingCard(f"脚本_{uid}", self.config, self)
self.user_setting = self.UserManager(f"脚本_{uid}", self)
@@ -834,12 +834,12 @@ class MemberManager(QWidget):
)
return None
(Config.member_dict[self.name]["Path"] / "Default").mkdir(
(Config.script_dict[self.name]["Path"] / "Default").mkdir(
parents=True, exist_ok=True
)
shutil.copy(
Path(folder) / "config/gui.json",
Config.member_dict[self.name]["Path"] / "Default/gui.json",
Config.script_dict[self.name]["Path"] / "Default/gui.json",
)
self.config.set(self.config.MaaSet_Path, folder)
@@ -986,21 +986,21 @@ class MemberManager(QWidget):
def add_user(self):
"""添加一个用户"""
index = len(Config.member_dict[self.name]["UserData"]) + 1
index = len(Config.script_dict[self.name]["UserData"]) + 1
logger.info(f"正在添加 {self.name} 用户_{index}", module="脚本管理")
# 初始化用户配置信息
user_config = MaaUserConfig()
user_config.load(
Config.member_dict[self.name]["Path"]
Config.script_dict[self.name]["Path"]
/ f"UserData/用户_{index}/config.json",
user_config,
)
user_config.save()
Config.member_dict[self.name]["UserData"][f"用户_{index}"] = {
"Path": Config.member_dict[self.name]["Path"]
Config.script_dict[self.name]["UserData"][f"用户_{index}"] = {
"Path": Config.script_dict[self.name]["Path"]
/ f"UserData/用户_{index}",
"Config": user_config,
}
@@ -1053,19 +1053,19 @@ class MemberManager(QWidget):
# 删除用户配置文件并同步修改相应配置项
shutil.rmtree(
Config.member_dict[self.name]["UserData"][name]["Path"]
Config.script_dict[self.name]["UserData"][name]["Path"]
)
for i in range(
int(name[3:]) + 1,
len(Config.member_dict[self.name]["UserData"]) + 1,
len(Config.script_dict[self.name]["UserData"]) + 1,
):
if Config.member_dict[self.name]["UserData"][f"用户_{i}"][
if Config.script_dict[self.name]["UserData"][f"用户_{i}"][
"Path"
].exists():
Config.member_dict[self.name]["UserData"][f"用户_{i}"][
Config.script_dict[self.name]["UserData"][f"用户_{i}"][
"Path"
].rename(
Config.member_dict[self.name]["UserData"][
Config.script_dict[self.name]["UserData"][
f"用户_{i}"
]["Path"].with_name(f"用户_{i-1}")
)
@@ -1121,18 +1121,18 @@ class MemberManager(QWidget):
self.user_manager.clear_SettingBox()
# 移动用户配置文件并同步修改配置项
Config.member_dict[self.name]["UserData"][name]["Path"].rename(
Config.member_dict[self.name]["UserData"][name][
Config.script_dict[self.name]["UserData"][name]["Path"].rename(
Config.script_dict[self.name]["UserData"][name][
"Path"
].with_name("用户_0")
)
Config.member_dict[self.name]["UserData"][f"用户_{index-1}"][
Config.script_dict[self.name]["UserData"][f"用户_{index-1}"][
"Path"
].rename(Config.member_dict[self.name]["UserData"][name]["Path"])
Config.member_dict[self.name]["UserData"][name]["Path"].with_name(
].rename(Config.script_dict[self.name]["UserData"][name]["Path"])
Config.script_dict[self.name]["UserData"][name]["Path"].with_name(
"用户_0"
).rename(
Config.member_dict[self.name]["UserData"][f"用户_{index-1}"][
Config.script_dict[self.name]["UserData"][f"用户_{index-1}"][
"Path"
]
)
@@ -1164,7 +1164,7 @@ class MemberManager(QWidget):
index = int(name[3:])
if index == len(Config.member_dict[self.name]["UserData"]):
if index == len(Config.script_dict[self.name]["UserData"]):
logger.warning("向后移动用户时已到达最右端", module="脚本管理")
MainInfoBar.push_info_bar(
"warning", "已经是最后一个用户", "无法向后移动", 5000
@@ -1182,18 +1182,18 @@ class MemberManager(QWidget):
self.user_manager.clear_SettingBox()
Config.member_dict[self.name]["UserData"][name]["Path"].rename(
Config.member_dict[self.name]["UserData"][name][
Config.script_dict[self.name]["UserData"][name]["Path"].rename(
Config.script_dict[self.name]["UserData"][name][
"Path"
].with_name("用户_0")
)
Config.member_dict[self.name]["UserData"][f"用户_{index+1}"][
Config.script_dict[self.name]["UserData"][f"用户_{index+1}"][
"Path"
].rename(Config.member_dict[self.name]["UserData"][name]["Path"])
Config.member_dict[self.name]["UserData"][name]["Path"].with_name(
].rename(Config.script_dict[self.name]["UserData"][name]["Path"])
Config.script_dict[self.name]["UserData"][name]["Path"].with_name(
"用户_0"
).rename(
Config.member_dict[self.name]["UserData"][f"用户_{index+1}"][
Config.script_dict[self.name]["UserData"][f"用户_{index+1}"][
"Path"
]
)
@@ -1224,7 +1224,7 @@ class MemberManager(QWidget):
)
self.script_list: List[
MemberManager.MemberSettingBox.MaaSettingBox.UserManager.UserSettingBox.UserMemberSettingBox
ScriptManager.ScriptSettingBox.MaaSettingBox.UserManager.UserSettingBox.UserMemberSettingBox
] = []
self.user_dashboard = self.UserDashboard(self.name, self)
@@ -1255,7 +1255,7 @@ class MemberManager(QWidget):
Config.search_maa_user(self.name)
for name in Config.member_dict[self.name]["UserData"].keys():
for name in Config.script_dict[self.name]["UserData"].keys():
self.add_userSettingBox(name[3:])
self.switch_SettingBox(index)
@@ -1272,11 +1272,11 @@ class MemberManager(QWidget):
:type if_change_pivot: bool
"""
if len(Config.member_dict[self.name]["UserData"]) == 0:
if len(Config.script_dict[self.name]["UserData"]) == 0:
index = "用户仪表盘"
if index != "用户仪表盘" and int(index[3:]) > len(
Config.member_dict[self.name]["UserData"]
Config.script_dict[self.name]["UserData"]
):
return None
@@ -1382,7 +1382,7 @@ class MemberManager(QWidget):
module="脚本管理",
)
self.user_data = Config.member_dict[self.name]["UserData"]
self.user_data = Config.script_dict[self.name]["UserData"]
self.dashboard.setRowCount(len(self.user_data))
@@ -1554,10 +1554,10 @@ class MemberManager(QWidget):
self.setObjectName(f"用户_{uid}")
self.setTitle(f"用户 {uid}")
self.name = name
self.config = Config.member_dict[self.name]["UserData"][
self.config = Config.script_dict[self.name]["UserData"][
f"用户_{uid}"
]["Config"]
self.user_path = Config.member_dict[self.name]["UserData"][
self.user_path = Config.script_dict[self.name]["UserData"][
f"用户_{uid}"
]["Path"]
@@ -2350,7 +2350,7 @@ class MemberManager(QWidget):
super().__init__(parent)
self.setObjectName(f"脚本_{uid}")
self.config = Config.member_dict[f"脚本_{uid}"]["Config"]
self.config = Config.script_dict[f"脚本_{uid}"]["Config"]
self.app_setting = self.AppSettingCard(f"脚本_{uid}", self.config, self)
self.branch_manager = self.BranchManager(f"脚本_{uid}", self)
@@ -2804,10 +2804,10 @@ class MemberManager(QWidget):
shutil.copy(
file_path,
Config.member_dict[self.name]["Path"] / "config.json",
Config.script_dict[self.name]["Path"] / "config.json",
)
self.config.load(
Config.member_dict[self.name]["Path"] / "config.json"
Config.script_dict[self.name]["Path"] / "config.json"
)
logger.success(
@@ -2929,13 +2929,13 @@ class MemberManager(QWidget):
return None
with (
Config.member_dict[self.name]["Path"] / "config.json"
Config.script_dict[self.name]["Path"] / "config.json"
).open("w", encoding="utf-8") as file:
json.dump(
config_data, file, ensure_ascii=False, indent=4
)
self.config.load(
Config.member_dict[self.name]["Path"] / "config.json"
Config.script_dict[self.name]["Path"] / "config.json"
)
logger.success(
@@ -3098,7 +3098,7 @@ class MemberManager(QWidget):
def add_sub(self):
"""添加一个配置"""
index = len(Config.member_dict[self.name]["SubData"]) + 1
index = len(Config.script_dict[self.name]["SubData"]) + 1
logger.info(
f"正在添加 {self.name} 的配置_{index}", module="脚本管理"
@@ -3107,14 +3107,14 @@ class MemberManager(QWidget):
# 初始化通用配置
sub_config = GeneralSubConfig()
sub_config.load(
Config.member_dict[self.name]["Path"]
Config.script_dict[self.name]["Path"]
/ f"SubData/配置_{index}/config.json",
sub_config,
)
sub_config.save()
Config.member_dict[self.name]["SubData"][f"配置_{index}"] = {
"Path": Config.member_dict[self.name]["Path"]
Config.script_dict[self.name]["SubData"][f"配置_{index}"] = {
"Path": Config.script_dict[self.name]["Path"]
/ f"SubData/配置_{index}",
"Config": sub_config,
}
@@ -3169,19 +3169,19 @@ class MemberManager(QWidget):
# 删除配置文件并同步到相关配置项
shutil.rmtree(
Config.member_dict[self.name]["SubData"][name]["Path"]
Config.script_dict[self.name]["SubData"][name]["Path"]
)
for i in range(
int(name[3:]) + 1,
len(Config.member_dict[self.name]["SubData"]) + 1,
len(Config.script_dict[self.name]["SubData"]) + 1,
):
if Config.member_dict[self.name]["SubData"][f"配置_{i}"][
if Config.script_dict[self.name]["SubData"][f"配置_{i}"][
"Path"
].exists():
Config.member_dict[self.name]["SubData"][f"配置_{i}"][
Config.script_dict[self.name]["SubData"][f"配置_{i}"][
"Path"
].rename(
Config.member_dict[self.name]["SubData"][
Config.script_dict[self.name]["SubData"][
f"配置_{i}"
]["Path"].with_name(f"配置_{i-1}")
)
@@ -3239,18 +3239,18 @@ class MemberManager(QWidget):
self.sub_manager.clear_SettingBox()
# 移动配置文件并同步到相关配置项
Config.member_dict[self.name]["SubData"][name]["Path"].rename(
Config.member_dict[self.name]["SubData"][name][
Config.script_dict[self.name]["SubData"][name]["Path"].rename(
Config.script_dict[self.name]["SubData"][name][
"Path"
].with_name("配置_0")
)
Config.member_dict[self.name]["SubData"][f"配置_{index-1}"][
Config.script_dict[self.name]["SubData"][f"配置_{index-1}"][
"Path"
].rename(Config.member_dict[self.name]["SubData"][name]["Path"])
Config.member_dict[self.name]["SubData"][name]["Path"].with_name(
].rename(Config.script_dict[self.name]["SubData"][name]["Path"])
Config.script_dict[self.name]["SubData"][name]["Path"].with_name(
"配置_0"
).rename(
Config.member_dict[self.name]["SubData"][f"配置_{index-1}"][
Config.script_dict[self.name]["SubData"][f"配置_{index-1}"][
"Path"
]
)
@@ -3282,7 +3282,7 @@ class MemberManager(QWidget):
index = int(name[3:])
if index == len(Config.member_dict[self.name]["SubData"]):
if index == len(Config.script_dict[self.name]["SubData"]):
logger.warning("向后移动配置时已到达最右端", module="脚本管理")
MainInfoBar.push_info_bar(
"warning", "已经是最后一个配置", "无法向后移动", 5000
@@ -3303,18 +3303,18 @@ class MemberManager(QWidget):
self.sub_manager.clear_SettingBox()
# 移动配置文件并同步到相关配置项
Config.member_dict[self.name]["SubData"][name]["Path"].rename(
Config.member_dict[self.name]["SubData"][name][
Config.script_dict[self.name]["SubData"][name]["Path"].rename(
Config.script_dict[self.name]["SubData"][name][
"Path"
].with_name("配置_0")
)
Config.member_dict[self.name]["SubData"][f"配置_{index+1}"][
Config.script_dict[self.name]["SubData"][f"配置_{index+1}"][
"Path"
].rename(Config.member_dict[self.name]["SubData"][name]["Path"])
Config.member_dict[self.name]["SubData"][name]["Path"].with_name(
].rename(Config.script_dict[self.name]["SubData"][name]["Path"])
Config.script_dict[self.name]["SubData"][name]["Path"].with_name(
"配置_0"
).rename(
Config.member_dict[self.name]["SubData"][f"配置_{index+1}"][
Config.script_dict[self.name]["SubData"][f"配置_{index+1}"][
"Path"
]
)
@@ -3345,7 +3345,7 @@ class MemberManager(QWidget):
)
self.script_list: List[
MemberManager.MemberSettingBox.GeneralSettingBox.BranchManager.SubConfigSettingBox.SubMemberSettingBox
ScriptManager.ScriptSettingBox.GeneralSettingBox.BranchManager.SubConfigSettingBox.SubMemberSettingBox
] = []
self.sub_dashboard = self.SubDashboard(self.name, self)
@@ -3375,7 +3375,7 @@ class MemberManager(QWidget):
Config.search_general_sub(self.name)
for name in Config.member_dict[self.name]["SubData"].keys():
for name in Config.script_dict[self.name]["SubData"].keys():
self.add_SettingBox(name[3:])
self.switch_SettingBox(index)
@@ -3390,11 +3390,11 @@ class MemberManager(QWidget):
:param if_change_pivot: 是否更改 pivot 的当前项
"""
if len(Config.member_dict[self.name]["SubData"]) == 0:
if len(Config.script_dict[self.name]["SubData"]) == 0:
index = "配置仪表盘"
if index != "配置仪表盘" and int(index[3:]) > len(
Config.member_dict[self.name]["SubData"]
Config.script_dict[self.name]["SubData"]
):
return None
@@ -3480,7 +3480,7 @@ class MemberManager(QWidget):
module="脚本管理",
)
self.sub_data = Config.member_dict[self.name]["SubData"]
self.sub_data = Config.script_dict[self.name]["SubData"]
self.dashboard.setRowCount(len(self.sub_data))
@@ -3546,10 +3546,10 @@ class MemberManager(QWidget):
self.setObjectName(f"配置_{uid}")
self.setTitle(f"配置 {uid}")
self.name = name
self.config = Config.member_dict[self.name]["SubData"][
self.config = Config.script_dict[self.name]["SubData"][
f"配置_{uid}"
]["Config"]
self.sub_path = Config.member_dict[self.name]["SubData"][
self.sub_path = Config.script_dict[self.name]["SubData"][
f"配置_{uid}"
]["Path"]

View File

@@ -1,6 +1,11 @@
{
"main_version": "4.4.1.4",
"main_version": "4.4.1.5",
"version_info": {
"4.4.1.5": {
"程序优化": [
"优化调度队列配置逻辑"
]
},
"4.4.1.4": {
"修复BUG": [
"添加强制关机功能并优化关机流程"