From cf259af2d137efab2e8725a83aae2f148ab58963 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Mon, 25 Mar 2024 18:02:57 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E6=8F=92=E4=BB=B6=E5=AE=89?= =?UTF-8?q?=E8=A3=85=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/endpoints/plugin.py | 8 ++++++++ app/helper/plugin.py | 28 ++++++++++++++++++++++++++++ app/schemas/plugin.py | 2 ++ 3 files changed, 38 insertions(+) diff --git a/app/api/endpoints/plugin.py b/app/api/endpoints/plugin.py index d6bc77e4..f1ad4db0 100644 --- a/app/api/endpoints/plugin.py +++ b/app/api/endpoints/plugin.py @@ -67,6 +67,14 @@ def installed(_: schemas.TokenPayload = Depends(verify_token)) -> Any: return SystemConfigOper().get(SystemConfigKey.UserInstalledPlugins) or [] +@router.get("/statistic", summary="插件安装统计", response_model=dict) +def statistic(_: schemas.TokenPayload = Depends(verify_token)) -> Any: + """ + 插件安装统计 + """ + return PluginHelper().get_statistic() + + @router.get("/install/{plugin_id}", summary="安装插件", response_model=schemas.Response) def install(plugin_id: str, repo_url: str = "", diff --git a/app/helper/plugin.py b/app/helper/plugin.py index 713b7d3c..64e2fc1d 100644 --- a/app/helper/plugin.py +++ b/app/helper/plugin.py @@ -20,6 +20,10 @@ class PluginHelper(metaclass=Singleton): _base_url = "https://raw.githubusercontent.com/%s/%s/main/" + _install_reg = "https://movie-pilot.org/plugin/install/%s" + + _install_statistic = "https://movie-pilot.org/plugin/statistic" + @cached(cache=TTLCache(maxsize=100, ttl=1800)) def get_plugins(self, repo_url: str) -> Dict[str, dict]: """ @@ -61,10 +65,31 @@ class PluginHelper(metaclass=Singleton): return None, None return user, repo + @cached(cache=TTLCache(maxsize=1, ttl=1800)) + def get_statistic(self) -> Dict: + """ + 获取插件安装统计 + """ + res = RequestUtils(timeout=10).get_res(self._install_statistic) + if res and res.status_code == 200: + return res.json() + return {} + def install(self, pid: str, repo_url: str) -> Tuple[bool, str]: """ 安装插件 """ + def __install_reg() -> bool: + """ + 安装插件统计 + """ + if not pid: + return False + res = RequestUtils(timeout=5).get_res(self._install_reg % pid) + if res and res.status_code == 200: + return True + return False + if SystemUtils.is_frozen(): return False, "可执行文件模式下,只能安装本地插件" @@ -154,4 +179,7 @@ class PluginHelper(metaclass=Singleton): requirements_file = plugin_dir / "requirements.txt" if requirements_file.exists(): SystemUtils.execute(f"pip install -r {requirements_file} > /dev/null 2>&1") + # 安装成功后统计 + __install_reg() + return True, "" diff --git a/app/schemas/plugin.py b/app/schemas/plugin.py index abe71a03..30d9a07a 100644 --- a/app/schemas/plugin.py +++ b/app/schemas/plugin.py @@ -38,3 +38,5 @@ class Plugin(BaseModel): is_local: Optional[bool] = False # 仓库地址 repo_url: Optional[str] = None + # 安装次数 + install_count: Optional[int] = 0