fix(core): 网络模块支持并发请求
This commit is contained in:
@@ -567,7 +567,7 @@ class MaaPlanConfig(LQConfig):
|
|||||||
|
|
||||||
class AppConfig(GlobalConfig):
|
class AppConfig(GlobalConfig):
|
||||||
|
|
||||||
VERSION = "4.3.8.0"
|
VERSION = "4.3.9.1"
|
||||||
|
|
||||||
gameid_refreshed = Signal()
|
gameid_refreshed = Signal()
|
||||||
PASSWORD_refreshed = Signal()
|
PASSWORD_refreshed = Signal()
|
||||||
@@ -652,18 +652,20 @@ class AppConfig(GlobalConfig):
|
|||||||
def get_gameid(self) -> None:
|
def get_gameid(self) -> None:
|
||||||
|
|
||||||
# 从MAA服务器获取活动关卡信息
|
# 从MAA服务器获取活动关卡信息
|
||||||
Network.set_info(
|
network = Network.add_task(
|
||||||
mode="get",
|
mode="get",
|
||||||
url="https://api.maa.plus/MaaAssistantArknights/api/gui/StageActivity.json",
|
url="https://api.maa.plus/MaaAssistantArknights/api/gui/StageActivity.json",
|
||||||
)
|
)
|
||||||
Network.start()
|
network.loop.exec()
|
||||||
Network.loop.exec()
|
network_result = Network.get_result(network)
|
||||||
if Network.stutus_code == 200:
|
if network_result["status_code"] == 200:
|
||||||
gameid_infos: List[Dict[str, Union[str, Dict[str, Union[str, int]]]]] = (
|
gameid_infos: List[Dict[str, Union[str, Dict[str, Union[str, int]]]]] = (
|
||||||
Network.response_json["Official"]["sideStoryStage"]
|
network_result["response_json"]["Official"]["sideStoryStage"]
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
logger.warning(f"无法从MAA服务器获取活动关卡信息:{Network.error_message}")
|
logger.warning(
|
||||||
|
f"无法从MAA服务器获取活动关卡信息:{network_result['error_message']}"
|
||||||
|
)
|
||||||
gameid_infos = []
|
gameid_infos = []
|
||||||
|
|
||||||
ss_gameid_dict = {"value": [], "text": []}
|
ss_gameid_dict = {"value": [], "text": []}
|
||||||
|
|||||||
@@ -26,55 +26,41 @@ v4.3
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
from PySide6.QtCore import QThread, QEventLoop, QTimer
|
from PySide6.QtCore import QObject, QThread, QEventLoop
|
||||||
import time
|
import time
|
||||||
import requests
|
import requests
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
|
|
||||||
class _Network(QThread):
|
class NetworkThread(QThread):
|
||||||
|
"""网络请求线程类"""
|
||||||
|
|
||||||
max_retries = 3
|
max_retries = 3
|
||||||
timeout = 10
|
timeout = 10
|
||||||
backoff_factor = 0.1
|
backoff_factor = 0.1
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self, mode: str, url: str, path: Path = None) -> None:
|
||||||
super().__init__()
|
super().__init__()
|
||||||
|
|
||||||
self.if_running = False
|
|
||||||
self.mode = None
|
|
||||||
self.url = None
|
|
||||||
self.loop = QEventLoop()
|
|
||||||
self.wait_loop = QEventLoop()
|
|
||||||
|
|
||||||
@logger.catch
|
|
||||||
def run(self) -> None:
|
|
||||||
"""运行网络请求线程"""
|
|
||||||
|
|
||||||
self.if_running = True
|
|
||||||
|
|
||||||
if self.mode == "get":
|
|
||||||
self.get_json(self.url)
|
|
||||||
elif self.mode == "get_file":
|
|
||||||
self.get_file(self.url, self.path)
|
|
||||||
|
|
||||||
self.if_running = False
|
|
||||||
|
|
||||||
def set_info(self, mode: str, url: str, path: Path = None) -> None:
|
|
||||||
"""设置网络请求信息"""
|
|
||||||
|
|
||||||
while self.if_running:
|
|
||||||
QTimer.singleShot(self.backoff_factor * 1000, self.wait_loop.quit)
|
|
||||||
self.wait_loop.exec()
|
|
||||||
|
|
||||||
self.mode = mode
|
self.mode = mode
|
||||||
self.url = url
|
self.url = url
|
||||||
self.path = path
|
self.path = path
|
||||||
|
|
||||||
self.stutus_code = None
|
self.status_code = None
|
||||||
self.response_json = None
|
self.response_json = None
|
||||||
self.error_message = None
|
self.error_message = None
|
||||||
|
|
||||||
|
self.loop = QEventLoop()
|
||||||
|
|
||||||
|
@logger.catch
|
||||||
|
def run(self) -> None:
|
||||||
|
"""运行网络请求线程"""
|
||||||
|
|
||||||
|
if self.mode == "get":
|
||||||
|
self.get_json(self.url)
|
||||||
|
elif self.mode == "get_file":
|
||||||
|
self.get_file(self.url, self.path)
|
||||||
|
|
||||||
def get_json(self, url: str) -> None:
|
def get_json(self, url: str) -> None:
|
||||||
"""通过get方法获取json数据"""
|
"""通过get方法获取json数据"""
|
||||||
|
|
||||||
@@ -83,12 +69,12 @@ class _Network(QThread):
|
|||||||
for _ in range(self.max_retries):
|
for _ in range(self.max_retries):
|
||||||
try:
|
try:
|
||||||
response = requests.get(url, timeout=self.timeout)
|
response = requests.get(url, timeout=self.timeout)
|
||||||
self.stutus_code = response.status_code
|
self.status_code = response.status_code
|
||||||
self.response_json = response.json()
|
self.response_json = response.json()
|
||||||
self.error_message = None
|
self.error_message = None
|
||||||
break
|
break
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.stutus_code = response.status_code if response else None
|
self.status_code = response.status_code if response else None
|
||||||
self.response_json = None
|
self.response_json = None
|
||||||
self.error_message = str(e)
|
self.error_message = str(e)
|
||||||
time.sleep(self.backoff_factor)
|
time.sleep(self.backoff_factor)
|
||||||
@@ -105,16 +91,47 @@ class _Network(QThread):
|
|||||||
if response.status_code == 200:
|
if response.status_code == 200:
|
||||||
with open(path, "wb") as file:
|
with open(path, "wb") as file:
|
||||||
file.write(response.content)
|
file.write(response.content)
|
||||||
self.stutus_code = response.status_code
|
self.status_code = response.status_code
|
||||||
else:
|
else:
|
||||||
self.stutus_code = response.status_code
|
self.status_code = response.status_code
|
||||||
self.error_message = "下载失败"
|
self.error_message = "下载失败"
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.stutus_code = response.status_code if response else None
|
self.status_code = response.status_code if response else None
|
||||||
self.error_message = str(e)
|
self.error_message = str(e)
|
||||||
|
|
||||||
self.loop.quit()
|
self.loop.quit()
|
||||||
|
|
||||||
|
|
||||||
|
class _Network(QObject):
|
||||||
|
"""网络请求线程类"""
|
||||||
|
|
||||||
|
def __init__(self) -> None:
|
||||||
|
super().__init__()
|
||||||
|
|
||||||
|
self.task_queue = []
|
||||||
|
|
||||||
|
def add_task(self, mode: str, url: str, path: Path = None) -> NetworkThread:
|
||||||
|
"""添加网络请求任务"""
|
||||||
|
|
||||||
|
network_thread = NetworkThread(mode, url, path)
|
||||||
|
|
||||||
|
self.task_queue.append(network_thread)
|
||||||
|
|
||||||
|
network_thread.start()
|
||||||
|
|
||||||
|
return network_thread
|
||||||
|
|
||||||
|
def get_result(self, network_thread: NetworkThread) -> dict:
|
||||||
|
"""获取网络请求结果"""
|
||||||
|
|
||||||
|
self.task_queue.remove(network_thread)
|
||||||
|
|
||||||
|
return {
|
||||||
|
"status_code": network_thread.status_code,
|
||||||
|
"response_json": network_thread.response_json,
|
||||||
|
"error_message": network_thread.error_message,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Network = _Network()
|
Network = _Network()
|
||||||
|
|||||||
@@ -277,20 +277,20 @@ class _TaskManager(QObject):
|
|||||||
def check_maa_version(self, v: str):
|
def check_maa_version(self, v: str):
|
||||||
"""检查MAA版本"""
|
"""检查MAA版本"""
|
||||||
|
|
||||||
Network.set_info(
|
network = Network.add_task(
|
||||||
mode="get",
|
mode="get",
|
||||||
url="https://mirrorchyan.com/api/resources/MAA/latest?user_agent=AutoMaaGui&os=win&arch=x64&channel=stable",
|
url="https://mirrorchyan.com/api/resources/MAA/latest?user_agent=AutoMaaGui&os=win&arch=x64&channel=stable",
|
||||||
)
|
)
|
||||||
Network.start()
|
network.loop.exec()
|
||||||
Network.loop.exec()
|
network_result = Network.get_result(network)
|
||||||
if Network.stutus_code == 200:
|
if network_result["status_code"] == 200:
|
||||||
maa_info = Network.response_json
|
maa_info = network_result["response_json"]
|
||||||
else:
|
else:
|
||||||
logger.warning(f"获取MAA版本信息时出错:{Network.error_message}")
|
logger.warning(f"获取MAA版本信息时出错:{network_result['error_message']}")
|
||||||
MainInfoBar.push_info_bar(
|
MainInfoBar.push_info_bar(
|
||||||
"warning",
|
"warning",
|
||||||
"获取MAA版本信息时出错",
|
"获取MAA版本信息时出错",
|
||||||
f"网络错误:{Network.stutus_code}",
|
f"网络错误:{network_result['status_code']}",
|
||||||
5000,
|
5000,
|
||||||
)
|
)
|
||||||
return None
|
return None
|
||||||
|
|||||||
@@ -26,8 +26,7 @@ v4.3
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
from PySide6.QtWidgets import QWidget
|
from PySide6.QtCore import QObject, QTimer
|
||||||
from PySide6.QtCore import QTimer
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
import pyautogui
|
import pyautogui
|
||||||
@@ -37,7 +36,7 @@ from .task_manager import TaskManager
|
|||||||
from app.services import System
|
from app.services import System
|
||||||
|
|
||||||
|
|
||||||
class _MainTimer(QWidget):
|
class _MainTimer(QObject):
|
||||||
|
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
super().__init__(parent)
|
super().__init__(parent)
|
||||||
|
|||||||
@@ -199,20 +199,22 @@ class Home(QWidget):
|
|||||||
elif Config.get(Config.function_HomeImageMode) == "主题图像":
|
elif Config.get(Config.function_HomeImageMode) == "主题图像":
|
||||||
|
|
||||||
# 从远程服务器获取最新主题图像
|
# 从远程服务器获取最新主题图像
|
||||||
Network.set_info(
|
network = Network.add_task(
|
||||||
mode="get",
|
mode="get",
|
||||||
url="https://gitee.com/DLmaster_361/AUTO_MAA/raw/server/theme_image.json",
|
url="https://gitee.com/DLmaster_361/AUTO_MAA/raw/server/theme_image.json",
|
||||||
)
|
)
|
||||||
Network.start()
|
network.loop.exec()
|
||||||
Network.loop.exec()
|
network_result = Network.get_result(network)
|
||||||
if Network.stutus_code == 200:
|
if network_result["status_code"] == 200:
|
||||||
theme_image = Network.response_json
|
theme_image = network_result["response_json"]
|
||||||
else:
|
else:
|
||||||
logger.warning(f"获取最新主题图像时出错:{Network.error_message}")
|
logger.warning(
|
||||||
|
f"获取最新主题图像时出错:{network_result['error_message']}"
|
||||||
|
)
|
||||||
MainInfoBar.push_info_bar(
|
MainInfoBar.push_info_bar(
|
||||||
"warning",
|
"warning",
|
||||||
"获取最新主题图像时出错",
|
"获取最新主题图像时出错",
|
||||||
f"网络错误:{Network.stutus_code}",
|
f"网络错误:{network_result['status_code']}",
|
||||||
5000,
|
5000,
|
||||||
)
|
)
|
||||||
return None
|
return None
|
||||||
@@ -236,15 +238,15 @@ class Home(QWidget):
|
|||||||
> time_local
|
> time_local
|
||||||
):
|
):
|
||||||
|
|
||||||
Network.set_info(
|
network = Network.add_task(
|
||||||
mode="get_file",
|
mode="get_file",
|
||||||
url=theme_image["url"],
|
url=theme_image["url"],
|
||||||
path=Config.app_path / "resources/images/Home/BannerTheme.jpg",
|
path=Config.app_path / "resources/images/Home/BannerTheme.jpg",
|
||||||
)
|
)
|
||||||
Network.start()
|
network.loop.exec()
|
||||||
Network.loop.exec()
|
network_result = Network.get_result(network)
|
||||||
|
|
||||||
if Network.stutus_code == 200:
|
if network_result["status_code"] == 200:
|
||||||
|
|
||||||
with (Config.app_path / "resources/theme_image.json").open(
|
with (Config.app_path / "resources/theme_image.json").open(
|
||||||
mode="w", encoding="utf-8"
|
mode="w", encoding="utf-8"
|
||||||
@@ -261,11 +263,13 @@ class Home(QWidget):
|
|||||||
|
|
||||||
else:
|
else:
|
||||||
|
|
||||||
logger.warning(f"下载最新主题图像时出错:{Network.error_message}")
|
logger.warning(
|
||||||
|
f"下载最新主题图像时出错:{network_result['error_message']}"
|
||||||
|
)
|
||||||
MainInfoBar.push_info_bar(
|
MainInfoBar.push_info_bar(
|
||||||
"warning",
|
"warning",
|
||||||
"下载最新主题图像时出错",
|
"下载最新主题图像时出错",
|
||||||
f"网络错误:{Network.stutus_code}",
|
f"网络错误:{network_result['status_code']}",
|
||||||
5000,
|
5000,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -333,20 +333,20 @@ class MemberManager(QWidget):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
# 从远程服务器获取应用列表
|
# 从远程服务器获取应用列表
|
||||||
Network.set_info(
|
network = Network.add_task(
|
||||||
mode="get",
|
mode="get",
|
||||||
url="https://gitee.com/DLmaster_361/AUTO_MAA/raw/server/apps_info.json",
|
url="https://gitee.com/DLmaster_361/AUTO_MAA/raw/server/apps_info.json",
|
||||||
)
|
)
|
||||||
Network.start()
|
network.loop.exec()
|
||||||
Network.loop.exec()
|
network_result = Network.get_result(network)
|
||||||
if Network.stutus_code == 200:
|
if network_result["status_code"] == 200:
|
||||||
apps_info = Network.response_json
|
apps_info = network_result["response_json"]
|
||||||
else:
|
else:
|
||||||
logger.warning(f"获取应用列表时出错:{Network.error_message}")
|
logger.warning(f"获取应用列表时出错:{network_result['error_message']}")
|
||||||
MainInfoBar.push_info_bar(
|
MainInfoBar.push_info_bar(
|
||||||
"warning",
|
"warning",
|
||||||
"获取应用列表时出错",
|
"获取应用列表时出错",
|
||||||
f"网络错误:{Network.stutus_code}",
|
f"网络错误:{network_result['status_code']}",
|
||||||
5000,
|
5000,
|
||||||
)
|
)
|
||||||
return None
|
return None
|
||||||
@@ -376,19 +376,19 @@ class MemberManager(QWidget):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
# 从mirrorc服务器获取最新版本信息
|
# 从mirrorc服务器获取最新版本信息
|
||||||
Network.set_info(
|
network = Network.add_task(
|
||||||
mode="get",
|
mode="get",
|
||||||
url=f"https://mirrorchyan.com/api/resources/{app_rid}/latest?user_agent=AutoMaaGui&cdk={Crypto.win_decryptor(Config.get(Config.update_MirrorChyanCDK))}&os={apps_info[app_name]["os"]}&arch={apps_info[app_name]["arch"]}&channel=stable",
|
url=f"https://mirrorchyan.com/api/resources/{app_rid}/latest?user_agent=AutoMaaGui&cdk={Crypto.win_decryptor(Config.get(Config.update_MirrorChyanCDK))}&os={apps_info[app_name]["os"]}&arch={apps_info[app_name]["arch"]}&channel=stable",
|
||||||
)
|
)
|
||||||
Network.start()
|
network.loop.exec()
|
||||||
Network.loop.exec()
|
network_result = Network.get_result(network)
|
||||||
if Network.stutus_code == 200:
|
if network_result["status_code"] == 200:
|
||||||
app_info = Network.response_json
|
app_info = network_result["response_json"]
|
||||||
else:
|
else:
|
||||||
|
|
||||||
if Network.response_json:
|
if network_result["response_json"]:
|
||||||
|
|
||||||
app_info = Network.response_json
|
app_info = network_result["response_json"]
|
||||||
|
|
||||||
if app_info["code"] != 0:
|
if app_info["code"] != 0:
|
||||||
|
|
||||||
@@ -425,11 +425,11 @@ class MemberManager(QWidget):
|
|||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
logger.warning(f"获取版本信息时出错:{Network.error_message}")
|
logger.warning(f"获取版本信息时出错:{network_result['error_message']}")
|
||||||
MainInfoBar.push_info_bar(
|
MainInfoBar.push_info_bar(
|
||||||
"warning",
|
"warning",
|
||||||
"获取版本信息时出错",
|
"获取版本信息时出错",
|
||||||
f"网络错误:{Network.stutus_code}",
|
f"网络错误:{network_result['status_code']}",
|
||||||
5000,
|
5000,
|
||||||
)
|
)
|
||||||
return None
|
return None
|
||||||
|
|||||||
@@ -262,31 +262,26 @@ class Setting(QWidget):
|
|||||||
|
|
||||||
current_version = list(map(int, Config.VERSION.split(".")))
|
current_version = list(map(int, Config.VERSION.split(".")))
|
||||||
|
|
||||||
if Network.if_running and if_show:
|
|
||||||
MainInfoBar.push_info_bar(
|
|
||||||
"warning", "请求速度过快", "上个网络请求还未结束,请稍等片刻", 5000
|
|
||||||
)
|
|
||||||
return None
|
|
||||||
# 从远程服务器获取最新版本信息
|
# 从远程服务器获取最新版本信息
|
||||||
Network.set_info(
|
network = Network.add_task(
|
||||||
mode="get",
|
mode="get",
|
||||||
url=f"https://mirrorchyan.com/api/resources/AUTO_MAA/latest?user_agent=AutoMaaGui¤t_version={version_text(current_version)}&cdk={Crypto.win_decryptor(Config.get(Config.update_MirrorChyanCDK))}&channel={Config.get(Config.update_UpdateType)}",
|
url=f"https://mirrorchyan.com/api/resources/AUTO_MAA/latest?user_agent=AutoMaaGui¤t_version={version_text(current_version)}&cdk={Crypto.win_decryptor(Config.get(Config.update_MirrorChyanCDK))}&channel={Config.get(Config.update_UpdateType)}",
|
||||||
)
|
)
|
||||||
Network.start()
|
network.loop.exec()
|
||||||
Network.loop.exec()
|
network_result = Network.get_result(network)
|
||||||
if Network.stutus_code == 200:
|
if network_result["status_code"] == 200:
|
||||||
version_info: Dict[str, Union[int, str, Dict[str, str]]] = (
|
version_info: Dict[str, Union[int, str, Dict[str, str]]] = network_result[
|
||||||
Network.response_json
|
"response_json"
|
||||||
)
|
]
|
||||||
else:
|
else:
|
||||||
|
|
||||||
if Network.response_json:
|
if network_result["response_json"]:
|
||||||
|
|
||||||
version_info = Network.response_json
|
version_info = network_result["response_json"]
|
||||||
|
|
||||||
if version_info["code"] != 0:
|
if version_info["code"] != 0:
|
||||||
|
|
||||||
logger.error(f"获取版本信息时出错:{version_info["msg"]}")
|
logger.error(f"获取版本信息时出错:{version_info['msg']}")
|
||||||
|
|
||||||
error_remark_dict = {
|
error_remark_dict = {
|
||||||
1001: "获取版本信息的URL参数不正确",
|
1001: "获取版本信息的URL参数不正确",
|
||||||
@@ -319,11 +314,11 @@ class Setting(QWidget):
|
|||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
logger.warning(f"获取版本信息时出错:{Network.error_message}")
|
logger.warning(f"获取版本信息时出错:{network_result['error_message']}")
|
||||||
MainInfoBar.push_info_bar(
|
MainInfoBar.push_info_bar(
|
||||||
"warning",
|
"warning",
|
||||||
"获取版本信息时出错",
|
"获取版本信息时出错",
|
||||||
f"网络错误:{Network.stutus_code}",
|
f"网络错误:{network_result['status_code']}",
|
||||||
5000,
|
5000,
|
||||||
)
|
)
|
||||||
return None
|
return None
|
||||||
@@ -406,20 +401,22 @@ class Setting(QWidget):
|
|||||||
else:
|
else:
|
||||||
|
|
||||||
# 从远程服务器获取代理信息
|
# 从远程服务器获取代理信息
|
||||||
Network.set_info(
|
network = Network.add_task(
|
||||||
mode="get",
|
mode="get",
|
||||||
url="https://gitee.com/DLmaster_361/AUTO_MAA/raw/server/download_info.json",
|
url="https://gitee.com/DLmaster_361/AUTO_MAA/raw/server/download_info.json",
|
||||||
)
|
)
|
||||||
Network.start()
|
network.loop.exec()
|
||||||
Network.loop.exec()
|
network_result = Network.get_result(network)
|
||||||
if Network.stutus_code == 200:
|
if network_result["status_code"] == 200:
|
||||||
download_info = Network.response_json
|
download_info = network_result["response_json"]
|
||||||
else:
|
else:
|
||||||
logger.warning(f"获取应用列表时出错:{Network.error_message}")
|
logger.warning(
|
||||||
|
f"获取应用列表时出错:{network_result['error_message']}"
|
||||||
|
)
|
||||||
MainInfoBar.push_info_bar(
|
MainInfoBar.push_info_bar(
|
||||||
"warning",
|
"warning",
|
||||||
"获取应用列表时出错",
|
"获取应用列表时出错",
|
||||||
f"网络错误:{Network.stutus_code}",
|
f"网络错误:{network_result['status_code']}",
|
||||||
5000,
|
5000,
|
||||||
)
|
)
|
||||||
return None
|
return None
|
||||||
@@ -488,20 +485,20 @@ class Setting(QWidget):
|
|||||||
"""显示公告"""
|
"""显示公告"""
|
||||||
|
|
||||||
# 从远程服务器获取最新公告
|
# 从远程服务器获取最新公告
|
||||||
Network.set_info(
|
network = Network.add_task(
|
||||||
mode="get",
|
mode="get",
|
||||||
url="https://gitee.com/DLmaster_361/AUTO_MAA/raw/server/notice.json",
|
url="https://gitee.com/DLmaster_361/AUTO_MAA/raw/server/notice.json",
|
||||||
)
|
)
|
||||||
Network.start()
|
network.loop.exec()
|
||||||
Network.loop.exec()
|
network_result = Network.get_result(network)
|
||||||
if Network.stutus_code == 200:
|
if network_result["status_code"] == 200:
|
||||||
notice = Network.response_json
|
notice = network_result["response_json"]
|
||||||
else:
|
else:
|
||||||
logger.warning(f"获取最新公告时出错:{Network.error_message}")
|
logger.warning(f"获取最新公告时出错:{network_result['error_message']}")
|
||||||
MainInfoBar.push_info_bar(
|
MainInfoBar.push_info_bar(
|
||||||
"warning",
|
"warning",
|
||||||
"获取最新公告时出错",
|
"获取最新公告时出错",
|
||||||
f"网络错误:{Network.stutus_code}",
|
f"网络错误:{network_result['status_code']}",
|
||||||
5000,
|
5000,
|
||||||
)
|
)
|
||||||
return None
|
return None
|
||||||
|
|||||||
@@ -1,53 +1,9 @@
|
|||||||
{
|
{
|
||||||
"main_version": "4.3.8.0",
|
"main_version": "4.3.9.1",
|
||||||
"version_info": {
|
"version_info": {
|
||||||
"4.3.8.0": {
|
"4.3.9.1": {
|
||||||
"新增功能": [
|
|
||||||
"吐司通知在主窗口隐藏时不再弹出"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"4.3.8.4": {
|
|
||||||
"新增功能": [
|
|
||||||
"支持为每一个用户执行独立通知",
|
|
||||||
"输入文本框适配文本插入操作",
|
|
||||||
"计划表功能上线",
|
|
||||||
"静默控制时长从全任务内缩短至搜索ADB时段内",
|
|
||||||
"UI界面添加自动日常代理任务序列设置项"
|
|
||||||
],
|
|
||||||
"修复bug": [
|
"修复bug": [
|
||||||
"修复雷电模拟器静默模式无法正常识别模拟器是否隐藏相关问题"
|
"网络模块支持并发请求"
|
||||||
]
|
|
||||||
},
|
|
||||||
"4.3.8.3": {
|
|
||||||
"新增功能": [
|
|
||||||
"用户仪表盘支持直接控制用户状态"
|
|
||||||
],
|
|
||||||
"修复bug": [
|
|
||||||
"修复雷电ADB端口号相关问题"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"4.3.8.2": {
|
|
||||||
"新增功能": [
|
|
||||||
"添加ADB端口号宽幅适配能力"
|
|
||||||
],
|
|
||||||
"修复bug": [
|
|
||||||
"日志分析忽略MAA超时提示"
|
|
||||||
],
|
|
||||||
"程序优化": [
|
|
||||||
"配置类定义方法优化"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"4.3.8.1": {
|
|
||||||
"新增功能": [
|
|
||||||
"自定义基建显示配置名称 #46",
|
|
||||||
"主调度台添加仅一次电源任务"
|
|
||||||
],
|
|
||||||
"修复bug": [
|
|
||||||
"电源相关选项改为所有任务完成后生效",
|
|
||||||
"适配MAAv5.16.3的ADB报错信息更改"
|
|
||||||
],
|
|
||||||
"程序优化": [
|
|
||||||
"UI样式优化,进一步适配win10主题"
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user