This commit is contained in:
jxxghp
2023-06-10 19:22:40 +08:00
parent 548317980f
commit 99bd8aade3
17 changed files with 92 additions and 55 deletions

View File

@ -11,7 +11,7 @@ from app.core.context import MediaInfo, TorrentInfo
from app.core.meta import MetaBase
from app.log import logger
from app.utils.singleton import AbstractSingleton, Singleton
from app.utils.types import TorrentStatus
from app.utils.types import TorrentStatus, MediaType
class ChainBase(AbstractSingleton, metaclass=Singleton):
@ -69,7 +69,8 @@ class ChainBase(AbstractSingleton, metaclass=Singleton):
return self.run_module("prepare_recognize", title=title, subtitle=subtitle)
def recognize_media(self, meta: MetaBase,
tmdbid: str = None) -> Optional[MediaInfo]:
mtype: MediaType = None,
tmdbid: int = None) -> Optional[MediaInfo]:
return self.run_module("recognize_media", meta=meta, tmdbid=tmdbid)
def douban_info(self, doubanid: str) -> Optional[dict]:

View File

@ -133,7 +133,7 @@ class DownloadChain(ChainBase):
userid=userid)
return _hash
def __update_seasons(tmdbid: str, need: list, current: list) -> list:
def __update_seasons(tmdbid: int, need: list, current: list) -> list:
"""
更新need_tvs季数返回剩余季数
"""
@ -146,7 +146,7 @@ class DownloadChain(ChainBase):
need_tvs.pop(tmdbid)
return need
def __update_episodes(tmdbid: str, seq: int, need: list, current: set) -> list:
def __update_episodes(tmdbid: int, seq: int, need: list, current: set) -> list:
"""
更新need_tvs集数返回剩余集数
"""
@ -159,7 +159,7 @@ class DownloadChain(ChainBase):
need_tvs.pop(tmdbid)
return need
def __get_season_episodes(tmdbid: str, season: int) -> int:
def __get_season_episodes(tmdbid: int, season: int) -> int:
"""
获取需要的季的集数
"""
@ -181,7 +181,7 @@ class DownloadChain(ChainBase):
# 电视剧整季匹配
if need_tvs:
# 先把整季缺失的拿出来,看是否刚好有所有季都满足的种子
need_seasons: Dict[str, list] = {}
need_seasons: Dict[int, list] = {}
for need_tmdbid, need_tv in need_tvs.items():
for tv in need_tv:
if not tv:
@ -364,6 +364,7 @@ class DownloadChain(ChainBase):
if not mediainfo.seasons:
# 补充媒体信息
mediainfo: MediaInfo = self.recognize_media(meta=MetaInfo(title=mediainfo.get_title_string()),
mtype=mediainfo.type,
tmdbid=mediainfo.tmdb_id)
if not mediainfo:
return False, {}
@ -388,8 +389,11 @@ class DownloadChain(ChainBase):
if not episodes:
# 全部集存在
continue
# 添加不存在的季集信息
__append_no_exists(season, episodes, len(episodes), min(episodes))
# 添加不存在的季集信息
__append_no_exists(season, episodes, len(episodes), min(episodes))
else:
# 全季不存在
__append_no_exists(season, [], len(episodes), min(episodes))
# 存在不完整的剧集
if no_exists:
logger.info(f"媒体库中已存在部分剧集,缺失:{no_exists}")

View File

