diff --git a/app/core/config.py b/app/core/config.py index f2e1464..65f2976 100644 --- a/app/core/config.py +++ b/app/core/config.py @@ -33,7 +33,7 @@ import sys import shutil import re import base64 -from datetime import datetime, timedelta +from datetime import datetime, timedelta, date from collections import defaultdict from pathlib import Path from qfluentwidgets import ( @@ -606,7 +606,7 @@ class MaaUserConfig(QConfig): class AppConfig(GlobalConfig): - VERSION = "4.3.4.4" + VERSION = "4.3.4.5" gameid_refreshed = Signal() PASSWORD_refreshed = Signal() @@ -752,7 +752,7 @@ class AppConfig(GlobalConfig): ] # 生成本日关卡信息 - days = datetime.strptime(self.server_date(), "%Y-%m-%d").isoweekday() + days = self.server_date().isoweekday() gameid_list = [ {"value": "-", "text": "当前/上次", "days": [1, 2, 3, 4, 5, 6, 7]}, @@ -787,13 +787,13 @@ class AppConfig(GlobalConfig): self.gameid_refreshed.emit() - def server_date(self) -> str: + def server_date(self) -> date: """获取当前的服务器日期""" dt = datetime.now() if dt.time() < datetime.min.time().replace(hour=4): dt = dt - timedelta(days=1) - return dt.strftime("%Y-%m-%d") + return dt.date() def check_data(self) -> None: """检查用户数据文件并处理数据文件版本更新""" @@ -1478,9 +1478,21 @@ class AppConfig(GlobalConfig): info: Dict[str, Dict[str, Union[int, dict]]] = json.load(f) data = {} + # 4点前的记录放在当日最后 + sorted_maa_result = sorted( + info["maa_result"].items(), + key=lambda x: ( + ( + 1 + if datetime.strptime(x[0], "%H:%M:%S").time() + < datetime.min.time().replace(hour=4) + else 0 + ), + datetime.strptime(x[0], "%H:%M:%S"), + ), + ) data["条目索引"] = [ - [k, "完成" if v == "Success!" else "异常"] - for k, v in info["maa_result"].items() + [k, "完成" if v == "Success!" else "异常"] for k, v in sorted_maa_result ] data["条目索引"].insert(0, ["数据总览", "运行"]) data["统计数据"] = {"公招统计": list(info["recruit_statistics"].items())} diff --git a/app/models/MAA.py b/app/models/MAA.py index 474c964..60f0462 100644 --- a/app/models/MAA.py +++ b/app/models/MAA.py @@ -112,7 +112,7 @@ class MaaManager(QObject): def run(self): """主进程,运行MAA代理进程""" - curdate = Config.server_date() + curdate = Config.server_date().strftime("%Y-%m-%d") begin_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") self.configure() diff --git a/app/services/system.py b/app/services/system.py index c7e3af8..1b071b9 100644 --- a/app/services/system.py +++ b/app/services/system.py @@ -26,7 +26,7 @@ v4.3 """ from loguru import logger -from PySide6.QtWidgets import QWidget +from PySide6.QtWidgets import QApplication, QWidget import sys import ctypes import win32gui @@ -113,6 +113,7 @@ class _SystemHandler: elif mode == "KillSelf": self.main_window.close() + QApplication.quit() elif sys.platform.startswith("linux"): @@ -138,6 +139,7 @@ class _SystemHandler: elif mode == "KillSelf": self.main_window.close() + QApplication.quit() def is_startup(self) -> bool: """判断程序是否已经开机自启""" diff --git a/app/ui/Widget.py b/app/ui/Widget.py index b50cb8c..ec37536 100644 --- a/app/ui/Widget.py +++ b/app/ui/Widget.py @@ -543,7 +543,7 @@ class UserLableSettingCard(SettingCard): text_list.append("未通过人工排查") text_list.append( f"今日已代理{self.qconfig.get(self.configItems["ProxyTimes"])}次" - if Config.server_date() + if Config.server_date().strftime("%Y-%m-%d") == self.qconfig.get(self.configItems["LastProxyDate"]) else "今日未进行代理" ) @@ -553,7 +553,7 @@ class UserLableSettingCard(SettingCard): self.qconfig.get(self.configItems["LastAnnihilationDate"]), "%Y-%m-%d", ).isocalendar()[:2] - == datetime.strptime(Config.server_date(), "%Y-%m-%d").isocalendar()[:2] + == Config.server_date().isocalendar()[:2] else "本周剿灭未完成" ) diff --git a/app/ui/history.py b/app/ui/history.py index 067542c..fc5b688 100644 --- a/app/ui/history.py +++ b/app/ui/history.py @@ -38,9 +38,14 @@ from qfluentwidgets import ( PushButton, ExpandGroupSettingCard, TextBrowser, + CardWidget, + ComboBox, + ZhDatePicker, + SubtitleLabel, ) -from PySide6.QtCore import Signal +from PySide6.QtCore import Signal, QDate import os +from datetime import datetime from functools import partial from pathlib import Path from typing import List @@ -58,20 +63,22 @@ class History(QWidget): content_widget = QWidget() self.content_layout = QVBoxLayout(content_widget) + self.history_top_bar = self.HistoryTopBar(self) + + self.history_top_bar.search_history.connect(self.reload_history) scrollArea = ScrollArea() scrollArea.setWidgetResizable(True) scrollArea.setWidget(content_widget) layout = QVBoxLayout() + layout.addWidget(self.history_top_bar) layout.addWidget(scrollArea) self.setLayout(layout) self.history_card_list = [] - self.refresh() - - def refresh(self): - """刷新脚本实例界面""" + def reload_history(self, start_date: QDate, end_date: QDate, mode: str) -> None: + """加载历史记录界面""" while self.content_layout.count() > 0: item = self.content_layout.takeAt(0) @@ -84,13 +91,61 @@ class History(QWidget): history_dict = Config.search_history() - for date, user_list in history_dict.items(): + selected_history = filter( + lambda item: datetime( + start_date.year(), start_date.month(), start_date.day() + ) + <= datetime.strptime(item[0], "%Y年 %m月 %d日") + <= datetime(end_date.year(), end_date.month(), end_date.day()), + history_dict.items(), + ) + for date, user_list in selected_history: self.history_card_list.append(HistoryCard(date, user_list, self)) self.content_layout.addWidget(self.history_card_list[-1]) self.content_layout.addStretch(1) + class HistoryTopBar(CardWidget): + """历史记录顶部工具栏""" + + search_history = Signal(QDate, QDate, str) + + def __init__(self, parent=None, name: str = None): + super().__init__(parent) + + Layout = QHBoxLayout(self) + + self.lable_1 = SubtitleLabel("查询范围:") + self.start_date = ZhDatePicker() + self.start_date.setDate(QDate(2019, 5, 1)) + self.lable_2 = SubtitleLabel("→") + self.end_date = ZhDatePicker() + server_date = Config.server_date() + self.end_date.setDate( + QDate(server_date.year, server_date.month, server_date.day) + ) + self.mode = ComboBox() + self.mode.setPlaceholderText("请选择查询模式") + self.mode.addItems(["按日期分类"]) + + self.button = PushButton(FluentIcon.SEARCH, "查询") + self.button.clicked.connect( + lambda: self.search_history.emit( + self.start_date.getDate(), + self.end_date.getDate(), + self.mode.currentText(), + ) + ) + + Layout.addWidget(self.lable_1) + Layout.addWidget(self.start_date) + Layout.addWidget(self.lable_2) + Layout.addWidget(self.end_date) + Layout.addWidget(self.mode) + Layout.addStretch(1) + Layout.addWidget(self.button) + class HistoryCard(ExpandGroupSettingCard): diff --git a/app/ui/main_window.py b/app/ui/main_window.py index 5160a32..7a4a22f 100644 --- a/app/ui/main_window.py +++ b/app/ui/main_window.py @@ -140,9 +140,6 @@ class AUTO_MAA(MSFluentWindow): self.dispatch_center.update_top_bar() if index == 3 else None ) ) - self.stackedWidget.currentChanged.connect( - lambda index: (self.history.refresh() if index == 4 else None) - ) # 创建系统托盘及其菜单 self.tray = QSystemTrayIcon( @@ -324,7 +321,7 @@ class AUTO_MAA(MSFluentWindow): logger.info("自动添加任务:调度队列_1") TaskManager.add_task( "自动代理_主调度台", - "主任务队列", + "调度队列_1", Config.queue_dict["调度队列_1"]["Config"].toDict(), ) @@ -332,7 +329,7 @@ class AUTO_MAA(MSFluentWindow): logger.info("自动添加任务:脚本_1") TaskManager.add_task( - "自动代理_主调度台", "主任务队列", {"Queue": {"Member_1": "脚本_1"}} + "自动代理_主调度台", "自定义队列", {"Queue": {"Member_1": "脚本_1"}} ) else: diff --git a/app/ui/member_manager.py b/app/ui/member_manager.py index e5d60ee..3d796df 100644 --- a/app/ui/member_manager.py +++ b/app/ui/member_manager.py @@ -1099,7 +1099,7 @@ class MemberManager(QWidget): text_list.append("未通过人工排查") text_list.append( f"今日已代理{config.get(config.Data_ProxyTimes)}次" - if Config.server_date() + if Config.server_date().strftime("%Y-%m-%d") == config.get(config.Data_LastProxyDate) else "今日未进行代理" ) @@ -1109,9 +1109,7 @@ class MemberManager(QWidget): config.get(config.Data_LastAnnihilationDate), "%Y-%m-%d", ).isocalendar()[:2] - == datetime.strptime( - Config.server_date(), "%Y-%m-%d" - ).isocalendar()[:2] + == Config.server_date().isocalendar()[:2] else "本周剿灭未完成" ) diff --git a/main.py b/main.py index f7a707a..fe74145 100644 --- a/main.py +++ b/main.py @@ -27,7 +27,6 @@ v4.3 from loguru import logger from PySide6.QtWidgets import QApplication -from PySide6.QtCore import Qt from qfluentwidgets import FluentTranslator import sys @@ -36,7 +35,6 @@ import sys def main(): application = QApplication(sys.argv) - QApplication.setAttribute(Qt.AA_DontCreateNativeWidgetSiblings) translator = FluentTranslator() application.installTranslator(translator) diff --git a/resources/version.json b/resources/version.json index 1bc26cf..910c37e 100644 --- a/resources/version.json +++ b/resources/version.json @@ -1,8 +1,17 @@ { - "main_version": "4.3.4.4", + "main_version": "4.3.4.5", "updater_version": "1.0.0.0", "announcement": "\n## 新增功能\n- 屏蔽MuMu模拟器开屏广告功能上线\n- 更新器支持多线程下载\n- 添加强制关闭ADB与模拟器等增强任务项\n## 修复BUG\n- 修复统计信息HTML模板公招匹配错误\n- 修复密码显示按钮动画异常\n- 修复`检测到MAA未能实际执行任务`报错被异常屏蔽\n- 修复MAA超时判定异常失效\n## 程序优化\n- 关机等电源操作添加100s倒计时\n- 人工排查弹窗方法优化\n- 人工排查时自动屏蔽静默操作\n- 公告样式优化", "version_info": { + "4.3.4.5": { + "修复BUG": [ + "修复启动时运行主任务的历史记录与完成后任务异常" + ], + "程序优化": [ + "历史记录转为自行搜索", + "历史记录时间条目排序规则优化" + ] + }, "4.3.4.4": { "修复BUG": [ "修复更新时主程序退出不彻底"