From 8a6ad0388013bd3477743eb3c15dc5ffa2ddd8cc Mon Sep 17 00:00:00 2001 From: jxxghp Date: Tue, 10 Sep 2024 08:26:30 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E6=94=AF=E6=8C=81V2=E4=B8=93?= =?UTF-8?q?=E7=94=A8=E6=8F=92=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/core/plugin.py | 19 ++++++++++++------- app/helper/plugin.py | 6 ++++-- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/app/core/plugin.py b/app/core/plugin.py index 82f613caa..0c7180e83 100644 --- a/app/core/plugin.py +++ b/app/core/plugin.py @@ -542,11 +542,11 @@ def get_online_plugins(self) -> List[schemas.Plugin]: 获取所有在线插件信息 """ - def __get_plugin_info(market: str) -> Optional[List[schemas.Plugin]]: + def __get_plugin_info(market: str, version: str = None) -> Optional[List[schemas.Plugin]]: """ 获取插件信息 """ - online_plugins = self.pluginhelper.get_plugins(market) or {} + online_plugins = self.pluginhelper.get_plugins(repo_url=market, version=version) or {} if not online_plugins: logger.warn(f"获取插件库失败:{market}") return @@ -554,10 +554,11 @@ def __get_plugin_info(market: str) -> Optional[List[schemas.Plugin]]: add_time = len(online_plugins) for pid, plugin_info in online_plugins.items(): # 版本兼容性控制 - if hasattr(settings, 'VERSION_FLAG') \ - and not plugin_info.get(settings.VERSION_FLAG): - # 插件当前版本不兼容 - continue + if not version: + if hasattr(settings, 'VERSION_FLAG') \ + and not plugin_info.get(settings.VERSION_FLAG): + # 插件当前版本不兼容 + continue # 运行状插件 plugin_obj = self._running_plugins.get(pid) # 非运行态插件 @@ -644,7 +645,11 @@ def __get_plugin_info(market: str) -> Optional[List[schemas.Plugin]]: for m in settings.PLUGIN_MARKET.split(","): if not m: continue - futures.append(executor.submit(__get_plugin_info, m)) + # v1版本插件 + futures.append(executor.submit(__get_plugin_info, m, None)) + # v2+版本插件 + if settings.VERSION_FLAG: + futures.append(executor.submit(__get_plugin_info, m, settings.VERSION_FLAG)) for future in concurrent.futures.as_completed(futures): plugins = future.result() if plugins: diff --git a/app/helper/plugin.py b/app/helper/plugin.py index 6520ba43c..f973219e1 100644 --- a/app/helper/plugin.py +++ b/app/helper/plugin.py @@ -40,10 +40,11 @@ def proxies(self): return None if settings.GITHUB_PROXY else settings.PROXY @cached(cache=TTLCache(maxsize=1000, ttl=1800)) - def get_plugins(self, repo_url: str) -> Dict[str, dict]: + def get_plugins(self, repo_url: str, version: str = None) -> Dict[str, dict]: """ 获取Github所有最新插件列表 :param repo_url: Github仓库地址 + :param version: 版本 """ if not repo_url: return {} @@ -51,9 +52,10 @@ def get_plugins(self, repo_url: str) -> Dict[str, dict]: if not user or not repo: return {} raw_url = self._base_url % (user, repo) + package_url = f"{raw_url}package.{version}.json" if version else f"{raw_url}package.json" res = RequestUtils(proxies=self.proxies, headers=settings.REPO_GITHUB_HEADERS(repo=f"{user}/{repo}"), - timeout=10).get_res(f"{raw_url}package.json") + timeout=10).get_res(package_url) if res: try: return json.loads(res.text)