Merge remote-tracking branch 'origin/main'

This commit is contained in:
jxxghp 2023-08-21 12:33:00 +08:00
commit 6ee934a745
5 changed files with 106 additions and 42 deletions

View File

@ -8,13 +8,14 @@ from app import schemas
from app.chain.cookiecloud import CookieCloudChain from app.chain.cookiecloud import CookieCloudChain
from app.chain.search import SearchChain from app.chain.search import SearchChain
from app.chain.site import SiteChain from app.chain.site import SiteChain
from app.core.event import EventManager
from app.core.security import verify_token from app.core.security import verify_token
from app.db import get_db from app.db import get_db
from app.db.models.site import Site from app.db.models.site import Site
from app.db.models.siteicon import SiteIcon from app.db.models.siteicon import SiteIcon
from app.db.systemconfig_oper import SystemConfigOper from app.db.systemconfig_oper import SystemConfigOper
from app.helper.sites import SitesHelper 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 from app.utils.string import StringUtils
router = APIRouter() router = APIRouter()
@ -90,6 +91,11 @@ def delete_site(
删除站点 删除站点
""" """
Site.delete(db, site_id) Site.delete(db, site_id)
# 插件站点删除
EventManager().send_event(EventType.SiteDeleted,
{
"site_id": site_id
})
return schemas.Response(success=True) return schemas.Response(success=True)
@ -113,6 +119,11 @@ def cookie_cloud_sync(db: Session = Depends(get_db),
Site.reset(db) Site.reset(db)
SystemConfigOper(db).set(SystemConfigKey.IndexerSites, []) SystemConfigOper(db).set(SystemConfigKey.IndexerSites, [])
CookieCloudChain(db).process(manual=True) CookieCloudChain(db).process(manual=True)
# 插件站点删除
EventManager().send_event(EventType.SiteDeleted,
{
"site_id": None
})
return schemas.Response(success=True, message="站点已重置!") return schemas.Response(success=True, message="站点已重置!")

View File

@ -232,27 +232,21 @@ class TmdbHelper:
if self.__compare_names(name, movie.get('original_title')) \ if self.__compare_names(name, movie.get('original_title')) \
and movie.get('release_date')[0:4] == str(year): and movie.get('release_date')[0:4] == str(year):
return movie 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: else:
for movie in movies: for movie in movies:
if self.__compare_names(name, movie.get('title')) \ if self.__compare_names(name, movie.get('title')) \
or self.__compare_names(name, movie.get('original_title')): or self.__compare_names(name, movie.get('original_title')):
return movie 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"): if not movie.get("names"):
movie = self.get_info(mtype=MediaType.MOVIE, tmdbid=movie.get("id")) movie = self.get_info(mtype=MediaType.MOVIE, tmdbid=movie.get("id"))
if movie and self.__compare_names(name, movie.get("names")): if movie and self.__compare_names(name, movie.get("names")):
return movie return movie
if index > 5:
break
return {} return {}
def __search_tv_by_name(self, name: str, year: str) -> Optional[dict]: 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')) \ if self.__compare_names(name, tv.get('original_name')) \
and tv.get('first_air_date')[0:4] == str(year): and tv.get('first_air_date')[0:4] == str(year):
return tv 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: else:
for tv in tvs: for tv in tvs:
if self.__compare_names(name, tv.get('name')) \ if self.__compare_names(name, tv.get('name')) \
or self.__compare_names(name, tv.get('original_name')): or self.__compare_names(name, tv.get('original_name')):
return tv 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"): if not tv.get("names"):
tv = self.get_info(mtype=MediaType.TV, tmdbid=tv.get("id")) tv = self.get_info(mtype=MediaType.TV, tmdbid=tv.get("id"))
if tv and self.__compare_names(name, tv.get("names")): if tv and self.__compare_names(name, tv.get("names")):
return tv return tv
if index > 5:
break
return {} return {}
def __search_tv_by_season(self, name: str, season_year: str, season_number: int) -> Optional[dict]: def __search_tv_by_season(self, name: str, season_year: str, season_number: int) -> Optional[dict]:
@ -358,7 +347,6 @@ class TmdbHelper:
and (tv.get('first_air_date') and tv.get('first_air_date')[0:4] == str(season_year)): and (tv.get('first_air_date') and tv.get('first_air_date')[0:4] == str(season_year)):
return tv return tv
# 匹配别名、译名 # 匹配别名、译名
for tv in tvs[:5]:
if not tv.get("names"): if not tv.get("names"):
tv = self.get_info(mtype=MediaType.TV, tmdbid=tv.get("id")) tv = self.get_info(mtype=MediaType.TV, tmdbid=tv.get("id"))
if not tv or not self.__compare_names(name, tv.get("names")): if not tv or not self.__compare_names(name, tv.get("names")):
@ -430,18 +418,16 @@ class TmdbHelper:
if self.__compare_names(name, multi.get('title')) \ if self.__compare_names(name, multi.get('title')) \
or self.__compare_names(name, multi.get('original_title')): or self.__compare_names(name, multi.get('original_title')):
return multi 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"): if not multi.get("names"):
multi = self.get_info(mtype=MediaType.MOVIE, tmdbid=multi.get("id")) multi = self.get_info(mtype=MediaType.MOVIE, tmdbid=multi.get("id"))
if multi and self.__compare_names(name, multi.get("names")): if multi and self.__compare_names(name, multi.get("names")):
return multi return multi
elif multi.get("media_type") == "tv": 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"): if not multi.get("names"):
multi = self.get_info(mtype=MediaType.TV, tmdbid=multi.get("id")) multi = self.get_info(mtype=MediaType.TV, tmdbid=multi.get("id"))
if multi and self.__compare_names(name, multi.get("names")): if multi and self.__compare_names(name, multi.get("names")):

View File

@ -571,3 +571,39 @@ class AutoSignIn(_PluginBase):
self._scheduler = None self._scheduler = None
except Exception as e: except Exception as e:
logger.error("退出插件失败:%s" % str(e)) logger.error("退出插件失败:%s" % str(e))
@eventmanager.register(EventType.SiteDeleted)
def site_deleted(self, event):
"""
删除对应站点选中
"""
site_id = event.event_data.get("site_id")
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
}
)

View File

@ -1099,3 +1099,31 @@ class SiteStatistic(_PluginBase):
"statistic_type": self._statistic_type, "statistic_type": self._statistic_type,
"statistic_sites": self._statistic_sites, "statistic_sites": self._statistic_sites,
}) })
@eventmanager.register(EventType.SiteDeleted)
def site_deleted(self, event):
"""
删除对应站点选中
"""
site_id = event.event_data.get("site_id")
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()

View File

@ -22,6 +22,8 @@ class EventType(Enum):
SiteSignin = "site.signin" SiteSignin = "site.signin"
# 站点数据统计 # 站点数据统计
SiteStatistic = "site.statistic" SiteStatistic = "site.statistic"
# 站点删除
SiteDeleted = "site.deleted"
# 豆瓣想看 # 豆瓣想看
DoubanSync = "douban.sync" DoubanSync = "douban.sync"
# Webhook消息 # Webhook消息
@ -40,6 +42,7 @@ class EventType(Enum):
NoticeMessage = "notice.message" NoticeMessage = "notice.message"
# 系统配置Key字典 # 系统配置Key字典
class SystemConfigKey(Enum): class SystemConfigKey(Enum):
# 用户已安装的插件 # 用户已安装的插件