mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-05 07:27:15 +08:00
fix(plugin): close cancellable install lifecycle gaps
This commit is contained in:
@@ -63,6 +63,27 @@ class PluginDependencyService:
|
||||
"""安装当前环境缺失的插件依赖并保持历史列表返回合同。"""
|
||||
return self.install_missing_with_status().missing
|
||||
|
||||
async def async_install_missing_with_status(self) -> PluginDependencyInstallResult:
|
||||
"""在异步启动链中恢复缺失依赖,确保安装子进程可取消。"""
|
||||
installer = self._system().dependency
|
||||
missing = await installer.async_find_missing()
|
||||
if not missing:
|
||||
return PluginDependencyInstallResult(missing=[], success=True)
|
||||
self._logger.debug(f"检测到缺失的依赖项: {missing}")
|
||||
self._logger.info(f"开始安装缺失的依赖项,共 {len(missing)} 个...")
|
||||
started = time.time()
|
||||
success, _message = await installer.async_install(missing)
|
||||
elapsed = time.time() - started
|
||||
if success:
|
||||
self._logger.info(
|
||||
f"已完成 {len(missing)} 个依赖项安装,总耗时:{elapsed:.2f} 秒"
|
||||
)
|
||||
else:
|
||||
self._logger.warning(
|
||||
f"存在缺失依赖项安装失败,请尝试手动安装,总耗时:{elapsed:.2f} 秒"
|
||||
)
|
||||
return PluginDependencyInstallResult(missing=missing, success=success)
|
||||
|
||||
def classify_plugins(self) -> PluginDependencyClassification:
|
||||
"""返回启动编排使用的轻量插件分类。"""
|
||||
ready, missing_dependencies, missing_source = (
|
||||
|
||||
@@ -603,6 +603,14 @@ class PluginManager(ConfigReloadMixin, metaclass=Singleton):
|
||||
log=logger,
|
||||
).install_missing_with_status()
|
||||
|
||||
@staticmethod
|
||||
async def async_install_plugin_missing_dependencies_with_status() -> PluginDependencyInstallResult:
|
||||
"""在异步启动链中恢复插件依赖并保留取消语义。"""
|
||||
return await PluginDependencyService(
|
||||
system=get_plugin_system,
|
||||
log=logger,
|
||||
).async_install_missing_with_status()
|
||||
|
||||
def classify_plugins(self) -> PluginDependencyClassification:
|
||||
"""按源码依赖状态分类物理插件,并把结果映射到虚拟实例。"""
|
||||
source_classification = PluginDependencyService(
|
||||
|
||||
Reference in New Issue
Block a user