feat(core):初步完成主调度自动代理功能开发

This commit is contained in:
DLmaster
2025-01-26 07:58:33 +08:00
parent 7e08c88a3e
commit c625354dec
41 changed files with 1645 additions and 694 deletions

View File

@@ -60,18 +60,16 @@ import shutil
uiLoader = QUiLoader()
from app.core import AppConfig, TaskManager, Task, MainInfoBar
from app.services import Notification
from app.core import Config, Task_manager, Task, MainInfoBar
from app.services import Notify
class DispatchCenter(QWidget):
def __init__(self, config: AppConfig, task_manager: TaskManager, parent=None):
def __init__(self, parent=None):
super().__init__(parent)
self.setObjectName("调度中枢")
self.config = config
self.task_manager = task_manager
self.pivot = Pivot(self)
self.stackedWidget = QStackedWidget(self)
@@ -79,7 +77,7 @@ class DispatchCenter(QWidget):
self.script_list: Dict[str, DispatchBox] = {}
dispatch_box = DispatchBox(self.config, "主调度台", self)
dispatch_box = DispatchBox("主调度台", self)
self.script_list["主调度台"] = dispatch_box
self.stackedWidget.addWidget(self.script_list["主调度台"])
self.pivot.addItem(
@@ -101,10 +99,10 @@ class DispatchCenter(QWidget):
def add_board(self, task: Task) -> None:
"""添加一个调度台界面"""
dispatch_box = DispatchBox(self.config, task.name, self)
dispatch_box = DispatchBox(task.name, self)
dispatch_box.top_bar.button.clicked.connect(
lambda: self.task_manager.stop_task(task.name)
lambda: Task_manager.stop_task(task.name)
)
task.create_task_list.connect(dispatch_box.info.task.create_task)
@@ -128,19 +126,54 @@ class DispatchCenter(QWidget):
self.script_list[name].deleteLater()
self.pivot.removeWidget(name)
def connect_main_board(self, task: Task) -> None:
"""连接主调度台"""
self.script_list["主调度台"].top_bar.button.clicked.disconnect()
self.script_list["主调度台"].top_bar.button.setText("中止任务")
self.script_list["主调度台"].top_bar.button.clicked.connect(
lambda: Task_manager.stop_task(task.name)
)
task.create_task_list.connect(
self.script_list["主调度台"].info.task.create_task
)
task.create_user_list.connect(
self.script_list["主调度台"].info.user.create_user
)
task.update_task_list.connect(
self.script_list["主调度台"].info.task.update_task
)
task.update_user_list.connect(
self.script_list["主调度台"].info.user.update_user
)
task.update_log_text.connect(
self.script_list["主调度台"].info.log_text.text.setText
)
task.accomplish.connect(lambda: self.disconnect_main_board(task.name))
def disconnect_main_board(self, name: str) -> None:
"""断开主调度台"""
self.script_list["主调度台"].top_bar.button.clicked.disconnect()
self.script_list["主调度台"].top_bar.button.setText("开始任务")
self.script_list["主调度台"].top_bar.button.clicked.connect(
self.script_list["主调度台"].top_bar.start_task
)
self.script_list["主调度台"].info.log_text.text.setText(
Config.get_history(name)["History"]
)
def update_top_bar(self):
"""更新顶栏"""
list = []
if (self.config.app_path / "config/QueueConfig").exists():
for json_file in (self.config.app_path / "config/QueueConfig").glob(
"*.json"
):
if (Config.app_path / "config/QueueConfig").exists():
for json_file in (Config.app_path / "config/QueueConfig").glob("*.json"):
list.append(f"队列 - {json_file.stem}")
if (self.config.app_path / "config/MaaConfig").exists():
for subdir in (self.config.app_path / "config/MaaConfig").iterdir():
if (Config.app_path / "config/MaaConfig").exists():
for subdir in (Config.app_path / "config/MaaConfig").iterdir():
if subdir.is_dir():
list.append(f"实例 - Maa - {subdir.name}")
@@ -150,13 +183,11 @@ class DispatchCenter(QWidget):
class DispatchBox(QWidget):
def __init__(self, config: AppConfig, name: str, parent=None):
def __init__(self, name: str, parent=None):
super().__init__(parent)
self.setObjectName(name)
self.config = config
layout = QVBoxLayout()
scrollArea = ScrollArea()
@@ -195,6 +226,7 @@ class DispatchBox(QWidget):
self.mode.setPlaceholderText("请选择调度模式")
self.button = PushButton("开始任务")
self.button.clicked.connect(self.start_task)
Layout.addWidget(self.object)
Layout.addWidget(self.mode)
@@ -210,6 +242,40 @@ class DispatchBox(QWidget):
Layout.addStretch(1)
Layout.addWidget(self.button)
def start_task(self):
"""开始任务"""
if self.object.currentIndex() == -1:
logger.warning("未选择调度对象")
MainInfoBar.push_info_bar(
"warning", "未选择调度对象", "请选择后再开始任务", 5000
)
return None
if self.mode.currentIndex() == -1:
logger.warning("未选择调度模式")
MainInfoBar.push_info_bar(
"warning", "未选择调度模式", "请选择后再开始任务", 5000
)
return None
name = self.object.currentText().split(" - ")[1]
if name in Config.running_list:
logger.warning(f"任务已存在:{name}")
MainInfoBar.push_info_bar("warning", "任务已存在", name, 5000)
return None
if self.object.currentText().split(" - ")[0] == "队列":
with (Config.app_path / f"config/QueueConfig/{name}.json").open(
mode="r", encoding="utf-8"
) as f:
info = json.load(f)
logger.info(f"用户添加任务:{name}")
Task_manager.add_task("主窗口", name, info)
class DispatchInfoCard(HeaderCardWidget):
def __init__(self, parent=None):

View File

@@ -6,9 +6,9 @@ class Main(QWidget):
def __init__(self, config: AppConfig, notify: Notification, crypto: CryptoHandler):
super().__init__()
self.config = config
self.notify = notify
self.crypto = crypto
Config = config
Notify = notify
Crypto = crypto
@@ -23,9 +23,9 @@ class Main(QWidget):
# uiLoader.registerCustomWidget(BodyLabel)
# # 导入ui配置
# self.ui = uiLoader.load(self.config.app_path / "resources/gui/main.ui")
# self.ui = uiLoader.load(Config.app_path / "resources/gui/main.ui")
# self.ui.setWindowIcon(
# QIcon(str(self.config.app_path / "resources/icons/AUTO_MAA.ico"))
# QIcon(str(Config.app_path / "resources/icons/AUTO_MAA.ico"))
# )
# # 初始化控件
@@ -176,12 +176,12 @@ class Main(QWidget):
# self.change_password.clicked.connect(self.change_PASSWORD)
# 初始化线程
self.MaaManager = MaaManager(self.config)
self.MaaManager = MaaManager(Config)
self.MaaManager.question.connect(lambda: self.read("question_runner"))
self.MaaManager.update_gui.connect(self.update_board)
self.MaaManager.update_user_info.connect(self.change_user_info)
self.MaaManager.push_notification.connect(self.notify.push_notification)
self.MaaManager.send_mail.connect(self.notify.send_mail)
self.MaaManager.push_notification.connect(Notify.push_notification)
self.MaaManager.send_mail.connect(Notify.send_mail)
self.MaaManager.accomplish.connect(lambda: self.maa_ender("自动代理_结束"))
self.MaaManager.get_json.connect(self.get_maa_config)
self.MaaManager.set_silence.connect(self.switch_silence)
@@ -198,79 +198,79 @@ class Main(QWidget):
# self.update_config()
# 启动后直接开始代理
if self.config.content["Default"]["SelfSet.IfProxyDirectly"] == "True":
if Config.content["Default"]["SelfSet.IfProxyDirectly"] == "True":
self.maa_starter("自动代理")
# def update_config(self):
# """将self.config中的程序配置同步至GUI界面"""
# """将Config中的程序配置同步至GUI界面"""
# # 阻止GUI程序配置被立即读入程序形成死循环
# self.if_update_config = False
# self.main_tab.setCurrentIndex(
# self.config.content["Default"]["SelfSet.MainIndex"]
# Config.content["Default"]["SelfSet.MainIndex"]
# )
# self.maa_path.setText(str(Path(self.config.content["Default"]["MaaSet.path"])))
# self.routine.setValue(self.config.content["Default"]["TimeLimit.routine"])
# self.maa_path.setText(str(Path(Config.content["Default"]["MaaSet.path"])))
# self.routine.setValue(Config.content["Default"]["TimeLimit.routine"])
# self.annihilation.setValue(
# self.config.content["Default"]["TimeLimit.annihilation"]
# Config.content["Default"]["TimeLimit.annihilation"]
# )
# self.num.setValue(self.config.content["Default"]["TimesLimit.run"])
# self.mail_address.setText(self.config.content["Default"]["SelfSet.MailAddress"])
# self.boss_key.setText(self.config.content["Default"]["SelfSet.BossKey"])
# self.num.setValue(Config.content["Default"]["TimesLimit.run"])
# self.mail_address.setText(Config.content["Default"]["SelfSet.MailAddress"])
# self.boss_key.setText(Config.content["Default"]["SelfSet.BossKey"])
# self.if_self_start.setChecked(
# bool(self.config.content["Default"]["SelfSet.IfSelfStart"] == "True")
# bool(Config.content["Default"]["SelfSet.IfSelfStart"] == "True")
# )
# self.if_sleep.setChecked(
# bool(self.config.content["Default"]["SelfSet.IfAllowSleep"] == "True")
# bool(Config.content["Default"]["SelfSet.IfAllowSleep"] == "True")
# )
# self.if_proxy_directly.setChecked(
# bool(self.config.content["Default"]["SelfSet.IfProxyDirectly"] == "True")
# bool(Config.content["Default"]["SelfSet.IfProxyDirectly"] == "True")
# )
# self.if_send_mail.setChecked(
# bool(self.config.content["Default"]["SelfSet.IfSendMail"] == "True")
# bool(Config.content["Default"]["SelfSet.IfSendMail"] == "True")
# )
# self.mail_address.setVisible(
# bool(self.config.content["Default"]["SelfSet.IfSendMail"] == "True")
# bool(Config.content["Default"]["SelfSet.IfSendMail"] == "True")
# )
# self.if_send_error_only.setChecked(
# bool(
# self.config.content["Default"]["SelfSet.IfSendMail.OnlyError"] == "True"
# Config.content["Default"]["SelfSet.IfSendMail.OnlyError"] == "True"
# )
# )
# self.if_send_error_only.setVisible(
# bool(self.config.content["Default"]["SelfSet.IfSendMail"] == "True")
# bool(Config.content["Default"]["SelfSet.IfSendMail"] == "True")
# )
# self.if_silence.setChecked(
# bool(self.config.content["Default"]["SelfSet.IfSilence"] == "True")
# bool(Config.content["Default"]["SelfSet.IfSilence"] == "True")
# )
# self.boss_key.setVisible(
# bool(self.config.content["Default"]["SelfSet.IfSilence"] == "True")
# bool(Config.content["Default"]["SelfSet.IfSilence"] == "True")
# )
# self.if_to_tray.setChecked(
# bool(self.config.content["Default"]["SelfSet.IfToTray"] == "True")
# bool(Config.content["Default"]["SelfSet.IfToTray"] == "True")
# )
# for i in range(10):
# self.start_time[i][0].setChecked(
# bool(self.config.content["Default"][f"TimeSet.set{i + 1}"] == "True")
# bool(Config.content["Default"][f"TimeSet.set{i + 1}"] == "True")
# )
# time = QtCore.QTime(
# int(self.config.content["Default"][f"TimeSet.run{i + 1}"][:2]),
# int(self.config.content["Default"][f"TimeSet.run{i + 1}"][3:]),
# int(Config.content["Default"][f"TimeSet.run{i + 1}"][:2]),
# int(Config.content["Default"][f"TimeSet.run{i + 1}"][3:]),
# )
# self.start_time[i][1].setTime(time)
# self.if_update_config = True
@@ -281,20 +281,20 @@ class Main(QWidget):
self.update_user_info("normal")
def change_config(self):
"""将GUI中发生修改的程序配置同步至self.config变量"""
"""将GUI中发生修改的程序配置同步至Config变量"""
# 验证能否写入self.config变量
# 验证能否写入Config变量
if not self.if_update_config:
return None
# 验证MAA路径
if Path(self.config.content["Default"]["MaaSet.path"]) != Path(
if Path(Config.content["Default"]["MaaSet.path"]) != Path(
self.maa_path.text()
):
if (Path(self.maa_path.text()) / "MAA.exe").exists() and (
Path(self.maa_path.text()) / "config/gui.json"
).exists():
self.config.content["Default"]["MaaSet.path"] = str(
Config.content["Default"]["MaaSet.path"] = str(
Path(self.maa_path.text())
)
self.get_maa_config(["Default"])
@@ -307,62 +307,62 @@ class Main(QWidget):
if choice.exec():
pass
self.config.content["Default"][
Config.content["Default"][
"SelfSet.MainIndex"
] = self.main_tab.currentIndex()
self.config.content["Default"]["TimeLimit.routine"] = self.routine.value()
self.config.content["Default"][
Config.content["Default"]["TimeLimit.routine"] = self.routine.value()
Config.content["Default"][
"TimeLimit.annihilation"
] = self.annihilation.value()
self.config.content["Default"]["TimesLimit.run"] = self.num.value()
self.config.content["Default"]["SelfSet.MailAddress"] = self.mail_address.text()
self.config.content["Default"]["SelfSet.BossKey"] = self.boss_key.text()
Config.content["Default"]["TimesLimit.run"] = self.num.value()
Config.content["Default"]["SelfSet.MailAddress"] = self.mail_address.text()
Config.content["Default"]["SelfSet.BossKey"] = self.boss_key.text()
if self.if_sleep.isChecked():
self.config.content["Default"]["SelfSet.IfAllowSleep"] = "True"
Config.content["Default"]["SelfSet.IfAllowSleep"] = "True"
else:
self.config.content["Default"]["SelfSet.IfAllowSleep"] = "False"
Config.content["Default"]["SelfSet.IfAllowSleep"] = "False"
if self.if_self_start.isChecked():
self.config.content["Default"]["SelfSet.IfSelfStart"] = "True"
Config.content["Default"]["SelfSet.IfSelfStart"] = "True"
else:
self.config.content["Default"]["SelfSet.IfSelfStart"] = "False"
Config.content["Default"]["SelfSet.IfSelfStart"] = "False"
if self.if_proxy_directly.isChecked():
self.config.content["Default"]["SelfSet.IfProxyDirectly"] = "True"
Config.content["Default"]["SelfSet.IfProxyDirectly"] = "True"
else:
self.config.content["Default"]["SelfSet.IfProxyDirectly"] = "False"
Config.content["Default"]["SelfSet.IfProxyDirectly"] = "False"
if self.if_send_mail.isChecked():
self.config.content["Default"]["SelfSet.IfSendMail"] = "True"
Config.content["Default"]["SelfSet.IfSendMail"] = "True"
else:
self.config.content["Default"]["SelfSet.IfSendMail"] = "False"
Config.content["Default"]["SelfSet.IfSendMail"] = "False"
if self.if_send_error_only.isChecked():
self.config.content["Default"]["SelfSet.IfSendMail.OnlyError"] = "True"
Config.content["Default"]["SelfSet.IfSendMail.OnlyError"] = "True"
else:
self.config.content["Default"]["SelfSet.IfSendMail.OnlyError"] = "False"
Config.content["Default"]["SelfSet.IfSendMail.OnlyError"] = "False"
if self.if_silence.isChecked():
self.config.content["Default"]["SelfSet.IfSilence"] = "True"
Config.content["Default"]["SelfSet.IfSilence"] = "True"
else:
self.config.content["Default"]["SelfSet.IfSilence"] = "False"
Config.content["Default"]["SelfSet.IfSilence"] = "False"
if self.if_to_tray.isChecked():
self.config.content["Default"]["SelfSet.IfToTray"] = "True"
Config.content["Default"]["SelfSet.IfToTray"] = "True"
else:
self.config.content["Default"]["SelfSet.IfToTray"] = "False"
Config.content["Default"]["SelfSet.IfToTray"] = "False"
for i in range(10):
if self.start_time[i][0].isChecked():
self.config.content["Default"][f"TimeSet.set{i + 1}"] = "True"
Config.content["Default"][f"TimeSet.set{i + 1}"] = "True"
else:
self.config.content["Default"][f"TimeSet.set{i + 1}"] = "False"
Config.content["Default"][f"TimeSet.set{i + 1}"] = "False"
time = self.start_time[i][1].getTime().toString("HH:mm")
self.config.content["Default"][f"TimeSet.run{i + 1}"] = time
Config.content["Default"][f"TimeSet.run{i + 1}"] = time
# 将配置信息同步至本地JSON文件
self.config.save_config()
Config.save_config()
# 同步程序配置至GUI
self.update_config()
@@ -374,22 +374,22 @@ class Main(QWidget):
# 获取全局MAA配置文件
if info == ["Default"]:
shutil.copy(
Path(self.config.content["Default"]["MaaSet.path"])
Path(Config.content["Default"]["MaaSet.path"])
/ "config/gui.json",
self.config.app_path / "data/MAAconfig/Default",
Config.app_path / "data/MAAconfig/Default",
)
# 获取基建配置文件
# 获取高级用户MAA配置文件
elif info[2] in ["routine", "annihilation"]:
(
self.config.app_path
Config.app_path
/ f"data/MAAconfig/{self.user_mode_list[info[0]]}/{info[1]}/{info[2]}"
).mkdir(parents=True, exist_ok=True)
shutil.copy(
Path(self.config.content["Default"]["MaaSet.path"])
Path(Config.content["Default"]["MaaSet.path"])
/ "config/gui.json",
self.config.app_path
Config.app_path
/ f"data/MAAconfig/{self.user_mode_list[info[0]]}/{info[1]}/{info[2]}",
)
@@ -425,10 +425,10 @@ class Main(QWidget):
# 检查MAA路径是否可用
if (
not (
Path(self.config.content["Default"]["MaaSet.path"]) / "MAA.exe"
Path(Config.content["Default"]["MaaSet.path"]) / "MAA.exe"
).exists()
and (
Path(self.config.content["Default"]["MaaSet.path"]) / "config/gui.json"
Path(Config.content["Default"]["MaaSet.path"]) / "config/gui.json"
).exists()
):
choice = MessageBox("错误", "您还未正确配置MAA路径", self.ui)
@@ -441,8 +441,8 @@ class Main(QWidget):
# 配置参数
self.MaaManager.mode = mode
self.config.cur.execute("SELECT * FROM adminx WHERE True")
data = self.config.cur.fetchall()
Config.cur.execute("SELECT * FROM adminx WHERE True")
data = Config.cur.fetchall()
self.MaaManager.data = [list(row) for row in data]
# 启动执行线程
@@ -501,8 +501,8 @@ class Main(QWidget):
elif "结束" in mode:
shutil.copy(
self.config.app_path / "data/MAAconfig/Default/gui.json",
Path(self.config.content["Default"]["MaaSet.path"]) / "config",
Config.app_path / "data/MAAconfig/Default/gui.json",
Path(Config.content["Default"]["MaaSet.path"]) / "config",
)
self.user_add.setEnabled(True)
self.user_del.setEnabled(True)

View File

@@ -47,8 +47,8 @@ from qfluentwidgets import (
from PySide6.QtGui import QIcon, QCloseEvent
from PySide6 import QtCore
from app.core import AppConfig, TaskManager, MainTimer, MainInfoBar
from app.services import Notification, CryptoHandler, SystemHandler
from app.core import Config, Task_manager, Main_timer, MainInfoBar
from app.services import Notify, Crypto, System
from .setting import Setting
from .member_manager import MemberManager
from .queue_manager import QueueManager
@@ -57,23 +57,10 @@ from .dispatch_center import DispatchCenter
class AUTO_MAA(MSFluentWindow):
def __init__(
self,
config: AppConfig,
notify: Notification,
crypto: CryptoHandler,
system: SystemHandler,
):
def __init__(self):
super().__init__()
self.config = config
self.notify = notify
self.crypto = crypto
self.system = system
self.setWindowIcon(
QIcon(str(self.config.app_path / "resources/icons/AUTO_MAA.ico"))
)
self.setWindowIcon(QIcon(str(Config.app_path / "resources/icons/AUTO_MAA.ico")))
self.setWindowTitle("AUTO_MAA")
setTheme(Theme.AUTO)
@@ -83,14 +70,11 @@ class AUTO_MAA(MSFluentWindow):
MainInfoBar.parent = self
self.task_manager = TaskManager(self.config, self.notify)
self.main_timer = MainTimer(self.config, self.system, self.task_manager, self)
# 创建主窗口
self.setting = Setting(self.config, self.notify, self.crypto, self.system, self)
self.member_manager = MemberManager(self.config, self.notify, self.crypto, self)
self.queue_manager = QueueManager(self.config, self.notify, self)
self.dispatch_center = DispatchCenter(self.config, self.task_manager, self)
self.setting = Setting(self)
self.member_manager = MemberManager(self)
self.queue_manager = QueueManager(self)
self.dispatch_center = DispatchCenter(self)
self.addSubInterface(
self.setting,
@@ -141,7 +125,7 @@ class AUTO_MAA(MSFluentWindow):
# 创建系统托盘及其菜单
self.tray = QSystemTrayIcon(
QIcon(str(self.config.app_path / "resources/icons/AUTO_MAA.ico")),
QIcon(str(Config.app_path / "resources/icons/AUTO_MAA.ico")),
self,
)
self.tray.setToolTip("AUTO_MAA")
@@ -184,7 +168,8 @@ class AUTO_MAA(MSFluentWindow):
self.tray.setContextMenu(self.tray_menu)
self.tray.activated.connect(self.on_tray_activated)
self.task_manager.create_gui.connect(self.dispatch_center.add_board)
Task_manager.create_gui.connect(self.dispatch_center.add_board)
Task_manager.connect_gui.connect(self.dispatch_center.connect_main_board)
self.setting.ui.card_IfShowTray.checkedChanged.connect(
lambda: self.show_ui("配置托盘")
)
@@ -195,14 +180,16 @@ class AUTO_MAA(MSFluentWindow):
def start_up_task(self) -> None:
"""启动时任务"""
logger.debug(f"{Config.app_path}, {Config.app_path_sys}")
# 加载配置
qconfig.load(self.config.config_path, self.config.global_config)
qconfig.load(Config.config_path, Config.global_config)
# 检查密码
self.setting.check_PASSWORD()
# 检查更新
if self.config.global_config.get(self.config.global_config.update_IfAutoUpdate):
if Config.global_config.get(Config.global_config.update_IfAutoUpdate):
result = self.setting.get_update_info()
if result == "已是最新版本~":
MainInfoBar.push_info_bar("success", "更新检查", result, 3000)
@@ -225,7 +212,7 @@ class AUTO_MAA(MSFluentWindow):
def set_min_method(self) -> None:
"""设置最小化方法"""
if self.config.global_config.get(self.config.global_config.ui_IfToTray):
if Config.global_config.get(Config.global_config.ui_IfToTray):
self.titleBar.minBtn.clicked.disconnect()
self.titleBar.minBtn.clicked.connect(lambda: self.show_ui("隐藏到托盘"))
@@ -243,7 +230,7 @@ class AUTO_MAA(MSFluentWindow):
# def start_task(self, mode):
# """调起对应任务"""
# if self.main.MaaManager.isRunning():
# self.notify.push_notification(
# Notify.push_notification(
# f"无法运行{mode}",
# "当前已有任务正在运行,请在该任务结束后重试",
# "当前已有任务正在运行,请在该任务结束后重试",
@@ -261,14 +248,14 @@ class AUTO_MAA(MSFluentWindow):
# ):
# self.main.maa_ender(f"{self.main.MaaManager.mode}_结束")
# elif "设置MAA" in self.main.MaaManager.mode:
# self.notify.push_notification(
# Notify.push_notification(
# "正在设置MAA",
# "正在运行设置MAA任务无法中止",
# "正在运行设置MAA任务无法中止",
# 3,
# )
# else:
# self.notify.push_notification(
# Notify.push_notification(
# "无任务运行!",
# "当前无任务正在运行,无需中止",
# "当前无任务正在运行,无需中止",
@@ -289,32 +276,28 @@ class AUTO_MAA(MSFluentWindow):
size = list(
map(
int,
self.config.global_config.get(
self.config.global_config.ui_size
).split("x"),
Config.global_config.get(Config.global_config.ui_size).split("x"),
)
)
location = list(
map(
int,
self.config.global_config.get(
self.config.global_config.ui_location
).split("x"),
Config.global_config.get(Config.global_config.ui_location).split(
"x"
),
)
)
self.setGeometry(location[0], location[1], size[0], size[1])
self.show()
if not if_quick:
if self.config.global_config.get(
self.config.global_config.ui_maximized
):
if Config.global_config.get(Config.global_config.ui_maximized):
self.showMaximized()
self.set_min_method()
self.show_ui("配置托盘")
elif mode == "配置托盘":
if self.config.global_config.get(self.config.global_config.ui_IfShowTray):
if Config.global_config.get(Config.global_config.ui_IfShowTray):
self.tray.show()
else:
self.tray.hide()
@@ -324,18 +307,18 @@ class AUTO_MAA(MSFluentWindow):
# 保存窗口相关属性
if not self.isMaximized():
self.config.global_config.set(
self.config.global_config.ui_size,
Config.global_config.set(
Config.global_config.ui_size,
f"{self.geometry().width()}x{self.geometry().height()}",
)
self.config.global_config.set(
self.config.global_config.ui_location,
Config.global_config.set(
Config.global_config.ui_location,
f"{self.geometry().x()}x{self.geometry().y()}",
)
self.config.global_config.set(
self.config.global_config.ui_maximized, self.isMaximized()
Config.global_config.set(
Config.global_config.ui_maximized, self.isMaximized()
)
self.config.global_config.save()
Config.global_config.save()
# 隐藏主窗口
if not if_quick:
@@ -356,6 +339,6 @@ class AUTO_MAA(MSFluentWindow):
# self.main.MaaManager.wait()
# 关闭数据库连接
self.config.close_database()
Config.close_database()
event.accept()

View File

@@ -57,8 +57,8 @@ import datetime
import json
import shutil
from app.core import AppConfig, MaaConfig, MainInfoBar
from app.services import Notification, CryptoHandler
from app.core import Config, MainInfoBar
from app.services import Notify, Crypto
from .Widget import (
InputMessageBox,
LineEditSettingCard,
@@ -71,26 +71,19 @@ class MemberManager(QWidget):
def __init__(
self,
config: AppConfig,
notify: Notification,
crypto: CryptoHandler,
parent=None,
):
super().__init__(parent)
self.setObjectName("脚本管理")
self.config = config
self.notify = notify
self.crypto = crypto
setTheme(Theme.AUTO)
layout = QVBoxLayout(self)
self.tools = CommandBar()
self.member_manager = MemberSettingBox(self.config, self.crypto, self)
self.member_manager = MemberSettingBox(self)
# 逐个添加动作
self.tools.addActions(
@@ -147,14 +140,14 @@ class MemberManager(QWidget):
index = len(self.member_manager.search_member()) + 1
qconfig.load(
self.config.app_path / f"config/MaaConfig/脚本_{index}/config.json",
self.config.maa_config,
Config.app_path / f"config/MaaConfig/脚本_{index}/config.json",
Config.maa_config,
)
self.config.clear_maa_config()
self.config.maa_config.save()
Config.clear_maa_config()
Config.maa_config.save()
self.config.open_database("Maa", f"脚本_{index}")
self.config.init_database("Maa")
Config.open_database("Maa", f"脚本_{index}")
Config.init_database("Maa")
self.member_manager.add_MaaSettingBox(index)
self.member_manager.switch_SettingBox(index)
@@ -181,16 +174,12 @@ class MemberManager(QWidget):
self.member_manager.clear_SettingBox()
shutil.rmtree(self.config.app_path / f"config/{type[0]}Config/{name}")
shutil.rmtree(Config.app_path / f"config/{type[0]}Config/{name}")
self.change_queue(name, "禁用")
for member in move_list:
if (
self.config.app_path / f"config/{member[1]}Config/{member[0]}"
).exists():
(
self.config.app_path / f"config/{member[1]}Config/{member[0]}"
).rename(
self.config.app_path
if (Config.app_path / f"config/{member[1]}Config/{member[0]}").exists():
(Config.app_path / f"config/{member[1]}Config/{member[0]}").rename(
Config.app_path
/ f"config/{member[1]}Config/脚本_{int(member[0][3:])-1}",
)
self.change_queue(member[0], f"脚本_{int(member[0][3:])-1}")
@@ -216,16 +205,16 @@ class MemberManager(QWidget):
self.member_manager.clear_SettingBox()
(self.config.app_path / f"config/{type_right[0]}Config/脚本_{index}").rename(
self.config.app_path / f"config/{type_right[0]}Config/脚本_0"
(Config.app_path / f"config/{type_right[0]}Config/脚本_{index}").rename(
Config.app_path / f"config/{type_right[0]}Config/脚本_0"
)
self.change_queue(f"脚本_{index}", "脚本_0")
(self.config.app_path / f"config/{type_left[0]}Config/脚本_{index-1}").rename(
self.config.app_path / f"config/{type_left[0]}Config/脚本_{index}"
(Config.app_path / f"config/{type_left[0]}Config/脚本_{index-1}").rename(
Config.app_path / f"config/{type_left[0]}Config/脚本_{index}"
)
self.change_queue(f"脚本_{index-1}", f"脚本_{index}")
(self.config.app_path / f"config/{type_right[0]}Config/脚本_0").rename(
self.config.app_path / f"config/{type_right[0]}Config/脚本_{index-1}"
(Config.app_path / f"config/{type_right[0]}Config/脚本_0").rename(
Config.app_path / f"config/{type_right[0]}Config/脚本_{index-1}"
)
self.change_queue("脚本_0", f"脚本_{index-1}")
@@ -250,16 +239,16 @@ class MemberManager(QWidget):
self.member_manager.clear_SettingBox()
(self.config.app_path / f"config/{type_left[0]}Config/脚本_{index}").rename(
self.config.app_path / f"config/{type_left[0]}Config/脚本_0",
(Config.app_path / f"config/{type_left[0]}Config/脚本_{index}").rename(
Config.app_path / f"config/{type_left[0]}Config/脚本_0",
)
self.change_queue(f"脚本_{index}", "脚本_0")
(self.config.app_path / f"config/{type_right[0]}Config/脚本_{index+1}").rename(
self.config.app_path / f"config/{type_right[0]}Config/脚本_{index}",
(Config.app_path / f"config/{type_right[0]}Config/脚本_{index+1}").rename(
Config.app_path / f"config/{type_right[0]}Config/脚本_{index}",
)
self.change_queue(f"脚本_{index+1}", f"脚本_{index}")
(self.config.app_path / f"config/{type_left[0]}Config/脚本_0").rename(
self.config.app_path / f"config/{type_left[0]}Config/脚本_{index+1}",
(Config.app_path / f"config/{type_left[0]}Config/脚本_0").rename(
Config.app_path / f"config/{type_left[0]}Config/脚本_{index+1}",
)
self.change_queue("脚本_0", f"脚本_{index+1}")
@@ -267,7 +256,7 @@ class MemberManager(QWidget):
def show_password(self):
if self.config.PASSWORD == "":
if Config.PASSWORD == "":
choice = InputMessageBox(
self,
"请输入管理密钥",
@@ -275,21 +264,21 @@ class MemberManager(QWidget):
"密码",
)
if choice.exec() and choice.input.text() != "":
self.config.PASSWORD = choice.input.text()
Config.PASSWORD = choice.input.text()
self.member_manager.script_list[
int(self.member_manager.pivot.currentRouteKey()[3:]) - 1
].user_setting.user_list.update_user_info("normal")
self.key.setIcon(FluentIcon.VIEW)
self.key.setChecked(True)
else:
self.config.PASSWORD = ""
Config.PASSWORD = ""
self.member_manager.script_list[
int(self.member_manager.pivot.currentRouteKey()[3:]) - 1
].user_setting.user_list.update_user_info("normal")
self.key.setIcon(FluentIcon.HIDE)
self.key.setChecked(False)
else:
self.config.PASSWORD = ""
Config.PASSWORD = ""
self.member_manager.script_list[
int(self.member_manager.pivot.currentRouteKey()[3:]) - 1
].user_setting.user_list.update_user_info("normal")
@@ -299,10 +288,8 @@ class MemberManager(QWidget):
def change_queue(self, old: str, new: str) -> None:
"""修改调度队列配置文件的队列参数"""
if (self.config.app_path / "config/QueueConfig").exists():
for json_file in (self.config.app_path / "config/QueueConfig").glob(
"*.json"
):
if (Config.app_path / "config/QueueConfig").exists():
for json_file in (Config.app_path / "config/QueueConfig").glob("*.json"):
with json_file.open("r", encoding="utf-8") as f:
data = json.load(f)
@@ -325,12 +312,10 @@ class MemberManager(QWidget):
class MemberSettingBox(QWidget):
def __init__(self, config: AppConfig, crypto: CryptoHandler, parent=None):
def __init__(self, parent=None):
super().__init__(parent)
self.setObjectName("脚本管理")
self.config = config
self.crypto = crypto
self.pivot = Pivot(self)
self.stackedWidget = QStackedWidget(self)
@@ -354,16 +339,16 @@ class MemberSettingBox(QWidget):
member_list = self.search_member()
qconfig.load(
self.config.app_path / "config/临时.json",
self.config.maa_config,
Config.app_path / "config/临时.json",
Config.maa_config,
)
self.config.clear_maa_config()
Config.clear_maa_config()
for member in member_list:
if member[1] == "Maa":
self.config.open_database(member[1], member[0])
Config.open_database(member[1], member[0])
self.add_MaaSettingBox(int(member[0][3:]))
if (self.config.app_path / "config/临时.json").exists():
(self.config.app_path / "config/临时.json").unlink()
if (Config.app_path / "config/临时.json").exists():
(Config.app_path / "config/临时.json").unlink()
self.switch_SettingBox(index)
@@ -381,11 +366,11 @@ class MemberSettingBox(QWidget):
type = [_[1] for _ in member_list if _[0] == f"脚本_{index}"]
qconfig.load(
self.config.app_path
Config.app_path
/ f"config/{type[0]}Config/{self.script_list[index-1].objectName()}/config.json",
self.config.maa_config,
Config.maa_config,
)
self.config.open_database(type[0], self.script_list[index - 1].objectName())
Config.open_database(type[0], self.script_list[index - 1].objectName())
self.script_list[index - 1].user_setting.user_list.update_user_info("normal")
if if_chang_pivot:
@@ -401,18 +386,18 @@ class MemberSettingBox(QWidget):
self.script_list.clear()
self.pivot.clear()
qconfig.load(
self.config.app_path / "config/临时.json",
self.config.maa_config,
Config.app_path / "config/临时.json",
Config.maa_config,
)
self.config.clear_maa_config()
if (self.config.app_path / "config/临时.json").exists():
(self.config.app_path / "config/临时.json").unlink()
self.config.close_database()
Config.clear_maa_config()
if (Config.app_path / "config/临时.json").exists():
(Config.app_path / "config/临时.json").unlink()
Config.close_database()
def add_MaaSettingBox(self, uid: int) -> None:
"""添加一个MAA设置界面"""
maa_setting_box = MaaSettingBox(self.config, self.crypto, uid, self)
maa_setting_box = MaaSettingBox(uid, self)
self.script_list.append(maa_setting_box)
@@ -425,8 +410,8 @@ class MemberSettingBox(QWidget):
member_list = []
if (self.config.app_path / "config/MaaConfig").exists():
for subdir in (self.config.app_path / "config/MaaConfig").iterdir():
if (Config.app_path / "config/MaaConfig").exists():
for subdir in (Config.app_path / "config/MaaConfig").iterdir():
if subdir.is_dir():
member_list.append([subdir.name, "Maa"])
@@ -435,14 +420,11 @@ class MemberSettingBox(QWidget):
class MaaSettingBox(QWidget):
def __init__(self, config: AppConfig, crypto: CryptoHandler, uid: int, parent=None):
def __init__(self, uid: int, parent=None):
super().__init__(parent)
self.setObjectName(f"脚本_{uid}")
self.config = config
self.crypto = crypto
layout = QVBoxLayout()
scrollArea = ScrollArea()
@@ -451,10 +433,8 @@ class MaaSettingBox(QWidget):
content_widget = QWidget()
content_layout = QVBoxLayout(content_widget)
self.app_setting = self.AppSettingCard(self, self.config, uid)
self.user_setting = self.UserSettingCard(
self, self.objectName(), self.config, self.crypto
)
self.app_setting = self.AppSettingCard(self, uid)
self.user_setting = self.UserSettingCard(self, self.objectName())
content_layout.addWidget(self.app_setting)
content_layout.addWidget(self.user_setting)
@@ -468,12 +448,11 @@ class MaaSettingBox(QWidget):
class AppSettingCard(HeaderCardWidget):
def __init__(self, parent=None, config: AppConfig = None, uid: int = None):
def __init__(self, parent=None, uid: int = None):
super().__init__(parent)
self.setTitle("MAA实例")
self.config = config
self.uid = uid
Layout = QVBoxLayout()
@@ -483,13 +462,13 @@ class MaaSettingBox(QWidget):
FluentIcon.EDIT,
"实例名称",
"用于标识MAA实例的名称",
self.config.maa_config.MaaSet_Name,
Config.maa_config.MaaSet_Name,
)
self.card_Path = PushSettingCard(
"选择文件夹",
FluentIcon.FOLDER,
"MAA目录",
self.config.maa_config.get(self.config.maa_config.MaaSet_Path),
Config.maa_config.get(Config.maa_config.MaaSet_Path),
)
self.card_Set = PushSettingCard(
"设置",
@@ -497,12 +476,12 @@ class MaaSettingBox(QWidget):
"MAA全局配置",
"简洁模式下MAA将继承全局配置",
)
self.RunSet = self.RunSetSettingCard(self, self.config.maa_config)
self.RunSet = self.RunSetSettingCard(self)
self.card_Path.clicked.connect(self.PathClicked)
self.config.maa_config.MaaSet_Path.valueChanged.connect(
Config.maa_config.MaaSet_Path.valueChanged.connect(
lambda: self.card_Path.setContent(
self.config.maa_config.get(self.config.maa_config.MaaSet_Path)
Config.maa_config.get(Config.maa_config.MaaSet_Path)
)
)
@@ -518,8 +497,7 @@ class MaaSettingBox(QWidget):
folder = QFileDialog.getExistingDirectory(self, "选择MAA目录", "./")
if (
not folder
or self.config.maa_config.get(self.config.maa_config.MaaSet_Path)
== folder
or Config.maa_config.get(Config.maa_config.MaaSet_Path) == folder
):
logger.warning("选择MAA目录时未选择文件夹或未更改文件夹")
MainInfoBar.push_info_bar(
@@ -536,20 +514,19 @@ class MaaSettingBox(QWidget):
)
return None
(self.config.app_path / f"config/MaaConfig/脚本_{self.uid}/Default").mkdir(
(Config.app_path / f"config/MaaConfig/脚本_{self.uid}/Default").mkdir(
parents=True, exist_ok=True
)
shutil.copy(
Path(folder) / "config/gui.json",
self.config.app_path
/ f"config/MaaConfig/脚本_{self.uid}/Default/gui.json",
Config.app_path / f"config/MaaConfig/脚本_{self.uid}/Default/gui.json",
)
self.config.maa_config.set(self.config.maa_config.MaaSet_Path, folder)
Config.maa_config.set(Config.maa_config.MaaSet_Path, folder)
self.card_Path.setContent(folder)
class RunSetSettingCard(ExpandGroupSettingCard):
def __init__(self, parent=None, maa_config: MaaConfig = None):
def __init__(self, parent=None):
super().__init__(
FluentIcon.SETTING,
"运行",
@@ -557,8 +534,6 @@ class MaaSettingBox(QWidget):
parent,
)
self.maa_config = maa_config
widget = QWidget()
Layout = QVBoxLayout(widget)
@@ -567,7 +542,7 @@ class MaaSettingBox(QWidget):
FluentIcon.PAGE_RIGHT,
"剿灭代理超时限制",
"MAA日志无变化时间超过该阈值视为超时单位为分钟",
self.maa_config.RunSet_AnnihilationTimeLimit,
Config.maa_config.RunSet_AnnihilationTimeLimit,
)
self.RoutineTimeLimit = SpinBoxSettingCard(
@@ -575,7 +550,7 @@ class MaaSettingBox(QWidget):
FluentIcon.PAGE_RIGHT,
"自动代理超时限制",
"MAA日志无变化时间超过该阈值视为超时单位为分钟",
self.maa_config.RunSet_RoutineTimeLimit,
Config.maa_config.RunSet_RoutineTimeLimit,
)
self.RunTimesLimit = SpinBoxSettingCard(
@@ -583,7 +558,7 @@ class MaaSettingBox(QWidget):
FluentIcon.PAGE_RIGHT,
"代理重试次数限制",
"若超过该次数限制仍未完成代理,视为代理失败",
self.maa_config.RunSet_RunTimesLimit,
Config.maa_config.RunSet_RunTimesLimit,
)
Layout.addWidget(self.AnnihilationTimeLimit)
@@ -601,20 +576,16 @@ class MaaSettingBox(QWidget):
self,
parent=None,
name: str = None,
config: AppConfig = None,
crypto: CryptoHandler = None,
):
super().__init__(parent)
self.setTitle("用户列表")
self.config = config
self.crypto = crypto
self.name = name
Layout = QVBoxLayout()
self.user_list = self.UserListBox(self.name, self.config, self.crypto, self)
self.user_list = self.UserListBox(self.name, self)
self.tools = CommandBar()
self.tools.addActions(
@@ -656,8 +627,8 @@ class MaaSettingBox(QWidget):
def set_more(self):
self.config.cur.execute("SELECT * FROM adminx WHERE True")
data = self.config.cur.fetchall()
Config.cur.execute("SELECT * FROM adminx WHERE True")
data = Config.cur.fetchall()
if self.user_list.pivot.currentRouteKey() == f"{self.name}_简洁用户列表":
@@ -685,12 +656,12 @@ class MaaSettingBox(QWidget):
)
if file_path != "":
(
self.config.app_path
Config.app_path
/ f"config/MaaConfig/{self.name}/simple/{choice.input[0].currentIndex()}/infrastructure"
).mkdir(parents=True, exist_ok=True)
shutil.copy(
file_path,
self.config.app_path
Config.app_path
/ f"config/MaaConfig/{self.name}/simple/{choice.input[0].currentIndex()}/infrastructure",
)
else:
@@ -712,13 +683,9 @@ class MaaSettingBox(QWidget):
class UserListBox(QWidget):
def __init__(
self, name: str, config: AppConfig, crypto: CryptoHandler, parent=None
):
def __init__(self, name: str, parent=None):
super().__init__(parent)
self.setObjectName(f"{name}_用户列表")
self.config = config
self.crypto = crypto
self.name = name
@@ -874,8 +841,8 @@ class MaaSettingBox(QWidget):
"""将本地数据库中的用户配置同步至GUI的用户管理界面"""
# 读入本地数据库
self.config.cur.execute("SELECT * FROM adminx WHERE True")
data = self.config.cur.fetchall()
Config.cur.execute("SELECT * FROM adminx WHERE True")
data = Config.cur.fetchall()
# 处理部分模式调整
if operation == "read_only":
@@ -946,15 +913,13 @@ class MaaSettingBox(QWidget):
QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled
)
elif j == 12:
if self.config.PASSWORD == "":
if Config.PASSWORD == "":
item = QTableWidgetItem("******")
item.setFlags(
QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled
)
else:
result = self.crypto.decryptx(
value, self.config.PASSWORD
)
result = Crypto.decryptx(value, Config.PASSWORD)
item = QTableWidgetItem(result)
if result == "管理密钥错误":
item.setFlags(
@@ -1022,15 +987,13 @@ class MaaSettingBox(QWidget):
QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled
)
elif j == 12:
if self.config.PASSWORD == "":
if Config.PASSWORD == "":
item = QTableWidgetItem("******")
item.setFlags(
QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled
)
else:
result = self.crypto.decryptx(
value, self.config.PASSWORD
)
result = Crypto.decryptx(value, Config.PASSWORD)
item = QTableWidgetItem(result)
if result == "管理密钥错误":
item.setFlags(
@@ -1094,9 +1057,7 @@ class MaaSettingBox(QWidget):
if item.column() in [6, 7, 8]: # 关卡号
# 导入与应用特殊关卡规则
games = {}
with self.config.gameid_path.open(
mode="r", encoding="utf-8"
) as f:
with Config.gameid_path.open(mode="r", encoding="utf-8") as f:
gameids = f.readlines()
for line in gameids:
if "" in line:
@@ -1104,11 +1065,11 @@ class MaaSettingBox(QWidget):
games[game_in.strip()] = game_out.strip()
text = games.get(text, text)
if item.column() == 11: # 密码
text = self.crypto.encryptx(text)
text = Crypto.encryptx(text)
# 保存至本地数据库
if text != "":
self.config.cur.execute(
Config.cur.execute(
f"UPDATE adminx SET {self.user_column[self.userlist_simple_index.index(item.column())]} = ? WHERE mode = 'simple' AND uid = ?",
(text, item.row()),
)
@@ -1122,15 +1083,15 @@ class MaaSettingBox(QWidget):
self.update_user_info("normal")
return None
if item.column() == 6: # 密码
text = self.crypto.encryptx(text)
text = Crypto.encryptx(text)
# 保存至本地数据库
if text != "":
self.config.cur.execute(
Config.cur.execute(
f"UPDATE adminx SET {self.user_column[self.userlist_beta_index.index(item.column())]} = ? WHERE mode = 'beta' AND uid = ?",
(text, item.row()),
)
self.config.db.commit()
Config.db.commit()
# 同步一般用户信息更改到GUI
self.update_user_info("normal")
@@ -1156,7 +1117,7 @@ class MaaSettingBox(QWidget):
# or (
# index == 0
# and not (
# self.config.app_path
# Config.app_path
# / f"data/MAAconfig/{self.user_mode_list[index]}/{row}/{column}/gui.json"
# ).exists()
# )
@@ -1173,14 +1134,14 @@ class MaaSettingBox(QWidget):
# 服务器
if mode == 0 and column == "server":
server_list = ["Official", "Bilibili"]
self.config.cur.execute(
Config.cur.execute(
f"UPDATE adminx SET server = ? WHERE mode = 'simple' AND uid = ?",
(server_list[index], row),
)
# 其它(启用/禁用)
elif index in [0, 1]:
index_list = ["y", "n"]
self.config.cur.execute(
Config.cur.execute(
f"UPDATE adminx SET {column} = ? WHERE mode = ? AND uid = ?",
(
index_list[index],
@@ -1188,7 +1149,7 @@ class MaaSettingBox(QWidget):
row,
),
)
self.config.db.commit()
Config.db.commit()
# 同步用户组件信息修改到GUI
self.update_user_info("normal")
@@ -1201,15 +1162,15 @@ class MaaSettingBox(QWidget):
set_book = ["simple", self.user_list_simple.rowCount()]
elif "高级用户列表" in self.pivot.currentRouteKey():
set_book = ["beta", self.user_list_beta.rowCount()]
self.config.cur.execute(
Config.cur.execute(
"INSERT INTO adminx VALUES('新用户','手机号码(官服)/B站IDB服','Official',-1,'y','2000-01-01','1-7','-','-','n','n','n',?,'',0,?,?)",
(
self.crypto.encryptx("未设置"),
Crypto.encryptx("未设置"),
set_book[0],
set_book[1],
),
)
self.config.db.commit(),
Config.db.commit(),
# 同步新用户至GUI
self.update_user_info("normal")
@@ -1248,14 +1209,14 @@ class MaaSettingBox(QWidget):
return None
# 确认待删除用户信息
self.config.cur.execute(
Config.cur.execute(
"SELECT * FROM adminx WHERE mode = ? AND uid = ?",
(
self.user_mode_list[mode],
row,
),
)
data = self.config.cur.fetchall()
data = Config.cur.fetchall()
choice = MessageBox(
"确认",
f"确定要删除用户 {data[0][0]} 吗?",
@@ -1273,26 +1234,26 @@ class MaaSettingBox(QWidget):
# 删除用户
if choice.exec():
# 删除所选用户
self.config.cur.execute(
Config.cur.execute(
"DELETE FROM adminx WHERE mode = ? AND uid = ?",
(
self.user_mode_list[mode],
row,
),
)
self.config.db.commit()
Config.db.commit()
if (
self.config.app_path
Config.app_path
/ f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row}"
).exists():
shutil.rmtree(
self.config.app_path
Config.app_path
/ f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row}"
)
# 后续用户补位
for i in range(row + 1, current_numb):
self.config.cur.execute(
Config.cur.execute(
"UPDATE adminx SET uid = ? WHERE mode = ? AND uid = ?",
(
i - 1,
@@ -1300,16 +1261,16 @@ class MaaSettingBox(QWidget):
i,
),
)
self.config.db.commit()
Config.db.commit()
if (
self.config.app_path
Config.app_path
/ f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{i}"
).exists():
(
self.config.app_path
Config.app_path
/ f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{i}"
).rename(
self.config.app_path
Config.app_path
/ f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{i}"
)
@@ -1350,7 +1311,7 @@ class MaaSettingBox(QWidget):
if row == 0:
return None
self.config.cur.execute(
Config.cur.execute(
"UPDATE adminx SET uid = ? WHERE mode = ? AND uid = ?",
(
-1,
@@ -1358,7 +1319,7 @@ class MaaSettingBox(QWidget):
row,
),
)
self.config.cur.execute(
Config.cur.execute(
"UPDATE adminx SET uid = ? WHERE mode = ? AND uid = ?",
(
row,
@@ -1366,7 +1327,7 @@ class MaaSettingBox(QWidget):
row - 1,
),
)
self.config.cur.execute(
Config.cur.execute(
"UPDATE adminx SET uid = ? WHERE mode = ? AND uid = ?",
(
row - 1,
@@ -1374,39 +1335,39 @@ class MaaSettingBox(QWidget):
-1,
),
)
self.config.db.commit()
Config.db.commit()
if (
self.config.app_path
Config.app_path
/ f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row}"
).exists():
(
self.config.app_path
Config.app_path
/ f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row}"
).rename(
self.config.app_path
Config.app_path
/ f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{-1}"
)
if (
self.config.app_path
Config.app_path
/ f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row - 1}"
).exists():
(
self.config.app_path
Config.app_path
/ f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row - 1}"
).rename(
self.config.app_path
Config.app_path
/ f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row}"
)
if (
self.config.app_path
Config.app_path
/ f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{-1}"
).exists():
(
self.config.app_path
Config.app_path
/ f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{-1}"
).rename(
self.config.app_path
Config.app_path
/ f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row - 1}"
)
@@ -1452,7 +1413,7 @@ class MaaSettingBox(QWidget):
if row == current_numb - 1:
return None
self.config.cur.execute(
Config.cur.execute(
"UPDATE adminx SET uid = ? WHERE mode = ? AND uid = ?",
(
-1,
@@ -1460,7 +1421,7 @@ class MaaSettingBox(QWidget):
row,
),
)
self.config.cur.execute(
Config.cur.execute(
"UPDATE adminx SET uid = ? WHERE mode = ? AND uid = ?",
(
row,
@@ -1468,7 +1429,7 @@ class MaaSettingBox(QWidget):
row + 1,
),
)
self.config.cur.execute(
Config.cur.execute(
"UPDATE adminx SET uid = ? WHERE mode = ? AND uid = ?",
(
row + 1,
@@ -1476,39 +1437,39 @@ class MaaSettingBox(QWidget):
-1,
),
)
self.config.db.commit()
Config.db.commit()
if (
self.config.app_path
Config.app_path
/ f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row}"
).exists():
(
self.config.app_path
Config.app_path
/ f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row}"
).rename(
self.config.app_path
Config.app_path
/ f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{-1}"
)
if (
self.config.app_path
Config.app_path
/ f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row + 1}"
).exists():
(
self.config.app_path
Config.app_path
/ f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row + 1}"
).rename(
self.config.app_path
Config.app_path
/ f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row}"
)
if (
self.config.app_path
Config.app_path
/ f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{-1}"
).exists():
(
self.config.app_path
Config.app_path
/ f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{-1}"
).rename(
self.config.app_path
Config.app_path
/ f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row + 1}"
)
@@ -1550,14 +1511,14 @@ class MaaSettingBox(QWidget):
return None
# 确认待切换用户信息
self.config.cur.execute(
Config.cur.execute(
"SELECT * FROM adminx WHERE mode = ? AND uid = ?",
(
self.user_mode_list[mode],
row,
),
)
data = self.config.cur.fetchall()
data = Config.cur.fetchall()
mode_list = ["简洁", "高级"]
choice = MessageBox(
@@ -1576,15 +1537,15 @@ class MaaSettingBox(QWidget):
# 切换用户
if choice.exec():
self.config.cur.execute("SELECT * FROM adminx WHERE True")
data = self.config.cur.fetchall()
Config.cur.execute("SELECT * FROM adminx WHERE True")
data = Config.cur.fetchall()
if mode == 0:
current_numb = self.user_list_simple.rowCount()
elif mode == 1:
current_numb = self.user_list_beta.rowCount()
# 切换所选用户
other_numb = len(data) - current_numb
self.config.cur.execute(
Config.cur.execute(
"UPDATE adminx SET mode = ?, uid = ? WHERE mode = ? AND uid = ?",
(
self.user_mode_list[1 - mode],
@@ -1593,20 +1554,20 @@ class MaaSettingBox(QWidget):
row,
),
)
self.config.db.commit()
Config.db.commit()
if (
self.config.app_path
Config.app_path
/ f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row}"
).exists():
shutil.move(
self.config.app_path
Config.app_path
/ f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{row}",
self.config.app_path
Config.app_path
/ f"config/MaaConfig/{self.name}/{self.user_mode_list[1 - mode]}/{other_numb}",
)
# 后续用户补位
for i in range(row + 1, current_numb):
self.config.cur.execute(
Config.cur.execute(
"UPDATE adminx SET uid = ? WHERE mode = ? AND uid = ?",
(
i - 1,
@@ -1614,16 +1575,16 @@ class MaaSettingBox(QWidget):
i,
),
)
self.config.db.commit(),
Config.db.commit(),
if (
self.config.app_path
Config.app_path
/ f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{i}"
).exists():
(
self.config.app_path
Config.app_path
/ f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{i}"
).rename(
self.config.app_path
Config.app_path
/ f"config/MaaConfig/{self.name}/{self.user_mode_list[mode]}/{i - 1}"
)

View File

@@ -53,8 +53,8 @@ import shutil
uiLoader = QUiLoader()
from app.core import AppConfig, QueueConfig
from app.services import Notification
from app.core import Config
from app.services import Notify
from .Widget import (
LineEditSettingCard,
TimeEditSettingCard,
@@ -66,24 +66,19 @@ class QueueManager(QWidget):
def __init__(
self,
config: AppConfig,
notify: Notification,
parent=None,
):
super().__init__(parent)
self.setObjectName("调度队列")
self.config = config
self.notify = notify
setTheme(Theme.AUTO)
layout = QVBoxLayout(self)
self.tools = CommandBar()
self.queue_manager = QueueSettingBox(self.config, self)
self.queue_manager = QueueSettingBox(self)
# 逐个添加动作
self.tools.addActions(
@@ -119,11 +114,11 @@ class QueueManager(QWidget):
index = len(self.queue_manager.search_queue()) + 1
qconfig.load(
self.config.app_path / f"config/QueueConfig/调度队列_{index}.json",
self.config.queue_config,
Config.app_path / f"config/QueueConfig/调度队列_{index}.json",
Config.queue_config,
)
self.config.clear_queue_config()
self.config.queue_config.save()
Config.clear_queue_config()
Config.queue_config.save()
self.queue_manager.add_QueueSettingBox(index)
self.queue_manager.switch_SettingBox(index)
@@ -150,15 +145,11 @@ class QueueManager(QWidget):
self.queue_manager.clear_SettingBox()
(self.config.app_path / f"config/QueueConfig/{name}.json").unlink()
(Config.app_path / f"config/QueueConfig/{name}.json").unlink()
for queue in move_list:
if (
self.config.app_path / f"config/QueueConfig/{queue[0]}.json"
).exists():
(
self.config.app_path / f"config/QueueConfig/{queue[0]}.json"
).rename(
self.config.app_path
if (Config.app_path / f"config/QueueConfig/{queue[0]}.json").exists():
(Config.app_path / f"config/QueueConfig/{queue[0]}.json").rename(
Config.app_path
/ f"config/QueueConfig/调度队列_{int(queue[0][5:])-1}.json",
)
@@ -179,15 +170,15 @@ class QueueManager(QWidget):
self.queue_manager.clear_SettingBox()
(self.config.app_path / f"config/QueueConfig/调度队列_{index}.json").rename(
self.config.app_path / f"config/QueueConfig/调度队列_0.json",
(Config.app_path / f"config/QueueConfig/调度队列_{index}.json").rename(
Config.app_path / f"config/QueueConfig/调度队列_0.json",
)
shutil.move(
str(self.config.app_path / f"config/QueueConfig/调度队列_{index-1}.json"),
str(self.config.app_path / f"config/QueueConfig/调度队列_{index}.json"),
str(Config.app_path / f"config/QueueConfig/调度队列_{index-1}.json"),
str(Config.app_path / f"config/QueueConfig/调度队列_{index}.json"),
)
(self.config.app_path / f"config/QueueConfig/调度队列_0.json").rename(
self.config.app_path / f"config/QueueConfig/调度队列_{index-1}.json",
(Config.app_path / f"config/QueueConfig/调度队列_0.json").rename(
Config.app_path / f"config/QueueConfig/调度队列_{index-1}.json",
)
self.queue_manager.show_SettingBox(index - 1)
@@ -208,14 +199,14 @@ class QueueManager(QWidget):
self.queue_manager.clear_SettingBox()
(self.config.app_path / f"config/QueueConfig/调度队列_{index}.json").rename(
self.config.app_path / f"config/QueueConfig/调度队列_0.json",
(Config.app_path / f"config/QueueConfig/调度队列_{index}.json").rename(
Config.app_path / f"config/QueueConfig/调度队列_0.json",
)
(self.config.app_path / f"config/QueueConfig/调度队列_{index+1}.json").rename(
self.config.app_path / f"config/QueueConfig/调度队列_{index}.json",
(Config.app_path / f"config/QueueConfig/调度队列_{index+1}.json").rename(
Config.app_path / f"config/QueueConfig/调度队列_{index}.json",
)
(self.config.app_path / f"config/QueueConfig/调度队列_0.json").rename(
self.config.app_path / f"config/QueueConfig/调度队列_{index+1}.json",
(Config.app_path / f"config/QueueConfig/调度队列_0.json").rename(
Config.app_path / f"config/QueueConfig/调度队列_{index+1}.json",
)
self.queue_manager.show_SettingBox(index + 1)
@@ -233,11 +224,10 @@ class QueueManager(QWidget):
class QueueSettingBox(QWidget):
def __init__(self, config: AppConfig, parent=None):
def __init__(self, parent=None):
super().__init__(parent)
self.setObjectName("调度队列管理")
self.config = config
self.pivot = Pivot(self)
self.stackedWidget = QStackedWidget(self)
@@ -261,14 +251,14 @@ class QueueSettingBox(QWidget):
queue_list = self.search_queue()
qconfig.load(
self.config.app_path / "config/临时.json",
self.config.queue_config,
Config.app_path / "config/临时.json",
Config.queue_config,
)
self.config.clear_queue_config()
Config.clear_queue_config()
for queue in queue_list:
self.add_QueueSettingBox(int(queue[0][5:]))
if (self.config.app_path / "config/临时.json").exists():
(self.config.app_path / "config/临时.json").unlink()
if (Config.app_path / "config/临时.json").exists():
(Config.app_path / "config/临时.json").unlink()
self.switch_SettingBox(index)
@@ -284,9 +274,9 @@ class QueueSettingBox(QWidget):
return None
qconfig.load(
self.config.app_path
Config.app_path
/ f"config/QueueConfig/{self.script_list[index-1].objectName()}.json",
self.config.queue_config,
Config.queue_config,
)
if if_change_pivot:
@@ -302,17 +292,17 @@ class QueueSettingBox(QWidget):
self.script_list.clear()
self.pivot.clear()
qconfig.load(
self.config.app_path / "config/临时.json",
self.config.queue_config,
Config.app_path / "config/临时.json",
Config.queue_config,
)
self.config.clear_queue_config()
if (self.config.app_path / "config/临时.json").exists():
(self.config.app_path / "config/临时.json").unlink()
Config.clear_queue_config()
if (Config.app_path / "config/临时.json").exists():
(Config.app_path / "config/临时.json").unlink()
def add_QueueSettingBox(self, uid: int) -> None:
"""添加一个调度队列设置界面"""
maa_setting_box = QueueMemberSettingBox(self.config, uid, self)
maa_setting_box = QueueMemberSettingBox(uid, self)
self.script_list.append(maa_setting_box)
@@ -325,10 +315,8 @@ class QueueSettingBox(QWidget):
queue_list = []
if (self.config.app_path / "config/QueueConfig").exists():
for json_file in (self.config.app_path / "config/QueueConfig").glob(
"*.json"
):
if (Config.app_path / "config/QueueConfig").exists():
for json_file in (Config.app_path / "config/QueueConfig").glob("*.json"):
with json_file.open("r", encoding="utf-8") as f:
info = json.load(f)
queue_list.append([json_file.stem, info["QueueSet"]["Name"]])
@@ -338,13 +326,11 @@ class QueueSettingBox(QWidget):
class QueueMemberSettingBox(QWidget):
def __init__(self, config: AppConfig, uid: int, parent=None):
def __init__(self, uid: int, parent=None):
super().__init__(parent)
self.setObjectName(f"调度队列_{uid}")
self.config = config
layout = QVBoxLayout()
scrollArea = ScrollArea()
@@ -353,10 +339,10 @@ class QueueMemberSettingBox(QWidget):
content_widget = QWidget()
content_layout = QVBoxLayout(content_widget)
self.queue_set = self.QueueSetSettingCard(self, self.config.queue_config)
self.time = self.TimeSettingCard(self, self.config.queue_config)
self.task = self.TaskSettingCard(self, self.config)
self.history = self.HistoryCard(self, self.config, f"调度队列_{uid}")
self.queue_set = self.QueueSetSettingCard(self)
self.time = self.TimeSettingCard(self)
self.task = self.TaskSettingCard(self)
self.history = self.HistoryCard(self, f"调度队列_{uid}")
content_layout.addWidget(self.queue_set)
content_layout.addWidget(self.time)
@@ -372,13 +358,11 @@ class QueueMemberSettingBox(QWidget):
class QueueSetSettingCard(HeaderCardWidget):
def __init__(self, parent=None, queue_config: QueueConfig = None):
def __init__(self, parent=None):
super().__init__(parent)
self.setTitle("队列设置")
self.queue_config = queue_config
Layout = QVBoxLayout()
self.card_Name = LineEditSettingCard(
@@ -386,13 +370,13 @@ class QueueMemberSettingBox(QWidget):
FluentIcon.EDIT,
"调度队列名称",
"用于标识调度队列的名称",
self.queue_config.queueSet_Name,
Config.queue_config.queueSet_Name,
)
self.card_Enable = SwitchSettingCard(
FluentIcon.HOME,
"状态",
"调度队列状态",
self.queue_config.queueSet_Enabled,
Config.queue_config.queueSet_Enabled,
)
Layout.addWidget(self.card_Name)
@@ -402,13 +386,11 @@ class QueueMemberSettingBox(QWidget):
class TimeSettingCard(HeaderCardWidget):
def __init__(self, parent=None, queue_config: QueueConfig = None):
def __init__(self, parent=None):
super().__init__(parent)
self.setTitle("定时设置")
self.queue_config = queue_config
widget_1 = QWidget()
Layout_1 = QVBoxLayout(widget_1)
widget_2 = QWidget()
@@ -419,71 +401,71 @@ class QueueMemberSettingBox(QWidget):
FluentIcon.STOP_WATCH,
"定时 1",
"",
self.queue_config.time_TimeEnabled_0,
self.queue_config.time_TimeSet_0,
Config.queue_config.time_TimeEnabled_0,
Config.queue_config.time_TimeSet_0,
)
self.card_Time_1 = TimeEditSettingCard(
FluentIcon.STOP_WATCH,
"定时 2",
"",
self.queue_config.time_TimeEnabled_1,
self.queue_config.time_TimeSet_1,
Config.queue_config.time_TimeEnabled_1,
Config.queue_config.time_TimeSet_1,
)
self.card_Time_2 = TimeEditSettingCard(
FluentIcon.STOP_WATCH,
"定时 3",
"",
self.queue_config.time_TimeEnabled_2,
self.queue_config.time_TimeSet_2,
Config.queue_config.time_TimeEnabled_2,
Config.queue_config.time_TimeSet_2,
)
self.card_Time_3 = TimeEditSettingCard(
FluentIcon.STOP_WATCH,
"定时 4",
"",
self.queue_config.time_TimeEnabled_3,
self.queue_config.time_TimeSet_3,
Config.queue_config.time_TimeEnabled_3,
Config.queue_config.time_TimeSet_3,
)
self.card_Time_4 = TimeEditSettingCard(
FluentIcon.STOP_WATCH,
"定时 5",
"",
self.queue_config.time_TimeEnabled_4,
self.queue_config.time_TimeSet_4,
Config.queue_config.time_TimeEnabled_4,
Config.queue_config.time_TimeSet_4,
)
self.card_Time_5 = TimeEditSettingCard(
FluentIcon.STOP_WATCH,
"定时 6",
"",
self.queue_config.time_TimeEnabled_5,
self.queue_config.time_TimeSet_5,
Config.queue_config.time_TimeEnabled_5,
Config.queue_config.time_TimeSet_5,
)
self.card_Time_6 = TimeEditSettingCard(
FluentIcon.STOP_WATCH,
"定时 7",
"",
self.queue_config.time_TimeEnabled_6,
self.queue_config.time_TimeSet_6,
Config.queue_config.time_TimeEnabled_6,
Config.queue_config.time_TimeSet_6,
)
self.card_Time_7 = TimeEditSettingCard(
FluentIcon.STOP_WATCH,
"定时 8",
"",
self.queue_config.time_TimeEnabled_7,
self.queue_config.time_TimeSet_7,
Config.queue_config.time_TimeEnabled_7,
Config.queue_config.time_TimeSet_7,
)
self.card_Time_8 = TimeEditSettingCard(
FluentIcon.STOP_WATCH,
"定时 9",
"",
self.queue_config.time_TimeEnabled_8,
self.queue_config.time_TimeSet_8,
Config.queue_config.time_TimeEnabled_8,
Config.queue_config.time_TimeSet_8,
)
self.card_Time_9 = TimeEditSettingCard(
FluentIcon.STOP_WATCH,
"定时 10",
"",
self.queue_config.time_TimeEnabled_9,
self.queue_config.time_TimeSet_9,
Config.queue_config.time_TimeEnabled_9,
Config.queue_config.time_TimeSet_9,
)
Layout_1.addWidget(self.card_Time_0)
@@ -503,20 +485,17 @@ class QueueMemberSettingBox(QWidget):
class TaskSettingCard(HeaderCardWidget):
def __init__(self, parent=None, config: AppConfig = None):
def __init__(self, parent=None):
super().__init__(parent)
self.setTitle("任务队列")
self.config = config
self.queue_config = config.queue_config
Layout = QVBoxLayout()
member_list = self.search_member()
self.card_Member_1 = NoOptionComboBoxSettingCard(
self.queue_config.queue_Member_1,
Config.queue_config.queue_Member_1,
FluentIcon.APPLICATION,
"任务实例 1",
"第一个调起的脚本任务实例",
@@ -524,7 +503,7 @@ class QueueMemberSettingBox(QWidget):
member_list[1],
)
self.card_Member_2 = NoOptionComboBoxSettingCard(
self.queue_config.queue_Member_2,
Config.queue_config.queue_Member_2,
FluentIcon.APPLICATION,
"任务实例 2",
"第二个调起的脚本任务实例",
@@ -532,7 +511,7 @@ class QueueMemberSettingBox(QWidget):
member_list[1],
)
self.card_Member_3 = NoOptionComboBoxSettingCard(
self.queue_config.queue_Member_3,
Config.queue_config.queue_Member_3,
FluentIcon.APPLICATION,
"任务实例 3",
"第三个调起的脚本任务实例",
@@ -540,7 +519,7 @@ class QueueMemberSettingBox(QWidget):
member_list[1],
)
self.card_Member_4 = NoOptionComboBoxSettingCard(
self.queue_config.queue_Member_4,
Config.queue_config.queue_Member_4,
FluentIcon.APPLICATION,
"任务实例 4",
"第四个调起的脚本任务实例",
@@ -548,7 +527,7 @@ class QueueMemberSettingBox(QWidget):
member_list[1],
)
self.card_Member_5 = NoOptionComboBoxSettingCard(
self.queue_config.queue_Member_5,
Config.queue_config.queue_Member_5,
FluentIcon.APPLICATION,
"任务实例 5",
"第五个调起的脚本任务实例",
@@ -556,7 +535,7 @@ class QueueMemberSettingBox(QWidget):
member_list[1],
)
self.card_Member_6 = NoOptionComboBoxSettingCard(
self.queue_config.queue_Member_6,
Config.queue_config.queue_Member_6,
FluentIcon.APPLICATION,
"任务实例 6",
"第六个调起的脚本任务实例",
@@ -564,7 +543,7 @@ class QueueMemberSettingBox(QWidget):
member_list[1],
)
self.card_Member_7 = NoOptionComboBoxSettingCard(
self.queue_config.queue_Member_7,
Config.queue_config.queue_Member_7,
FluentIcon.APPLICATION,
"任务实例 7",
"第七个调起的脚本任务实例",
@@ -572,7 +551,7 @@ class QueueMemberSettingBox(QWidget):
member_list[1],
)
self.card_Member_8 = NoOptionComboBoxSettingCard(
self.queue_config.queue_Member_8,
Config.queue_config.queue_Member_8,
FluentIcon.APPLICATION,
"任务实例 8",
"第八个调起的脚本任务实例",
@@ -580,7 +559,7 @@ class QueueMemberSettingBox(QWidget):
member_list[1],
)
self.card_Member_9 = NoOptionComboBoxSettingCard(
self.queue_config.queue_Member_9,
Config.queue_config.queue_Member_9,
FluentIcon.APPLICATION,
"任务实例 9",
"第九个调起的脚本任务实例",
@@ -588,7 +567,7 @@ class QueueMemberSettingBox(QWidget):
member_list[1],
)
self.card_Member_10 = NoOptionComboBoxSettingCard(
self.queue_config.queue_Member_10,
Config.queue_config.queue_Member_10,
FluentIcon.APPLICATION,
"任务实例 10",
"第十个调起的脚本任务实例",
@@ -615,8 +594,8 @@ class QueueMemberSettingBox(QWidget):
member_list_name = ["禁用"]
member_list_text = ["未启用"]
if (self.config.app_path / "config/MaaConfig").exists():
for subdir in (self.config.app_path / "config/MaaConfig").iterdir():
if (Config.app_path / "config/MaaConfig").exists():
for subdir in (Config.app_path / "config/MaaConfig").iterdir():
if subdir.is_dir():
member_list_name.append(subdir.name)
with (subdir / "config.json").open("r", encoding="utf-8") as f:
@@ -632,15 +611,13 @@ class QueueMemberSettingBox(QWidget):
class HistoryCard(HeaderCardWidget):
def __init__(self, parent=None, config: AppConfig = None, name: str = None):
def __init__(self, parent=None, name: str = None):
super().__init__(parent)
self.setTitle("历史运行记录")
self.config = config
self.text = TextBrowser()
self.text.setMinimumHeight(300)
history = self.config.get_history(name)
history = Config.get_history(name)
self.text.setPlainText(history["History"])
self.viewLayout.addWidget(self.text)

View File

@@ -51,8 +51,8 @@ import requests
uiLoader = QUiLoader()
from app.core import AppConfig, MainInfoBar
from app.services import Notification, CryptoHandler, SystemHandler
from app.core import Config, MainInfoBar
from app.services import Notify, Crypto, System
from app.utils import Updater, version_text
from .Widget import InputMessageBox, LineEditSettingCard
@@ -61,21 +61,12 @@ class Setting(QWidget):
def __init__(
self,
config: AppConfig,
notify: Notification,
crypto: CryptoHandler,
system: SystemHandler,
parent=None,
):
super().__init__(parent)
self.setObjectName("设置")
self.config = config
self.notify = notify
self.crypto = crypto
self.system = system
setTheme(Theme.AUTO)
layout = QVBoxLayout()
@@ -86,16 +77,16 @@ class Setting(QWidget):
content_widget = QWidget()
content_layout = QVBoxLayout(content_widget)
self.function = FunctionSettingCard(self, self.config)
self.start = StartSettingCard(self, self.config)
self.ui = UiSettingCard(self, self.config)
self.notification = NotifySettingCard(self, self.config)
self.function = FunctionSettingCard(self)
self.start = StartSettingCard(self)
self.ui = UiSettingCard(self)
self.notification = NotifySettingCard(self)
self.security = SecuritySettingCard(self)
self.updater = UpdaterSettingCard(self, self.config)
self.other = OtherSettingCard(self, self.config)
self.updater = UpdaterSettingCard(self)
self.other = OtherSettingCard(self)
self.function.card_IfAllowSleep.checkedChanged.connect(self.system.set_Sleep)
self.start.card_IfSelfStart.checkedChanged.connect(self.system.set_SelfStart)
self.function.card_IfAllowSleep.checkedChanged.connect(System.set_Sleep)
self.start.card_IfSelfStart.checkedChanged.connect(System.set_SelfStart)
self.security.card_changePASSWORD.clicked.connect(self.change_PASSWORD)
self.updater.card_CheckUpdate.clicked.connect(self.get_update)
self.other.card_Tips.clicked.connect(self.show_tips)
@@ -117,7 +108,7 @@ class Setting(QWidget):
def check_PASSWORD(self) -> None:
"""检查并配置管理密钥"""
if self.config.key_path.exists():
if Config.key_path.exists():
return None
while True:
@@ -129,7 +120,7 @@ class Setting(QWidget):
"密码",
)
if choice.exec() and choice.input.text() != "":
self.crypto.get_PASSWORD(choice.input.text())
Crypto.get_PASSWORD(choice.input.text())
break
else:
choice = MessageBox(
@@ -146,8 +137,8 @@ class Setting(QWidget):
"""修改管理密钥"""
# 获取用户信息
self.config.cur.execute("SELECT * FROM adminx WHERE True")
data = self.config.cur.fetchall()
Config.cur.execute("SELECT * FROM adminx WHERE True")
data = Config.cur.fetchall()
if len(data) == 0:
@@ -168,7 +159,7 @@ class Setting(QWidget):
)
if choice.exec() and choice.input.text() != "":
# 修改管理密钥
self.crypto.get_PASSWORD(choice.input.text())
Crypto.get_PASSWORD(choice.input.text())
choice = MessageBox(
"操作成功",
"管理密钥修改成功",
@@ -202,7 +193,7 @@ class Setting(QWidget):
if choice.exec() and choice.input.text() != "":
# 验证旧管理密钥
if self.crypto.check_PASSWORD(choice.input.text()):
if Crypto.check_PASSWORD(choice.input.text()):
PASSWORD_old = choice.input.text()
# 获取新的管理密钥
@@ -217,7 +208,7 @@ class Setting(QWidget):
if choice.exec() and choice.input.text() != "":
# 修改管理密钥
self.crypto.change_PASSWORD(
Crypto.change_PASSWORD(
data, PASSWORD_old, choice.input.text()
)
choice = MessageBox(
@@ -261,7 +252,7 @@ class Setting(QWidget):
"""检查主程序版本更新,返回更新信息"""
# 从本地版本信息文件获取当前版本信息
with self.config.version_path.open(mode="r", encoding="utf-8") as f:
with Config.version_path.open(mode="r", encoding="utf-8") as f:
version_current = json.load(f)
main_version_current = list(
map(int, version_current["main_version"].split("."))
@@ -297,7 +288,7 @@ class Setting(QWidget):
"""检查版本更新,调起文件下载进程"""
# 从本地版本信息文件获取当前版本信息
with self.config.version_path.open(mode="r", encoding="utf-8") as f:
with Config.version_path.open(mode="r", encoding="utf-8") as f:
version_current = json.load(f)
main_version_current = list(
map(int, version_current["main_version"].split("."))
@@ -306,7 +297,7 @@ class Setting(QWidget):
map(int, version_current["updater_version"].split("."))
)
# 检查更新器是否存在
if not (self.config.app_path / "Updater.exe").exists():
if not (Config.app_path / "Updater.exe").exists():
updater_version_current = [0, 0, 0, 0]
# 从远程服务器获取最新版本信息
@@ -369,7 +360,7 @@ class Setting(QWidget):
if updater_version_remote > updater_version_current:
# 创建更新进程
self.updater = Updater(
self.config.app_path,
Config.app_path,
"AUTO_MAA更新器",
main_version_remote,
updater_version_remote,
@@ -392,7 +383,7 @@ class Setting(QWidget):
"""更新主程序"""
subprocess.Popen(
str(self.config.app_path / "Updater.exe"),
str(Config.app_path / "Updater.exe"),
shell=True,
creationflags=subprocess.CREATE_NO_WINDOW,
)
@@ -411,27 +402,25 @@ class Setting(QWidget):
class FunctionSettingCard(HeaderCardWidget):
def __init__(self, parent=None, config: AppConfig = None):
def __init__(self, parent=None):
super().__init__(parent)
self.setTitle("功能")
self.config = config.global_config
Layout = QVBoxLayout()
self.card_IfAllowSleep = SwitchSettingCard(
icon=FluentIcon.PAGE_RIGHT,
title="启动时阻止系统休眠",
content="仅阻止电脑自动休眠,不会影响屏幕是否熄灭",
configItem=self.config.function_IfAllowSleep,
configItem=Config.global_config.function_IfAllowSleep,
)
self.card_IfSilence = SwitchSettingCard(
icon=FluentIcon.PAGE_RIGHT,
title="静默模式",
content="将各代理窗口置于后台运行,减少对前台的干扰",
configItem=self.config.function_IfSilence,
configItem=Config.global_config.function_IfSilence,
)
# 添加各组到设置卡中
@@ -443,27 +432,25 @@ class FunctionSettingCard(HeaderCardWidget):
class StartSettingCard(HeaderCardWidget):
def __init__(self, parent=None, config: AppConfig = None):
def __init__(self, parent=None):
super().__init__(parent)
self.setTitle("启动")
self.config = config.global_config
Layout = QVBoxLayout()
self.card_IfSelfStart = SwitchSettingCard(
icon=FluentIcon.PAGE_RIGHT,
title="开机时自动启动",
content="将AUTO_MAA添加到开机启动项",
configItem=self.config.start_IfSelfStart,
configItem=Config.global_config.start_IfSelfStart,
)
self.card_IfRunDirectly = SwitchSettingCard(
icon=FluentIcon.PAGE_RIGHT,
title="启动后直接运行",
content="启动AUTO_MAA后自动运行任务",
configItem=self.config.start_IfRunDirectly,
configItem=Config.global_config.start_IfRunDirectly,
)
# 添加各组到设置卡中
@@ -477,27 +464,25 @@ class StartSettingCard(HeaderCardWidget):
class UiSettingCard(HeaderCardWidget):
def __init__(self, parent=None, config: AppConfig = None):
def __init__(self, parent=None):
super().__init__(parent)
self.setTitle("界面")
self.config = config.global_config
Layout = QVBoxLayout()
self.card_IfShowTray = SwitchSettingCard(
icon=FluentIcon.PAGE_RIGHT,
title="显示托盘图标",
content="常态显示托盘图标",
configItem=self.config.ui_IfShowTray,
configItem=Config.global_config.ui_IfShowTray,
)
self.card_IfToTray = SwitchSettingCard(
icon=FluentIcon.PAGE_RIGHT,
title="最小化到托盘",
content="最小化时隐藏到托盘",
configItem=self.config.ui_IfToTray,
configItem=Config.global_config.ui_IfToTray,
)
# 添加各组到设置卡中
@@ -509,23 +494,21 @@ class UiSettingCard(HeaderCardWidget):
class NotifySettingCard(HeaderCardWidget):
def __init__(self, parent=None, config: AppConfig = None):
def __init__(self, parent=None):
super().__init__(parent)
self.setTitle("通知")
self.config = config
Layout = QVBoxLayout()
self.card_IfPushPlyer = SwitchSettingCard(
icon=FluentIcon.PAGE_RIGHT,
title="推送系统通知",
content="推送系统级通知,不会在通知中心停留",
configItem=self.config.global_config.notify_IfPushPlyer,
configItem=Config.global_config.notify_IfPushPlyer,
)
self.card_SendMail = self.SendMailSettingCard(self, self.config)
self.card_SendMail = self.SendMailSettingCard(self)
Layout.addWidget(self.card_IfPushPlyer)
Layout.addWidget(self.card_SendMail)
@@ -534,7 +517,7 @@ class NotifySettingCard(HeaderCardWidget):
class SendMailSettingCard(ExpandGroupSettingCard):
def __init__(self, parent=None, config: AppConfig = None):
def __init__(self, parent=None):
super().__init__(
FluentIcon.SETTING,
"推送邮件通知",
@@ -542,8 +525,6 @@ class NotifySettingCard(HeaderCardWidget):
parent,
)
self.config = config.global_config
widget = QWidget()
Layout = QVBoxLayout(widget)
@@ -551,7 +532,7 @@ class NotifySettingCard(HeaderCardWidget):
icon=FluentIcon.PAGE_RIGHT,
title="推送邮件通知",
content="是否启用邮件通知功能",
configItem=self.config.notify_IfSendMail,
configItem=Config.global_config.notify_IfSendMail,
)
self.MailAddress = LineEditSettingCard(
@@ -559,14 +540,14 @@ class NotifySettingCard(HeaderCardWidget):
icon=FluentIcon.PAGE_RIGHT,
title="邮箱地址",
content="接收通知的邮箱地址",
configItem=self.config.notify_MailAddress,
configItem=Config.global_config.notify_MailAddress,
)
self.card_IfSendErrorOnly = SwitchSettingCard(
icon=FluentIcon.PAGE_RIGHT,
title="仅推送异常信息",
content="仅在任务出现异常时推送通知",
configItem=self.config.notify_IfSendErrorOnly,
configItem=Config.global_config.notify_IfSendErrorOnly,
)
Layout.addWidget(self.card_IfSendMail)
@@ -603,20 +584,18 @@ class SecuritySettingCard(HeaderCardWidget):
class UpdaterSettingCard(HeaderCardWidget):
def __init__(self, parent=None, config: AppConfig = None):
def __init__(self, parent=None):
super().__init__(parent)
self.setTitle("更新")
self.config = config.global_config
Layout = QVBoxLayout()
self.card_IfAutoUpdate = SwitchSettingCard(
icon=FluentIcon.PAGE_RIGHT,
title="自动检查更新",
content="将在启动时自动检查AUTO_MAA是否有新版本",
configItem=self.config.update_IfAutoUpdate,
configItem=Config.global_config.update_IfAutoUpdate,
)
self.card_CheckUpdate = PushSettingCard(
@@ -634,13 +613,11 @@ class UpdaterSettingCard(HeaderCardWidget):
class OtherSettingCard(HeaderCardWidget):
def __init__(self, parent=None, config: AppConfig = None):
def __init__(self, parent=None):
super().__init__(parent)
self.setTitle("其他")
self.config = config.global_config
Layout = QVBoxLayout()
self.card_Tips = PushSettingCard(