From 6337a72b0fc4fe6d5848ed9c3fb766e028bae895 Mon Sep 17 00:00:00 2001 From: thsrite Date: Mon, 21 Aug 2023 11:02:38 +0800 Subject: [PATCH] fix #204 --- app/api/endpoints/site.py | 15 +++++++++- app/plugins/autosignin/__init__.py | 41 +++++++++++++++++++++++++++ app/plugins/sitestatistic/__init__.py | 33 +++++++++++++++++++++ app/schemas/types.py | 3 ++ 4 files changed, 91 insertions(+), 1 deletion(-) diff --git a/app/api/endpoints/site.py b/app/api/endpoints/site.py index ce956138..4564e3a2 100644 --- a/app/api/endpoints/site.py +++ b/app/api/endpoints/site.py @@ -8,13 +8,14 @@ from app import schemas from app.chain.cookiecloud import CookieCloudChain from app.chain.search import SearchChain from app.chain.site import SiteChain +from app.core.event import EventManager from app.core.security import verify_token from app.db import get_db from app.db.models.site import Site from app.db.models.siteicon import SiteIcon from app.db.systemconfig_oper import SystemConfigOper from app.helper.sites import SitesHelper -from app.schemas.types import SystemConfigKey +from app.schemas.types import SystemConfigKey, EventType from app.utils.string import StringUtils router = APIRouter() @@ -90,6 +91,12 @@ def delete_site( 删除站点 """ Site.delete(db, site_id) + # 插件站点删除 + EventManager().send_event(EventType.SiteDeleted, + { + "plugin_id": ['AutoSignIn', 'SiteStatistic'], + "site_id": site_id + }) return schemas.Response(success=True) @@ -113,6 +120,12 @@ def cookie_cloud_sync(db: Session = Depends(get_db), Site.reset(db) SystemConfigOper(db).set(SystemConfigKey.IndexerSites, []) CookieCloudChain(db).process(manual=True) + # 插件站点删除 + EventManager().send_event(EventType.SiteDeleted, + { + "plugin_id": ['AutoSignIn', 'SiteStatistic'], + "site_id": None + }) return schemas.Response(success=True, message="站点已重置!") diff --git a/app/plugins/autosignin/__init__.py b/app/plugins/autosignin/__init__.py index e72b8e29..0eb5efb3 100644 --- a/app/plugins/autosignin/__init__.py +++ b/app/plugins/autosignin/__init__.py @@ -571,3 +571,44 @@ class AutoSignIn(_PluginBase): self._scheduler = None except Exception as e: logger.error("退出插件失败:%s" % str(e)) + + @eventmanager.register(EventType.SiteDeleted) + def site_deleted(self, event): + """ + 删除对应站点选中 + """ + plugin_id = event.event_data.get("plugin_id") + site_id = event.event_data.get("site_id") + if not plugin_id: + return + if self.__class__.__name__ not in plugin_id: + return + config = self.get_config() + if config: + sign_sites = config.get("sign_sites") + if sign_sites: + if isinstance(sign_sites, str): + sign_sites = [sign_sites] + + # 删除对应站点 + if site_id: + sign_sites = [site for site in sign_sites if int(site) != int(site_id)] + else: + # 清空 + sign_sites = [] + + # 若无站点,则停止 + if len(sign_sites) == 0: + self._enabled = False + + # 保存配置 + self.update_config( + { + "enabled": self._enabled, + "notify": self._notify, + "cron": self._cron, + "onlyonce": self._onlyonce, + "queue_cnt": self._queue_cnt, + "sign_sites": sign_sites + } + ) diff --git a/app/plugins/sitestatistic/__init__.py b/app/plugins/sitestatistic/__init__.py index 3800d59a..2b6713ff 100644 --- a/app/plugins/sitestatistic/__init__.py +++ b/app/plugins/sitestatistic/__init__.py @@ -1099,3 +1099,36 @@ class SiteStatistic(_PluginBase): "statistic_type": self._statistic_type, "statistic_sites": self._statistic_sites, }) + + @eventmanager.register(EventType.SiteDeleted) + def site_deleted(self, event): + """ + 删除对应站点选中 + """ + plugin_id = event.event_data.get("plugin_id") + site_id = event.event_data.get("site_id") + if not plugin_id: + return + if self.__class__.__name__ not in plugin_id: + return + config = self.get_config() + if config: + statistic_sites = config.get("statistic_sites") + if statistic_sites: + if isinstance(statistic_sites, str): + statistic_sites = [statistic_sites] + + # 删除对应站点 + if site_id: + statistic_sites = [site for site in statistic_sites if int(site) != int(site_id)] + else: + # 清空 + statistic_sites = [] + + # 若无站点,则停止 + if len(statistic_sites) == 0: + self._enabled = False + + self._statistic_sites = statistic_sites + # 保存配置 + self.__update_config() diff --git a/app/schemas/types.py b/app/schemas/types.py index 5eea698d..c5b035d5 100644 --- a/app/schemas/types.py +++ b/app/schemas/types.py @@ -22,6 +22,8 @@ class EventType(Enum): SiteSignin = "site.signin" # 站点数据统计 SiteStatistic = "site.statistic" + # 站点删除 + SiteDeleted = "site.deleted" # 豆瓣想看 DoubanSync = "douban.sync" # Webhook消息 @@ -40,6 +42,7 @@ class EventType(Enum): NoticeMessage = "notice.message" + # 系统配置Key字典 class SystemConfigKey(Enum): # 用户已安装的插件