feat: 添加配置文件自动升级v1.9过程
This commit is contained in:
@@ -23,6 +23,7 @@
|
|||||||
import re
|
import re
|
||||||
import shutil
|
import shutil
|
||||||
import asyncio
|
import asyncio
|
||||||
|
import sqlite3
|
||||||
import calendar
|
import calendar
|
||||||
import requests
|
import requests
|
||||||
import truststore
|
import truststore
|
||||||
@@ -675,6 +676,8 @@ class AppConfig(GlobalConfig):
|
|||||||
async def init_config(self) -> None:
|
async def init_config(self) -> None:
|
||||||
"""初始化配置管理"""
|
"""初始化配置管理"""
|
||||||
|
|
||||||
|
await self.check_data()
|
||||||
|
|
||||||
await self.connect(self.config_path / "Config.json")
|
await self.connect(self.config_path / "Config.json")
|
||||||
await self.ScriptConfig.connect(self.config_path / "ScriptConfig.json")
|
await self.ScriptConfig.connect(self.config_path / "ScriptConfig.json")
|
||||||
await self.PlanConfig.connect(self.config_path / "PlanConfig.json")
|
await self.PlanConfig.connect(self.config_path / "PlanConfig.json")
|
||||||
@@ -684,9 +687,264 @@ class AppConfig(GlobalConfig):
|
|||||||
|
|
||||||
self.task_dict = TaskManager.task_dict
|
self.task_dict = TaskManager.task_dict
|
||||||
|
|
||||||
# self.check_data()
|
|
||||||
logger.info("程序初始化完成")
|
logger.info("程序初始化完成")
|
||||||
|
|
||||||
|
async def check_data(self) -> None:
|
||||||
|
"""检查用户数据文件并处理数据文件版本更新"""
|
||||||
|
|
||||||
|
# 生成主数据库
|
||||||
|
if not self.database_path.exists():
|
||||||
|
db = sqlite3.connect(self.database_path)
|
||||||
|
cur = db.cursor()
|
||||||
|
cur.execute("CREATE TABLE version(v text)")
|
||||||
|
cur.execute("INSERT INTO version VALUES(?)", ("v1.9",))
|
||||||
|
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()
|
||||||
|
|
||||||
|
if version[0][0] != "v1.9":
|
||||||
|
logger.info(
|
||||||
|
"数据文件版本更新开始",
|
||||||
|
)
|
||||||
|
if_streaming = False
|
||||||
|
# v1.7-->v1.8
|
||||||
|
if version[0][0] == "v1.7" or if_streaming:
|
||||||
|
logger.info(
|
||||||
|
"数据文件版本更新:v1.7-->v1.8",
|
||||||
|
)
|
||||||
|
if_streaming = True
|
||||||
|
|
||||||
|
if (Path.cwd() / "config/QueueConfig").exists():
|
||||||
|
for QueueConfig in (Path.cwd() / "config/QueueConfig").glob(
|
||||||
|
"*.json"
|
||||||
|
):
|
||||||
|
with QueueConfig.open(encoding="utf-8") as f:
|
||||||
|
queue_config = json.load(f)
|
||||||
|
|
||||||
|
queue_config["QueueSet"]["TimeEnabled"] = queue_config[
|
||||||
|
"QueueSet"
|
||||||
|
]["Enabled"]
|
||||||
|
|
||||||
|
for i in range(10):
|
||||||
|
queue_config["Queue"][f"Script_{i}"] = queue_config[
|
||||||
|
"Queue"
|
||||||
|
][f"Member_{i + 1}"]
|
||||||
|
queue_config["Time"][f"Enabled_{i}"] = queue_config["Time"][
|
||||||
|
f"TimeEnabled_{i}"
|
||||||
|
]
|
||||||
|
queue_config["Time"][f"Set_{i}"] = queue_config["Time"][
|
||||||
|
f"TimeSet_{i}"
|
||||||
|
]
|
||||||
|
|
||||||
|
with QueueConfig.open("w", encoding="utf-8") as f:
|
||||||
|
json.dump(queue_config, f, ensure_ascii=False, indent=4)
|
||||||
|
|
||||||
|
cur.execute("DELETE FROM version WHERE v = ?", ("v1.7",))
|
||||||
|
cur.execute("INSERT INTO version VALUES(?)", ("v1.8",))
|
||||||
|
db.commit()
|
||||||
|
# v1.8-->v1.9
|
||||||
|
if version[0][0] == "v1.8" or if_streaming:
|
||||||
|
logger.info(
|
||||||
|
"数据文件版本更新:v1.8-->v1.9",
|
||||||
|
)
|
||||||
|
if_streaming = True
|
||||||
|
|
||||||
|
await self.ScriptConfig.connect(self.config_path / "ScriptConfig.json")
|
||||||
|
await self.PlanConfig.connect(self.config_path / "PlanConfig.json")
|
||||||
|
await self.QueueConfig.connect(self.config_path / "QueueConfig.json")
|
||||||
|
|
||||||
|
if (Path.cwd() / "config/config.json").exists():
|
||||||
|
(Path.cwd() / "config/config.json").rename(
|
||||||
|
Path.cwd() / "config/Config.json"
|
||||||
|
)
|
||||||
|
await self.connect(self.config_path / "Config.json")
|
||||||
|
|
||||||
|
plan_dict = {"固定": "Fixed"}
|
||||||
|
|
||||||
|
if (Path.cwd() / "config/MaaPlanConfig").exists():
|
||||||
|
for MaaPlanConfig in (
|
||||||
|
Path.cwd() / "config/MaaPlanConfig"
|
||||||
|
).iterdir():
|
||||||
|
if (
|
||||||
|
MaaPlanConfig.is_dir()
|
||||||
|
and (MaaPlanConfig / "config.json").exists()
|
||||||
|
):
|
||||||
|
|
||||||
|
maa_plan_config = json.loads(
|
||||||
|
(MaaPlanConfig / "config.json").read_text(
|
||||||
|
encoding="utf-8"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
uid, pc = await self.add_plan("MaaPlan")
|
||||||
|
plan_dict[MaaPlanConfig.name] = str(uid)
|
||||||
|
|
||||||
|
await pc.load(maa_plan_config)
|
||||||
|
|
||||||
|
await self.PlanConfig.save()
|
||||||
|
|
||||||
|
script_dict: Dict[str, Optional[str]] = {"禁用": None}
|
||||||
|
|
||||||
|
if (Path.cwd() / "config/MaaConfig").exists():
|
||||||
|
|
||||||
|
for MaaConfig in (Path.cwd() / "config/MaaConfig").iterdir():
|
||||||
|
if MaaConfig.is_dir():
|
||||||
|
|
||||||
|
maa_config = json.loads(
|
||||||
|
(MaaConfig / "config.json").read_text(encoding="utf-8")
|
||||||
|
)
|
||||||
|
maa_config["Info"] = maa_config["MaaSet"]
|
||||||
|
maa_config["Run"] = maa_config["RunSet"]
|
||||||
|
|
||||||
|
uid, sc = await self.add_script("MAA")
|
||||||
|
script_dict[MaaConfig.name] = str(uid)
|
||||||
|
await sc.load(maa_config)
|
||||||
|
|
||||||
|
for user in (MaaConfig / "UserData").iterdir():
|
||||||
|
if user.is_dir() and (user / "config.json").exists():
|
||||||
|
user_config = json.loads(
|
||||||
|
(user / "config.json").read_text(
|
||||||
|
encoding="utf-8"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
user_config["Info"]["StageMode"] = plan_dict.get(
|
||||||
|
user_config["Info"]["StageMode"], "Fixed"
|
||||||
|
)
|
||||||
|
user_config["Info"]["Password"] = ""
|
||||||
|
|
||||||
|
user_uid, uc = await self.add_user(str(uid))
|
||||||
|
await uc.load(user_config)
|
||||||
|
|
||||||
|
if (user / "Routine/gui.json").exists():
|
||||||
|
(
|
||||||
|
Path.cwd()
|
||||||
|
/ f"data/{uid}/{user_uid}/ConfigFile"
|
||||||
|
).mkdir(parents=True, exist_ok=True)
|
||||||
|
shutil.copy(
|
||||||
|
user / "Routine/gui.json",
|
||||||
|
Path.cwd()
|
||||||
|
/ f"data/{uid}/{user_uid}/ConfigFile/gui.json",
|
||||||
|
)
|
||||||
|
if (
|
||||||
|
user / "Infrastructure/infrastructure.json"
|
||||||
|
).exists():
|
||||||
|
(
|
||||||
|
Path.cwd()
|
||||||
|
/ f"data/{uid}/{user_uid}/Infrastructure"
|
||||||
|
).mkdir(parents=True, exist_ok=True)
|
||||||
|
shutil.copy(
|
||||||
|
user / "Infrastructure/infrastructure.json",
|
||||||
|
Path.cwd()
|
||||||
|
/ f"data/{uid}/{user_uid}/Infrastructure/infrastructure.json",
|
||||||
|
)
|
||||||
|
|
||||||
|
if (Path.cwd() / "config/GeneralConfig").exists():
|
||||||
|
|
||||||
|
for GeneralConfig in (
|
||||||
|
Path.cwd() / "config/GeneralConfig"
|
||||||
|
).iterdir():
|
||||||
|
if GeneralConfig.is_dir():
|
||||||
|
|
||||||
|
general_config = json.loads(
|
||||||
|
(GeneralConfig / "config.json").read_text(
|
||||||
|
encoding="utf-8"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
general_config["Info"] = {
|
||||||
|
"Name": general_config["Script"]["Name"],
|
||||||
|
"RootPath": general_config["Script"]["RootPath"],
|
||||||
|
}
|
||||||
|
|
||||||
|
uid, sc = await self.add_script("General")
|
||||||
|
script_dict[GeneralConfig.name] = str(uid)
|
||||||
|
await sc.load(general_config)
|
||||||
|
|
||||||
|
for user in (GeneralConfig / "SubData").iterdir():
|
||||||
|
if user.is_dir() and (user / "config.json").exists():
|
||||||
|
user_config = json.loads(
|
||||||
|
(user / "config.json").read_text(
|
||||||
|
encoding="utf-8"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
user_uid, uc = await self.add_user(str(uid))
|
||||||
|
await uc.load(user_config)
|
||||||
|
|
||||||
|
if (user / "ConfigFiles").exists():
|
||||||
|
(Path.cwd() / f"data/{uid}/{user_uid}").mkdir(
|
||||||
|
parents=True, exist_ok=True
|
||||||
|
)
|
||||||
|
shutil.move(
|
||||||
|
user / "ConfigFiles",
|
||||||
|
Path.cwd()
|
||||||
|
/ f"data/{uid}/{user_uid}/ConfigFile",
|
||||||
|
)
|
||||||
|
|
||||||
|
await self.ScriptConfig.save()
|
||||||
|
|
||||||
|
if (Path.cwd() / "config/QueueConfig").exists():
|
||||||
|
for QueueConfig in (Path.cwd() / "config/QueueConfig").glob(
|
||||||
|
"*.json"
|
||||||
|
):
|
||||||
|
queue_config = json.loads(
|
||||||
|
QueueConfig.read_text(encoding="utf-8")
|
||||||
|
)
|
||||||
|
|
||||||
|
uid, qc = await self.add_queue()
|
||||||
|
|
||||||
|
queue_config["Info"] = queue_config["QueueSet"]
|
||||||
|
await qc.load(queue_config)
|
||||||
|
|
||||||
|
for i in range(10):
|
||||||
|
item_uid, item = await self.add_queue_item(str(uid))
|
||||||
|
time_uid, time = await self.add_time_set(str(uid))
|
||||||
|
|
||||||
|
await time.load(
|
||||||
|
{
|
||||||
|
"Info": {
|
||||||
|
"Enabled": queue_config["Time"][f"Enabled_{i}"],
|
||||||
|
"Time": queue_config["Time"][f"Set_{i}"],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
await item.load(
|
||||||
|
{
|
||||||
|
"Info": {
|
||||||
|
"ScriptId": script_dict.get(
|
||||||
|
queue_config["Queue"][f"Script_{i}"], None
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
await self.QueueConfig.save()
|
||||||
|
|
||||||
|
if (Path.cwd() / "config/QueueConfig").exists():
|
||||||
|
shutil.rmtree(Path.cwd() / "config/QueueConfig")
|
||||||
|
if (Path.cwd() / "config/MaaPlanConfig").exists():
|
||||||
|
shutil.rmtree(Path.cwd() / "config/MaaPlanConfig")
|
||||||
|
if (Path.cwd() / "config/MaaConfig").exists():
|
||||||
|
shutil.rmtree(Path.cwd() / "config/MaaConfig")
|
||||||
|
if (Path.cwd() / "config/GeneralConfig").exists():
|
||||||
|
shutil.rmtree(Path.cwd() / "config/GeneralConfig")
|
||||||
|
if (Path.cwd() / "data/gameid.txt").exists():
|
||||||
|
(Path.cwd() / "data/gameid.txt").unlink()
|
||||||
|
if (Path.cwd() / "data/key").exists():
|
||||||
|
shutil.rmtree(Path.cwd() / "data/key")
|
||||||
|
|
||||||
|
cur.execute("DELETE FROM version WHERE v = ?", ("v1.8",))
|
||||||
|
cur.execute("INSERT INTO version VALUES(?)", ("v1.9",))
|
||||||
|
db.commit()
|
||||||
|
|
||||||
|
cur.close()
|
||||||
|
db.close()
|
||||||
|
logger.success("数据文件版本更新完成")
|
||||||
|
|
||||||
async def add_script(
|
async def add_script(
|
||||||
self, script: Literal["MAA", "General"]
|
self, script: Literal["MAA", "General"]
|
||||||
) -> tuple[uuid.UUID, ConfigBase]:
|
) -> tuple[uuid.UUID, ConfigBase]:
|
||||||
|
|||||||
Reference in New Issue
Block a user