feat(core): 恢复基本所有原功能,数据文件版本更新
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -36,32 +36,23 @@ from qfluentwidgets import (
|
||||
CardWidget,
|
||||
IconWidget,
|
||||
BodyLabel,
|
||||
qconfig,
|
||||
Pivot,
|
||||
ScrollArea,
|
||||
FluentIcon,
|
||||
MessageBox,
|
||||
HeaderCardWidget,
|
||||
CommandBar,
|
||||
FluentIcon,
|
||||
TextBrowser,
|
||||
ComboBox,
|
||||
setTheme,
|
||||
Theme,
|
||||
SubtitleLabel,
|
||||
PushButton,
|
||||
ElevatedCardWidget,
|
||||
)
|
||||
from PySide6.QtUiTools import QUiLoader
|
||||
from PySide6 import QtCore
|
||||
from PySide6.QtCore import Qt
|
||||
from PySide6.QtGui import QTextCursor
|
||||
from typing import List, Dict
|
||||
import json
|
||||
import shutil
|
||||
|
||||
uiLoader = QUiLoader()
|
||||
|
||||
from app.core import Config, Task_manager, Task, MainInfoBar
|
||||
from app.services import Notify
|
||||
|
||||
|
||||
class DispatchCenter(QWidget):
|
||||
@@ -88,7 +79,7 @@ class DispatchCenter(QWidget):
|
||||
)
|
||||
self.update_top_bar()
|
||||
|
||||
self.Layout.addWidget(self.pivot, 0, QtCore.Qt.AlignHCenter)
|
||||
self.Layout.addWidget(self.pivot, 0, Qt.AlignHCenter)
|
||||
self.Layout.addWidget(self.stackedWidget)
|
||||
self.Layout.setContentsMargins(0, 0, 0, 0)
|
||||
|
||||
@@ -259,7 +250,7 @@ class DispatchBox(QWidget):
|
||||
)
|
||||
return None
|
||||
|
||||
name = self.object.currentText().split(" - ")[1]
|
||||
name = self.object.currentText().split(" - ")[-1]
|
||||
|
||||
if name in Config.running_list:
|
||||
logger.warning(f"任务已存在:{name}")
|
||||
@@ -274,7 +265,18 @@ class DispatchBox(QWidget):
|
||||
info = json.load(f)
|
||||
|
||||
logger.info(f"用户添加任务:{name}")
|
||||
Task_manager.add_task("主窗口", name, info)
|
||||
Task_manager.add_task(f"{self.mode.currentText()}_主窗口", name, info)
|
||||
|
||||
elif self.object.currentText().split(" - ")[0] == "实例":
|
||||
|
||||
if self.object.currentText().split(" - ")[1] == "Maa":
|
||||
|
||||
info = {"Queue": {"Member_1": name}}
|
||||
|
||||
logger.info(f"用户添加任务:{name}")
|
||||
Task_manager.add_task(
|
||||
f"{self.mode.currentText()}_主窗口", "用户自定义队列", info
|
||||
)
|
||||
|
||||
class DispatchInfoCard(HeaderCardWidget):
|
||||
|
||||
@@ -389,6 +391,14 @@ class DispatchBox(QWidget):
|
||||
self.viewLayout.setContentsMargins(3, 0, 3, 3)
|
||||
self.viewLayout.addWidget(self.text)
|
||||
|
||||
self.text.textChanged.connect(self.to_end)
|
||||
|
||||
def to_end(self):
|
||||
"""滚动到底部"""
|
||||
|
||||
self.text.moveCursor(QTextCursor.End)
|
||||
self.text.ensureCursorVisible()
|
||||
|
||||
|
||||
class ItemCard(CardWidget):
|
||||
|
||||
|
||||
539
app/ui/else.py
539
app/ui/else.py
@@ -1,539 +0,0 @@
|
||||
class Main(QWidget):
|
||||
|
||||
ES_CONTINUOUS = 0x80000000
|
||||
ES_SYSTEM_REQUIRED = 0x00000001
|
||||
|
||||
def __init__(self, config: AppConfig, notify: Notification, crypto: CryptoHandler):
|
||||
super().__init__()
|
||||
|
||||
Config = config
|
||||
Notify = notify
|
||||
Crypto = crypto
|
||||
|
||||
|
||||
|
||||
# uiLoader.registerCustomWidget(PushButton)
|
||||
# uiLoader.registerCustomWidget(LineEdit)
|
||||
# uiLoader.registerCustomWidget(TextBrowser)
|
||||
# uiLoader.registerCustomWidget(TableWidget)
|
||||
# uiLoader.registerCustomWidget(TimePicker)
|
||||
# uiLoader.registerCustomWidget(SpinBox)
|
||||
# uiLoader.registerCustomWidget(CheckBox)
|
||||
# uiLoader.registerCustomWidget(HeaderCardWidget)
|
||||
# uiLoader.registerCustomWidget(BodyLabel)
|
||||
|
||||
# # 导入ui配置
|
||||
# self.ui = uiLoader.load(Config.app_path / "resources/gui/main.ui")
|
||||
# self.ui.setWindowIcon(
|
||||
# QIcon(str(Config.app_path / "resources/icons/AUTO_MAA.ico"))
|
||||
# )
|
||||
|
||||
# # 初始化控件
|
||||
# self.main_tab: QTabWidget = self.ui.findChild(QTabWidget, "tabWidget_main")
|
||||
# self.main_tab.currentChanged.connect(self.change_config)
|
||||
|
||||
# self.user_set: QToolBox = self.ui.findChild(QToolBox, "toolBox_userset")
|
||||
# self.user_set.currentChanged.connect(lambda: self.update_user_info("normal"))
|
||||
|
||||
# self.user_list_simple: TableWidget = self.ui.findChild(
|
||||
# TableWidget, "tableWidget_userlist_simple"
|
||||
# )
|
||||
# self.user_list_simple.itemChanged.connect(
|
||||
# lambda item: self.change_user_Item(item, "simple")
|
||||
# )
|
||||
|
||||
# self.user_list_beta: TableWidget = self.ui.findChild(
|
||||
# TableWidget, "tableWidget_userlist_beta"
|
||||
# )
|
||||
# self.user_list_beta.itemChanged.connect(
|
||||
# lambda item: self.change_user_Item(item, "beta")
|
||||
# )
|
||||
|
||||
# self.user_add: PushButton = self.ui.findChild(PushButton, "pushButton_new")
|
||||
# self.user_add.setIcon(FluentIcon.ADD_TO)
|
||||
# self.user_add.clicked.connect(self.add_user)
|
||||
|
||||
# self.user_del: PushButton = self.ui.findChild(PushButton, "pushButton_del")
|
||||
# self.user_del.setIcon(FluentIcon.REMOVE_FROM)
|
||||
# self.user_del.clicked.connect(self.del_user)
|
||||
|
||||
# self.user_switch: PushButton = self.ui.findChild(
|
||||
# PushButton, "pushButton_switch"
|
||||
# )
|
||||
# self.user_switch.setIcon(FluentIcon.MOVE)
|
||||
# self.user_switch.clicked.connect(self.switch_user)
|
||||
|
||||
# self.read_PASSWORD: PushButton = self.ui.findChild(
|
||||
# PushButton, "pushButton_password"
|
||||
# )
|
||||
# self.read_PASSWORD.setIcon(FluentIcon.HIDE)
|
||||
# self.read_PASSWORD.clicked.connect(lambda: self.read("key"))
|
||||
|
||||
# self.refresh: PushButton = self.ui.findChild(PushButton, "pushButton_refresh")
|
||||
# self.refresh.setIcon(FluentIcon.SYNC)
|
||||
# self.refresh.clicked.connect(lambda: self.update_user_info("clear"))
|
||||
|
||||
# self.run_now: PushButton = self.ui.findChild(PushButton, "pushButton_runnow")
|
||||
# self.run_now.setIcon(FluentIcon.PLAY)
|
||||
# self.run_now.clicked.connect(lambda: self.maa_starter("自动代理"))
|
||||
|
||||
# self.check_start: PushButton = self.ui.findChild(
|
||||
# PushButton, "pushButton_checkstart"
|
||||
# )
|
||||
# self.check_start.setIcon(FluentIcon.PLAY)
|
||||
# self.check_start.clicked.connect(lambda: self.maa_starter("人工排查"))
|
||||
|
||||
# self.maa_path: LineEdit = self.ui.findChild(LineEdit, "lineEdit_MAApath")
|
||||
# self.maa_path.textChanged.connect(self.change_config)
|
||||
# self.maa_path.setReadOnly(True)
|
||||
|
||||
# self.get_maa_path: PushButton = self.ui.findChild(
|
||||
# PushButton, "pushButton_getMAApath"
|
||||
# )
|
||||
# self.get_maa_path.setIcon(FluentIcon.FOLDER)
|
||||
# self.get_maa_path.clicked.connect(lambda: self.read("file_path_maa"))
|
||||
|
||||
# self.set_maa: PushButton = self.ui.findChild(PushButton, "pushButton_setMAA")
|
||||
# self.set_maa.setIcon(FluentIcon.SETTING)
|
||||
# self.set_maa.clicked.connect(lambda: self.maa_starter("设置MAA_全局"))
|
||||
|
||||
# self.routine: SpinBox = self.ui.findChild(SpinBox, "spinBox_routine")
|
||||
# self.routine.valueChanged.connect(self.change_config)
|
||||
|
||||
# self.annihilation: SpinBox = self.ui.findChild(SpinBox, "spinBox_annihilation")
|
||||
# self.annihilation.valueChanged.connect(self.change_config)
|
||||
|
||||
# self.num: SpinBox = self.ui.findChild(SpinBox, "spinBox_numt")
|
||||
# self.num.valueChanged.connect(self.change_config)
|
||||
|
||||
# self.if_self_start: CheckBox = self.ui.findChild(
|
||||
# CheckBox, "checkBox_ifselfstart"
|
||||
# )
|
||||
# self.if_self_start.stateChanged.connect(self.change_config)
|
||||
|
||||
# self.if_sleep: CheckBox = self.ui.findChild(CheckBox, "checkBox_IfAllowSleep")
|
||||
# self.if_sleep.stateChanged.connect(self.change_config)
|
||||
|
||||
# self.if_proxy_directly: CheckBox = self.ui.findChild(
|
||||
# CheckBox, "checkBox_ifproxydirectly"
|
||||
# )
|
||||
# self.if_proxy_directly.stateChanged.connect(self.change_config)
|
||||
|
||||
# self.if_send_mail: CheckBox = self.ui.findChild(CheckBox, "checkBox_ifsendmail")
|
||||
# self.if_send_mail.stateChanged.connect(self.change_config)
|
||||
|
||||
# self.mail_address: LineEdit = self.ui.findChild(
|
||||
# LineEdit, "lineEdit_mailaddress"
|
||||
# )
|
||||
# self.mail_address.textChanged.connect(self.change_config)
|
||||
|
||||
# self.if_send_error_only: CheckBox = self.ui.findChild(
|
||||
# CheckBox, "checkBox_ifonlyerror"
|
||||
# )
|
||||
# self.if_send_error_only.stateChanged.connect(self.change_config)
|
||||
|
||||
# self.if_silence: CheckBox = self.ui.findChild(CheckBox, "checkBox_silence")
|
||||
# self.if_silence.stateChanged.connect(self.change_config)
|
||||
|
||||
# self.boss_key: LineEdit = self.ui.findChild(LineEdit, "lineEdit_boss")
|
||||
# self.boss_key.textChanged.connect(self.change_config)
|
||||
|
||||
# self.if_to_tray: CheckBox = self.ui.findChild(CheckBox, "checkBox_iftotray")
|
||||
# self.if_to_tray.stateChanged.connect(self.change_config)
|
||||
|
||||
# self.check_update: PushButton = self.ui.findChild(
|
||||
# PushButton, "pushButton_check_update"
|
||||
# )
|
||||
# self.check_update.setIcon(FluentIcon.UPDATE)
|
||||
# self.check_update.clicked.connect(self.check_version)
|
||||
|
||||
# self.tips: TextBrowser = self.ui.findChild(TextBrowser, "textBrowser_tips")
|
||||
# self.tips.setOpenExternalLinks(True)
|
||||
|
||||
# self.run_text: TextBrowser = self.ui.findChild(TextBrowser, "textBrowser_run")
|
||||
# self.wait_text: TextBrowser = self.ui.findChild(TextBrowser, "textBrowser_wait")
|
||||
# self.over_text: TextBrowser = self.ui.findChild(TextBrowser, "textBrowser_over")
|
||||
# self.error_text: TextBrowser = self.ui.findChild(
|
||||
# TextBrowser, "textBrowser_error"
|
||||
# )
|
||||
# self.log_text: TextBrowser = self.ui.findChild(TextBrowser, "textBrowser_log")
|
||||
|
||||
# self.start_time: List[Tuple[CheckBox, TimePicker]] = []
|
||||
# for i in range(10):
|
||||
# self.start_time.append(
|
||||
# [
|
||||
# self.ui.findChild(CheckBox, f"checkBox_t{i + 1}"),
|
||||
# self.ui.findChild(TimePicker, f"timeEdit_{i + 1}"),
|
||||
# ]
|
||||
# )
|
||||
# self.start_time[i][0].stateChanged.connect(self.change_config)
|
||||
# self.start_time[i][1].timeChanged.connect(self.change_config)
|
||||
|
||||
# self.change_password: PushButton = self.ui.findChild(
|
||||
# PushButton, "pushButton_changePASSWORD"
|
||||
# )
|
||||
# self.change_password.setIcon(FluentIcon.VPN)
|
||||
# self.change_password.clicked.connect(self.change_PASSWORD)
|
||||
|
||||
# 初始化线程
|
||||
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(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)
|
||||
|
||||
# self.last_time = "0000-00-00 00:00"
|
||||
# self.Timer = QtCore.QTimer()
|
||||
# self.Timer.timeout.connect(self.set_theme)
|
||||
# self.Timer.timeout.connect(self.set_system)
|
||||
# self.Timer.timeout.connect(self.timed_start)
|
||||
# self.Timer.start(1000)
|
||||
|
||||
# 载入GUI数据
|
||||
# self.update_user_info("normal")
|
||||
# self.update_config()
|
||||
|
||||
# 启动后直接开始代理
|
||||
if Config.content["Default"]["SelfSet.IfProxyDirectly"] == "True":
|
||||
self.maa_starter("自动代理")
|
||||
|
||||
|
||||
|
||||
# def update_config(self):
|
||||
# """将Config中的程序配置同步至GUI界面"""
|
||||
|
||||
# # 阻止GUI程序配置被立即读入程序形成死循环
|
||||
# self.if_update_config = False
|
||||
|
||||
# self.main_tab.setCurrentIndex(
|
||||
# Config.content["Default"]["SelfSet.MainIndex"]
|
||||
# )
|
||||
|
||||
# self.maa_path.setText(str(Path(Config.content["Default"]["MaaSet.path"])))
|
||||
# self.routine.setValue(Config.content["Default"]["TimeLimit.routine"])
|
||||
# self.annihilation.setValue(
|
||||
# Config.content["Default"]["TimeLimit.annihilation"]
|
||||
# )
|
||||
# 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(Config.content["Default"]["SelfSet.IfSelfStart"] == "True")
|
||||
# )
|
||||
|
||||
# self.if_sleep.setChecked(
|
||||
# bool(Config.content["Default"]["SelfSet.IfAllowSleep"] == "True")
|
||||
# )
|
||||
|
||||
# self.if_proxy_directly.setChecked(
|
||||
# bool(Config.content["Default"]["SelfSet.IfProxyDirectly"] == "True")
|
||||
# )
|
||||
|
||||
# self.if_send_mail.setChecked(
|
||||
# bool(Config.content["Default"]["SelfSet.IfSendMail"] == "True")
|
||||
# )
|
||||
|
||||
# self.mail_address.setVisible(
|
||||
# bool(Config.content["Default"]["SelfSet.IfSendMail"] == "True")
|
||||
# )
|
||||
|
||||
# self.if_send_error_only.setChecked(
|
||||
# bool(
|
||||
# Config.content["Default"]["SelfSet.IfSendMail.OnlyError"] == "True"
|
||||
# )
|
||||
# )
|
||||
|
||||
# self.if_send_error_only.setVisible(
|
||||
# bool(Config.content["Default"]["SelfSet.IfSendMail"] == "True")
|
||||
# )
|
||||
|
||||
# self.if_silence.setChecked(
|
||||
# bool(Config.content["Default"]["SelfSet.IfSilence"] == "True")
|
||||
# )
|
||||
|
||||
# self.boss_key.setVisible(
|
||||
# bool(Config.content["Default"]["SelfSet.IfSilence"] == "True")
|
||||
# )
|
||||
|
||||
# self.if_to_tray.setChecked(
|
||||
# bool(Config.content["Default"]["SelfSet.IfToTray"] == "True")
|
||||
# )
|
||||
|
||||
# for i in range(10):
|
||||
# self.start_time[i][0].setChecked(
|
||||
# bool(Config.content["Default"][f"TimeSet.set{i + 1}"] == "True")
|
||||
# )
|
||||
# time = QtCore.QTime(
|
||||
# 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
|
||||
|
||||
|
||||
|
||||
# 同步用户信息更改至GUI
|
||||
self.update_user_info("normal")
|
||||
|
||||
def change_config(self):
|
||||
"""将GUI中发生修改的程序配置同步至Config变量"""
|
||||
|
||||
# 验证能否写入Config变量
|
||||
if not self.if_update_config:
|
||||
return None
|
||||
|
||||
# 验证MAA路径
|
||||
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():
|
||||
Config.content["Default"]["MaaSet.path"] = str(
|
||||
Path(self.maa_path.text())
|
||||
)
|
||||
self.get_maa_config(["Default"])
|
||||
else:
|
||||
choice = MessageBox(
|
||||
"错误",
|
||||
"该路径下未找到MAA.exe或MAA配置文件,请重新设置MAA路径!",
|
||||
self.ui,
|
||||
)
|
||||
if choice.exec():
|
||||
pass
|
||||
|
||||
Config.content["Default"][
|
||||
"SelfSet.MainIndex"
|
||||
] = self.main_tab.currentIndex()
|
||||
Config.content["Default"]["TimeLimit.routine"] = self.routine.value()
|
||||
Config.content["Default"][
|
||||
"TimeLimit.annihilation"
|
||||
] = self.annihilation.value()
|
||||
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():
|
||||
Config.content["Default"]["SelfSet.IfAllowSleep"] = "True"
|
||||
else:
|
||||
Config.content["Default"]["SelfSet.IfAllowSleep"] = "False"
|
||||
|
||||
if self.if_self_start.isChecked():
|
||||
Config.content["Default"]["SelfSet.IfSelfStart"] = "True"
|
||||
else:
|
||||
Config.content["Default"]["SelfSet.IfSelfStart"] = "False"
|
||||
|
||||
if self.if_proxy_directly.isChecked():
|
||||
Config.content["Default"]["SelfSet.IfProxyDirectly"] = "True"
|
||||
else:
|
||||
Config.content["Default"]["SelfSet.IfProxyDirectly"] = "False"
|
||||
|
||||
if self.if_send_mail.isChecked():
|
||||
Config.content["Default"]["SelfSet.IfSendMail"] = "True"
|
||||
else:
|
||||
Config.content["Default"]["SelfSet.IfSendMail"] = "False"
|
||||
|
||||
if self.if_send_error_only.isChecked():
|
||||
Config.content["Default"]["SelfSet.IfSendMail.OnlyError"] = "True"
|
||||
else:
|
||||
Config.content["Default"]["SelfSet.IfSendMail.OnlyError"] = "False"
|
||||
|
||||
if self.if_silence.isChecked():
|
||||
Config.content["Default"]["SelfSet.IfSilence"] = "True"
|
||||
else:
|
||||
Config.content["Default"]["SelfSet.IfSilence"] = "False"
|
||||
|
||||
if self.if_to_tray.isChecked():
|
||||
Config.content["Default"]["SelfSet.IfToTray"] = "True"
|
||||
else:
|
||||
Config.content["Default"]["SelfSet.IfToTray"] = "False"
|
||||
|
||||
for i in range(10):
|
||||
if self.start_time[i][0].isChecked():
|
||||
Config.content["Default"][f"TimeSet.set{i + 1}"] = "True"
|
||||
else:
|
||||
Config.content["Default"][f"TimeSet.set{i + 1}"] = "False"
|
||||
time = self.start_time[i][1].getTime().toString("HH:mm")
|
||||
Config.content["Default"][f"TimeSet.run{i + 1}"] = time
|
||||
|
||||
# 将配置信息同步至本地JSON文件
|
||||
Config.save_config()
|
||||
|
||||
# 同步程序配置至GUI
|
||||
self.update_config()
|
||||
|
||||
|
||||
def get_maa_config(self, info):
|
||||
"""获取MAA配置文件"""
|
||||
|
||||
# 获取全局MAA配置文件
|
||||
if info == ["Default"]:
|
||||
shutil.copy(
|
||||
Path(Config.content["Default"]["MaaSet.path"])
|
||||
/ "config/gui.json",
|
||||
Config.app_path / "data/MAAconfig/Default",
|
||||
)
|
||||
# 获取基建配置文件
|
||||
|
||||
# 获取高级用户MAA配置文件
|
||||
elif info[2] in ["routine", "annihilation"]:
|
||||
(
|
||||
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(Config.content["Default"]["MaaSet.path"])
|
||||
/ "config/gui.json",
|
||||
Config.app_path
|
||||
/ f"data/MAAconfig/{self.user_mode_list[info[0]]}/{info[1]}/{info[2]}",
|
||||
)
|
||||
|
||||
def set_theme(self):
|
||||
"""手动更新主题色到组件"""
|
||||
|
||||
self.user_list_simple.setStyleSheet("QTableWidget::item {}")
|
||||
self.user_list_beta.setStyleSheet("QTableWidget::item {}")
|
||||
|
||||
|
||||
def switch_silence(self, mode, emulator_path, boss_key):
|
||||
"""切换静默模式"""
|
||||
|
||||
if mode == "启用":
|
||||
self.Timer.timeout.disconnect()
|
||||
self.Timer.timeout.connect(self.set_theme)
|
||||
self.Timer.timeout.connect(self.set_system)
|
||||
self.Timer.timeout.connect(self.timed_start)
|
||||
self.Timer.timeout.connect(
|
||||
lambda: self.set_silence(emulator_path, boss_key)
|
||||
)
|
||||
elif mode == "禁用":
|
||||
self.Timer.timeout.disconnect()
|
||||
self.Timer.timeout.connect(self.set_theme)
|
||||
self.Timer.timeout.connect(self.set_system)
|
||||
self.Timer.timeout.connect(self.timed_start)
|
||||
|
||||
|
||||
|
||||
def maa_starter(self, mode):
|
||||
"""启动MaaManager线程运行任务"""
|
||||
|
||||
# 检查MAA路径是否可用
|
||||
if (
|
||||
not (
|
||||
Path(Config.content["Default"]["MaaSet.path"]) / "MAA.exe"
|
||||
).exists()
|
||||
and (
|
||||
Path(Config.content["Default"]["MaaSet.path"]) / "config/gui.json"
|
||||
).exists()
|
||||
):
|
||||
choice = MessageBox("错误", "您还未正确配置MAA路径!", self.ui)
|
||||
choice.cancelButton.hide()
|
||||
choice.buttonLayout.insertStretch(1)
|
||||
if choice.exec():
|
||||
return None
|
||||
|
||||
self.maa_running_set(f"{mode}_开始")
|
||||
|
||||
# 配置参数
|
||||
self.MaaManager.mode = mode
|
||||
Config.cur.execute("SELECT * FROM adminx WHERE True")
|
||||
data = Config.cur.fetchall()
|
||||
self.MaaManager.data = [list(row) for row in data]
|
||||
|
||||
# 启动执行线程
|
||||
self.MaaManager.start()
|
||||
|
||||
def maa_ender(self, mode):
|
||||
"""中止MAA线程"""
|
||||
|
||||
self.switch_silence("禁用", "", [])
|
||||
|
||||
self.MaaManager.requestInterruption()
|
||||
self.MaaManager.wait()
|
||||
|
||||
self.maa_running_set(mode)
|
||||
|
||||
def maa_running_set(self, mode):
|
||||
"""处理MAA运行过程中的GUI组件变化"""
|
||||
|
||||
if "开始" in mode:
|
||||
|
||||
self.MaaManager.accomplish.disconnect()
|
||||
self.user_add.setEnabled(False)
|
||||
self.user_del.setEnabled(False)
|
||||
self.user_switch.setEnabled(False)
|
||||
self.set_maa.setEnabled(False)
|
||||
|
||||
self.update_user_info("read_only")
|
||||
|
||||
if mode == "自动代理_开始":
|
||||
self.MaaManager.accomplish.connect(
|
||||
lambda: self.maa_ender("自动代理_结束")
|
||||
)
|
||||
self.check_start.setEnabled(False)
|
||||
self.run_now.clicked.disconnect()
|
||||
self.run_now.setText("结束运行")
|
||||
self.run_now.clicked.connect(lambda: self.maa_ender("自动代理_结束"))
|
||||
|
||||
elif mode == "人工排查_开始":
|
||||
self.MaaManager.accomplish.connect(
|
||||
lambda: self.maa_ender("人工排查_结束")
|
||||
)
|
||||
self.run_now.setEnabled(False)
|
||||
self.check_start.clicked.disconnect()
|
||||
self.check_start.setText("中止排查")
|
||||
self.check_start.clicked.connect(
|
||||
lambda: self.maa_ender("人工排查_结束")
|
||||
)
|
||||
|
||||
elif mode == "设置MAA_全局_开始" or mode == "设置MAA_用户_开始":
|
||||
self.MaaManager.accomplish.connect(
|
||||
lambda: self.maa_ender("设置MAA_结束")
|
||||
)
|
||||
self.run_now.setEnabled(False)
|
||||
self.check_start.setEnabled(False)
|
||||
|
||||
elif "结束" in mode:
|
||||
|
||||
shutil.copy(
|
||||
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)
|
||||
self.user_switch.setEnabled(True)
|
||||
self.set_maa.setEnabled(True)
|
||||
|
||||
self.update_user_info("editable")
|
||||
|
||||
if mode == "自动代理_结束":
|
||||
|
||||
self.check_start.setEnabled(True)
|
||||
self.run_now.clicked.disconnect()
|
||||
self.run_now.setText("立即执行")
|
||||
self.run_now.clicked.connect(lambda: self.maa_starter("自动代理"))
|
||||
|
||||
elif mode == "人工排查_结束":
|
||||
|
||||
self.run_now.setEnabled(True)
|
||||
self.check_start.clicked.disconnect()
|
||||
self.check_start.setText("开始排查")
|
||||
self.check_start.clicked.connect(lambda: self.maa_starter("人工排查"))
|
||||
|
||||
elif mode == "设置MAA_结束":
|
||||
|
||||
self.run_now.setEnabled(True)
|
||||
self.check_start.setEnabled(True)
|
||||
|
||||
def server_date(self):
|
||||
"""获取当前的服务器日期"""
|
||||
|
||||
dt = datetime.datetime.now()
|
||||
if dt.time() < datetime.datetime.min.time().replace(hour=4):
|
||||
dt = dt - datetime.timedelta(days=1)
|
||||
return dt.strftime("%Y-%m-%d")
|
||||
@@ -45,7 +45,7 @@ from qfluentwidgets import (
|
||||
qconfig,
|
||||
)
|
||||
from PySide6.QtGui import QIcon, QCloseEvent
|
||||
from PySide6 import QtCore
|
||||
from PySide6.QtCore import Qt
|
||||
|
||||
from app.core import Config, Task_manager, Main_timer, MainInfoBar
|
||||
from app.services import Notify, Crypto, System
|
||||
@@ -180,8 +180,6 @@ class AUTO_MAA(MSFluentWindow):
|
||||
def start_up_task(self) -> None:
|
||||
"""启动时任务"""
|
||||
|
||||
logger.debug(f"{Config.app_path}, {Config.app_path_sys}")
|
||||
|
||||
# 加载配置
|
||||
qconfig.load(Config.config_path, Config.global_config)
|
||||
|
||||
@@ -197,7 +195,7 @@ class AUTO_MAA(MSFluentWindow):
|
||||
info = InfoBar.info(
|
||||
title="更新检查",
|
||||
content=result,
|
||||
orient=QtCore.Qt.Horizontal,
|
||||
orient=Qt.Horizontal,
|
||||
isClosable=True,
|
||||
position=InfoBarPosition.BOTTOM_LEFT,
|
||||
duration=-1,
|
||||
@@ -332,13 +330,14 @@ class AUTO_MAA(MSFluentWindow):
|
||||
self.show_ui("隐藏到托盘", if_quick=True)
|
||||
|
||||
# 清理各功能线程
|
||||
# self.main.Timer.stop()
|
||||
# self.main.Timer.deleteLater()
|
||||
# self.main.MaaManager.requestInterruption()
|
||||
# self.main.MaaManager.quit()
|
||||
# self.main.MaaManager.wait()
|
||||
Main_timer.Timer.stop()
|
||||
Main_timer.Timer.deleteLater()
|
||||
Task_manager.stop_task("ALL")
|
||||
|
||||
# 关闭数据库连接
|
||||
Config.close_database()
|
||||
|
||||
logger.info("AUTO_MAA主程序关闭")
|
||||
logger.info("===================================")
|
||||
|
||||
event.accept()
|
||||
|
||||
@@ -44,12 +44,10 @@ from qfluentwidgets import (
|
||||
MessageBox,
|
||||
HeaderCardWidget,
|
||||
CommandBar,
|
||||
setTheme,
|
||||
Theme,
|
||||
ExpandGroupSettingCard,
|
||||
PushSettingCard,
|
||||
)
|
||||
from PySide6 import QtCore
|
||||
from PySide6.QtCore import Qt
|
||||
from functools import partial
|
||||
from pathlib import Path
|
||||
from typing import List
|
||||
@@ -57,8 +55,8 @@ import datetime
|
||||
import json
|
||||
import shutil
|
||||
|
||||
from app.core import Config, MainInfoBar
|
||||
from app.services import Notify, Crypto
|
||||
from app.core import Config, MainInfoBar, Task_manager
|
||||
from app.services import Crypto
|
||||
from .Widget import (
|
||||
InputMessageBox,
|
||||
LineEditSettingCard,
|
||||
@@ -77,8 +75,6 @@ class MemberManager(QWidget):
|
||||
|
||||
self.setObjectName("脚本管理")
|
||||
|
||||
setTheme(Theme.AUTO)
|
||||
|
||||
layout = QVBoxLayout(self)
|
||||
|
||||
self.tools = CommandBar()
|
||||
@@ -157,6 +153,17 @@ class MemberManager(QWidget):
|
||||
name = self.member_manager.pivot.currentRouteKey()
|
||||
|
||||
if name == None:
|
||||
logger.warning("删除脚本实例时未选择脚本实例")
|
||||
MainInfoBar.push_info_bar(
|
||||
"warning", "未选择脚本实例", "请选择一个脚本实例", 5000
|
||||
)
|
||||
return None
|
||||
|
||||
if len(Config.running_list) > 0:
|
||||
logger.warning("删除脚本实例时调度队列未停止运行")
|
||||
MainInfoBar.push_info_bar(
|
||||
"warning", "调度中心正在执行任务", "请等待或手动中止任务", 5000
|
||||
)
|
||||
return None
|
||||
|
||||
choice = MessageBox(
|
||||
@@ -192,12 +199,27 @@ class MemberManager(QWidget):
|
||||
name = self.member_manager.pivot.currentRouteKey()
|
||||
|
||||
if name == None:
|
||||
logger.warning("向左移动脚本实例时未选择脚本实例")
|
||||
MainInfoBar.push_info_bar(
|
||||
"warning", "未选择脚本实例", "请选择一个脚本实例", 5000
|
||||
)
|
||||
return None
|
||||
|
||||
member_list = self.member_manager.search_member()
|
||||
index = int(name[3:])
|
||||
|
||||
if index == 1:
|
||||
logger.warning("向左移动脚本实例时已到达最左端")
|
||||
MainInfoBar.push_info_bar(
|
||||
"warning", "已经是第一个脚本实例", "无法向左移动", 5000
|
||||
)
|
||||
return None
|
||||
|
||||
if len(Config.running_list) > 0:
|
||||
logger.warning("向左移动脚本实例时调度队列未停止运行")
|
||||
MainInfoBar.push_info_bar(
|
||||
"warning", "调度中心正在执行任务", "请等待或手动中止任务", 5000
|
||||
)
|
||||
return None
|
||||
|
||||
type_right = [_[1] for _ in member_list if _[0] == name]
|
||||
@@ -226,12 +248,27 @@ class MemberManager(QWidget):
|
||||
name = self.member_manager.pivot.currentRouteKey()
|
||||
|
||||
if name == None:
|
||||
logger.warning("向右移动脚本实例时未选择脚本实例")
|
||||
MainInfoBar.push_info_bar(
|
||||
"warning", "未选择脚本实例", "请选择一个脚本实例", 5000
|
||||
)
|
||||
return None
|
||||
|
||||
member_list = self.member_manager.search_member()
|
||||
index = int(name[3:])
|
||||
|
||||
if index == len(member_list):
|
||||
logger.warning("向右移动脚本实例时已到达最右端")
|
||||
MainInfoBar.push_info_bar(
|
||||
"warning", "已经是最后一个脚本实例", "无法向右移动", 5000
|
||||
)
|
||||
return None
|
||||
|
||||
if len(Config.running_list) > 0:
|
||||
logger.warning("向右移动脚本实例时调度队列未停止运行")
|
||||
MainInfoBar.push_info_bar(
|
||||
"warning", "调度中心正在执行任务", "请等待或手动中止任务", 5000
|
||||
)
|
||||
return None
|
||||
|
||||
type_left = [_[1] for _ in member_list if _[0] == name]
|
||||
@@ -323,7 +360,7 @@ class MemberSettingBox(QWidget):
|
||||
|
||||
self.script_list: List[MaaSettingBox] = []
|
||||
|
||||
self.Layout.addWidget(self.pivot, 0, QtCore.Qt.AlignHCenter)
|
||||
self.Layout.addWidget(self.pivot, 0, Qt.AlignHCenter)
|
||||
self.Layout.addWidget(self.stackedWidget)
|
||||
self.Layout.setContentsMargins(0, 0, 0, 0)
|
||||
|
||||
@@ -433,7 +470,7 @@ class MaaSettingBox(QWidget):
|
||||
content_widget = QWidget()
|
||||
content_layout = QVBoxLayout(content_widget)
|
||||
|
||||
self.app_setting = self.AppSettingCard(self, uid)
|
||||
self.app_setting = self.AppSettingCard(self, self.objectName())
|
||||
self.user_setting = self.UserSettingCard(self, self.objectName())
|
||||
|
||||
content_layout.addWidget(self.app_setting)
|
||||
@@ -448,12 +485,12 @@ class MaaSettingBox(QWidget):
|
||||
|
||||
class AppSettingCard(HeaderCardWidget):
|
||||
|
||||
def __init__(self, parent=None, uid: int = None):
|
||||
def __init__(self, parent=None, name: str = None):
|
||||
super().__init__(parent)
|
||||
|
||||
self.setTitle("MAA实例")
|
||||
|
||||
self.uid = uid
|
||||
self.name = name
|
||||
|
||||
Layout = QVBoxLayout()
|
||||
|
||||
@@ -484,6 +521,9 @@ class MaaSettingBox(QWidget):
|
||||
Config.maa_config.get(Config.maa_config.MaaSet_Path)
|
||||
)
|
||||
)
|
||||
self.card_Set.clicked.connect(
|
||||
lambda: Task_manager.add_task("设置MAA_全局", self.name, None)
|
||||
)
|
||||
|
||||
Layout.addWidget(self.card_Name)
|
||||
Layout.addWidget(self.card_Path)
|
||||
@@ -514,12 +554,12 @@ class MaaSettingBox(QWidget):
|
||||
)
|
||||
return None
|
||||
|
||||
(Config.app_path / f"config/MaaConfig/脚本_{self.uid}/Default").mkdir(
|
||||
(Config.app_path / f"config/MaaConfig/{self.name}/Default").mkdir(
|
||||
parents=True, exist_ok=True
|
||||
)
|
||||
shutil.copy(
|
||||
Path(folder) / "config/gui.json",
|
||||
Config.app_path / f"config/MaaConfig/脚本_{self.uid}/Default/gui.json",
|
||||
Config.app_path / f"config/MaaConfig/{self.name}/Default/gui.json",
|
||||
)
|
||||
Config.maa_config.set(Config.maa_config.MaaSet_Path, folder)
|
||||
self.card_Path.setContent(folder)
|
||||
@@ -572,11 +612,7 @@ class MaaSettingBox(QWidget):
|
||||
|
||||
class UserSettingCard(HeaderCardWidget):
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
parent=None,
|
||||
name: str = None,
|
||||
):
|
||||
def __init__(self, parent=None, name: str = None):
|
||||
super().__init__(parent)
|
||||
|
||||
self.setTitle("用户列表")
|
||||
@@ -626,6 +662,14 @@ class MaaSettingBox(QWidget):
|
||||
self.viewLayout.addLayout(Layout)
|
||||
|
||||
def set_more(self):
|
||||
"""用户选项配置"""
|
||||
|
||||
if len(Config.running_list) > 0:
|
||||
logger.warning("配置用户选项时调度队列未停止运行")
|
||||
MainInfoBar.push_info_bar(
|
||||
"warning", "调度中心正在执行任务", "请等待或手动中止任务", 5000
|
||||
)
|
||||
return None
|
||||
|
||||
Config.cur.execute("SELECT * FROM adminx WHERE True")
|
||||
data = Config.cur.fetchall()
|
||||
@@ -665,21 +709,39 @@ class MaaSettingBox(QWidget):
|
||||
/ f"config/MaaConfig/{self.name}/simple/{choice.input[0].currentIndex()}/infrastructure",
|
||||
)
|
||||
else:
|
||||
choice = MessageBox(
|
||||
"错误",
|
||||
"未选择自定义基建文件",
|
||||
self.parent()
|
||||
.parent()
|
||||
.parent()
|
||||
.parent()
|
||||
.parent()
|
||||
.parent()
|
||||
.parent(),
|
||||
logger.warning("未选择自定义基建文件")
|
||||
MainInfoBar.push_info_bar(
|
||||
"warning", "警告", "未选择自定义基建文件", 5000
|
||||
)
|
||||
choice.cancelButton.hide()
|
||||
choice.buttonLayout.insertStretch(1)
|
||||
if choice.exec():
|
||||
pass
|
||||
|
||||
elif self.user_list.pivot.currentRouteKey() == f"{self.name}_高级用户列表":
|
||||
|
||||
user_list = [_[0] for _ in data if _[15] == "beta"]
|
||||
set_list = ["MAA日常配置", "MAA剿灭配置"]
|
||||
|
||||
choice = SetMessageBox(
|
||||
self.parent().parent().parent().parent().parent().parent().parent(),
|
||||
"用户选项配置",
|
||||
["选择要配置的用户", "选择要配置的选项"],
|
||||
[user_list, set_list],
|
||||
)
|
||||
if (
|
||||
choice.exec()
|
||||
and choice.input[0].currentIndex() != -1
|
||||
and choice.input[1].currentIndex() != -1
|
||||
):
|
||||
|
||||
set_book = ["routine", "annihilation"]
|
||||
Task_manager.add_task(
|
||||
"设置MAA_用户",
|
||||
self.name,
|
||||
{
|
||||
"SetMaaInfo": {
|
||||
"UserId": choice.input[0].currentIndex(),
|
||||
"SetType": set_book[choice.input[1].currentIndex()],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
class UserListBox(QWidget):
|
||||
|
||||
@@ -762,9 +824,7 @@ class MaaSettingBox(QWidget):
|
||||
self.user_list_simple.setBorderVisible(True)
|
||||
self.user_list_simple.setBorderRadius(10)
|
||||
self.user_list_simple.setWordWrap(False)
|
||||
self.user_list_simple.setVerticalScrollBarPolicy(
|
||||
QtCore.Qt.ScrollBarAlwaysOff
|
||||
)
|
||||
self.user_list_simple.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
|
||||
self.user_list_simple.setHorizontalHeaderLabels(
|
||||
[
|
||||
"用户名",
|
||||
@@ -789,9 +849,7 @@ class MaaSettingBox(QWidget):
|
||||
self.user_list_beta.setBorderVisible(True)
|
||||
self.user_list_beta.setBorderRadius(10)
|
||||
self.user_list_beta.setWordWrap(False)
|
||||
self.user_list_beta.setVerticalScrollBarPolicy(
|
||||
QtCore.Qt.ScrollBarAlwaysOff
|
||||
)
|
||||
self.user_list_beta.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
|
||||
self.user_list_beta.setHorizontalHeaderLabels(
|
||||
[
|
||||
"用户名",
|
||||
@@ -818,7 +876,7 @@ class MaaSettingBox(QWidget):
|
||||
routeKey=f"{name}_高级用户列表", text=f"高级用户列表"
|
||||
)
|
||||
|
||||
self.Layout.addWidget(self.pivot, 0, QtCore.Qt.AlignHCenter)
|
||||
self.Layout.addWidget(self.pivot, 0, Qt.AlignHCenter)
|
||||
self.Layout.addWidget(self.stackedWidget)
|
||||
self.Layout.setContentsMargins(0, 0, 0, 0)
|
||||
|
||||
@@ -909,22 +967,17 @@ class MaaSettingBox(QWidget):
|
||||
item = QTableWidgetItem(
|
||||
f"今日已代理{data_simple[i][14]}次"
|
||||
)
|
||||
item.setFlags(
|
||||
QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled
|
||||
)
|
||||
item.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled)
|
||||
elif j == 12:
|
||||
if Config.PASSWORD == "":
|
||||
item = QTableWidgetItem("******")
|
||||
item.setFlags(
|
||||
QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled
|
||||
)
|
||||
item.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled)
|
||||
else:
|
||||
result = Crypto.decryptx(value, Config.PASSWORD)
|
||||
item = QTableWidgetItem(result)
|
||||
if result == "管理密钥错误":
|
||||
item.setFlags(
|
||||
QtCore.Qt.ItemIsSelectable
|
||||
| QtCore.Qt.ItemIsEnabled
|
||||
Qt.ItemIsSelectable | Qt.ItemIsEnabled
|
||||
)
|
||||
else:
|
||||
item = QTableWidgetItem(str(value))
|
||||
@@ -983,22 +1036,17 @@ class MaaSettingBox(QWidget):
|
||||
item = QTableWidgetItem(
|
||||
f"今日已代理{data_beta[i][14]}次"
|
||||
)
|
||||
item.setFlags(
|
||||
QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled
|
||||
)
|
||||
item.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled)
|
||||
elif j == 12:
|
||||
if Config.PASSWORD == "":
|
||||
item = QTableWidgetItem("******")
|
||||
item.setFlags(
|
||||
QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled
|
||||
)
|
||||
item.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled)
|
||||
else:
|
||||
result = Crypto.decryptx(value, Config.PASSWORD)
|
||||
item = QTableWidgetItem(result)
|
||||
if result == "管理密钥错误":
|
||||
item.setFlags(
|
||||
QtCore.Qt.ItemIsSelectable
|
||||
| QtCore.Qt.ItemIsEnabled
|
||||
Qt.ItemIsSelectable | Qt.ItemIsEnabled
|
||||
)
|
||||
else:
|
||||
item = QTableWidgetItem(str(value))
|
||||
@@ -1178,6 +1226,13 @@ class MaaSettingBox(QWidget):
|
||||
def del_user(self) -> None:
|
||||
"""删除选中的首位用户"""
|
||||
|
||||
if len(Config.running_list) > 0:
|
||||
logger.warning("删除用户时调度队列未停止运行")
|
||||
MainInfoBar.push_info_bar(
|
||||
"warning", "调度中心正在执行任务", "请等待或手动中止任务", 5000
|
||||
)
|
||||
return None
|
||||
|
||||
# 获取对应的行索引
|
||||
if "简洁用户列表" in self.pivot.currentRouteKey():
|
||||
row = self.user_list_simple.currentRow()
|
||||
@@ -1190,23 +1245,11 @@ class MaaSettingBox(QWidget):
|
||||
|
||||
# 判断选择合理性
|
||||
if row == -1:
|
||||
choice = MessageBox(
|
||||
"错误",
|
||||
"请选中一个用户后再执行删除操作",
|
||||
self.parent()
|
||||
.parent()
|
||||
.parent()
|
||||
.parent()
|
||||
.parent()
|
||||
.parent()
|
||||
.parent()
|
||||
.parent()
|
||||
.parent(),
|
||||
logger.warning("删除用户时未选中用户")
|
||||
MainInfoBar.push_info_bar(
|
||||
"warning", "未选择用户", "请先选择一个用户", 5000
|
||||
)
|
||||
choice.cancelButton.hide()
|
||||
choice.buttonLayout.insertStretch(1)
|
||||
if choice.exec():
|
||||
return None
|
||||
return None
|
||||
|
||||
# 确认待删除用户信息
|
||||
Config.cur.execute(
|
||||
@@ -1280,6 +1323,13 @@ class MaaSettingBox(QWidget):
|
||||
def up_user(self):
|
||||
"""向上移动用户"""
|
||||
|
||||
if len(Config.running_list) > 0:
|
||||
logger.warning("向上移动用户时调度队列未停止运行")
|
||||
MainInfoBar.push_info_bar(
|
||||
"warning", "调度中心正在执行任务", "请等待或手动中止任务", 5000
|
||||
)
|
||||
return None
|
||||
|
||||
# 获取对应的行索引
|
||||
if "简洁用户列表" in self.pivot.currentRouteKey():
|
||||
row = self.user_list_simple.currentRow()
|
||||
@@ -1290,23 +1340,11 @@ class MaaSettingBox(QWidget):
|
||||
|
||||
# 判断选择合理性
|
||||
if row == -1:
|
||||
choice = MessageBox(
|
||||
"错误",
|
||||
"请选中一个用户后再执行向下移动操作",
|
||||
self.parent()
|
||||
.parent()
|
||||
.parent()
|
||||
.parent()
|
||||
.parent()
|
||||
.parent()
|
||||
.parent()
|
||||
.parent()
|
||||
.parent(),
|
||||
logger.warning("向上移动用户时未选中用户")
|
||||
MainInfoBar.push_info_bar(
|
||||
"warning", "未选中用户", "请先选择一个用户", 5000
|
||||
)
|
||||
choice.cancelButton.hide()
|
||||
choice.buttonLayout.insertStretch(1)
|
||||
if choice.exec():
|
||||
return None
|
||||
return None
|
||||
|
||||
if row == 0:
|
||||
return None
|
||||
@@ -1380,6 +1418,13 @@ class MaaSettingBox(QWidget):
|
||||
def down_user(self):
|
||||
"""向下移动用户"""
|
||||
|
||||
if len(Config.running_list) > 0:
|
||||
logger.warning("向下移动用户时调度队列未停止运行")
|
||||
MainInfoBar.push_info_bar(
|
||||
"warning", "调度中心正在执行任务", "请等待或手动中止任务", 5000
|
||||
)
|
||||
return None
|
||||
|
||||
# 获取对应的行索引
|
||||
if "简洁用户列表" in self.pivot.currentRouteKey():
|
||||
row = self.user_list_simple.currentRow()
|
||||
@@ -1392,23 +1437,11 @@ class MaaSettingBox(QWidget):
|
||||
|
||||
# 判断选择合理性
|
||||
if row == -1:
|
||||
choice = MessageBox(
|
||||
"错误",
|
||||
"请选中一个用户后再执行向下移动操作",
|
||||
self.parent()
|
||||
.parent()
|
||||
.parent()
|
||||
.parent()
|
||||
.parent()
|
||||
.parent()
|
||||
.parent()
|
||||
.parent()
|
||||
.parent(),
|
||||
logger.warning("向下移动用户时未选中用户")
|
||||
MainInfoBar.push_info_bar(
|
||||
"warning", "未选中用户", "请先选择一个用户", 5000
|
||||
)
|
||||
choice.cancelButton.hide()
|
||||
choice.buttonLayout.insertStretch(1)
|
||||
if choice.exec():
|
||||
return None
|
||||
return None
|
||||
|
||||
if row == current_numb - 1:
|
||||
return None
|
||||
@@ -1482,6 +1515,13 @@ class MaaSettingBox(QWidget):
|
||||
def switch_user(self) -> None:
|
||||
"""切换用户配置模式"""
|
||||
|
||||
if len(Config.running_list) > 0:
|
||||
logger.warning("切换用户配置模式时调度队列未停止运行")
|
||||
MainInfoBar.push_info_bar(
|
||||
"warning", "调度中心正在执行任务", "请等待或手动中止任务", 5000
|
||||
)
|
||||
return None
|
||||
|
||||
# 获取当前用户配置模式信息
|
||||
if "简洁用户列表" in self.pivot.currentRouteKey():
|
||||
row = self.user_list_simple.currentRow()
|
||||
@@ -1492,23 +1532,11 @@ class MaaSettingBox(QWidget):
|
||||
|
||||
# 判断选择合理性
|
||||
if row == -1:
|
||||
choice = MessageBox(
|
||||
"错误",
|
||||
"请选中一个用户后再执行切换操作",
|
||||
self.parent()
|
||||
.parent()
|
||||
.parent()
|
||||
.parent()
|
||||
.parent()
|
||||
.parent()
|
||||
.parent()
|
||||
.parent()
|
||||
.parent(),
|
||||
logger.warning("切换用户配置模式时未选中用户")
|
||||
MainInfoBar.push_info_bar(
|
||||
"warning", "未选中用户", "请先选择一个用户", 5000
|
||||
)
|
||||
choice.cancelButton.hide()
|
||||
choice.buttonLayout.insertStretch(1)
|
||||
if choice.exec():
|
||||
return None
|
||||
return None
|
||||
|
||||
# 确认待切换用户信息
|
||||
Config.cur.execute(
|
||||
|
||||
@@ -24,7 +24,7 @@ AUTO_MAA调度队列界面
|
||||
v4.2
|
||||
作者:DLmaster_361
|
||||
"""
|
||||
|
||||
from loguru import logger
|
||||
from PySide6.QtWidgets import (
|
||||
QWidget,
|
||||
QVBoxLayout,
|
||||
@@ -41,20 +41,14 @@ from qfluentwidgets import (
|
||||
HeaderCardWidget,
|
||||
TextBrowser,
|
||||
CommandBar,
|
||||
setTheme,
|
||||
Theme,
|
||||
SwitchSettingCard,
|
||||
)
|
||||
from PySide6.QtUiTools import QUiLoader
|
||||
from PySide6 import QtCore
|
||||
from PySide6.QtCore import Qt
|
||||
from typing import List
|
||||
import json
|
||||
import shutil
|
||||
|
||||
uiLoader = QUiLoader()
|
||||
|
||||
from app.core import Config
|
||||
from app.services import Notify
|
||||
from app.core import Config, MainInfoBar
|
||||
from .Widget import (
|
||||
LineEditSettingCard,
|
||||
TimeEditSettingCard,
|
||||
@@ -72,8 +66,6 @@ class QueueManager(QWidget):
|
||||
|
||||
self.setObjectName("调度队列")
|
||||
|
||||
setTheme(Theme.AUTO)
|
||||
|
||||
layout = QVBoxLayout(self)
|
||||
|
||||
self.tools = CommandBar()
|
||||
@@ -129,6 +121,17 @@ class QueueManager(QWidget):
|
||||
name = self.queue_manager.pivot.currentRouteKey()
|
||||
|
||||
if name == None:
|
||||
logger.warning("未选择调度队列")
|
||||
MainInfoBar.push_info_bar(
|
||||
"warning", "未选择调度队列", "请先选择一个调度队列", 5000
|
||||
)
|
||||
return None
|
||||
|
||||
if name in Config.running_list:
|
||||
logger.warning("调度队列正在运行")
|
||||
MainInfoBar.push_info_bar(
|
||||
"warning", "调度队列正在运行", "请先停止调度队列", 5000
|
||||
)
|
||||
return None
|
||||
|
||||
choice = MessageBox(
|
||||
@@ -161,11 +164,26 @@ class QueueManager(QWidget):
|
||||
name = self.queue_manager.pivot.currentRouteKey()
|
||||
|
||||
if name == None:
|
||||
logger.warning("未选择调度队列")
|
||||
MainInfoBar.push_info_bar(
|
||||
"warning", "未选择调度队列", "请先选择一个调度队列", 5000
|
||||
)
|
||||
return None
|
||||
|
||||
index = int(name[5:])
|
||||
|
||||
if index == 1:
|
||||
logger.warning("向左移动调度队列时已到达最左端")
|
||||
MainInfoBar.push_info_bar(
|
||||
"warning", "已经是第一个调度队列", "无法向左移动", 5000
|
||||
)
|
||||
return None
|
||||
|
||||
if name in Config.running_list or f"调度队列_{index-1}" in Config.running_list:
|
||||
logger.warning("相关调度队列正在运行")
|
||||
MainInfoBar.push_info_bar(
|
||||
"warning", "相关调度队列正在运行", "请先停止调度队列", 5000
|
||||
)
|
||||
return None
|
||||
|
||||
self.queue_manager.clear_SettingBox()
|
||||
@@ -189,12 +207,27 @@ class QueueManager(QWidget):
|
||||
name = self.queue_manager.pivot.currentRouteKey()
|
||||
|
||||
if name == None:
|
||||
logger.warning("未选择调度队列")
|
||||
MainInfoBar.push_info_bar(
|
||||
"warning", "未选择调度队列", "请先选择一个调度队列", 5000
|
||||
)
|
||||
return None
|
||||
|
||||
queue_list = self.queue_manager.search_queue()
|
||||
index = int(name[5:])
|
||||
|
||||
if index == len(queue_list):
|
||||
logger.warning("向右移动调度队列时已到达最右端")
|
||||
MainInfoBar.push_info_bar(
|
||||
"warning", "已经是最后一个调度队列", "无法向右移动", 5000
|
||||
)
|
||||
return None
|
||||
|
||||
if name in Config.running_list or f"调度队列_{index+1}" in Config.running_list:
|
||||
logger.warning("相关调度队列正在运行")
|
||||
MainInfoBar.push_info_bar(
|
||||
"warning", "相关调度队列正在运行", "请先停止调度队列", 5000
|
||||
)
|
||||
return None
|
||||
|
||||
self.queue_manager.clear_SettingBox()
|
||||
@@ -235,7 +268,7 @@ class QueueSettingBox(QWidget):
|
||||
|
||||
self.script_list: List[QueueMemberSettingBox] = []
|
||||
|
||||
self.Layout.addWidget(self.pivot, 0, QtCore.Qt.AlignHCenter)
|
||||
self.Layout.addWidget(self.pivot, 0, Qt.AlignHCenter)
|
||||
self.Layout.addWidget(self.stackedWidget)
|
||||
self.Layout.setContentsMargins(0, 0, 0, 0)
|
||||
|
||||
|
||||
@@ -25,34 +25,31 @@ v4.2
|
||||
作者:DLmaster_361
|
||||
"""
|
||||
|
||||
from loguru import logger
|
||||
from PySide6.QtWidgets import (
|
||||
QWidget,
|
||||
QApplication,
|
||||
QVBoxLayout,
|
||||
QVBoxLayout,
|
||||
)
|
||||
from qfluentwidgets import (
|
||||
ScrollArea,
|
||||
FluentIcon,
|
||||
setTheme,
|
||||
Theme,
|
||||
MessageBox,
|
||||
Dialog,
|
||||
HyperlinkCard,
|
||||
HeaderCardWidget,
|
||||
SwitchSettingCard,
|
||||
ExpandGroupSettingCard,
|
||||
PushSettingCard,
|
||||
)
|
||||
from PySide6.QtUiTools import QUiLoader
|
||||
from PySide6 import QtCore
|
||||
import json
|
||||
import subprocess
|
||||
import time
|
||||
import requests
|
||||
|
||||
uiLoader = QUiLoader()
|
||||
|
||||
from app.core import Config, MainInfoBar
|
||||
from app.services import Notify, Crypto, System
|
||||
from app.services import Crypto, System
|
||||
from app.utils import Updater, version_text
|
||||
from .Widget import InputMessageBox, LineEditSettingCard
|
||||
|
||||
@@ -67,8 +64,6 @@ class Setting(QWidget):
|
||||
|
||||
self.setObjectName("设置")
|
||||
|
||||
setTheme(Theme.AUTO)
|
||||
|
||||
layout = QVBoxLayout()
|
||||
|
||||
scrollArea = ScrollArea()
|
||||
@@ -89,7 +84,7 @@ class Setting(QWidget):
|
||||
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)
|
||||
self.other.card_Notice.clicked.connect(self.show_notice)
|
||||
|
||||
content_layout.addWidget(self.function)
|
||||
content_layout.addWidget(self.start)
|
||||
@@ -379,7 +374,7 @@ class Setting(QWidget):
|
||||
else:
|
||||
MainInfoBar.push_info_bar("success", "更新检查", "已是最新版本~", 3000)
|
||||
|
||||
def update_main(self):
|
||||
def update_main(self) -> None:
|
||||
"""更新主程序"""
|
||||
|
||||
subprocess.Popen(
|
||||
@@ -390,14 +385,41 @@ class Setting(QWidget):
|
||||
self.close()
|
||||
QApplication.quit()
|
||||
|
||||
def show_tips(self):
|
||||
"""显示小贴士"""
|
||||
def show_notice(self):
|
||||
"""显示公告"""
|
||||
|
||||
choice = Dialog("小贴士", "这里什么都没有~", self)
|
||||
# 从远程服务器获取最新版本信息
|
||||
for _ in range(3):
|
||||
try:
|
||||
response = requests.get(
|
||||
"https://gitee.com/DLmaster_361/AUTO_MAA/raw/main/resources/version.json"
|
||||
)
|
||||
version_remote = response.json()
|
||||
break
|
||||
except Exception as e:
|
||||
err = e
|
||||
time.sleep(0.1)
|
||||
else:
|
||||
logger.warning(f"获取最新公告时出错:\n{err}")
|
||||
choice = Dialog(
|
||||
"网络错误",
|
||||
f"获取最新公告时出错:\n{err}",
|
||||
self,
|
||||
)
|
||||
choice.cancelButton.hide()
|
||||
choice.buttonLayout.insertStretch(1)
|
||||
if choice.exec():
|
||||
return None
|
||||
|
||||
if "notice" in version_remote:
|
||||
notice = version_remote["notice"]
|
||||
else:
|
||||
notice = "暂无公告~"
|
||||
|
||||
choice = Dialog("公告", notice, self)
|
||||
choice.cancelButton.hide()
|
||||
choice.buttonLayout.insertStretch(1)
|
||||
if choice.exec():
|
||||
pass
|
||||
choice.exec()
|
||||
|
||||
|
||||
class FunctionSettingCard(HeaderCardWidget):
|
||||
@@ -416,12 +438,7 @@ class FunctionSettingCard(HeaderCardWidget):
|
||||
configItem=Config.global_config.function_IfAllowSleep,
|
||||
)
|
||||
|
||||
self.card_IfSilence = SwitchSettingCard(
|
||||
icon=FluentIcon.PAGE_RIGHT,
|
||||
title="静默模式",
|
||||
content="将各代理窗口置于后台运行,减少对前台的干扰",
|
||||
configItem=Config.global_config.function_IfSilence,
|
||||
)
|
||||
self.card_IfSilence = self.SilenceSettingCard(self)
|
||||
|
||||
# 添加各组到设置卡中
|
||||
Layout.addWidget(self.card_IfAllowSleep)
|
||||
@@ -429,6 +446,43 @@ class FunctionSettingCard(HeaderCardWidget):
|
||||
|
||||
self.viewLayout.addLayout(Layout)
|
||||
|
||||
class SilenceSettingCard(ExpandGroupSettingCard):
|
||||
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(
|
||||
FluentIcon.SETTING,
|
||||
"静默模式",
|
||||
"将各代理窗口置于后台运行,减少对前台的干扰",
|
||||
parent,
|
||||
)
|
||||
|
||||
widget = QWidget()
|
||||
Layout = QVBoxLayout(widget)
|
||||
|
||||
self.card_IfSilence = SwitchSettingCard(
|
||||
icon=FluentIcon.PAGE_RIGHT,
|
||||
title="静默模式",
|
||||
content="是否启用静默模式",
|
||||
configItem=Config.global_config.function_IfSilence,
|
||||
)
|
||||
|
||||
self.card_BossKey = LineEditSettingCard(
|
||||
text="请输入安卓模拟器老版键",
|
||||
icon=FluentIcon.PAGE_RIGHT,
|
||||
title="模拟器老版键",
|
||||
content="输入模拟器老版快捷键,以“+”分隔",
|
||||
configItem=Config.global_config.function_BossKey,
|
||||
)
|
||||
|
||||
Layout.addWidget(self.card_IfSilence)
|
||||
Layout.addWidget(self.card_BossKey)
|
||||
|
||||
# 调整内部布局
|
||||
self.viewLayout.setContentsMargins(0, 0, 0, 0)
|
||||
self.viewLayout.setSpacing(0)
|
||||
|
||||
self.addGroupWidget(widget)
|
||||
|
||||
|
||||
class StartSettingCard(HeaderCardWidget):
|
||||
|
||||
@@ -449,7 +503,7 @@ class StartSettingCard(HeaderCardWidget):
|
||||
self.card_IfRunDirectly = SwitchSettingCard(
|
||||
icon=FluentIcon.PAGE_RIGHT,
|
||||
title="启动后直接运行",
|
||||
content="启动AUTO_MAA后自动运行任务",
|
||||
content="启动AUTO_MAA后自动运行任务(暂不可用)",
|
||||
configItem=Config.global_config.start_IfRunDirectly,
|
||||
)
|
||||
|
||||
@@ -618,15 +672,48 @@ class OtherSettingCard(HeaderCardWidget):
|
||||
|
||||
self.setTitle("其他")
|
||||
|
||||
Layout = QVBoxLayout()
|
||||
|
||||
self.card_Tips = PushSettingCard(
|
||||
self.card_Notice = PushSettingCard(
|
||||
text="查看",
|
||||
icon=FluentIcon.PAGE_RIGHT,
|
||||
title="小贴士",
|
||||
content="查看AUTO_MAA的小贴士",
|
||||
title="公告",
|
||||
content="查看AUTO_MAA的最新公告",
|
||||
)
|
||||
self.card_Association = self.AssociationSettingCard()
|
||||
|
||||
Layout.addWidget(self.card_Tips)
|
||||
|
||||
Layout = QVBoxLayout()
|
||||
Layout.addWidget(self.card_Notice)
|
||||
Layout.addWidget(self.card_Association)
|
||||
self.viewLayout.addLayout(Layout)
|
||||
|
||||
class AssociationSettingCard(ExpandGroupSettingCard):
|
||||
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(
|
||||
FluentIcon.SETTING,
|
||||
"AUTO_MAA官方社群",
|
||||
"加入AUTO_MAA官方社群,获取更多帮助",
|
||||
parent,
|
||||
)
|
||||
|
||||
self.card_GitHubRepository = HyperlinkCard(
|
||||
url="https://github.com/DLmaster361/AUTO_MAA",
|
||||
text="访问GitHub仓库",
|
||||
icon=FluentIcon.GITHUB,
|
||||
title="GitHub",
|
||||
content="查看AUTO_MAA的源代码,提交问题和建议,欢迎参与开发",
|
||||
)
|
||||
self.card_QQGroup = HyperlinkCard(
|
||||
url="https://qm.qq.com/q/bd9fISNoME",
|
||||
text="加入官方QQ交流群",
|
||||
icon=FluentIcon.CHAT,
|
||||
title="QQ群",
|
||||
content="与AUTO_MAA开发者和用户交流",
|
||||
)
|
||||
|
||||
widget = QWidget()
|
||||
Layout = QVBoxLayout(widget)
|
||||
Layout.addWidget(self.card_GitHubRepository)
|
||||
Layout.addWidget(self.card_QQGroup)
|
||||
self.viewLayout.setContentsMargins(0, 0, 0, 0)
|
||||
self.viewLayout.setSpacing(0)
|
||||
self.addGroupWidget(widget)
|
||||
|
||||
Reference in New Issue
Block a user