@ -30,7 +30,7 @@ class SubscribeChain(ChainBase):
def process(self, title: str,
mtype: MediaType = None,
tmdbid: str = None,
tmdbid: int = None,
season: int = None,
userid: str = None,
username: str = None,
@ -51,7 +51,7 @@ class SubscribeChain(ChainBase):
metainfo.type = MediaType.TV
metainfo.begin_season = season
# 识别媒体信息
mediainfo: MediaInfo = self.recognize_media(meta=metainfo, tmdbid=tmdbid)
mediainfo: MediaInfo = self.recognize_media(meta=metainfo, mtype=mtype, tmdbid=tmdbid)
if not mediainfo:
logger.warn(f'未识别到媒体信息,标题:{title}tmdbid{tmdbid}')
return False
@ -99,7 +99,7 @@ class SubscribeChain(ChainBase):
meta.begin_season = subscribe.season
meta.type = MediaType.MOVIE if subscribe.type == MediaType.MOVIE.value else MediaType.TV
# 识别媒体信息
mediainfo: MediaInfo = self.recognize_media(meta=meta, tmdbid=subscribe.tmdbid)
mediainfo: MediaInfo = self.recognize_media(meta=meta, mtype=meta.type, tmdbid=subscribe.tmdbid)
if not mediainfo:
logger.warn(f'未识别到媒体信息,标题:{subscribe.name}tmdbid{subscribe.tmdbid}')
continue
@ -183,7 +183,7 @@ class SubscribeChain(ChainBase):
meta.begin_season = subscribe.season
meta.type = MediaType.MOVIE if subscribe.type == MediaType.MOVIE.value else MediaType.TV
# 识别媒体信息
mediainfo: MediaInfo = self.recognize_media(meta=meta, tmdbid=subscribe.tmdbid)
mediainfo: MediaInfo = self.recognize_media(meta=meta, mtype=meta.type, tmdbid=subscribe.tmdbid)
if not mediainfo:
logger.warn(f'未识别到媒体信息,标题:{subscribe.name}tmdbid{subscribe.tmdbid}')
continue

View File

@ -89,7 +89,7 @@ class UserMessageChain(ChainBase):
return
# 发送缺失的媒体信息
if no_exists:
messages = [f"{no_exist.get('season')} 季缺失 {no_exist.get('total_episodes')}"
messages = [f"{no_exist.get('season')} 季缺失 {len(no_exist.get('episodes'))}"
for no_exist in no_exists.get(mediainfo.tmdb_id)]
self.post_message(title=f"{mediainfo.get_title_string()}\n" + "\n".join(messages))
logger.info(f"{mediainfo.get_title_string()} 媒体库中不存在,开始搜索 ...")
@ -109,7 +109,10 @@ class UserMessageChain(ChainBase):
self._current_page = 0
# 发送种子数据
logger.info(f"搜索到 {len(contexts)} 条数据,开始发送选择消息 ...")
self.__post_torrents_message(items=contexts[:self._page_size], userid=userid, total=len(contexts))
self.__post_torrents_message(title=mediainfo.title,
items=contexts[:self._page_size],
userid=userid,
total=len(contexts))
elif cache_type == "Subscribe":
# 订阅媒体
@ -204,10 +207,16 @@ class UserMessageChain(ChainBase):
end = start + self._page_size
if cache_type == "Torrent":
# 发送种子数据
self.__post_torrents_message(items=cache_list[start:end], userid=userid, total=len(cache_list))
self.__post_torrents_message(title=self._current_media.title,
items=cache_list[start:end],
userid=userid,
total=len(cache_list))
else:
# 发送媒体数据
self.__post_medias_message(items=cache_list[start:end], userid=userid, total=len(cache_list))
self.__post_medias_message(title=self._current_media.title,
items=cache_list[start:end],
userid=userid,
total=len(cache_list))
elif text.lower() == "n":
# 下一页
@ -229,10 +238,12 @@ class UserMessageChain(ChainBase):
else:
if cache_type == "Torrent":
# 发送种子数据
self.__post_torrents_message(items=cache_list, userid=userid, total=total)
self.__post_torrents_message(title=self._current_media.title,
items=cache_list, userid=userid, total=total)
else:
# 发送媒体数据
self.__post_medias_message(items=cache_list, userid=userid, total=total)
self.__post_medias_message(title=self._current_media.title,
items=cache_list, userid=userid, total=total)
else:
# 搜索或订阅
@ -262,6 +273,7 @@ class UserMessageChain(ChainBase):
meta.begin_episode = episode_num
if year:
meta.year = year
# 记录当前状态
self._current_meta = meta
# 开始搜索
logger.info(f"开始搜索:{meta.get_name()}")
@ -276,24 +288,26 @@ class UserMessageChain(ChainBase):
self._current_page = 0
self._current_media = None
# 发送媒体列表
self.__post_medias_message(items=medias[:self._page_size], userid=userid, total=len(medias))
self.__post_medias_message(title=meta.get_name(),
items=medias[:self._page_size],
userid=userid, total=len(medias))
def __post_medias_message(self, items: list, userid: str, total: int):
def __post_medias_message(self, title: str, items: list, userid: str, total: int):
"""
发送媒体列表消息
"""
self.post_medias_message(
title=f"共找到{total}条相关信息请回复数字选择对应媒体p: 上一页 n: 下一页)",
title=f"{title}共找到{total}条相关信息请回复数字选择对应媒体p: 上一页 n: 下一页)",
items=items,
userid=userid
)
def __post_torrents_message(self, items: list, userid: str, total: int):
def __post_torrents_message(self, title: str, items: list, userid: str, total: int):
"""
发送种子列表消息
"""
self.post_torrents_message(
title=f"共找到{total}条相关信息请回复数字下载对应资源0: 自动选择 p: 上一页 n: 下一页)",
title=f"{title}共找到{total}条相关信息请回复数字下载对应资源0: 自动选择 p: 上一页 n: 下一页)",
items=items,
userid=userid
)