diff --git a/app/core/config.py b/app/core/config.py index 7213658..f238e8b 100644 --- a/app/core/config.py +++ b/app/core/config.py @@ -1026,6 +1026,12 @@ class AppConfig(GlobalConfig): if uid in self.task_dict: raise RuntimeError(f"脚本 {script_id} 正在运行, 无法删除") + for queue in self.QueueConfig.values(): + if isinstance(queue, QueueConfig): + for key, value in queue.QueueItem.items(): + if value.get("Info", "ScriptId") == str(uid): + await queue.QueueItem.remove(key) + await self.ScriptConfig.remove(uid) async def reorder_script(self, index_list: list[str]) -> None: @@ -1288,7 +1294,7 @@ class AppConfig(GlobalConfig): / f"data/{script_id}/{user_id}/Infrastructure/infrastructure.json", ) - if isinstance(script_config, (MaaConfig)): + if isinstance(script_config, MaaConfig): await script_config.UserData[uid].set("Info", "InfrastPath", str(json_path)) async def add_plan( @@ -1333,7 +1339,24 @@ class AppConfig(GlobalConfig): logger.info(f"删除计划表配置: {plan_id}") - await self.PlanConfig.remove(uuid.UUID(plan_id)) + uid = uuid.UUID(plan_id) + + user_list = [] + + for script in self.ScriptConfig.values(): + if isinstance(script, MaaConfig): + for user in script.UserData.values(): + if user.get("Info", "StageMode") == str(uid): + if user.is_locked: + raise RuntimeError( + f"用户 {user.get('Info','Name')} 正在使用此计划表且被锁定, 无法完成删除" + ) + user_list.append(user) + + for user in user_list: + await user.set("Info", "StageMode", "Fixed") + + await self.PlanConfig.remove(uid) async def reorder_plan(self, index_list: list[str]) -> None: """重新排序计划表""" diff --git a/app/models/ConfigBase.py b/app/models/ConfigBase.py index 40d6c28..2663bf4 100644 --- a/app/models/ConfigBase.py +++ b/app/models/ConfigBase.py @@ -369,7 +369,7 @@ class ConfigBase: def __init__(self, if_save_multi_config: bool = True): - self.file: None | Path = None + self.file: Optional[Path] = None self.if_save_multi_config = if_save_multi_config self.is_locked = False @@ -493,6 +493,9 @@ class ConfigBase: if not hasattr(self, f"{group}_{name}"): raise AttributeError(f"配置项 '{group}.{name}' 不存在") + if self.is_locked: + raise ValueError("配置已锁定, 无法修改") + configItem = getattr(self, f"{group}_{name}") if isinstance(configItem, ConfigItem): configItem.setValue(value)