mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-06 07:56:52 +08:00
fix(plugins_initializer): 优化插件恢复的容错处理
- 添加单个插件恢复失败的异常处理,使用 continue 跳过 - 确保单个插件恢复失败不影响其他插件继续恢复
This commit is contained in:
@@ -94,24 +94,24 @@ def backup_plugins():
|
|||||||
# 使用绝对路径确保准确性
|
# 使用绝对路径确保准确性
|
||||||
plugins_dir = settings.ROOT_PATH / "app" / "plugins"
|
plugins_dir = settings.ROOT_PATH / "app" / "plugins"
|
||||||
backup_dir = settings.CONFIG_PATH / "plugins_backup"
|
backup_dir = settings.CONFIG_PATH / "plugins_backup"
|
||||||
|
|
||||||
if not plugins_dir.exists():
|
if not plugins_dir.exists():
|
||||||
logger.info("插件目录不存在,跳过备份")
|
logger.info("插件目录不存在,跳过备份")
|
||||||
return
|
return
|
||||||
|
|
||||||
# 确保备份目录存在
|
# 确保备份目录存在
|
||||||
backup_dir.mkdir(parents=True, exist_ok=True)
|
backup_dir.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
# 需要排除的文件和目录
|
# 需要排除的文件和目录
|
||||||
exclude_items = {"__init__.py", "__pycache__", ".DS_Store"}
|
exclude_items = {"__init__.py", "__pycache__", ".DS_Store"}
|
||||||
|
|
||||||
# 遍历插件目录,备份除排除项外的所有内容
|
# 遍历插件目录,备份除排除项外的所有内容
|
||||||
for item in plugins_dir.iterdir():
|
for item in plugins_dir.iterdir():
|
||||||
if item.name in exclude_items:
|
if item.name in exclude_items:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
target_path = backup_dir / item.name
|
target_path = backup_dir / item.name
|
||||||
|
|
||||||
# 如果是目录
|
# 如果是目录
|
||||||
if item.is_dir():
|
if item.is_dir():
|
||||||
if target_path.exists():
|
if target_path.exists():
|
||||||
@@ -122,9 +122,9 @@ def backup_plugins():
|
|||||||
elif item.is_file():
|
elif item.is_file():
|
||||||
shutil.copy2(item, target_path)
|
shutil.copy2(item, target_path)
|
||||||
logger.info(f"已备份插件文件: {item.name}")
|
logger.info(f"已备份插件文件: {item.name}")
|
||||||
|
|
||||||
logger.info(f"插件备份完成,备份位置: {backup_dir}")
|
logger.info(f"插件备份完成,备份位置: {backup_dir}")
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"插件备份失败: {str(e)}")
|
logger.error(f"插件备份失败: {str(e)}")
|
||||||
|
|
||||||
@@ -138,26 +138,25 @@ def restore_plugins():
|
|||||||
if not SystemUtils.is_docker():
|
if not SystemUtils.is_docker():
|
||||||
return
|
return
|
||||||
|
|
||||||
try:
|
# 使用绝对路径确保准确性
|
||||||
# 使用绝对路径确保准确性
|
plugins_dir = settings.ROOT_PATH / "app" / "plugins"
|
||||||
plugins_dir = settings.ROOT_PATH / "app" / "plugins"
|
backup_dir = settings.CONFIG_PATH / "plugins_backup"
|
||||||
backup_dir = settings.CONFIG_PATH / "plugins_backup"
|
|
||||||
|
|
||||||
if not backup_dir.exists():
|
|
||||||
logger.info("插件备份目录不存在,跳过恢复")
|
|
||||||
return
|
|
||||||
|
|
||||||
# 系统被重置才恢复插件
|
if not backup_dir.exists():
|
||||||
if SystemHelper().is_system_reset():
|
logger.info("插件备份目录不存在,跳过恢复")
|
||||||
|
return
|
||||||
|
|
||||||
# 确保插件目录存在
|
# 系统被重置才恢复插件
|
||||||
plugins_dir.mkdir(parents=True, exist_ok=True)
|
if SystemHelper().is_system_reset():
|
||||||
|
|
||||||
# 遍历备份目录,恢复所有内容
|
# 确保插件目录存在
|
||||||
restored_count = 0
|
plugins_dir.mkdir(parents=True, exist_ok=True)
|
||||||
for item in backup_dir.iterdir():
|
|
||||||
target_path = plugins_dir / item.name
|
|
||||||
|
|
||||||
|
# 遍历备份目录,恢复所有内容
|
||||||
|
restored_count = 0
|
||||||
|
for item in backup_dir.iterdir():
|
||||||
|
target_path = plugins_dir / item.name
|
||||||
|
try:
|
||||||
# 如果是目录,且目录内有内容
|
# 如果是目录,且目录内有内容
|
||||||
if item.is_dir() and any(item.iterdir()):
|
if item.is_dir() and any(item.iterdir()):
|
||||||
if target_path.exists():
|
if target_path.exists():
|
||||||
@@ -170,15 +169,15 @@ def restore_plugins():
|
|||||||
shutil.copy2(item, target_path)
|
shutil.copy2(item, target_path)
|
||||||
logger.info(f"已恢复插件文件: {item.name}")
|
logger.info(f"已恢复插件文件: {item.name}")
|
||||||
restored_count += 1
|
restored_count += 1
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"恢复插件 {item.name} 时发生错误: {str(e)}")
|
||||||
|
continue
|
||||||
|
|
||||||
logger.info(f"插件恢复完成,共恢复 {restored_count} 个项目")
|
logger.info(f"插件恢复完成,共恢复 {restored_count} 个项目")
|
||||||
|
|
||||||
# 删除备份目录
|
# 删除备份目录
|
||||||
try:
|
try:
|
||||||
shutil.rmtree(backup_dir)
|
shutil.rmtree(backup_dir)
|
||||||
logger.info(f"已删除插件备份目录: {backup_dir}")
|
logger.info(f"已删除插件备份目录: {backup_dir}")
|
||||||
except Exception as e:
|
|
||||||
logger.warning(f"删除备份目录失败: {str(e)}")
|
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"插件恢复失败: {str(e)}")
|
logger.warning(f"删除备份目录失败: {str(e)}")
|
||||||
|
|||||||
Reference in New Issue
Block a user