From 4135df693c24e3a5715885e61310a3d1a92ee6c7 Mon Sep 17 00:00:00 2001 From: thsrite Date: Mon, 21 Aug 2023 10:41:25 +0800 Subject: [PATCH 1/3] fix #202 --- app/modules/themoviedb/tmdbapi.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/modules/themoviedb/tmdbapi.py b/app/modules/themoviedb/tmdbapi.py index 76691d8d..238449cf 100644 --- a/app/modules/themoviedb/tmdbapi.py +++ b/app/modules/themoviedb/tmdbapi.py @@ -353,12 +353,13 @@ class TmdbHelper: else: # 匹配标题、原标题 for tv in tvs: + # 获取别名 if (self.__compare_names(name, tv.get('name')) or self.__compare_names(name, tv.get('original_name'))) \ and (tv.get('first_air_date') and tv.get('first_air_date')[0:4] == str(season_year)): return tv - # 匹配别名、译名 - for tv in tvs[:5]: + + # 匹配别名、译名 if not tv.get("names"): tv = self.get_info(mtype=MediaType.TV, tmdbid=tv.get("id")) if not tv or not self.__compare_names(name, tv.get("names")): From 6337a72b0fc4fe6d5848ed9c3fb766e028bae895 Mon Sep 17 00:00:00 2001 From: thsrite Date: Mon, 21 Aug 2023 11:02:38 +0800 Subject: [PATCH 2/3] 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): # 用户已安装的插件 From 6afdfa3b9766db85ff3be778cac0c195c4e4cb27 Mon Sep 17 00:00:00 2001 From: thsrite Date: Mon, 21 Aug 2023 11:55:32 +0800 Subject: [PATCH 3/3] fix --- app/api/endpoints/site.py | 2 - app/modules/themoviedb/tmdbapi.py | 67 +++++++++++---------------- app/plugins/autosignin/__init__.py | 5 -- app/plugins/sitestatistic/__init__.py | 5 -- 4 files changed, 26 insertions(+), 53 deletions(-) diff --git a/app/api/endpoints/site.py b/app/api/endpoints/site.py index 4564e3a2..901af247 100644 --- a/app/api/endpoints/site.py +++ b/app/api/endpoints/site.py @@ -94,7 +94,6 @@ def delete_site( # 插件站点删除 EventManager().send_event(EventType.SiteDeleted, { - "plugin_id": ['AutoSignIn', 'SiteStatistic'], "site_id": site_id }) return schemas.Response(success=True) @@ -123,7 +122,6 @@ def cookie_cloud_sync(db: Session = Depends(get_db), # 插件站点删除 EventManager().send_event(EventType.SiteDeleted, { - "plugin_id": ['AutoSignIn', 'SiteStatistic'], "site_id": None }) return schemas.Response(success=True, message="站点已重置!") diff --git a/app/modules/themoviedb/tmdbapi.py b/app/modules/themoviedb/tmdbapi.py index 238449cf..4307555f 100644 --- a/app/modules/themoviedb/tmdbapi.py +++ b/app/modules/themoviedb/tmdbapi.py @@ -232,27 +232,21 @@ class TmdbHelper: if self.__compare_names(name, movie.get('original_title')) \ and movie.get('release_date')[0:4] == str(year): return movie + # 匹配别名、译名 + if not movie.get("names"): + movie = self.get_info(mtype=MediaType.MOVIE, tmdbid=movie.get("id")) + if movie and self.__compare_names(name, movie.get("names")): + return movie else: for movie in movies: if self.__compare_names(name, movie.get('title')) \ or self.__compare_names(name, movie.get('original_title')): return movie - # 匹配别名、译名 - index = 0 - for movie in movies: - # 有年份先过滤 - if year: - if not movie.get('release_date'): - continue - if movie.get('release_date')[0:4] != str(year): - continue - index += 1 - if not movie.get("names"): - movie = self.get_info(mtype=MediaType.MOVIE, tmdbid=movie.get("id")) - if movie and self.__compare_names(name, movie.get("names")): - return movie - if index > 5: - break + # 匹配别名、译名 + if not movie.get("names"): + movie = self.get_info(mtype=MediaType.MOVIE, tmdbid=movie.get("id")) + if movie and self.__compare_names(name, movie.get("names")): + return movie return {} def __search_tv_by_name(self, name: str, year: str) -> Optional[dict]: @@ -289,27 +283,22 @@ class TmdbHelper: if self.__compare_names(name, tv.get('original_name')) \ and tv.get('first_air_date')[0:4] == str(year): return tv + # 匹配别名、译名 + if not tv.get("names"): + tv = self.get_info(mtype=MediaType.TV, tmdbid=tv.get("id")) + if tv and self.__compare_names(name, tv.get("names")): + return tv else: for tv in tvs: if self.__compare_names(name, tv.get('name')) \ or self.__compare_names(name, tv.get('original_name')): return tv - # 匹配别名、译名 - index = 0 - for tv in tvs: - # 有年份先过滤 - if year: - if not tv.get('first_air_date'): - continue - if tv.get('first_air_date')[0:4] != str(year): - continue - index += 1 - if not tv.get("names"): - tv = self.get_info(mtype=MediaType.TV, tmdbid=tv.get("id")) - if tv and self.__compare_names(name, tv.get("names")): - return tv - if index > 5: - break + # 匹配别名、译名 + if not tv.get("names"): + tv = self.get_info(mtype=MediaType.TV, tmdbid=tv.get("id")) + if tv and self.__compare_names(name, tv.get("names")): + return tv + return {} def __search_tv_by_season(self, name: str, season_year: str, season_number: int) -> Optional[dict]: @@ -353,12 +342,10 @@ class TmdbHelper: else: # 匹配标题、原标题 for tv in tvs: - # 获取别名 if (self.__compare_names(name, tv.get('name')) or self.__compare_names(name, tv.get('original_name'))) \ and (tv.get('first_air_date') and tv.get('first_air_date')[0:4] == str(season_year)): return tv - # 匹配别名、译名 if not tv.get("names"): tv = self.get_info(mtype=MediaType.TV, tmdbid=tv.get("id")) @@ -431,18 +418,16 @@ class TmdbHelper: if self.__compare_names(name, multi.get('title')) \ or self.__compare_names(name, multi.get('original_title')): return multi - elif multi.get("media_type") == "tv": - if self.__compare_names(name, multi.get('name')) \ - or self.__compare_names(name, multi.get('original_name')): - return multi - # 匹配别名、译名 - for multi in multis[:5]: - if multi.get("media_type") == "movie": + # 匹配别名、译名 if not multi.get("names"): multi = self.get_info(mtype=MediaType.MOVIE, tmdbid=multi.get("id")) if multi and self.__compare_names(name, multi.get("names")): return multi elif multi.get("media_type") == "tv": + if self.__compare_names(name, multi.get('name')) \ + or self.__compare_names(name, multi.get('original_name')): + return multi + # 匹配别名、译名 if not multi.get("names"): multi = self.get_info(mtype=MediaType.TV, tmdbid=multi.get("id")) if multi and self.__compare_names(name, multi.get("names")): diff --git a/app/plugins/autosignin/__init__.py b/app/plugins/autosignin/__init__.py index 0eb5efb3..0bf6ef4b 100644 --- a/app/plugins/autosignin/__init__.py +++ b/app/plugins/autosignin/__init__.py @@ -577,12 +577,7 @@ class AutoSignIn(_PluginBase): """ 删除对应站点选中 """ - 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") diff --git a/app/plugins/sitestatistic/__init__.py b/app/plugins/sitestatistic/__init__.py index 2b6713ff..4e3b56af 100644 --- a/app/plugins/sitestatistic/__init__.py +++ b/app/plugins/sitestatistic/__init__.py @@ -1105,12 +1105,7 @@ class SiteStatistic(_PluginBase): """ 删除对应站点选中 """ - 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")