feat(core): 恢复基本所有原功能,数据文件版本更新
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -29,12 +29,11 @@ from loguru import logger
|
||||
import sqlite3
|
||||
import json
|
||||
import sys
|
||||
import shutil
|
||||
from pathlib import Path
|
||||
from typing import Dict, Union
|
||||
from qfluentwidgets import (
|
||||
QConfig,
|
||||
ConfigItem,
|
||||
qconfig,
|
||||
OptionsConfigItem,
|
||||
RangeConfigItem,
|
||||
FolderValidator,
|
||||
@@ -60,7 +59,7 @@ class AppConfig:
|
||||
|
||||
self.PASSWORD = ""
|
||||
self.running_list = []
|
||||
self.if_silence_needed = 0
|
||||
self.silence_list = []
|
||||
self.if_database_opened = False
|
||||
|
||||
# 检查文件完整性
|
||||
@@ -73,9 +72,6 @@ class AppConfig:
|
||||
(self.app_path / "config").mkdir(parents=True, exist_ok=True)
|
||||
(self.app_path / "data").mkdir(parents=True, exist_ok=True)
|
||||
(self.app_path / "debug").mkdir(parents=True, exist_ok=True)
|
||||
# (self.app_path / "data/MAAconfig/simple").mkdir(parents=True, exist_ok=True)
|
||||
# (self.app_path / "data/MAAconfig/beta").mkdir(parents=True, exist_ok=True)
|
||||
# (self.app_path / "data/MAAconfig/Default").mkdir(parents=True, exist_ok=True)
|
||||
|
||||
# 生成版本信息文件
|
||||
if not self.version_path.exists():
|
||||
@@ -95,22 +91,14 @@ class AppConfig:
|
||||
|
||||
self.init_logger()
|
||||
self.init_config()
|
||||
# self.check_database()
|
||||
self.check_data()
|
||||
logger.info("程序配置管理模块初始化完成")
|
||||
|
||||
def init_logger(self) -> None:
|
||||
"""初始化日志记录器"""
|
||||
|
||||
# logger.remove(0)
|
||||
logger.remove(0)
|
||||
|
||||
# logger.add(
|
||||
# sink=sys.stdout,
|
||||
# level="DEBUG",
|
||||
# format="<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | <level>{level: <8}</level> | <level>{message}</level>",
|
||||
# enqueue=True,
|
||||
# backtrace=True,
|
||||
# diagnose=True,
|
||||
# )
|
||||
logger.add(
|
||||
sink=self.log_path,
|
||||
level="DEBUG",
|
||||
@@ -122,6 +110,11 @@ class AppConfig:
|
||||
retention="1 month",
|
||||
compression="zip",
|
||||
)
|
||||
logger.info("===================================")
|
||||
logger.info("AUTO_MAA 主程序")
|
||||
logger.info("版本号: v4.2.1.1")
|
||||
logger.info(f"根目录: {self.app_path}")
|
||||
logger.info("===================================")
|
||||
|
||||
logger.info("日志记录器初始化完成")
|
||||
|
||||
@@ -142,89 +135,248 @@ class AppConfig:
|
||||
"CREATE TABLE adminx(admin text,id text,server text,day int,status text,last date,game text,game_1 text,game_2 text,routine text,annihilation text,infrastructure text,password byte,notes text,numb int,mode text,uid int)"
|
||||
)
|
||||
self.cur.execute("CREATE TABLE version(v text)")
|
||||
self.cur.execute("INSERT INTO version VALUES(?)", ("v1.3",))
|
||||
self.cur.execute("INSERT INTO version VALUES(?)", ("v1.4",))
|
||||
self.db.commit()
|
||||
|
||||
logger.info("用户数据库初始化完成")
|
||||
|
||||
def check_database(self) -> None:
|
||||
"""检查用户数据库文件并处理数据库版本更新"""
|
||||
def check_data(self) -> None:
|
||||
"""检查用户数据文件并处理数据文件版本更新"""
|
||||
|
||||
# 生成用户数据库
|
||||
# 生成主数据库
|
||||
if not self.database_path.exists():
|
||||
db = sqlite3.connect(self.database_path)
|
||||
cur = db.cursor()
|
||||
cur.execute(
|
||||
"CREATE TABLE adminx(admin text,id text,server text,day int,status text,last date,game text,game_1 text,game_2 text,routine text,annihilation text,infrastructure text,password byte,notes text,numb int,mode text,uid int)"
|
||||
)
|
||||
cur.execute("CREATE TABLE version(v text)")
|
||||
cur.execute("INSERT INTO version VALUES(?)", ("v1.3",))
|
||||
cur.execute("INSERT INTO version VALUES(?)", ("v1.4",))
|
||||
db.commit()
|
||||
cur.close()
|
||||
db.close()
|
||||
|
||||
# 数据库版本更新
|
||||
# 数据文件版本更新
|
||||
db = sqlite3.connect(self.database_path)
|
||||
cur = db.cursor()
|
||||
cur.execute("SELECT * FROM version WHERE True")
|
||||
version = cur.fetchall()
|
||||
# v1.0-->v1.1
|
||||
if version[0][0] == "v1.0":
|
||||
cur.execute("SELECT * FROM adminx WHERE True")
|
||||
data = cur.fetchall()
|
||||
cur.execute("DROP TABLE IF EXISTS adminx")
|
||||
cur.execute(
|
||||
"CREATE TABLE adminx(admin text,id text,server text,day int,status text,last date,game text,game_1 text,game_2 text,routines text,annihilation text,infrastructure text,password byte,notes text,numb int,mode text,uid int)"
|
||||
)
|
||||
for i in range(len(data)):
|
||||
|
||||
if version[0][0] != "v1.4":
|
||||
logger.info("数据文件版本更新开始")
|
||||
if_streaming = False
|
||||
# v1.0-->v1.1
|
||||
if version[0][0] == "v1.0" or if_streaming:
|
||||
logger.info("数据文件版本更新:v1.0-->v1.1")
|
||||
if_streaming = True
|
||||
cur.execute("SELECT * FROM adminx WHERE True")
|
||||
data = cur.fetchall()
|
||||
cur.execute("DROP TABLE IF EXISTS adminx")
|
||||
cur.execute(
|
||||
"INSERT INTO adminx VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",
|
||||
(
|
||||
data[i][0], # 0 0 0
|
||||
data[i][1], # 1 1 -
|
||||
"Official", # 2 2 -
|
||||
data[i][2], # 3 3 1
|
||||
data[i][3], # 4 4 2
|
||||
data[i][4], # 5 5 3
|
||||
data[i][5], # 6 6 -
|
||||
data[i][6], # 7 7 -
|
||||
data[i][7], # 8 8 -
|
||||
"y", # 9 - 4
|
||||
data[i][8], # 10 9 5
|
||||
data[i][9], # 11 10 -
|
||||
data[i][10], # 12 11 6
|
||||
data[i][11], # 13 12 7
|
||||
data[i][12], # 14 - -
|
||||
"simple", # 15 - -
|
||||
data[i][13], # 16 - -
|
||||
),
|
||||
"CREATE TABLE adminx(admin text,id text,server text,day int,status text,last date,game text,game_1 text,game_2 text,routines text,annihilation text,infrastructure text,password byte,notes text,numb int,mode text,uid int)"
|
||||
)
|
||||
cur.execute("DELETE FROM version WHERE v = ?", ("v1.0",))
|
||||
cur.execute("INSERT INTO version VALUES(?)", ("v1.1",))
|
||||
db.commit()
|
||||
# v1.1-->v1.2
|
||||
if version[0][0] == "v1.1":
|
||||
cur.execute("SELECT * FROM adminx WHERE True")
|
||||
data = cur.fetchall()
|
||||
for i in range(len(data)):
|
||||
cur.execute(
|
||||
"UPDATE adminx SET infrastructure = 'n' WHERE mode = ? AND uid = ?",
|
||||
(
|
||||
data[i][15],
|
||||
data[i][16],
|
||||
),
|
||||
for i in range(len(data)):
|
||||
cur.execute(
|
||||
"INSERT INTO adminx VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",
|
||||
(
|
||||
data[i][0], # 0 0 0
|
||||
data[i][1], # 1 1 -
|
||||
"Official", # 2 2 -
|
||||
data[i][2], # 3 3 1
|
||||
data[i][3], # 4 4 2
|
||||
data[i][4], # 5 5 3
|
||||
data[i][5], # 6 6 -
|
||||
data[i][6], # 7 7 -
|
||||
data[i][7], # 8 8 -
|
||||
"y", # 9 - 4
|
||||
data[i][8], # 10 9 5
|
||||
data[i][9], # 11 10 -
|
||||
data[i][10], # 12 11 6
|
||||
data[i][11], # 13 12 7
|
||||
data[i][12], # 14 - -
|
||||
"simple", # 15 - -
|
||||
data[i][13], # 16 - -
|
||||
),
|
||||
)
|
||||
cur.execute("DELETE FROM version WHERE v = ?", ("v1.0",))
|
||||
cur.execute("INSERT INTO version VALUES(?)", ("v1.1",))
|
||||
db.commit()
|
||||
# v1.1-->v1.2
|
||||
if version[0][0] == "v1.1" or if_streaming:
|
||||
logger.info("数据文件版本更新:v1.1-->v1.2")
|
||||
if_streaming = True
|
||||
cur.execute("SELECT * FROM adminx WHERE True")
|
||||
data = cur.fetchall()
|
||||
for i in range(len(data)):
|
||||
cur.execute(
|
||||
"UPDATE adminx SET infrastructure = 'n' WHERE mode = ? AND uid = ?",
|
||||
(
|
||||
data[i][15],
|
||||
data[i][16],
|
||||
),
|
||||
)
|
||||
cur.execute("DELETE FROM version WHERE v = ?", ("v1.1",))
|
||||
cur.execute("INSERT INTO version VALUES(?)", ("v1.2",))
|
||||
db.commit()
|
||||
# v1.2-->v1.3
|
||||
if version[0][0] == "v1.2" or if_streaming:
|
||||
logger.info("数据文件版本更新:v1.2-->v1.3")
|
||||
if_streaming = True
|
||||
cur.execute("ALTER TABLE adminx RENAME COLUMN routines TO routine")
|
||||
cur.execute("DELETE FROM version WHERE v = ?", ("v1.2",))
|
||||
cur.execute("INSERT INTO version VALUES(?)", ("v1.3",))
|
||||
db.commit()
|
||||
# v1.3-->v1.4
|
||||
if version[0][0] == "v1.3" or if_streaming:
|
||||
logger.info("数据文件版本更新:v1.3-->v1.4")
|
||||
if_streaming = True
|
||||
(self.app_path / "config/MaaConfig").mkdir(parents=True, exist_ok=True)
|
||||
shutil.move(
|
||||
self.app_path / "data/MaaConfig",
|
||||
self.app_path / "config/MaaConfig",
|
||||
)
|
||||
cur.execute("DELETE FROM version WHERE v = ?", ("v1.1",))
|
||||
cur.execute("INSERT INTO version VALUES(?)", ("v1.2",))
|
||||
db.commit()
|
||||
# v1.2-->v1.3
|
||||
if version[0][0] == "v1.2":
|
||||
cur.execute("ALTER TABLE adminx RENAME COLUMN routines TO routine")
|
||||
cur.execute("DELETE FROM version WHERE v = ?", ("v1.2",))
|
||||
cur.execute("INSERT INTO version VALUES(?)", ("v1.3",))
|
||||
db.commit()
|
||||
cur.close()
|
||||
db.close()
|
||||
(self.app_path / "config/MaaConfig/MaaConfig").rename(
|
||||
self.app_path / "config/MaaConfig/脚本_1"
|
||||
)
|
||||
shutil.copy(
|
||||
self.database_path,
|
||||
self.app_path / "config/MaaConfig/脚本_1/user_data.db",
|
||||
)
|
||||
cur.execute("DROP TABLE IF EXISTS adminx")
|
||||
cur.execute("DELETE FROM version WHERE v = ?", ("v1.3",))
|
||||
cur.execute("INSERT INTO version VALUES(?)", ("v1.4",))
|
||||
db.commit()
|
||||
with (self.app_path / "config/gui.json").open(
|
||||
"r", encoding="utf-8"
|
||||
) as f:
|
||||
info = json.load(f)
|
||||
maa_config = {
|
||||
"MaaSet": {
|
||||
"Name": "",
|
||||
"Path": info["Default"]["MaaSet.path"],
|
||||
},
|
||||
"RunSet": {
|
||||
"AnnihilationTimeLimit": info["Default"][
|
||||
"TimeLimit.annihilation"
|
||||
],
|
||||
"RoutineTimeLimit": info["Default"]["TimeLimit.routine"],
|
||||
"RunTimesLimit": info["Default"]["TimesLimit.run"],
|
||||
},
|
||||
}
|
||||
with (self.app_path / "config/MaaConfig/脚本_1/config.json").open(
|
||||
"w", encoding="utf-8"
|
||||
) as f:
|
||||
json.dump(maa_config, f, ensure_ascii=False, indent=4)
|
||||
config = {
|
||||
"Function": {
|
||||
"BossKey": info["Default"]["SelfSet.BossKey"],
|
||||
"IfAllowSleep": bool(
|
||||
info["Default"]["SelfSet.IfSleep"] == "True"
|
||||
),
|
||||
"IfSilence": bool(
|
||||
info["Default"]["SelfSet.IfSilence"] == "True"
|
||||
),
|
||||
},
|
||||
"Notify": {
|
||||
"IfPushPlyer": True,
|
||||
"IfSendErrorOnly": bool(
|
||||
info["Default"]["SelfSet.IfSendMail.OnlyError"] == "True"
|
||||
),
|
||||
"IfSendMail": bool(
|
||||
info["Default"]["SelfSet.IfSendMail"] == "True"
|
||||
),
|
||||
"MailAddress": info["Default"]["SelfSet.MailAddress"],
|
||||
},
|
||||
"Start": {
|
||||
"IfRunDirectly": bool(
|
||||
info["Default"]["SelfSet.IfProxyDirectly"] == "True"
|
||||
),
|
||||
"IfSelfStart": bool(
|
||||
info["Default"]["SelfSet.IfSelfStart"] == "True"
|
||||
),
|
||||
},
|
||||
"UI": {
|
||||
"IfShowTray": bool(
|
||||
info["Default"]["SelfSet.IfToTray"] == "True"
|
||||
),
|
||||
"IfToTray": bool(info["Default"]["SelfSet.IfToTray"] == "True"),
|
||||
"location": info["Default"]["SelfSet.UIlocation"],
|
||||
"maximized": bool(
|
||||
info["Default"]["SelfSet.UImaximized"] == "True"
|
||||
),
|
||||
"size": info["Default"]["SelfSet.UIsize"],
|
||||
},
|
||||
"Update": {"IfAutoUpdate": False},
|
||||
}
|
||||
with (self.app_path / "config/config.json").open(
|
||||
"w", encoding="utf-8"
|
||||
) as f:
|
||||
json.dump(config, f, ensure_ascii=False, indent=4)
|
||||
queue_config = {
|
||||
"QueueSet": {"Enabled": True, "Name": ""},
|
||||
"Queue": {
|
||||
"Member_1": "脚本_1",
|
||||
"Member_10": "禁用",
|
||||
"Member_2": "禁用",
|
||||
"Member_3": "禁用",
|
||||
"Member_4": "禁用",
|
||||
"Member_5": "禁用",
|
||||
"Member_6": "禁用",
|
||||
"Member_7": "禁用",
|
||||
"Member_8": "禁用",
|
||||
"Member_9": "禁用",
|
||||
},
|
||||
"Time": {
|
||||
"TimeEnabled_0": bool(
|
||||
info["Default"]["TimeSet.set1"] == "True"
|
||||
),
|
||||
"TimeEnabled_1": bool(
|
||||
info["Default"]["TimeSet.set2"] == "True"
|
||||
),
|
||||
"TimeEnabled_2": bool(
|
||||
info["Default"]["TimeSet.set3"] == "True"
|
||||
),
|
||||
"TimeEnabled_3": bool(
|
||||
info["Default"]["TimeSet.set4"] == "True"
|
||||
),
|
||||
"TimeEnabled_4": bool(
|
||||
info["Default"]["TimeSet.set5"] == "True"
|
||||
),
|
||||
"TimeEnabled_5": bool(
|
||||
info["Default"]["TimeSet.set6"] == "True"
|
||||
),
|
||||
"TimeEnabled_6": bool(
|
||||
info["Default"]["TimeSet.set7"] == "True"
|
||||
),
|
||||
"TimeEnabled_7": bool(
|
||||
info["Default"]["TimeSet.set8"] == "True"
|
||||
),
|
||||
"TimeEnabled_8": bool(
|
||||
info["Default"]["TimeSet.set9"] == "True"
|
||||
),
|
||||
"TimeEnabled_9": bool(
|
||||
info["Default"]["TimeSet.set10"] == "True"
|
||||
),
|
||||
"TimeSet_0": info["Default"]["TimeSet.run1"],
|
||||
"TimeSet_1": info["Default"]["TimeSet.run2"],
|
||||
"TimeSet_2": info["Default"]["TimeSet.run3"],
|
||||
"TimeSet_3": info["Default"]["TimeSet.run4"],
|
||||
"TimeSet_4": info["Default"]["TimeSet.run5"],
|
||||
"TimeSet_5": info["Default"]["TimeSet.run6"],
|
||||
"TimeSet_6": info["Default"]["TimeSet.run7"],
|
||||
"TimeSet_7": info["Default"]["TimeSet.run8"],
|
||||
"TimeSet_8": info["Default"]["TimeSet.run9"],
|
||||
"TimeSet_9": info["Default"]["TimeSet.run10"],
|
||||
},
|
||||
}
|
||||
(self.app_path / "config/QueueConfig").mkdir(
|
||||
parents=True, exist_ok=True
|
||||
)
|
||||
with (self.app_path / "config/QueueConfig/调度队列_1.json").open(
|
||||
"w", encoding="utf-8"
|
||||
) as f:
|
||||
json.dump(queue_config, f, ensure_ascii=False, indent=4)
|
||||
(self.app_path / "config/gui.json").unlink()
|
||||
cur.close()
|
||||
db.close()
|
||||
logger.info("数据文件版本更新完成")
|
||||
|
||||
def open_database(self, mode: str, index: str = None) -> None:
|
||||
"""打开数据库"""
|
||||
@@ -244,6 +396,42 @@ class AppConfig:
|
||||
self.db.close()
|
||||
self.if_database_opened = False
|
||||
|
||||
def change_user_info(
|
||||
self,
|
||||
data_path: Path,
|
||||
modes: list,
|
||||
uids: list,
|
||||
days: list,
|
||||
lasts: list,
|
||||
notes: list,
|
||||
numbs: list,
|
||||
) -> None:
|
||||
"""将代理完成后发生改动的用户信息同步至本地数据库"""
|
||||
|
||||
db = sqlite3.connect(data_path / "user_data.db")
|
||||
cur = db.cursor()
|
||||
|
||||
for index in range(len(uids)):
|
||||
cur.execute(
|
||||
"UPDATE adminx SET day = ? WHERE mode = ? AND uid = ?",
|
||||
(days[index], modes[index], uids[index]),
|
||||
)
|
||||
cur.execute(
|
||||
"UPDATE adminx SET last = ? WHERE mode = ? AND uid = ?",
|
||||
(lasts[index], modes[index], uids[index]),
|
||||
)
|
||||
cur.execute(
|
||||
"UPDATE adminx SET notes = ? WHERE mode = ? AND uid = ?",
|
||||
(notes[index], modes[index], uids[index]),
|
||||
)
|
||||
cur.execute(
|
||||
"UPDATE adminx SET numb = ? WHERE mode = ? AND uid = ?",
|
||||
(numbs[index], modes[index], uids[index]),
|
||||
)
|
||||
db.commit()
|
||||
cur.close()
|
||||
db.close()
|
||||
|
||||
def save_history(self, key: str, content: dict) -> None:
|
||||
"""保存历史记录"""
|
||||
|
||||
@@ -334,7 +522,6 @@ class GlobalConfig(QConfig):
|
||||
ui_size = ConfigItem("UI", "size", "1200x700")
|
||||
ui_location = ConfigItem("UI", "location", "100x100")
|
||||
ui_maximized = ConfigItem("UI", "maximized", False, BoolValidator())
|
||||
ui_MainIndex = RangeConfigItem("UI", "MainIndex", 0, RangeValidator(0, 3))
|
||||
|
||||
notify_IfPushPlyer = ConfigItem("Notify", "IfPushPlyer", False, BoolValidator())
|
||||
notify_IfSendMail = ConfigItem("Notify", "IfSendMail", False, BoolValidator())
|
||||
|
||||
@@ -26,76 +26,126 @@ v4.2
|
||||
"""
|
||||
|
||||
from loguru import logger
|
||||
from PySide6 import QtCore
|
||||
from typing import Dict, Union, List
|
||||
from PySide6.QtCore import QThread, QObject, Signal
|
||||
from qfluentwidgets import Dialog
|
||||
from pathlib import Path
|
||||
from typing import Dict, Union
|
||||
|
||||
from .config import Config
|
||||
from .main_info_bar import MainInfoBar
|
||||
from app.models import MaaManager
|
||||
from app.services import Notify
|
||||
|
||||
|
||||
class Task(QtCore.QThread):
|
||||
class Task(QThread):
|
||||
"""业务线程"""
|
||||
|
||||
push_info_bar = QtCore.Signal(str, str, str, int)
|
||||
update_user_info = QtCore.Signal(list, list, list, list, list, list)
|
||||
create_task_list = QtCore.Signal(list)
|
||||
create_user_list = QtCore.Signal(list)
|
||||
update_task_list = QtCore.Signal(list)
|
||||
update_user_list = QtCore.Signal(list)
|
||||
update_log_text = QtCore.Signal(str)
|
||||
accomplish = QtCore.Signal(list)
|
||||
push_info_bar = Signal(str, str, str, int)
|
||||
question = Signal(str, str)
|
||||
question_response = Signal(bool)
|
||||
update_user_info = Signal(Path, list, list, list, list, list, list)
|
||||
create_task_list = Signal(list)
|
||||
create_user_list = Signal(list)
|
||||
update_task_list = Signal(list)
|
||||
update_user_list = Signal(list)
|
||||
update_log_text = Signal(str)
|
||||
accomplish = Signal(list)
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
mode: str,
|
||||
name: str,
|
||||
info: Dict[str, Dict[str, Union[str, int, bool]]],
|
||||
):
|
||||
super(Task, self).__init__()
|
||||
|
||||
self.mode = mode
|
||||
self.name = name
|
||||
self.info = info
|
||||
|
||||
self.logs = []
|
||||
|
||||
self.question_response.connect(lambda: print("response"))
|
||||
|
||||
def run(self):
|
||||
|
||||
self.member_dict = self.search_member()
|
||||
self.task_list = [
|
||||
[value, "等待"]
|
||||
for _, value in self.info["Queue"].items()
|
||||
if value != "禁用"
|
||||
]
|
||||
if "设置MAA" in self.mode:
|
||||
|
||||
self.create_task_list.emit(self.task_list)
|
||||
logger.info(f"任务开始:设置{self.name}")
|
||||
self.push_info_bar.emit("info", "设置MAA", self.name, 3000)
|
||||
|
||||
for i in range(len(self.task_list)):
|
||||
self.task = MaaManager(
|
||||
self.mode,
|
||||
Config.app_path / f"config/MaaConfig/{self.name}",
|
||||
(
|
||||
None
|
||||
if "全局" in self.mode
|
||||
else Config.app_path
|
||||
/ f"config/MaaConfig/{self.name}/beta/{self.info["SetMaaInfo"]["UserId"]}/{self.info["SetMaaInfo"]["SetType"]}"
|
||||
),
|
||||
)
|
||||
self.task.push_info_bar.connect(self.push_info_bar.emit)
|
||||
self.task.accomplish.connect(lambda: self.accomplish.emit([]))
|
||||
|
||||
if self.isInterruptionRequested():
|
||||
break
|
||||
self.task.run()
|
||||
|
||||
self.task_list[i][1] = "运行"
|
||||
self.update_task_list.emit(self.task_list)
|
||||
else:
|
||||
|
||||
if self.task_list[i][0] not in Config.running_list:
|
||||
self.member_dict = self.search_member()
|
||||
self.task_list = [
|
||||
[value, "等待"]
|
||||
for _, value in self.info["Queue"].items()
|
||||
if value != "禁用"
|
||||
]
|
||||
|
||||
self.create_task_list.emit(self.task_list)
|
||||
|
||||
for i in range(len(self.task_list)):
|
||||
|
||||
if self.isInterruptionRequested():
|
||||
break
|
||||
|
||||
self.task_list[i][1] = "运行"
|
||||
self.update_task_list.emit(self.task_list)
|
||||
|
||||
if self.task_list[i][0] in Config.running_list:
|
||||
|
||||
self.task_list[i][1] = "跳过"
|
||||
self.update_task_list.emit(self.task_list)
|
||||
logger.info(f"跳过任务:{self.task_list[i][0]}")
|
||||
self.push_info_bar.emit(
|
||||
"info", "跳过任务", self.task_list[i][0], 3000
|
||||
)
|
||||
continue
|
||||
|
||||
Config.running_list.append(self.task_list[i][0])
|
||||
logger.info(f"任务开始:{self.task_list[i][0]}")
|
||||
self.push_info_bar.emit("info", "任务开始", self.task_list[i][0], 5000)
|
||||
self.push_info_bar.emit("info", "任务开始", self.task_list[i][0], 3000)
|
||||
|
||||
if self.member_dict[self.task_list[i][0]][0] == "Maa":
|
||||
|
||||
self.task = MaaManager(
|
||||
"自动代理",
|
||||
self.mode[0:4],
|
||||
self.member_dict[self.task_list[i][0]][1],
|
||||
)
|
||||
|
||||
self.task.question.connect(self.question.emit)
|
||||
self.question_response.disconnect()
|
||||
self.question_response.connect(self.task.question_response.emit)
|
||||
self.task.push_info_bar.connect(self.push_info_bar.emit)
|
||||
self.task.create_user_list.connect(self.create_user_list.emit)
|
||||
self.task.update_user_list.connect(self.update_user_list.emit)
|
||||
self.task.update_log_text.connect(self.update_log_text.emit)
|
||||
self.task.update_user_info.connect(self.update_user_info.emit)
|
||||
self.task.update_user_info.connect(
|
||||
lambda modes, uids, days, lasts, notes, numbs: self.update_user_info.emit(
|
||||
self.member_dict[self.task_list[i][0]][1],
|
||||
modes,
|
||||
uids,
|
||||
days,
|
||||
lasts,
|
||||
notes,
|
||||
numbs,
|
||||
)
|
||||
)
|
||||
self.task.accomplish.connect(
|
||||
lambda log: self.save_log(self.task_list[i][0], log)
|
||||
)
|
||||
@@ -106,15 +156,9 @@ class Task(QtCore.QThread):
|
||||
|
||||
self.task_list[i][1] = "完成"
|
||||
logger.info(f"任务完成:{self.task_list[i][0]}")
|
||||
self.push_info_bar.emit("info", "任务完成", self.task_list[i][0], 5000)
|
||||
self.push_info_bar.emit("info", "任务完成", self.task_list[i][0], 3000)
|
||||
|
||||
else:
|
||||
|
||||
self.task_list[i][1] = "跳过"
|
||||
logger.info(f"跳过任务:{self.task_list[i][0]}")
|
||||
self.push_info_bar.emit("info", "跳过任务", self.task_list[i][0], 5000)
|
||||
|
||||
self.accomplish.emit(self.logs)
|
||||
self.accomplish.emit(self.logs)
|
||||
|
||||
def search_member(self) -> dict:
|
||||
"""搜索所有脚本实例并固定相关配置信息"""
|
||||
@@ -135,12 +179,12 @@ class Task(QtCore.QThread):
|
||||
self.logs.append([name, log])
|
||||
|
||||
|
||||
class TaskManager(QtCore.QObject):
|
||||
class TaskManager(QObject):
|
||||
"""业务调度器"""
|
||||
|
||||
create_gui = QtCore.Signal(Task)
|
||||
connect_gui = QtCore.Signal(Task)
|
||||
push_info_bar = QtCore.Signal(str, str, str, int)
|
||||
create_gui = Signal(Task)
|
||||
connect_gui = Signal(Task)
|
||||
push_info_bar = Signal(str, str, str, int)
|
||||
|
||||
def __init__(self):
|
||||
super(TaskManager, self).__init__()
|
||||
@@ -162,16 +206,20 @@ class TaskManager(QtCore.QObject):
|
||||
MainInfoBar.push_info_bar("info", "任务开始", name, 3000)
|
||||
|
||||
Config.running_list.append(name)
|
||||
self.task_list[name] = Task(name, info)
|
||||
self.task_list[name] = Task(mode, name, info)
|
||||
self.task_list[name].question.connect(
|
||||
lambda title, content: self.push_dialog(name, title, content)
|
||||
)
|
||||
self.task_list[name].push_info_bar.connect(MainInfoBar.push_info_bar)
|
||||
self.task_list[name].update_user_info.connect(Config.change_user_info)
|
||||
self.task_list[name].accomplish.connect(
|
||||
lambda logs: self.remove_task(name, logs)
|
||||
)
|
||||
|
||||
if mode == "新窗口":
|
||||
if "新窗口" in mode:
|
||||
self.create_gui.emit(self.task_list[name])
|
||||
|
||||
elif mode == "主窗口":
|
||||
elif "主窗口" in mode:
|
||||
self.connect_gui.emit(self.task_list[name])
|
||||
|
||||
self.task_list[name].start()
|
||||
@@ -217,5 +265,14 @@ class TaskManager(QtCore.QObject):
|
||||
self.task_list.pop(name)
|
||||
Config.running_list.remove(name)
|
||||
|
||||
def push_dialog(self, name: str, title: str, content: str):
|
||||
"""推送对话框"""
|
||||
|
||||
choice = Dialog(title, content, None)
|
||||
choice.yesButton.setText("是")
|
||||
choice.cancelButton.setText("否")
|
||||
|
||||
self.task_list[name].question_response.emit(bool(choice.exec_()))
|
||||
|
||||
|
||||
Task_manager = TaskManager()
|
||||
|
||||
@@ -27,9 +27,10 @@ v4.2
|
||||
|
||||
from loguru import logger
|
||||
from PySide6.QtWidgets import QWidget
|
||||
from PySide6 import QtCore
|
||||
from PySide6.QtCore import QTimer
|
||||
import json
|
||||
import datetime
|
||||
import pyautogui
|
||||
|
||||
from .config import Config
|
||||
from .task_manager import Task_manager
|
||||
@@ -44,7 +45,7 @@ class MainTimer(QWidget):
|
||||
):
|
||||
super().__init__(parent)
|
||||
|
||||
self.Timer = QtCore.QTimer()
|
||||
self.Timer = QTimer()
|
||||
self.Timer.timeout.connect(self.timed_start)
|
||||
self.Timer.timeout.connect(self.set_silence)
|
||||
self.Timer.start(1000)
|
||||
@@ -77,24 +78,29 @@ class MainTimer(QWidget):
|
||||
and name not in Config.running_list
|
||||
):
|
||||
|
||||
logger.info(f"按时间调起任务:{name}")
|
||||
Task_manager.add_task("新窗口", name, info)
|
||||
logger.info(f"定时任务:{name}")
|
||||
Task_manager.add_task("自动代理_新窗口", name, info)
|
||||
|
||||
def set_silence(self):
|
||||
"""设置静默模式"""
|
||||
# # 临时
|
||||
# windows = System.get_window_info()
|
||||
# if any(emulator_path in _ for _ in windows):
|
||||
# try:
|
||||
# pyautogui.hotkey(*boss_key)
|
||||
# except pyautogui.FailSafeException as e:
|
||||
# 执行日志记录,暂时缺省
|
||||
logger.debug(Config.running_list)
|
||||
|
||||
def set_last_time(self):
|
||||
"""设置上次运行时间"""
|
||||
|
||||
pass
|
||||
windows = System.get_window_info()
|
||||
if any(
|
||||
str(emulator_path) in window
|
||||
for window in windows
|
||||
for emulator_path in Config.silence_list
|
||||
):
|
||||
try:
|
||||
pyautogui.hotkey(
|
||||
*[
|
||||
_.strip().lower()
|
||||
for _ in Config.global_config.get(
|
||||
Config.global_config.function_BossKey
|
||||
).split("+")
|
||||
]
|
||||
)
|
||||
except pyautogui.FailSafeException as e:
|
||||
logger.warning(f"FailSafeException: {e}")
|
||||
|
||||
def search_queue(self) -> list:
|
||||
"""搜索所有调度队列实例"""
|
||||
|
||||
Reference in New Issue
Block a user