feat: 新增MAA稳定版更新提醒
This commit is contained in:
@@ -29,10 +29,12 @@ from loguru import logger
|
|||||||
from PySide6.QtCore import QThread, QObject, Signal
|
from PySide6.QtCore import QThread, QObject, Signal
|
||||||
from qfluentwidgets import MessageBox
|
from qfluentwidgets import MessageBox
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
from packaging import version
|
||||||
from typing import Dict, Union
|
from typing import Dict, Union
|
||||||
|
|
||||||
from .config import Config
|
from .config import Config
|
||||||
from .main_info_bar import MainInfoBar
|
from .main_info_bar import MainInfoBar
|
||||||
|
from .network import Network
|
||||||
from app.models import MaaManager
|
from app.models import MaaManager
|
||||||
from app.services import System
|
from app.services import System
|
||||||
|
|
||||||
@@ -40,6 +42,7 @@ from app.services import System
|
|||||||
class Task(QThread):
|
class Task(QThread):
|
||||||
"""业务线程"""
|
"""业务线程"""
|
||||||
|
|
||||||
|
check_maa_version = Signal(str)
|
||||||
push_info_bar = Signal(str, str, str, int)
|
push_info_bar = Signal(str, str, str, int)
|
||||||
question = Signal(str, str)
|
question = Signal(str, str)
|
||||||
question_response = Signal(bool)
|
question_response = Signal(bool)
|
||||||
@@ -77,6 +80,7 @@ class Task(QThread):
|
|||||||
Config.member_dict[self.name],
|
Config.member_dict[self.name],
|
||||||
(None if "全局" in self.mode else self.info["SetMaaInfo"]["Path"]),
|
(None if "全局" in self.mode else self.info["SetMaaInfo"]["Path"]),
|
||||||
)
|
)
|
||||||
|
self.task.check_maa_version.connect(self.check_maa_version.emit)
|
||||||
self.task.push_info_bar.connect(self.push_info_bar.emit)
|
self.task.push_info_bar.connect(self.push_info_bar.emit)
|
||||||
self.task.accomplish.connect(lambda: self.accomplish.emit([]))
|
self.task.accomplish.connect(lambda: self.accomplish.emit([]))
|
||||||
|
|
||||||
@@ -132,6 +136,7 @@ class Task(QThread):
|
|||||||
Config.member_dict[task[2]],
|
Config.member_dict[task[2]],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
self.task.check_maa_version.connect(self.check_maa_version.emit)
|
||||||
self.task.question.connect(self.question.emit)
|
self.task.question.connect(self.question.emit)
|
||||||
self.question_response.disconnect()
|
self.question_response.disconnect()
|
||||||
self.question_response.connect(self.task.question_response.emit)
|
self.question_response.connect(self.task.question_response.emit)
|
||||||
@@ -166,7 +171,6 @@ class _TaskManager(QObject):
|
|||||||
|
|
||||||
create_gui = Signal(Task)
|
create_gui = Signal(Task)
|
||||||
connect_gui = Signal(Task)
|
connect_gui = Signal(Task)
|
||||||
push_info_bar = Signal(str, str, str, int)
|
|
||||||
|
|
||||||
def __init__(self, main_window=None):
|
def __init__(self, main_window=None):
|
||||||
super(_TaskManager, self).__init__()
|
super(_TaskManager, self).__init__()
|
||||||
@@ -190,6 +194,7 @@ class _TaskManager(QObject):
|
|||||||
|
|
||||||
Config.running_list.append(name)
|
Config.running_list.append(name)
|
||||||
self.task_dict[name] = Task(mode, name, info)
|
self.task_dict[name] = Task(mode, name, info)
|
||||||
|
self.task_dict[name].check_maa_version.connect(self.check_maa_version)
|
||||||
self.task_dict[name].question.connect(
|
self.task_dict[name].question.connect(
|
||||||
lambda title, content: self.push_dialog(name, title, content)
|
lambda title, content: self.push_dialog(name, title, content)
|
||||||
)
|
)
|
||||||
@@ -283,6 +288,39 @@ class _TaskManager(QObject):
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def check_maa_version(self, v: str):
|
||||||
|
"""检查MAA版本"""
|
||||||
|
|
||||||
|
Network.set_info(
|
||||||
|
mode="get",
|
||||||
|
url="https://mirrorchyan.com/api/resources/MAA/latest?user_agent=AutoMaaGui&os=win&arch=x64&channel=stable",
|
||||||
|
)
|
||||||
|
Network.start()
|
||||||
|
Network.loop.exec()
|
||||||
|
if Network.stutus_code == 200:
|
||||||
|
maa_info = Network.response_json
|
||||||
|
else:
|
||||||
|
logger.warning(f"获取MAA版本信息时出错:{Network.error_message}")
|
||||||
|
MainInfoBar.push_info_bar(
|
||||||
|
"warning",
|
||||||
|
"获取MAA版本信息时出错",
|
||||||
|
f"网络错误:{Network.stutus_code}",
|
||||||
|
5000,
|
||||||
|
)
|
||||||
|
return None
|
||||||
|
|
||||||
|
if version.parse(maa_info["data"]["version_name"]) > version.parse(v):
|
||||||
|
|
||||||
|
logger.info(
|
||||||
|
f"检测到MAA版本过低:{v},最新版本:{maa_info['data']['version_name']}"
|
||||||
|
)
|
||||||
|
MainInfoBar.push_info_bar(
|
||||||
|
"info",
|
||||||
|
"MAA版本过低",
|
||||||
|
f"当前版本:{v},最新稳定版:{maa_info['data']['version_name']}",
|
||||||
|
-1,
|
||||||
|
)
|
||||||
|
|
||||||
def push_dialog(self, name: str, title: str, content: str):
|
def push_dialog(self, name: str, title: str, content: str):
|
||||||
"""推送对话框"""
|
"""推送对话框"""
|
||||||
|
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ from datetime import datetime, timedelta
|
|||||||
import subprocess
|
import subprocess
|
||||||
import shutil
|
import shutil
|
||||||
import time
|
import time
|
||||||
|
import re
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from jinja2 import Environment, FileSystemLoader
|
from jinja2 import Environment, FileSystemLoader
|
||||||
from typing import Union, List, Dict
|
from typing import Union, List, Dict
|
||||||
@@ -43,6 +44,7 @@ from app.services import Notify, System
|
|||||||
class MaaManager(QObject):
|
class MaaManager(QObject):
|
||||||
"""MAA控制器"""
|
"""MAA控制器"""
|
||||||
|
|
||||||
|
check_maa_version = Signal(str)
|
||||||
question = Signal(str, str)
|
question = Signal(str, str)
|
||||||
question_response = Signal(bool)
|
question_response = Signal(bool)
|
||||||
update_user_info = Signal(str, dict)
|
update_user_info = Signal(str, dict)
|
||||||
@@ -87,6 +89,7 @@ class MaaManager(QObject):
|
|||||||
|
|
||||||
self.interrupt.connect(self.quit_monitor)
|
self.interrupt.connect(self.quit_monitor)
|
||||||
|
|
||||||
|
self.maa_version = None
|
||||||
self.set = config["Config"].toDict()
|
self.set = config["Config"].toDict()
|
||||||
|
|
||||||
self.data = {}
|
self.data = {}
|
||||||
@@ -743,6 +746,19 @@ class MaaManager(QObject):
|
|||||||
else:
|
else:
|
||||||
self.update_log_text.emit("".join(logs))
|
self.update_log_text.emit("".join(logs))
|
||||||
|
|
||||||
|
# 获取MAA版本号
|
||||||
|
if not self.maa_version:
|
||||||
|
|
||||||
|
section_match = re.search(r"={35}(.*?)={35}", log, re.DOTALL)
|
||||||
|
if section_match:
|
||||||
|
|
||||||
|
version_match = re.search(
|
||||||
|
r"Version\s+v(\d+\.\d+\.\d+(?:-\w+\.\d+)?)", section_match.group(1)
|
||||||
|
)
|
||||||
|
if version_match:
|
||||||
|
self.maa_version = f"v{version_match.group(1)}"
|
||||||
|
self.check_maa_version.emit(self.maa_version)
|
||||||
|
|
||||||
if "自动代理" in mode:
|
if "自动代理" in mode:
|
||||||
|
|
||||||
# 获取最近一条日志的时间
|
# 获取最近一条日志的时间
|
||||||
@@ -765,22 +781,23 @@ class MaaManager(QObject):
|
|||||||
self.weekly_annihilation_limit_reached = False
|
self.weekly_annihilation_limit_reached = False
|
||||||
|
|
||||||
if mode == "自动代理_日常" and "任务出错: Fight" in log:
|
if mode == "自动代理_日常" and "任务出错: Fight" in log:
|
||||||
self.maa_result = "检测到MAA未能实际执行任务"
|
self.maa_result = "MAA未能实际执行任务"
|
||||||
elif "任务出错: StartUp" in log:
|
elif "任务出错: StartUp" in log:
|
||||||
self.maa_result = "检测到MAA未能正确登录PRTS"
|
self.maa_result = "MAA未能正确登录PRTS"
|
||||||
elif "任务已全部完成!" in log:
|
elif "任务已全部完成!" in log:
|
||||||
self.maa_result = "Success!"
|
self.maa_result = "Success!"
|
||||||
elif (
|
elif "请「检查连接设置」或「尝试重启模拟器与 ADB」或「重启电脑」" in log:
|
||||||
("请「检查连接设置」或「尝试重启模拟器与 ADB」或「重启电脑」" in log)
|
self.maa_result = "MAA的ADB连接异常"
|
||||||
or ("未检测到任何模拟器" in log)
|
elif "未检测到任何模拟器" in log:
|
||||||
or ("已停止" in log)
|
self.maa_result = "MAA未检测到任何模拟器"
|
||||||
or ("MaaAssistantArknights GUI exited" in log)
|
elif "已停止" in log:
|
||||||
):
|
self.maa_result = "MAA在完成任务前中止"
|
||||||
self.maa_result = "检测到MAA进程异常"
|
elif "MaaAssistantArknights GUI exited" in log:
|
||||||
|
self.maa_result = "MAA在完成任务前退出"
|
||||||
elif datetime.now() - latest_time > timedelta(
|
elif datetime.now() - latest_time > timedelta(
|
||||||
minutes=self.set["RunSet"][time_book[mode]]
|
minutes=self.set["RunSet"][time_book[mode]]
|
||||||
):
|
):
|
||||||
self.maa_result = "检测到MAA进程超时"
|
self.maa_result = "MAA进程超时"
|
||||||
elif self.isInterruptionRequested:
|
elif self.isInterruptionRequested:
|
||||||
self.maa_result = "任务被手动中止"
|
self.maa_result = "任务被手动中止"
|
||||||
else:
|
else:
|
||||||
@@ -789,13 +806,14 @@ class MaaManager(QObject):
|
|||||||
elif mode == "人工排查":
|
elif mode == "人工排查":
|
||||||
if "完成任务: StartUp" in log:
|
if "完成任务: StartUp" in log:
|
||||||
self.maa_result = "Success!"
|
self.maa_result = "Success!"
|
||||||
elif (
|
elif "请「检查连接设置」或「尝试重启模拟器与 ADB」或「重启电脑」" in log:
|
||||||
("请「检查连接设置」或「尝试重启模拟器与 ADB」或「重启电脑」" in log)
|
self.maa_result = "MAA的ADB连接异常"
|
||||||
or ("未检测到任何模拟器" in log)
|
elif "未检测到任何模拟器" in log:
|
||||||
or ("已停止" in log)
|
self.maa_result = "MAA未检测到任何模拟器"
|
||||||
or ("MaaAssistantArknights GUI exited" in log)
|
elif "已停止" in log:
|
||||||
):
|
self.maa_result = "MAA在完成任务前中止"
|
||||||
self.maa_result = "检测到MAA进程异常"
|
elif "MaaAssistantArknights GUI exited" in log:
|
||||||
|
self.maa_result = "MAA在完成任务前退出"
|
||||||
elif self.isInterruptionRequested:
|
elif self.isInterruptionRequested:
|
||||||
self.maa_result = "任务被手动中止"
|
self.maa_result = "任务被手动中止"
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -299,7 +299,7 @@ class Setting(QWidget):
|
|||||||
7002: "填入的 CDK 错误",
|
7002: "填入的 CDK 错误",
|
||||||
7003: "填入的 CDK 今日下载次数已达上限",
|
7003: "填入的 CDK 今日下载次数已达上限",
|
||||||
7004: "填入的 CDK 类型和待下载的资源不匹配",
|
7004: "填入的 CDK 类型和待下载的资源不匹配",
|
||||||
7005: "填入的 CDK 不合法",
|
7005: "填入的 CDK 已被封禁",
|
||||||
8001: "对应架构和系统下的资源不存在",
|
8001: "对应架构和系统下的资源不存在",
|
||||||
8002: "错误的系统参数",
|
8002: "错误的系统参数",
|
||||||
8003: "错误的架构参数",
|
8003: "错误的架构参数",
|
||||||
|
|||||||
@@ -229,18 +229,12 @@ class DownloadManager(QDialog):
|
|||||||
|
|
||||||
isInterruptionRequested = False
|
isInterruptionRequested = False
|
||||||
|
|
||||||
def __init__(
|
def __init__(self, app_path: Path, name: str, version: list, config: dict) -> None:
|
||||||
self,
|
|
||||||
app_path: Path,
|
|
||||||
name: str,
|
|
||||||
main_version: list,
|
|
||||||
config: dict,
|
|
||||||
) -> None:
|
|
||||||
super().__init__()
|
super().__init__()
|
||||||
|
|
||||||
self.app_path = app_path
|
self.app_path = app_path
|
||||||
self.name = name
|
self.name = name
|
||||||
self.main_version = main_version
|
self.version = version
|
||||||
self.config = config
|
self.config = config
|
||||||
self.download_path = app_path / "DOWNLOAD_TEMP.zip" # 临时下载文件的路径
|
self.download_path = app_path / "DOWNLOAD_TEMP.zip" # 临时下载文件的路径
|
||||||
self.version_path = app_path / "resources/version.json"
|
self.version_path = app_path / "resources/version.json"
|
||||||
@@ -289,25 +283,25 @@ class DownloadManager(QDialog):
|
|||||||
if mode == "测速":
|
if mode == "测速":
|
||||||
|
|
||||||
url_dict["GitHub站"] = (
|
url_dict["GitHub站"] = (
|
||||||
f"https://github.com/DLmaster361/AUTO_MAA/releases/download/{version_text(self.main_version)}/AUTO_MAA_{version_text(self.main_version)}.zip"
|
f"https://github.com/DLmaster361/AUTO_MAA/releases/download/{version_text(self.version)}/AUTO_MAA_{version_text(self.version)}.zip"
|
||||||
)
|
)
|
||||||
url_dict["官方镜像站"] = (
|
url_dict["官方镜像站"] = (
|
||||||
f"https://gitee.com/DLmaster_361/AUTO_MAA/releases/download/{version_text(self.main_version)}/AUTO_MAA_{version_text(self.main_version)}.zip"
|
f"https://gitee.com/DLmaster_361/AUTO_MAA/releases/download/{version_text(self.version)}/AUTO_MAA_{version_text(self.version)}.zip"
|
||||||
)
|
)
|
||||||
for name, download_url_head in self.config["download_dict"].items():
|
for name, download_url_head in self.config["download_dict"].items():
|
||||||
url_dict[name] = (
|
url_dict[name] = (
|
||||||
f"{download_url_head}AUTO_MAA_{version_text(self.main_version)}.zip"
|
f"{download_url_head}AUTO_MAA_{version_text(self.version)}.zip"
|
||||||
)
|
)
|
||||||
for proxy_url in self.config["proxy_list"]:
|
for proxy_url in self.config["proxy_list"]:
|
||||||
url_dict[proxy_url] = (
|
url_dict[proxy_url] = (
|
||||||
f"{proxy_url}https://github.com/DLmaster361/AUTO_MAA/releases/download/{version_text(self.main_version)}/AUTO_MAA_{version_text(self.main_version)}.zip"
|
f"{proxy_url}https://github.com/DLmaster361/AUTO_MAA/releases/download/{version_text(self.version)}/AUTO_MAA_{version_text(self.version)}.zip"
|
||||||
)
|
)
|
||||||
return url_dict
|
return url_dict
|
||||||
|
|
||||||
elif mode == "下载":
|
elif mode == "下载":
|
||||||
|
|
||||||
if self.name == "MAA":
|
if self.name == "MAA":
|
||||||
return f"https://jp-download.fearr.xyz/MAA/MAA-{version_text(self.main_version)}-win-x64.zip"
|
return f"https://jp-download.fearr.xyz/MAA/MAA-{version_text(self.version)}-win-x64.zip"
|
||||||
|
|
||||||
if self.name == "AUTO_MAA":
|
if self.name == "AUTO_MAA":
|
||||||
|
|
||||||
@@ -322,13 +316,13 @@ class DownloadManager(QDialog):
|
|||||||
)
|
)
|
||||||
|
|
||||||
if selected_url == "GitHub站":
|
if selected_url == "GitHub站":
|
||||||
return f"https://github.com/DLmaster361/AUTO_MAA/releases/download/{version_text(self.main_version)}/AUTO_MAA_{version_text(self.main_version)}.zip"
|
return f"https://github.com/DLmaster361/AUTO_MAA/releases/download/{version_text(self.version)}/AUTO_MAA_{version_text(self.version)}.zip"
|
||||||
elif selected_url == "官方镜像站":
|
elif selected_url == "官方镜像站":
|
||||||
return f"https://gitee.com/DLmaster_361/AUTO_MAA/releases/download/{version_text(self.main_version)}/AUTO_MAA_{version_text(self.main_version)}.zip"
|
return f"https://gitee.com/DLmaster_361/AUTO_MAA/releases/download/{version_text(self.version)}/AUTO_MAA_{version_text(self.version)}.zip"
|
||||||
elif selected_url in self.config["download_dict"].keys():
|
elif selected_url in self.config["download_dict"].keys():
|
||||||
return f"{self.config["download_dict"][selected_url]}AUTO_MAA_{version_text(self.main_version)}.zip"
|
return f"{self.config["download_dict"][selected_url]}AUTO_MAA_{version_text(self.version)}.zip"
|
||||||
else:
|
else:
|
||||||
return f"{selected_url}https://github.com/DLmaster361/AUTO_MAA/releases/download/{version_text(self.main_version)}/AUTO_MAA_{version_text(self.main_version)}.zip"
|
return f"{selected_url}https://github.com/DLmaster361/AUTO_MAA/releases/download/{version_text(self.version)}/AUTO_MAA_{version_text(self.version)}.zip"
|
||||||
|
|
||||||
elif self.config["mode"] == "MirrorChyan":
|
elif self.config["mode"] == "MirrorChyan":
|
||||||
with requests.get(
|
with requests.get(
|
||||||
|
|||||||
@@ -5,13 +5,15 @@
|
|||||||
"version_info": {
|
"version_info": {
|
||||||
"4.3.4.6": {
|
"4.3.4.6": {
|
||||||
"新增功能": [
|
"新增功能": [
|
||||||
"历史记录添加`按周合并`、`按月合并`功能"
|
"历史记录添加`按周合并`、`按月合并`功能",
|
||||||
|
"新增MAA稳定版更新提醒"
|
||||||
],
|
],
|
||||||
"修复BUG": [
|
"修复BUG": [
|
||||||
"修复历史记录选项卡无法回收的问题"
|
"修复历史记录选项卡无法回收的问题"
|
||||||
],
|
],
|
||||||
"程序优化": [
|
"程序优化": [
|
||||||
"历史记录添加`选中最近一月`、`选中最近一周`选项与打开日志文件所在目录功能"
|
"历史记录添加`选中最近一月`、`选中最近一周`选项与打开日志文件所在目录功能",
|
||||||
|
"MAA报错判定结果文案拆分优化"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"4.3.4.5": {
|
"4.3.4.5": {
|
||||||
|
|||||||
Reference in New Issue
Block a user