Merge branch 'dev'
This commit is contained in:
9
.github/workflows/build-app.yml
vendored
9
.github/workflows/build-app.yml
vendored
@@ -73,8 +73,6 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
$MAIN_VERSION=(Get-Content -Path "version_info.txt" -TotalCount 1).Trim()
|
$MAIN_VERSION=(Get-Content -Path "version_info.txt" -TotalCount 1).Trim()
|
||||||
"AUTO_MAA_version=$MAIN_VERSION" | Out-File -FilePath $env:GITHUB_ENV -Append
|
"AUTO_MAA_version=$MAIN_VERSION" | Out-File -FilePath $env:GITHUB_ENV -Append
|
||||||
$UPDATER_VERSION=(Get-Content -Path "version_info.txt" -TotalCount 2 | Select-Object -Index 1).Trim()
|
|
||||||
"updater_version=$UPDATER_VERSION" | Out-File -FilePath $env:GITHUB_ENV -Append
|
|
||||||
- name: Upload Artifact
|
- name: Upload Artifact
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
@@ -111,8 +109,11 @@ jobs:
|
|||||||
NAME="$(sed 's/\r$//g' <(head -n 1 version_info.txt))"
|
NAME="$(sed 's/\r$//g' <(head -n 1 version_info.txt))"
|
||||||
TAGNAME="$(sed 's/\r$//g' <(head -n 1 version_info.txt))"
|
TAGNAME="$(sed 's/\r$//g' <(head -n 1 version_info.txt))"
|
||||||
NOTES_MAIN="$(sed 's/\r$//g' <(tail -n +3 version_info.txt))"
|
NOTES_MAIN="$(sed 's/\r$//g' <(tail -n +3 version_info.txt))"
|
||||||
NOTES_TAIL="\`\`\`本release通过GitHub Actions自动构建\`\`\`"
|
NOTES="$NOTES_MAIN
|
||||||
NOTES="$NOTES_MAIN<br><br>$NOTES_TAIL"
|
|
||||||
|
[已有 Mirror酱 CDK ?前往 Mirror酱 高速下载](https://mirrorchyan.com/zh/projects?rid=AUTO_MAA)
|
||||||
|
|
||||||
|
\`\`\`本release通过GitHub Actions自动构建\`\`\`"
|
||||||
if [ "${{ github.ref_name }}" == "main" ]; then
|
if [ "${{ github.ref_name }}" == "main" ]; then
|
||||||
PRERELEASE_FLAG=""
|
PRERELEASE_FLAG=""
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -260,8 +260,10 @@ class QueueConfig(QConfig):
|
|||||||
self.queueSet_AfterAccomplish = OptionsConfigItem(
|
self.queueSet_AfterAccomplish = OptionsConfigItem(
|
||||||
"QueueSet",
|
"QueueSet",
|
||||||
"AfterAccomplish",
|
"AfterAccomplish",
|
||||||
"None",
|
"NoAction",
|
||||||
OptionsValidator(["None", "KillSelf", "Sleep", "Hibernate", "Shutdown"]),
|
OptionsValidator(
|
||||||
|
["NoAction", "KillSelf", "Sleep", "Hibernate", "Shutdown"]
|
||||||
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
self.time_TimeEnabled_0 = ConfigItem(
|
self.time_TimeEnabled_0 = ConfigItem(
|
||||||
@@ -622,11 +624,12 @@ class MaaUserConfig(QConfig):
|
|||||||
|
|
||||||
class AppConfig(GlobalConfig):
|
class AppConfig(GlobalConfig):
|
||||||
|
|
||||||
VERSION = "4.3.7.0"
|
VERSION = "4.3.8.1"
|
||||||
|
|
||||||
gameid_refreshed = Signal()
|
gameid_refreshed = Signal()
|
||||||
PASSWORD_refreshed = Signal()
|
PASSWORD_refreshed = Signal()
|
||||||
user_info_changed = Signal()
|
user_info_changed = Signal()
|
||||||
|
power_sign_changed = Signal()
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
super().__init__()
|
super().__init__()
|
||||||
@@ -649,6 +652,7 @@ class AppConfig(GlobalConfig):
|
|||||||
"ALL": {"value": [], "text": []},
|
"ALL": {"value": [], "text": []},
|
||||||
"Today": {"value": [], "text": []},
|
"Today": {"value": [], "text": []},
|
||||||
}
|
}
|
||||||
|
self.power_sign = "NoAction"
|
||||||
self.if_ignore_silence = False
|
self.if_ignore_silence = False
|
||||||
self.if_database_opened = False
|
self.if_database_opened = False
|
||||||
|
|
||||||
@@ -1310,6 +1314,12 @@ class AppConfig(GlobalConfig):
|
|||||||
|
|
||||||
self.user_info_changed.emit()
|
self.user_info_changed.emit()
|
||||||
|
|
||||||
|
def set_power_sign(self, sign: str) -> None:
|
||||||
|
"""设置当前电源状态"""
|
||||||
|
|
||||||
|
self.power_sign = sign
|
||||||
|
self.power_sign_changed.emit()
|
||||||
|
|
||||||
def save_history(self, key: str, content: dict) -> None:
|
def save_history(self, key: str, content: dict) -> None:
|
||||||
"""保存历史记录"""
|
"""保存历史记录"""
|
||||||
|
|
||||||
|
|||||||
@@ -265,28 +265,14 @@ class _TaskManager(QObject):
|
|||||||
Config.queue_dict[name]["Config"].get(
|
Config.queue_dict[name]["Config"].get(
|
||||||
Config.queue_dict[name]["Config"].queueSet_AfterAccomplish
|
Config.queue_dict[name]["Config"].queueSet_AfterAccomplish
|
||||||
)
|
)
|
||||||
!= "None"
|
!= "NoAction"
|
||||||
|
and Config.power_sign == "NoAction"
|
||||||
):
|
):
|
||||||
|
Config.set_power_sign(
|
||||||
from app.ui import ProgressRingMessageBox
|
Config.queue_dict[name]["Config"].get(
|
||||||
|
Config.queue_dict[name]["Config"].queueSet_AfterAccomplish
|
||||||
mode_book = {
|
|
||||||
"Shutdown": "关机",
|
|
||||||
"Hibernate": "休眠",
|
|
||||||
"Sleep": "睡眠",
|
|
||||||
"KillSelf": "关闭AUTO_MAA",
|
|
||||||
}
|
|
||||||
|
|
||||||
choice = ProgressRingMessageBox(
|
|
||||||
Config.main_window,
|
|
||||||
f"{mode_book[Config.queue_dict[name]["Config"].get(Config.queue_dict[name]["Config"].queueSet_AfterAccomplish)]}倒计时",
|
|
||||||
)
|
|
||||||
if choice.exec():
|
|
||||||
System.set_power(
|
|
||||||
Config.queue_dict[name]["Config"].get(
|
|
||||||
Config.queue_dict[name]["Config"].queueSet_AfterAccomplish
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
|
)
|
||||||
|
|
||||||
def check_maa_version(self, v: str):
|
def check_maa_version(self, v: str):
|
||||||
"""检查MAA版本"""
|
"""检查MAA版本"""
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ class _MainTimer(QWidget):
|
|||||||
self.Timer = QTimer()
|
self.Timer = QTimer()
|
||||||
self.Timer.timeout.connect(self.timed_start)
|
self.Timer.timeout.connect(self.timed_start)
|
||||||
self.Timer.timeout.connect(self.set_silence)
|
self.Timer.timeout.connect(self.set_silence)
|
||||||
|
self.Timer.timeout.connect(self.check_power)
|
||||||
self.Timer.start(1000)
|
self.Timer.start(1000)
|
||||||
self.LongTimer = QTimer()
|
self.LongTimer = QTimer()
|
||||||
self.LongTimer.timeout.connect(self.long_timed_task)
|
self.LongTimer.timeout.connect(self.long_timed_task)
|
||||||
@@ -113,5 +114,27 @@ class _MainTimer(QWidget):
|
|||||||
logger.warning(f"FailSafeException: {e}")
|
logger.warning(f"FailSafeException: {e}")
|
||||||
self.if_FailSafeException = True
|
self.if_FailSafeException = True
|
||||||
|
|
||||||
|
def check_power(self):
|
||||||
|
|
||||||
|
if Config.power_sign != "NoAction" and not Config.running_list:
|
||||||
|
|
||||||
|
from app.ui import ProgressRingMessageBox
|
||||||
|
|
||||||
|
mode_book = {
|
||||||
|
"KillSelf": "退出软件",
|
||||||
|
"Sleep": "睡眠",
|
||||||
|
"Hibernate": "休眠",
|
||||||
|
"Shutdown": "关机",
|
||||||
|
}
|
||||||
|
|
||||||
|
choice = ProgressRingMessageBox(
|
||||||
|
Config.main_window, f"{mode_book[Config.power_sign]}倒计时"
|
||||||
|
)
|
||||||
|
if choice.exec():
|
||||||
|
System.set_power(Config.power_sign)
|
||||||
|
Config.set_power_sign("NoAction")
|
||||||
|
else:
|
||||||
|
Config.set_power_sign("NoAction")
|
||||||
|
|
||||||
|
|
||||||
MainTimer = _MainTimer()
|
MainTimer = _MainTimer()
|
||||||
|
|||||||
@@ -965,7 +965,7 @@ class MaaManager(QObject):
|
|||||||
else:
|
else:
|
||||||
self.maa_result = "MAA部分任务执行失败"
|
self.maa_result = "MAA部分任务执行失败"
|
||||||
|
|
||||||
elif "请「检查连接设置」或「尝试重启模拟器与 ADB」或「重启电脑」" in log:
|
elif "请 「检查连接设置」 → 「尝试重启模拟器与 ADB」 → 「重启电脑」" in log:
|
||||||
self.maa_result = "MAA的ADB连接异常"
|
self.maa_result = "MAA的ADB连接异常"
|
||||||
|
|
||||||
elif "未检测到任何模拟器" in log:
|
elif "未检测到任何模拟器" in log:
|
||||||
@@ -991,7 +991,7 @@ class MaaManager(QObject):
|
|||||||
elif mode == "人工排查":
|
elif mode == "人工排查":
|
||||||
if "完成任务: StartUp" in log:
|
if "完成任务: StartUp" in log:
|
||||||
self.maa_result = "Success!"
|
self.maa_result = "Success!"
|
||||||
elif "请「检查连接设置」或「尝试重启模拟器与 ADB」或「重启电脑」" in log:
|
elif "请 「检查连接设置」 → 「尝试重启模拟器与 ADB」 → 「重启电脑」" in log:
|
||||||
self.maa_result = "MAA的ADB连接异常"
|
self.maa_result = "MAA的ADB连接异常"
|
||||||
elif "未检测到任何模拟器" in log:
|
elif "未检测到任何模拟器" in log:
|
||||||
self.maa_result = "MAA未检测到任何模拟器"
|
self.maa_result = "MAA未检测到任何模拟器"
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ class _SystemHandler:
|
|||||||
|
|
||||||
if sys.platform.startswith("win"):
|
if sys.platform.startswith("win"):
|
||||||
|
|
||||||
if mode == "None":
|
if mode == "NoAction":
|
||||||
|
|
||||||
logger.info("不执行系统电源操作")
|
logger.info("不执行系统电源操作")
|
||||||
|
|
||||||
@@ -115,7 +115,7 @@ class _SystemHandler:
|
|||||||
|
|
||||||
elif sys.platform.startswith("linux"):
|
elif sys.platform.startswith("linux"):
|
||||||
|
|
||||||
if mode == "None":
|
if mode == "NoAction":
|
||||||
|
|
||||||
logger.info("不执行系统电源操作")
|
logger.info("不执行系统电源操作")
|
||||||
|
|
||||||
|
|||||||
@@ -71,6 +71,9 @@ from qfluentwidgets import (
|
|||||||
SwitchButton,
|
SwitchButton,
|
||||||
IndicatorPosition,
|
IndicatorPosition,
|
||||||
Slider,
|
Slider,
|
||||||
|
ScrollArea,
|
||||||
|
Pivot,
|
||||||
|
PivotItem,
|
||||||
)
|
)
|
||||||
from qfluentwidgets.common.overload import singledispatchmethod
|
from qfluentwidgets.common.overload import singledispatchmethod
|
||||||
import os
|
import os
|
||||||
@@ -1128,6 +1131,84 @@ class QuantifiedItemCard(CardWidget):
|
|||||||
self.Layout.addWidget(self.Numb)
|
self.Layout.addWidget(self.Numb)
|
||||||
|
|
||||||
|
|
||||||
|
class PivotArea(ScrollArea):
|
||||||
|
def __init__(self, parent=None):
|
||||||
|
super().__init__(parent)
|
||||||
|
|
||||||
|
# 创建中间容器并设置布局
|
||||||
|
self.center_container = QWidget()
|
||||||
|
self.center_layout = QHBoxLayout(self.center_container)
|
||||||
|
self.center_layout.setContentsMargins(0, 0, 0, 0)
|
||||||
|
self.center_layout.setSpacing(0)
|
||||||
|
self.center_container.setStyleSheet("background: transparent; border: none;")
|
||||||
|
self.center_container.setFixedHeight(45)
|
||||||
|
|
||||||
|
self.pivot = self._Pivot(self)
|
||||||
|
self.pivot.ItemNumbChanged.connect(
|
||||||
|
lambda: QTimer.singleShot(
|
||||||
|
100,
|
||||||
|
lambda: (
|
||||||
|
self.center_container.setFixedWidth(
|
||||||
|
max(self.width() - 2, self.pivot.width())
|
||||||
|
)
|
||||||
|
),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
self.center_layout.addStretch(1)
|
||||||
|
self.center_layout.addWidget(self.pivot)
|
||||||
|
self.center_layout.addStretch(1)
|
||||||
|
|
||||||
|
self.setWidgetResizable(False)
|
||||||
|
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
|
||||||
|
self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
|
||||||
|
self.viewport().setCursor(Qt.ArrowCursor)
|
||||||
|
self.setStyleSheet("background: transparent; border: none;")
|
||||||
|
self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
|
||||||
|
self.setWidget(self.center_container)
|
||||||
|
|
||||||
|
def wheelEvent(self, event):
|
||||||
|
scroll_bar = self.horizontalScrollBar()
|
||||||
|
if scroll_bar.maximum() > 0:
|
||||||
|
delta = event.angleDelta().y()
|
||||||
|
scroll_bar.setValue(scroll_bar.value() - delta // 15)
|
||||||
|
event.ignore()
|
||||||
|
|
||||||
|
def resizeEvent(self, event):
|
||||||
|
super().resizeEvent(event)
|
||||||
|
|
||||||
|
self.center_container.setFixedWidth(max(self.width() - 2, self.pivot.width()))
|
||||||
|
QTimer.singleShot(
|
||||||
|
100,
|
||||||
|
lambda: (
|
||||||
|
self.center_container.setFixedWidth(
|
||||||
|
max(self.width() - 2, self.pivot.width())
|
||||||
|
)
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
class _Pivot(Pivot):
|
||||||
|
|
||||||
|
ItemNumbChanged = Signal()
|
||||||
|
|
||||||
|
def __init__(self, parent=None):
|
||||||
|
super().__init__(parent)
|
||||||
|
|
||||||
|
def insertWidget(
|
||||||
|
self, index: int, routeKey: str, widget: PivotItem, onClick=None
|
||||||
|
):
|
||||||
|
super().insertWidget(index, routeKey, widget, onClick)
|
||||||
|
self.ItemNumbChanged.emit()
|
||||||
|
|
||||||
|
def removeWidget(self, routeKey: str):
|
||||||
|
super().removeWidget(routeKey)
|
||||||
|
self.ItemNumbChanged.emit()
|
||||||
|
|
||||||
|
def clear(self):
|
||||||
|
super().clear()
|
||||||
|
self.ItemNumbChanged.emit()
|
||||||
|
|
||||||
|
|
||||||
class QuickExpandGroupCard(ExpandGroupSettingCard):
|
class QuickExpandGroupCard(ExpandGroupSettingCard):
|
||||||
"""全局配置"""
|
"""全局配置"""
|
||||||
|
|
||||||
|
|||||||
@@ -33,8 +33,8 @@ from PySide6.QtWidgets import (
|
|||||||
QHBoxLayout,
|
QHBoxLayout,
|
||||||
)
|
)
|
||||||
from qfluentwidgets import (
|
from qfluentwidgets import (
|
||||||
|
BodyLabel,
|
||||||
CardWidget,
|
CardWidget,
|
||||||
Pivot,
|
|
||||||
ScrollArea,
|
ScrollArea,
|
||||||
FluentIcon,
|
FluentIcon,
|
||||||
HeaderCardWidget,
|
HeaderCardWidget,
|
||||||
@@ -44,13 +44,12 @@ from qfluentwidgets import (
|
|||||||
SubtitleLabel,
|
SubtitleLabel,
|
||||||
PushButton,
|
PushButton,
|
||||||
)
|
)
|
||||||
from PySide6.QtCore import Qt
|
|
||||||
from PySide6.QtGui import QTextCursor
|
from PySide6.QtGui import QTextCursor
|
||||||
from typing import List, Dict
|
from typing import List, Dict
|
||||||
|
|
||||||
|
|
||||||
from app.core import Config, TaskManager, Task, MainInfoBar
|
from app.core import Config, TaskManager, Task, MainInfoBar
|
||||||
from .Widget import StatefulItemCard, ComboBoxMessageBox
|
from .Widget import StatefulItemCard, ComboBoxMessageBox, PivotArea
|
||||||
|
|
||||||
|
|
||||||
class DispatchCenter(QWidget):
|
class DispatchCenter(QWidget):
|
||||||
@@ -60,13 +59,29 @@ class DispatchCenter(QWidget):
|
|||||||
|
|
||||||
self.setObjectName("调度中枢")
|
self.setObjectName("调度中枢")
|
||||||
|
|
||||||
self.pivot = Pivot(self)
|
self.multi_button = PushButton(FluentIcon.ADD, "添加任务", self)
|
||||||
|
self.multi_button.setToolTip("添加任务")
|
||||||
|
self.multi_button.clicked.connect(self.start_multi_task)
|
||||||
|
|
||||||
|
self.power_combox = ComboBox()
|
||||||
|
self.power_combox.addItem("无动作", userData="NoAction")
|
||||||
|
self.power_combox.addItem("退出软件", userData="KillSelf")
|
||||||
|
self.power_combox.addItem("睡眠", userData="Sleep")
|
||||||
|
self.power_combox.addItem("休眠", userData="Hibernate")
|
||||||
|
self.power_combox.addItem("关机", userData="Shutdown")
|
||||||
|
self.power_combox.setCurrentText("无动作")
|
||||||
|
self.power_combox.currentIndexChanged.connect(self.set_power_sign)
|
||||||
|
|
||||||
|
self.pivotArea = PivotArea(self)
|
||||||
|
self.pivot = self.pivotArea.pivot
|
||||||
|
|
||||||
self.stackedWidget = QStackedWidget(self)
|
self.stackedWidget = QStackedWidget(self)
|
||||||
self.Layout = QVBoxLayout(self)
|
self.stackedWidget.setContentsMargins(0, 0, 0, 0)
|
||||||
|
self.stackedWidget.setStyleSheet("background: transparent; border: none;")
|
||||||
|
|
||||||
self.script_list: Dict[str, DispatchBox] = {}
|
self.script_list: Dict[str, DispatchCenter.DispatchBox] = {}
|
||||||
|
|
||||||
dispatch_box = DispatchBox("主调度台", self)
|
dispatch_box = self.DispatchBox("主调度台", self)
|
||||||
self.script_list["主调度台"] = dispatch_box
|
self.script_list["主调度台"] = dispatch_box
|
||||||
self.stackedWidget.addWidget(self.script_list["主调度台"])
|
self.stackedWidget.addWidget(self.script_list["主调度台"])
|
||||||
self.pivot.addItem(
|
self.pivot.addItem(
|
||||||
@@ -76,7 +91,15 @@ class DispatchCenter(QWidget):
|
|||||||
icon=FluentIcon.CAFE,
|
icon=FluentIcon.CAFE,
|
||||||
)
|
)
|
||||||
|
|
||||||
self.Layout.addWidget(self.pivot, 0, Qt.AlignHCenter)
|
h_layout = QHBoxLayout()
|
||||||
|
h_layout.addWidget(self.multi_button)
|
||||||
|
h_layout.addWidget(self.pivotArea)
|
||||||
|
h_layout.addWidget(BodyLabel("全部完成后", self))
|
||||||
|
h_layout.addWidget(self.power_combox)
|
||||||
|
h_layout.setContentsMargins(11, 5, 11, 0)
|
||||||
|
|
||||||
|
self.Layout = QVBoxLayout(self)
|
||||||
|
self.Layout.addLayout(h_layout)
|
||||||
self.Layout.addWidget(self.stackedWidget)
|
self.Layout.addWidget(self.stackedWidget)
|
||||||
self.Layout.setContentsMargins(0, 0, 0, 0)
|
self.Layout.setContentsMargins(0, 0, 0, 0)
|
||||||
|
|
||||||
@@ -87,7 +110,7 @@ class DispatchCenter(QWidget):
|
|||||||
def add_board(self, task: Task) -> None:
|
def add_board(self, task: Task) -> None:
|
||||||
"""添加一个调度台界面"""
|
"""添加一个调度台界面"""
|
||||||
|
|
||||||
dispatch_box = DispatchBox(task.name, self)
|
dispatch_box = self.DispatchBox(task.name, self)
|
||||||
|
|
||||||
dispatch_box.top_bar.main_button.clicked.connect(
|
dispatch_box.top_bar.main_button.clicked.connect(
|
||||||
lambda: TaskManager.stop_task(task.name)
|
lambda: TaskManager.stop_task(task.name)
|
||||||
@@ -123,7 +146,6 @@ class DispatchCenter(QWidget):
|
|||||||
self.script_list["主调度台"].top_bar.Lable.show()
|
self.script_list["主调度台"].top_bar.Lable.show()
|
||||||
self.script_list["主调度台"].top_bar.object.hide()
|
self.script_list["主调度台"].top_bar.object.hide()
|
||||||
self.script_list["主调度台"].top_bar.mode.hide()
|
self.script_list["主调度台"].top_bar.mode.hide()
|
||||||
self.script_list["主调度台"].top_bar.multi_button.show()
|
|
||||||
self.script_list["主调度台"].top_bar.main_button.clicked.disconnect()
|
self.script_list["主调度台"].top_bar.main_button.clicked.disconnect()
|
||||||
self.script_list["主调度台"].top_bar.main_button.setText("中止任务")
|
self.script_list["主调度台"].top_bar.main_button.setText("中止任务")
|
||||||
self.script_list["主调度台"].top_bar.main_button.clicked.connect(
|
self.script_list["主调度台"].top_bar.main_button.clicked.connect(
|
||||||
@@ -154,7 +176,6 @@ class DispatchCenter(QWidget):
|
|||||||
self.script_list["主调度台"].top_bar.Lable.hide()
|
self.script_list["主调度台"].top_bar.Lable.hide()
|
||||||
self.script_list["主调度台"].top_bar.object.show()
|
self.script_list["主调度台"].top_bar.object.show()
|
||||||
self.script_list["主调度台"].top_bar.mode.show()
|
self.script_list["主调度台"].top_bar.mode.show()
|
||||||
self.script_list["主调度台"].top_bar.multi_button.hide()
|
|
||||||
self.script_list["主调度台"].top_bar.main_button.clicked.disconnect()
|
self.script_list["主调度台"].top_bar.main_button.clicked.disconnect()
|
||||||
self.script_list["主调度台"].top_bar.main_button.setText("开始任务")
|
self.script_list["主调度台"].top_bar.main_button.setText("开始任务")
|
||||||
self.script_list["主调度台"].top_bar.main_button.clicked.connect(
|
self.script_list["主调度台"].top_bar.main_button.clicked.connect(
|
||||||
@@ -208,301 +229,327 @@ class DispatchCenter(QWidget):
|
|||||||
self.script_list["主调度台"].top_bar.mode.addItems(["自动代理", "人工排查"])
|
self.script_list["主调度台"].top_bar.mode.addItems(["自动代理", "人工排查"])
|
||||||
self.script_list["主调度台"].top_bar.mode.setCurrentIndex(0)
|
self.script_list["主调度台"].top_bar.mode.setCurrentIndex(0)
|
||||||
|
|
||||||
|
def update_power_sign(self) -> None:
|
||||||
|
"""更新电源设置"""
|
||||||
|
|
||||||
class DispatchBox(QWidget):
|
mode_book = {
|
||||||
|
"NoAction": "无动作",
|
||||||
|
"KillSelf": "退出软件",
|
||||||
|
"Sleep": "睡眠",
|
||||||
|
"Hibernate": "休眠",
|
||||||
|
"Shutdown": "关机",
|
||||||
|
}
|
||||||
|
self.power_combox.currentIndexChanged.disconnect()
|
||||||
|
self.power_combox.setCurrentText(mode_book[Config.power_sign])
|
||||||
|
self.power_combox.currentIndexChanged.connect(self.set_power_sign)
|
||||||
|
|
||||||
def __init__(self, name: str, parent=None):
|
def set_power_sign(self) -> None:
|
||||||
super().__init__(parent)
|
"""设置所有任务完成后动作"""
|
||||||
|
|
||||||
self.setObjectName(name)
|
if not Config.running_list:
|
||||||
|
|
||||||
layout = QVBoxLayout()
|
self.power_combox.currentIndexChanged.disconnect()
|
||||||
|
self.power_combox.setCurrentText("无动作")
|
||||||
scrollArea = ScrollArea()
|
self.power_combox.currentIndexChanged.connect(self.set_power_sign)
|
||||||
scrollArea.setWidgetResizable(True)
|
logger.warning("没有正在运行的任务,无法设置任务完成后动作")
|
||||||
|
MainInfoBar.push_info_bar(
|
||||||
content_widget = QWidget()
|
"warning",
|
||||||
content_layout = QVBoxLayout(content_widget)
|
"没有正在运行的任务",
|
||||||
|
"无法设置任务完成后动作",
|
||||||
self.top_bar = self.DispatchTopBar(self, name)
|
5000,
|
||||||
self.info = self.DispatchInfoCard(self)
|
|
||||||
|
|
||||||
content_layout.addWidget(self.top_bar)
|
|
||||||
content_layout.addWidget(self.info)
|
|
||||||
|
|
||||||
scrollArea.setWidget(content_widget)
|
|
||||||
|
|
||||||
layout.addWidget(scrollArea)
|
|
||||||
|
|
||||||
self.setLayout(layout)
|
|
||||||
|
|
||||||
class DispatchTopBar(CardWidget):
|
|
||||||
|
|
||||||
def __init__(self, parent=None, name: str = None):
|
|
||||||
super().__init__(parent)
|
|
||||||
|
|
||||||
Layout = QHBoxLayout(self)
|
|
||||||
|
|
||||||
if name == "主调度台":
|
|
||||||
|
|
||||||
self.Lable = SubtitleLabel("", self)
|
|
||||||
self.Lable.hide()
|
|
||||||
self.object = ComboBox()
|
|
||||||
self.object.setPlaceholderText("请选择调度对象")
|
|
||||||
self.mode = ComboBox()
|
|
||||||
self.mode.setPlaceholderText("请选择调度模式")
|
|
||||||
|
|
||||||
self.multi_button = PushButton("添加任务")
|
|
||||||
self.multi_button.clicked.connect(self.start_multi_task)
|
|
||||||
self.main_button = PushButton("开始任务")
|
|
||||||
self.main_button.clicked.connect(self.start_main_task)
|
|
||||||
self.multi_button.hide()
|
|
||||||
|
|
||||||
Layout.addWidget(self.Lable)
|
|
||||||
Layout.addWidget(self.object)
|
|
||||||
Layout.addWidget(self.mode)
|
|
||||||
Layout.addStretch(1)
|
|
||||||
Layout.addWidget(self.multi_button)
|
|
||||||
Layout.addWidget(self.main_button)
|
|
||||||
|
|
||||||
else:
|
|
||||||
|
|
||||||
self.Lable = SubtitleLabel(name, self)
|
|
||||||
self.main_button = PushButton("中止任务")
|
|
||||||
|
|
||||||
Layout.addWidget(self.Lable)
|
|
||||||
Layout.addStretch(1)
|
|
||||||
Layout.addWidget(self.main_button)
|
|
||||||
|
|
||||||
def start_main_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
|
|
||||||
|
|
||||||
if self.object.currentData() in Config.running_list:
|
|
||||||
logger.warning(f"任务已存在:{self.object.currentData()}")
|
|
||||||
MainInfoBar.push_info_bar(
|
|
||||||
"warning", "任务已存在", self.object.currentData(), 5000
|
|
||||||
)
|
|
||||||
return None
|
|
||||||
|
|
||||||
if "调度队列" in self.object.currentData():
|
|
||||||
|
|
||||||
logger.info(f"用户添加任务:{self.object.currentData()}")
|
|
||||||
TaskManager.add_task(
|
|
||||||
f"{self.mode.currentText()}_主调度台",
|
|
||||||
self.object.currentData(),
|
|
||||||
Config.queue_dict[self.object.currentData()]["Config"].toDict(),
|
|
||||||
)
|
|
||||||
|
|
||||||
elif "脚本" in self.object.currentData():
|
|
||||||
|
|
||||||
if Config.member_dict[self.object.currentData()]["Type"] == "Maa":
|
|
||||||
|
|
||||||
logger.info(f"用户添加任务:{self.object.currentData()}")
|
|
||||||
TaskManager.add_task(
|
|
||||||
f"{self.mode.currentText()}_主调度台",
|
|
||||||
"自定义队列",
|
|
||||||
{"Queue": {"Member_1": self.object.currentData()}},
|
|
||||||
)
|
|
||||||
|
|
||||||
def start_multi_task(self):
|
|
||||||
"""开始任务"""
|
|
||||||
|
|
||||||
# 获取所有可用的队列和实例
|
|
||||||
text_list = []
|
|
||||||
data_list = []
|
|
||||||
for name, info in Config.queue_dict.items():
|
|
||||||
if name in Config.running_list:
|
|
||||||
continue
|
|
||||||
text_list.append(
|
|
||||||
"队列"
|
|
||||||
if info["Config"].get(info["Config"].queueSet_Name) == ""
|
|
||||||
else f"队列 - {info["Config"].get(info["Config"].queueSet_Name)}"
|
|
||||||
)
|
|
||||||
data_list.append(name)
|
|
||||||
|
|
||||||
for name, info in Config.member_dict.items():
|
|
||||||
if name in Config.running_list:
|
|
||||||
continue
|
|
||||||
text_list.append(
|
|
||||||
f"实例 - {info['Type']}"
|
|
||||||
if info["Config"].get(info["Config"].MaaSet_Name) == ""
|
|
||||||
else f"实例 - {info['Type']} - {info["Config"].get(info["Config"].MaaSet_Name)}"
|
|
||||||
)
|
|
||||||
data_list.append(name)
|
|
||||||
|
|
||||||
choice = ComboBoxMessageBox(
|
|
||||||
self.window(),
|
|
||||||
"选择一个对象以添加相应多开任务",
|
|
||||||
["选择调度对象"],
|
|
||||||
[text_list],
|
|
||||||
[data_list],
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if choice.exec() and choice.input[0].currentIndex() != -1:
|
else:
|
||||||
|
|
||||||
if choice.input[0].currentData() in Config.running_list:
|
Config.set_power_sign(self.power_combox.currentData())
|
||||||
logger.warning(f"任务已存在:{choice.input[0].currentData()}")
|
|
||||||
MainInfoBar.push_info_bar(
|
|
||||||
"warning", "任务已存在", choice.input[0].currentData(), 5000
|
|
||||||
)
|
|
||||||
return None
|
|
||||||
|
|
||||||
if "调度队列" in choice.input[0].currentData():
|
def start_multi_task(self) -> None:
|
||||||
|
"""开始任务"""
|
||||||
|
|
||||||
|
# 获取所有可用的队列和实例
|
||||||
|
text_list = []
|
||||||
|
data_list = []
|
||||||
|
for name, info in Config.queue_dict.items():
|
||||||
|
if name in Config.running_list:
|
||||||
|
continue
|
||||||
|
text_list.append(
|
||||||
|
"队列"
|
||||||
|
if info["Config"].get(info["Config"].queueSet_Name) == ""
|
||||||
|
else f"队列 - {info["Config"].get(info["Config"].queueSet_Name)}"
|
||||||
|
)
|
||||||
|
data_list.append(name)
|
||||||
|
|
||||||
|
for name, info in Config.member_dict.items():
|
||||||
|
if name in Config.running_list:
|
||||||
|
continue
|
||||||
|
text_list.append(
|
||||||
|
f"实例 - {info['Type']}"
|
||||||
|
if info["Config"].get(info["Config"].MaaSet_Name) == ""
|
||||||
|
else f"实例 - {info['Type']} - {info["Config"].get(info["Config"].MaaSet_Name)}"
|
||||||
|
)
|
||||||
|
data_list.append(name)
|
||||||
|
|
||||||
|
choice = ComboBoxMessageBox(
|
||||||
|
self.window(),
|
||||||
|
"选择一个对象以添加相应多开任务",
|
||||||
|
["选择调度对象"],
|
||||||
|
[text_list],
|
||||||
|
[data_list],
|
||||||
|
)
|
||||||
|
|
||||||
|
if choice.exec() and choice.input[0].currentIndex() != -1:
|
||||||
|
|
||||||
|
if choice.input[0].currentData() in Config.running_list:
|
||||||
|
logger.warning(f"任务已存在:{choice.input[0].currentData()}")
|
||||||
|
MainInfoBar.push_info_bar(
|
||||||
|
"warning", "任务已存在", choice.input[0].currentData(), 5000
|
||||||
|
)
|
||||||
|
return None
|
||||||
|
|
||||||
|
if "调度队列" in choice.input[0].currentData():
|
||||||
|
|
||||||
|
logger.info(f"用户添加任务:{choice.input[0].currentData()}")
|
||||||
|
TaskManager.add_task(
|
||||||
|
"自动代理_新调度台",
|
||||||
|
choice.input[0].currentData(),
|
||||||
|
Config.queue_dict[choice.input[0].currentData()]["Config"].toDict(),
|
||||||
|
)
|
||||||
|
|
||||||
|
elif "脚本" in choice.input[0].currentData():
|
||||||
|
|
||||||
|
if Config.member_dict[choice.input[0].currentData()]["Type"] == "Maa":
|
||||||
|
|
||||||
logger.info(f"用户添加任务:{choice.input[0].currentData()}")
|
logger.info(f"用户添加任务:{choice.input[0].currentData()}")
|
||||||
TaskManager.add_task(
|
TaskManager.add_task(
|
||||||
"自动代理_新调度台",
|
"自动代理_新调度台",
|
||||||
choice.input[0].currentData(),
|
f"自定义队列 - {choice.input[0].currentData()}",
|
||||||
Config.queue_dict[choice.input[0].currentData()][
|
{"Queue": {"Member_1": choice.input[0].currentData()}},
|
||||||
"Config"
|
|
||||||
].toDict(),
|
|
||||||
)
|
)
|
||||||
|
|
||||||
elif "脚本" in choice.input[0].currentData():
|
class DispatchBox(QWidget):
|
||||||
|
|
||||||
if (
|
def __init__(self, name: str, parent=None):
|
||||||
Config.member_dict[choice.input[0].currentData()]["Type"]
|
|
||||||
== "Maa"
|
|
||||||
):
|
|
||||||
|
|
||||||
logger.info(f"用户添加任务:{choice.input[0].currentData()}")
|
|
||||||
TaskManager.add_task(
|
|
||||||
"自动代理_新调度台",
|
|
||||||
f"自定义队列 - {choice.input[0].currentData()}",
|
|
||||||
{"Queue": {"Member_1": choice.input[0].currentData()}},
|
|
||||||
)
|
|
||||||
|
|
||||||
class DispatchInfoCard(HeaderCardWidget):
|
|
||||||
|
|
||||||
def __init__(self, parent=None):
|
|
||||||
super().__init__(parent)
|
super().__init__(parent)
|
||||||
|
|
||||||
self.setTitle("调度信息")
|
self.setObjectName(name)
|
||||||
|
|
||||||
self.task = self.TaskInfoCard(self)
|
layout = QVBoxLayout()
|
||||||
self.user = self.UserInfoCard(self)
|
|
||||||
self.log_text = self.LogCard(self)
|
|
||||||
|
|
||||||
self.viewLayout.addWidget(self.task)
|
scrollArea = ScrollArea()
|
||||||
self.viewLayout.addWidget(self.user)
|
scrollArea.setWidgetResizable(True)
|
||||||
self.viewLayout.addWidget(self.log_text)
|
scrollArea.setContentsMargins(0, 0, 0, 0)
|
||||||
|
scrollArea.setStyleSheet("background: transparent; border: none;")
|
||||||
|
|
||||||
self.viewLayout.setStretch(0, 1)
|
content_widget = QWidget()
|
||||||
self.viewLayout.setStretch(1, 1)
|
content_layout = QVBoxLayout(content_widget)
|
||||||
self.viewLayout.setStretch(2, 5)
|
|
||||||
|
|
||||||
def update_board(self, task_list: list, user_list: list, log: str):
|
self.top_bar = self.DispatchTopBar(self, name)
|
||||||
"""更新调度信息"""
|
self.info = self.DispatchInfoCard(self)
|
||||||
|
|
||||||
self.task.update_task(task_list)
|
content_layout.addWidget(self.top_bar)
|
||||||
self.user.update_user(user_list)
|
content_layout.addWidget(self.info)
|
||||||
self.log_text.text.setText(log)
|
|
||||||
|
|
||||||
class TaskInfoCard(HeaderCardWidget):
|
scrollArea.setWidget(content_widget)
|
||||||
|
|
||||||
|
layout.addWidget(scrollArea)
|
||||||
|
|
||||||
|
self.setLayout(layout)
|
||||||
|
|
||||||
|
class DispatchTopBar(CardWidget):
|
||||||
|
|
||||||
|
def __init__(self, parent=None, name: str = None):
|
||||||
|
super().__init__(parent)
|
||||||
|
|
||||||
|
Layout = QHBoxLayout(self)
|
||||||
|
|
||||||
|
if name == "主调度台":
|
||||||
|
|
||||||
|
self.Lable = SubtitleLabel("", self)
|
||||||
|
self.Lable.hide()
|
||||||
|
self.object = ComboBox()
|
||||||
|
self.object.setPlaceholderText("请选择调度对象")
|
||||||
|
self.mode = ComboBox()
|
||||||
|
self.mode.setPlaceholderText("请选择调度模式")
|
||||||
|
|
||||||
|
self.main_button = PushButton("开始任务")
|
||||||
|
self.main_button.clicked.connect(self.start_main_task)
|
||||||
|
|
||||||
|
Layout.addWidget(self.Lable)
|
||||||
|
Layout.addWidget(self.object)
|
||||||
|
Layout.addWidget(self.mode)
|
||||||
|
Layout.addStretch(1)
|
||||||
|
Layout.addWidget(self.main_button)
|
||||||
|
|
||||||
|
else:
|
||||||
|
|
||||||
|
self.Lable = SubtitleLabel(name, self)
|
||||||
|
self.main_button = PushButton("中止任务")
|
||||||
|
|
||||||
|
Layout.addWidget(self.Lable)
|
||||||
|
Layout.addStretch(1)
|
||||||
|
Layout.addWidget(self.main_button)
|
||||||
|
|
||||||
|
def start_main_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
|
||||||
|
|
||||||
|
if self.object.currentData() in Config.running_list:
|
||||||
|
logger.warning(f"任务已存在:{self.object.currentData()}")
|
||||||
|
MainInfoBar.push_info_bar(
|
||||||
|
"warning", "任务已存在", self.object.currentData(), 5000
|
||||||
|
)
|
||||||
|
return None
|
||||||
|
|
||||||
|
if "调度队列" in self.object.currentData():
|
||||||
|
|
||||||
|
logger.info(f"用户添加任务:{self.object.currentData()}")
|
||||||
|
TaskManager.add_task(
|
||||||
|
f"{self.mode.currentText()}_主调度台",
|
||||||
|
self.object.currentData(),
|
||||||
|
Config.queue_dict[self.object.currentData()]["Config"].toDict(),
|
||||||
|
)
|
||||||
|
|
||||||
|
elif "脚本" in self.object.currentData():
|
||||||
|
|
||||||
|
if Config.member_dict[self.object.currentData()]["Type"] == "Maa":
|
||||||
|
|
||||||
|
logger.info(f"用户添加任务:{self.object.currentData()}")
|
||||||
|
TaskManager.add_task(
|
||||||
|
f"{self.mode.currentText()}_主调度台",
|
||||||
|
"自定义队列",
|
||||||
|
{"Queue": {"Member_1": self.object.currentData()}},
|
||||||
|
)
|
||||||
|
|
||||||
|
class DispatchInfoCard(HeaderCardWidget):
|
||||||
|
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
super().__init__(parent)
|
super().__init__(parent)
|
||||||
self.setTitle("任务队列")
|
|
||||||
|
|
||||||
self.Layout = QVBoxLayout()
|
self.setTitle("调度信息")
|
||||||
self.viewLayout.addLayout(self.Layout)
|
|
||||||
self.viewLayout.setContentsMargins(3, 0, 3, 3)
|
|
||||||
|
|
||||||
self.task_cards: List[StatefulItemCard] = []
|
self.task = self.TaskInfoCard(self)
|
||||||
|
self.user = self.UserInfoCard(self)
|
||||||
|
self.log_text = self.LogCard(self)
|
||||||
|
|
||||||
def create_task(self, task_list: list):
|
self.viewLayout.addWidget(self.task)
|
||||||
"""创建任务队列"""
|
self.viewLayout.addWidget(self.user)
|
||||||
|
self.viewLayout.addWidget(self.log_text)
|
||||||
|
|
||||||
while self.Layout.count() > 0:
|
self.viewLayout.setStretch(0, 1)
|
||||||
item = self.Layout.takeAt(0)
|
self.viewLayout.setStretch(1, 1)
|
||||||
if item.spacerItem():
|
self.viewLayout.setStretch(2, 5)
|
||||||
self.Layout.removeItem(item.spacerItem())
|
|
||||||
elif item.widget():
|
|
||||||
item.widget().deleteLater()
|
|
||||||
|
|
||||||
self.task_cards = []
|
def update_board(self, task_list: list, user_list: list, log: str):
|
||||||
|
"""更新调度信息"""
|
||||||
|
|
||||||
for task in task_list:
|
self.task.update_task(task_list)
|
||||||
|
self.user.update_user(user_list)
|
||||||
|
self.log_text.text.setText(log)
|
||||||
|
|
||||||
self.task_cards.append(StatefulItemCard(task))
|
class TaskInfoCard(HeaderCardWidget):
|
||||||
self.Layout.addWidget(self.task_cards[-1])
|
|
||||||
|
|
||||||
self.Layout.addStretch(1)
|
def __init__(self, parent=None):
|
||||||
|
super().__init__(parent)
|
||||||
|
self.setTitle("任务队列")
|
||||||
|
|
||||||
def update_task(self, task_list: list):
|
self.Layout = QVBoxLayout()
|
||||||
"""更新任务队列"""
|
self.viewLayout.addLayout(self.Layout)
|
||||||
|
self.viewLayout.setContentsMargins(3, 0, 3, 3)
|
||||||
|
|
||||||
for i in range(len(task_list)):
|
self.task_cards: List[StatefulItemCard] = []
|
||||||
|
|
||||||
self.task_cards[i].update_status(task_list[i][1])
|
def create_task(self, task_list: list):
|
||||||
|
"""创建任务队列"""
|
||||||
|
|
||||||
class UserInfoCard(HeaderCardWidget):
|
while self.Layout.count() > 0:
|
||||||
|
item = self.Layout.takeAt(0)
|
||||||
|
if item.spacerItem():
|
||||||
|
self.Layout.removeItem(item.spacerItem())
|
||||||
|
elif item.widget():
|
||||||
|
item.widget().deleteLater()
|
||||||
|
|
||||||
def __init__(self, parent=None):
|
self.task_cards = []
|
||||||
super().__init__(parent)
|
|
||||||
self.setTitle("用户队列")
|
|
||||||
|
|
||||||
self.Layout = QVBoxLayout()
|
for task in task_list:
|
||||||
self.viewLayout.addLayout(self.Layout)
|
|
||||||
self.viewLayout.setContentsMargins(3, 0, 3, 3)
|
|
||||||
|
|
||||||
self.user_cards: List[StatefulItemCard] = []
|
self.task_cards.append(StatefulItemCard(task))
|
||||||
|
self.Layout.addWidget(self.task_cards[-1])
|
||||||
|
|
||||||
def create_user(self, user_list: list):
|
self.Layout.addStretch(1)
|
||||||
"""创建用户队列"""
|
|
||||||
|
|
||||||
while self.Layout.count() > 0:
|
def update_task(self, task_list: list):
|
||||||
item = self.Layout.takeAt(0)
|
"""更新任务队列"""
|
||||||
if item.spacerItem():
|
|
||||||
self.Layout.removeItem(item.spacerItem())
|
|
||||||
elif item.widget():
|
|
||||||
item.widget().deleteLater()
|
|
||||||
|
|
||||||
self.user_cards = []
|
for i in range(len(task_list)):
|
||||||
|
|
||||||
for user in user_list:
|
self.task_cards[i].update_status(task_list[i][1])
|
||||||
|
|
||||||
self.user_cards.append(StatefulItemCard(user))
|
class UserInfoCard(HeaderCardWidget):
|
||||||
self.Layout.addWidget(self.user_cards[-1])
|
|
||||||
|
|
||||||
self.Layout.addStretch(1)
|
def __init__(self, parent=None):
|
||||||
|
super().__init__(parent)
|
||||||
|
self.setTitle("用户队列")
|
||||||
|
|
||||||
def update_user(self, user_list: list):
|
self.Layout = QVBoxLayout()
|
||||||
"""更新用户队列"""
|
self.viewLayout.addLayout(self.Layout)
|
||||||
|
self.viewLayout.setContentsMargins(3, 0, 3, 3)
|
||||||
|
|
||||||
for i in range(len(user_list)):
|
self.user_cards: List[StatefulItemCard] = []
|
||||||
|
|
||||||
self.user_cards[i].Label.setText(user_list[i][0])
|
def create_user(self, user_list: list):
|
||||||
self.user_cards[i].update_status(user_list[i][1])
|
"""创建用户队列"""
|
||||||
|
|
||||||
class LogCard(HeaderCardWidget):
|
while self.Layout.count() > 0:
|
||||||
|
item = self.Layout.takeAt(0)
|
||||||
|
if item.spacerItem():
|
||||||
|
self.Layout.removeItem(item.spacerItem())
|
||||||
|
elif item.widget():
|
||||||
|
item.widget().deleteLater()
|
||||||
|
|
||||||
def __init__(self, parent=None):
|
self.user_cards = []
|
||||||
super().__init__(parent)
|
|
||||||
self.setTitle("日志")
|
|
||||||
|
|
||||||
self.text = TextBrowser()
|
for user in user_list:
|
||||||
self.viewLayout.setContentsMargins(3, 0, 3, 3)
|
|
||||||
self.viewLayout.addWidget(self.text)
|
|
||||||
|
|
||||||
self.text.textChanged.connect(self.to_end)
|
self.user_cards.append(StatefulItemCard(user))
|
||||||
|
self.Layout.addWidget(self.user_cards[-1])
|
||||||
|
|
||||||
def to_end(self):
|
self.Layout.addStretch(1)
|
||||||
"""滚动到底部"""
|
|
||||||
|
|
||||||
self.text.moveCursor(QTextCursor.End)
|
def update_user(self, user_list: list):
|
||||||
self.text.ensureCursorVisible()
|
"""更新用户队列"""
|
||||||
|
|
||||||
|
for i in range(len(user_list)):
|
||||||
|
|
||||||
|
self.user_cards[i].Label.setText(user_list[i][0])
|
||||||
|
self.user_cards[i].update_status(user_list[i][1])
|
||||||
|
|
||||||
|
class LogCard(HeaderCardWidget):
|
||||||
|
|
||||||
|
def __init__(self, parent=None):
|
||||||
|
super().__init__(parent)
|
||||||
|
self.setTitle("日志")
|
||||||
|
|
||||||
|
self.text = TextBrowser()
|
||||||
|
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()
|
||||||
|
|||||||
@@ -21,11 +21,10 @@
|
|||||||
"""
|
"""
|
||||||
AUTO_MAA
|
AUTO_MAA
|
||||||
AUTO_MAA更新器
|
AUTO_MAA更新器
|
||||||
v1.2
|
v4.3
|
||||||
作者:DLmaster_361
|
作者:DLmaster_361
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import json
|
|
||||||
import zipfile
|
import zipfile
|
||||||
import requests
|
import requests
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|||||||
@@ -69,6 +69,8 @@ class History(QWidget):
|
|||||||
|
|
||||||
scrollArea = ScrollArea()
|
scrollArea = ScrollArea()
|
||||||
scrollArea.setWidgetResizable(True)
|
scrollArea.setWidgetResizable(True)
|
||||||
|
scrollArea.setContentsMargins(0, 0, 0, 0)
|
||||||
|
scrollArea.setStyleSheet("background: transparent; border: none;")
|
||||||
scrollArea.setWidget(content_widget)
|
scrollArea.setWidget(content_widget)
|
||||||
layout = QVBoxLayout()
|
layout = QVBoxLayout()
|
||||||
layout.addWidget(self.history_top_bar)
|
layout.addWidget(self.history_top_bar)
|
||||||
|
|||||||
@@ -149,6 +149,8 @@ class Home(QWidget):
|
|||||||
layout = QVBoxLayout()
|
layout = QVBoxLayout()
|
||||||
scrollArea = ScrollArea()
|
scrollArea = ScrollArea()
|
||||||
scrollArea.setWidgetResizable(True)
|
scrollArea.setWidgetResizable(True)
|
||||||
|
scrollArea.setContentsMargins(0, 0, 0, 0)
|
||||||
|
scrollArea.setStyleSheet("background: transparent; border: none;")
|
||||||
scrollArea.setWidget(widget)
|
scrollArea.setWidget(widget)
|
||||||
layout.addWidget(scrollArea)
|
layout.addWidget(scrollArea)
|
||||||
self.setLayout(layout)
|
self.setLayout(layout)
|
||||||
|
|||||||
@@ -192,6 +192,7 @@ class AUTO_MAA(MSFluentWindow):
|
|||||||
self.set_min_method()
|
self.set_min_method()
|
||||||
|
|
||||||
Config.user_info_changed.connect(self.member_manager.refresh_dashboard)
|
Config.user_info_changed.connect(self.member_manager.refresh_dashboard)
|
||||||
|
Config.power_sign_changed.connect(self.dispatch_center.update_power_sign)
|
||||||
TaskManager.create_gui.connect(self.dispatch_center.add_board)
|
TaskManager.create_gui.connect(self.dispatch_center.add_board)
|
||||||
TaskManager.connect_gui.connect(self.dispatch_center.connect_main_board)
|
TaskManager.connect_gui.connect(self.dispatch_center.connect_main_board)
|
||||||
Notify.push_info_bar.connect(MainInfoBar.push_info_bar)
|
Notify.push_info_bar.connect(MainInfoBar.push_info_bar)
|
||||||
|
|||||||
@@ -38,7 +38,6 @@ from PySide6.QtWidgets import (
|
|||||||
from PySide6.QtGui import QIcon
|
from PySide6.QtGui import QIcon
|
||||||
from qfluentwidgets import (
|
from qfluentwidgets import (
|
||||||
Action,
|
Action,
|
||||||
Pivot,
|
|
||||||
ScrollArea,
|
ScrollArea,
|
||||||
FluentIcon,
|
FluentIcon,
|
||||||
MessageBox,
|
MessageBox,
|
||||||
@@ -49,12 +48,13 @@ from qfluentwidgets import (
|
|||||||
TableWidget,
|
TableWidget,
|
||||||
PrimaryToolButton,
|
PrimaryToolButton,
|
||||||
)
|
)
|
||||||
from PySide6.QtCore import Qt, Signal
|
from PySide6.QtCore import Signal
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from functools import partial
|
from functools import partial
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import List
|
from typing import List
|
||||||
import shutil
|
import shutil
|
||||||
|
import json
|
||||||
|
|
||||||
from app.core import Config, MainInfoBar, TaskManager, MaaConfig, MaaUserConfig, Network
|
from app.core import Config, MainInfoBar, TaskManager, MaaConfig, MaaUserConfig, Network
|
||||||
from app.services import Crypto
|
from app.services import Crypto
|
||||||
@@ -71,6 +71,7 @@ from .Widget import (
|
|||||||
SwitchSettingCard,
|
SwitchSettingCard,
|
||||||
PushAndSwitchButtonSettingCard,
|
PushAndSwitchButtonSettingCard,
|
||||||
PushAndComboBoxSettingCard,
|
PushAndComboBoxSettingCard,
|
||||||
|
PivotArea,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -484,13 +485,17 @@ class MemberManager(QWidget):
|
|||||||
|
|
||||||
self.setObjectName("脚本管理页面组")
|
self.setObjectName("脚本管理页面组")
|
||||||
|
|
||||||
self.pivot = Pivot(self)
|
self.pivotArea = PivotArea(self)
|
||||||
|
self.pivot = self.pivotArea.pivot
|
||||||
|
|
||||||
self.stackedWidget = QStackedWidget(self)
|
self.stackedWidget = QStackedWidget(self)
|
||||||
self.Layout = QVBoxLayout(self)
|
self.stackedWidget.setContentsMargins(0, 0, 0, 0)
|
||||||
|
self.stackedWidget.setStyleSheet("background: transparent; border: none;")
|
||||||
|
|
||||||
self.script_list: List[MemberManager.MemberSettingBox.MaaSettingBox] = []
|
self.script_list: List[MemberManager.MemberSettingBox.MaaSettingBox] = []
|
||||||
|
|
||||||
self.Layout.addWidget(self.pivot, 0, Qt.AlignHCenter)
|
self.Layout = QVBoxLayout(self)
|
||||||
|
self.Layout.addWidget(self.pivotArea)
|
||||||
self.Layout.addWidget(self.stackedWidget)
|
self.Layout.addWidget(self.stackedWidget)
|
||||||
self.Layout.setContentsMargins(0, 0, 0, 0)
|
self.Layout.setContentsMargins(0, 0, 0, 0)
|
||||||
|
|
||||||
@@ -562,6 +567,8 @@ class MemberManager(QWidget):
|
|||||||
|
|
||||||
scrollArea = ScrollArea()
|
scrollArea = ScrollArea()
|
||||||
scrollArea.setWidgetResizable(True)
|
scrollArea.setWidgetResizable(True)
|
||||||
|
scrollArea.setContentsMargins(0, 0, 0, 0)
|
||||||
|
scrollArea.setStyleSheet("background: transparent; border: none;")
|
||||||
|
|
||||||
content_widget = QWidget()
|
content_widget = QWidget()
|
||||||
content_layout = QVBoxLayout(content_widget)
|
content_layout = QVBoxLayout(content_widget)
|
||||||
@@ -1010,9 +1017,14 @@ class MemberManager(QWidget):
|
|||||||
self.setObjectName("用户管理")
|
self.setObjectName("用户管理")
|
||||||
self.name = name
|
self.name = name
|
||||||
|
|
||||||
self.pivot = Pivot(self)
|
self.pivotArea = PivotArea(self)
|
||||||
|
self.pivot = self.pivotArea.pivot
|
||||||
|
|
||||||
self.stackedWidget = QStackedWidget(self)
|
self.stackedWidget = QStackedWidget(self)
|
||||||
self.Layout = QVBoxLayout(self)
|
self.stackedWidget.setContentsMargins(0, 0, 0, 0)
|
||||||
|
self.stackedWidget.setStyleSheet(
|
||||||
|
"background: transparent; border: none;"
|
||||||
|
)
|
||||||
|
|
||||||
self.script_list: List[
|
self.script_list: List[
|
||||||
MemberManager.MemberSettingBox.MaaSettingBox.UserManager.UserSettingBox.UserMemberSettingBox
|
MemberManager.MemberSettingBox.MaaSettingBox.UserManager.UserSettingBox.UserMemberSettingBox
|
||||||
@@ -1023,7 +1035,8 @@ class MemberManager(QWidget):
|
|||||||
self.stackedWidget.addWidget(self.user_dashboard)
|
self.stackedWidget.addWidget(self.user_dashboard)
|
||||||
self.pivot.addItem(routeKey="用户仪表盘", text="用户仪表盘")
|
self.pivot.addItem(routeKey="用户仪表盘", text="用户仪表盘")
|
||||||
|
|
||||||
self.Layout.addWidget(self.pivot, 0, Qt.AlignHCenter)
|
self.Layout = QVBoxLayout(self)
|
||||||
|
self.Layout.addWidget(self.pivotArea)
|
||||||
self.Layout.addWidget(self.stackedWidget)
|
self.Layout.addWidget(self.stackedWidget)
|
||||||
self.Layout.setContentsMargins(0, 0, 0, 0)
|
self.Layout.setContentsMargins(0, 0, 0, 0)
|
||||||
|
|
||||||
@@ -1398,7 +1411,7 @@ class MemberManager(QWidget):
|
|||||||
self.card_InfrastMode = PushAndComboBoxSettingCard(
|
self.card_InfrastMode = PushAndComboBoxSettingCard(
|
||||||
icon=FluentIcon.CAFE,
|
icon=FluentIcon.CAFE,
|
||||||
title="基建模式",
|
title="基建模式",
|
||||||
content="配置文件仅在自定义基建中生效",
|
content="自定义基建配置文件未生效",
|
||||||
text="选择配置文件",
|
text="选择配置文件",
|
||||||
texts=[
|
texts=[
|
||||||
"常规模式",
|
"常规模式",
|
||||||
@@ -1549,6 +1562,9 @@ class MemberManager(QWidget):
|
|||||||
self.card_Mode.comboBox.currentIndexChanged.connect(
|
self.card_Mode.comboBox.currentIndexChanged.connect(
|
||||||
self.switch_mode
|
self.switch_mode
|
||||||
)
|
)
|
||||||
|
self.card_InfrastMode.comboBox.currentIndexChanged.connect(
|
||||||
|
self.switch_infrastructure
|
||||||
|
)
|
||||||
self.card_Annihilation.clicked.connect(
|
self.card_Annihilation.clicked.connect(
|
||||||
lambda: self.set_maa("Annihilation")
|
lambda: self.set_maa("Annihilation")
|
||||||
)
|
)
|
||||||
@@ -1562,6 +1578,7 @@ class MemberManager(QWidget):
|
|||||||
Config.PASSWORD_refreshed.connect(self.refresh_password)
|
Config.PASSWORD_refreshed.connect(self.refresh_password)
|
||||||
|
|
||||||
self.switch_mode()
|
self.switch_mode()
|
||||||
|
self.switch_infrastructure()
|
||||||
|
|
||||||
def switch_mode(self) -> None:
|
def switch_mode(self) -> None:
|
||||||
|
|
||||||
@@ -1579,6 +1596,27 @@ class MemberManager(QWidget):
|
|||||||
self.card_Annihilation.button.setVisible(True)
|
self.card_Annihilation.button.setVisible(True)
|
||||||
self.card_Routine.setVisible(True)
|
self.card_Routine.setVisible(True)
|
||||||
|
|
||||||
|
def switch_infrastructure(self) -> None:
|
||||||
|
|
||||||
|
if (
|
||||||
|
self.config.get(self.config.Info_InfrastMode)
|
||||||
|
== "Custom"
|
||||||
|
):
|
||||||
|
self.card_InfrastMode.button.setVisible(True)
|
||||||
|
with (
|
||||||
|
self.user_path
|
||||||
|
/ "Infrastructure/infrastructure.json"
|
||||||
|
).open(mode="r", encoding="utf-8") as f:
|
||||||
|
infrastructure = json.load(f)
|
||||||
|
self.card_InfrastMode.setContent(
|
||||||
|
f"当前基建配置:{infrastructure.get("title","未命名")}"
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
self.card_InfrastMode.button.setVisible(False)
|
||||||
|
self.card_InfrastMode.setContent(
|
||||||
|
"自定义基建配置文件未生效"
|
||||||
|
)
|
||||||
|
|
||||||
def refresh_gameid(self):
|
def refresh_gameid(self):
|
||||||
|
|
||||||
self.card_GameId.reLoadOptions(
|
self.card_GameId.reLoadOptions(
|
||||||
@@ -1634,6 +1672,7 @@ class MemberManager(QWidget):
|
|||||||
self.user_path
|
self.user_path
|
||||||
/ "Infrastructure/infrastructure.json",
|
/ "Infrastructure/infrastructure.json",
|
||||||
)
|
)
|
||||||
|
self.switch_infrastructure()
|
||||||
else:
|
else:
|
||||||
logger.warning("未选择自定义基建文件")
|
logger.warning("未选择自定义基建文件")
|
||||||
MainInfoBar.push_info_bar(
|
MainInfoBar.push_info_bar(
|
||||||
|
|||||||
@@ -34,14 +34,12 @@ from PySide6.QtWidgets import (
|
|||||||
)
|
)
|
||||||
from qfluentwidgets import (
|
from qfluentwidgets import (
|
||||||
Action,
|
Action,
|
||||||
Pivot,
|
|
||||||
ScrollArea,
|
ScrollArea,
|
||||||
FluentIcon,
|
FluentIcon,
|
||||||
MessageBox,
|
MessageBox,
|
||||||
HeaderCardWidget,
|
HeaderCardWidget,
|
||||||
CommandBar,
|
CommandBar,
|
||||||
)
|
)
|
||||||
from PySide6.QtCore import Qt
|
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
from app.core import QueueConfig, Config, MainInfoBar
|
from app.core import QueueConfig, Config, MainInfoBar
|
||||||
@@ -52,6 +50,7 @@ from .Widget import (
|
|||||||
TimeEditSettingCard,
|
TimeEditSettingCard,
|
||||||
NoOptionComboBoxSettingCard,
|
NoOptionComboBoxSettingCard,
|
||||||
HistoryCard,
|
HistoryCard,
|
||||||
|
PivotArea,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -305,15 +304,19 @@ class QueueManager(QWidget):
|
|||||||
|
|
||||||
self.setObjectName("调度队列管理")
|
self.setObjectName("调度队列管理")
|
||||||
|
|
||||||
self.pivot = Pivot(self)
|
self.pivotArea = PivotArea()
|
||||||
|
self.pivot = self.pivotArea.pivot
|
||||||
|
|
||||||
self.stackedWidget = QStackedWidget(self)
|
self.stackedWidget = QStackedWidget(self)
|
||||||
self.Layout = QVBoxLayout(self)
|
self.stackedWidget.setContentsMargins(0, 0, 0, 0)
|
||||||
|
self.stackedWidget.setStyleSheet("background: transparent; border: none;")
|
||||||
|
|
||||||
self.script_list: List[
|
self.script_list: List[
|
||||||
QueueManager.QueueSettingBox.QueueMemberSettingBox
|
QueueManager.QueueSettingBox.QueueMemberSettingBox
|
||||||
] = []
|
] = []
|
||||||
|
|
||||||
self.Layout.addWidget(self.pivot, 0, Qt.AlignHCenter)
|
self.Layout = QVBoxLayout(self)
|
||||||
|
self.Layout.addWidget(self.pivotArea)
|
||||||
self.Layout.addWidget(self.stackedWidget)
|
self.Layout.addWidget(self.stackedWidget)
|
||||||
self.Layout.setContentsMargins(0, 0, 0, 0)
|
self.Layout.setContentsMargins(0, 0, 0, 0)
|
||||||
|
|
||||||
@@ -380,6 +383,8 @@ class QueueManager(QWidget):
|
|||||||
|
|
||||||
scrollArea = ScrollArea()
|
scrollArea = ScrollArea()
|
||||||
scrollArea.setWidgetResizable(True)
|
scrollArea.setWidgetResizable(True)
|
||||||
|
scrollArea.setContentsMargins(0, 0, 0, 0)
|
||||||
|
scrollArea.setStyleSheet("background: transparent; border: none;")
|
||||||
|
|
||||||
content_widget = QWidget()
|
content_widget = QWidget()
|
||||||
content_layout = QVBoxLayout(content_widget)
|
content_layout = QVBoxLayout(content_widget)
|
||||||
|
|||||||
@@ -103,6 +103,8 @@ class Setting(QWidget):
|
|||||||
|
|
||||||
scrollArea = ScrollArea()
|
scrollArea = ScrollArea()
|
||||||
scrollArea.setWidgetResizable(True)
|
scrollArea.setWidgetResizable(True)
|
||||||
|
scrollArea.setContentsMargins(0, 0, 0, 0)
|
||||||
|
scrollArea.setStyleSheet("background: transparent; border: none;")
|
||||||
scrollArea.setWidget(content_widget)
|
scrollArea.setWidget(content_widget)
|
||||||
layout = QVBoxLayout()
|
layout = QVBoxLayout()
|
||||||
layout.addWidget(scrollArea)
|
layout.addWidget(scrollArea)
|
||||||
|
|||||||
@@ -66,7 +66,6 @@ if __name__ == "__main__":
|
|||||||
version = json.load(f)
|
version = json.load(f)
|
||||||
|
|
||||||
main_version_numb = list(map(int, version["main_version"].split(".")))
|
main_version_numb = list(map(int, version["main_version"].split(".")))
|
||||||
updater_version_numb = list(map(int, version["updater_version"].split(".")))
|
|
||||||
|
|
||||||
print("Packaging AUTO_MAA main program ...")
|
print("Packaging AUTO_MAA main program ...")
|
||||||
|
|
||||||
@@ -120,7 +119,7 @@ if __name__ == "__main__":
|
|||||||
shutil.make_archive(
|
shutil.make_archive(
|
||||||
base_name=root_path / f"AUTO_MAA_{version_text(main_version_numb)}",
|
base_name=root_path / f"AUTO_MAA_{version_text(main_version_numb)}",
|
||||||
format="zip",
|
format="zip",
|
||||||
root_dir=root_path / "AUTO_MAA",
|
root_dir=root_path / "AUTO_MAA_Setup",
|
||||||
base_dir=".",
|
base_dir=".",
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -139,6 +138,6 @@ if __name__ == "__main__":
|
|||||||
all_version_info[key] = value.copy()
|
all_version_info[key] = value.copy()
|
||||||
|
|
||||||
(root_path / "version_info.txt").write_text(
|
(root_path / "version_info.txt").write_text(
|
||||||
f"{version_text(main_version_numb)}\n{version_text(updater_version_numb)}\n<!--{json.dumps(version["version_info"], ensure_ascii=False)}-->\n{version_info_markdown(all_version_info)}",
|
f"{version_text(main_version_numb)}\n\n<!--{json.dumps(version["version_info"], ensure_ascii=False)}-->\n{version_info_markdown(all_version_info)}",
|
||||||
encoding="utf-8",
|
encoding="utf-8",
|
||||||
)
|
)
|
||||||
|
|||||||
1
main.py
1
main.py
@@ -43,6 +43,7 @@ def main():
|
|||||||
|
|
||||||
window = AUTO_MAA()
|
window = AUTO_MAA()
|
||||||
window.show_ui("显示主窗口")
|
window.show_ui("显示主窗口")
|
||||||
|
window.show_ui("配置托盘")
|
||||||
window.start_up_task()
|
window.start_up_task()
|
||||||
sys.exit(application.exec())
|
sys.exit(application.exec())
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,19 @@
|
|||||||
{
|
{
|
||||||
"main_version": "4.3.7.0",
|
"main_version": "4.3.8.1",
|
||||||
"updater_version": "1.0.0.0",
|
|
||||||
"version_info": {
|
"version_info": {
|
||||||
|
"4.3.8.1": {
|
||||||
|
"新增功能": [
|
||||||
|
"自定义基建显示配置名称",
|
||||||
|
"主调度台添加仅一次电源任务"
|
||||||
|
],
|
||||||
|
"修复bug": [
|
||||||
|
"电源相关选项改为所有任务完成后生效",
|
||||||
|
"适配MAAv5.16.3的ADB报错信息更改"
|
||||||
|
],
|
||||||
|
"程序优化": [
|
||||||
|
"UI样式优化,进一步适配win10主题"
|
||||||
|
]
|
||||||
|
},
|
||||||
"4.3.7.0": {
|
"4.3.7.0": {
|
||||||
"新增功能": [
|
"新增功能": [
|
||||||
"下载器支持完整mirrorc列表"
|
"下载器支持完整mirrorc列表"
|
||||||
|
|||||||
Reference in New Issue
Block a user