fix(store): 修复无法解析插件位置 (#2133)

This commit is contained in:
molanp
2026-05-26 19:11:08 +08:00
committed by GitHub
parent eb0403b9d4
commit 3bebf1c5e5
@@ -58,13 +58,11 @@ class StoreManager:
) -> Path: ) -> Path:
"""将商店插件信息映射到本地插件文件/目录路径。""" """将商店插件信息映射到本地插件文件/目录路径。"""
plugin_name = plugin_info.module_path.split(".")[-1] or plugin_info.module plugin_name = plugin_info.module_path.split(".")[-1] or plugin_info.module
if is_external and plugin_info.is_dir and plugin_info.module_path == ".":
if plugin_info.is_dir:
return BASE_PATH / "plugins" / plugin_name return BASE_PATH / "plugins" / plugin_name
relative_parts = [part for part in plugin_info.module_path.split(".") if part] return BASE_PATH / "plugins" / f"{plugin_name}.py"
relative_path = Path(*relative_parts) if relative_parts else Path(plugin_name)
path = BASE_PATH.parent / relative_path
return path if plugin_info.is_dir else path.parent / f"{plugin_name}.py"
@classmethod @classmethod
async def get_data(cls) -> tuple[list[StorePluginInfo], list[StorePluginInfo]]: async def get_data(cls) -> tuple[list[StorePluginInfo], list[StorePluginInfo]]:
@@ -345,21 +343,28 @@ class StoreManager:
github_url = plugin_info.github_url github_url = plugin_info.github_url
assert github_url assert github_url
replace_module_path = module_path.replace(".", "/").lstrip("/") replace_module_path = module_path.replace(".", "/").lstrip("/")
plugin_name = module_path.split(".")[-1] or plugin_info.module plugin_module = plugin_info.module
if is_dir: if is_dir:
files = await RepoFileManager.list_directory_files( files = await RepoFileManager.list_directory_files(
github_url, replace_module_path, branch, repo_type=repo_type github_url, replace_module_path, branch, repo_type=repo_type
) )
else: else:
files = [RepoFileInfo(path=f"{replace_module_path}.py", is_dir=False)] files = [RepoFileInfo(path=f"{replace_module_path}.py", is_dir=False)]
if not is_external: if is_dir:
target_dir = BASE_PATH target_dir = BASE_PATH / "plugins" / plugin_module
elif is_dir and module_path == ".":
target_dir = BASE_PATH / "plugins" / plugin_name
else: else:
target_dir = BASE_PATH / "plugins" target_dir = BASE_PATH / "plugins"
files = [file for file in files if not file.is_dir] files = [file for file in files if not file.is_dir]
download_files = [(file.path, target_dir / file.path) for file in files] download_files: list[tuple[str, Path]] = []
for file in files:
src_path = file.path
if is_dir:
dst_path = target_dir / Path(src_path).relative_to(replace_module_path)
else:
dst_path = target_dir / f"{plugin_module}.py"
download_files.append((src_path, dst_path))
result = await RepoFileManager.download_files( result = await RepoFileManager.download_files(
github_url, github_url,
download_files, download_files,