diff --git a/app/chain/download.py b/app/chain/download.py index 3a1c378a..9586edde 100644 --- a/app/chain/download.py +++ b/app/chain/download.py @@ -330,7 +330,7 @@ class DownloadChain(ChainBase): :return: 当前媒体是否缺失,各标题总的季集和缺失的季集 """ - def __append_no_exists(_season: int, _episodes: list, _start: int, _total: int): + def __append_no_exists(_season: int, _episodes: list, _total: int, _start: int): """ 添加不存在的季集信息 """ @@ -367,6 +367,7 @@ class DownloadChain(ChainBase): mtype=mediainfo.type, tmdbid=mediainfo.tmdb_id) if not mediainfo: + logger.error(f"媒体信息识别失败!") return False, {} if not mediainfo.seasons: logger.error(f"媒体信息中没有季集信息:{mediainfo.get_title_string()}") @@ -377,7 +378,7 @@ class DownloadChain(ChainBase): # 所有剧集均缺失 for season, episodes in mediainfo.seasons.items(): # 全季不存在 - __append_no_exists(season, [], len(episodes), min(episodes)) + __append_no_exists(_season=season, _episodes=[], _total=len(episodes), _start=min(episodes)) return False, no_exists else: # 存在一些,检查缺失的季集 @@ -390,10 +391,12 @@ class DownloadChain(ChainBase): # 全部集存在 continue # 添加不存在的季集信息 - __append_no_exists(season, episodes, len(episodes), min(episodes)) + __append_no_exists(_season=season, _episodes=episodes, + _total=len(episodes), _start=min(episodes)) else: # 全季不存在 - __append_no_exists(season, [], len(episodes), min(episodes)) + __append_no_exists(_season=season, _episodes=[], + _total=len(episodes), _start=min(episodes)) # 存在不完整的剧集 if no_exists: logger.info(f"媒体库中已存在部分剧集,缺失:{no_exists}") diff --git a/app/chain/search.py b/app/chain/search.py index ad6a3326..aae75e81 100644 --- a/app/chain/search.py +++ b/app/chain/search.py @@ -39,6 +39,14 @@ class SearchChain(ChainBase): if not indexer_sites: logger.warn('未开启任何有效站点,无法搜索资源') return [] + # 补充媒体信息 + if not mediainfo.names: + mediainfo: MediaInfo = self.recognize_media(meta=MetaInfo(title=mediainfo.get_title_string()), + mtype=mediainfo.type, + tmdbid=mediainfo.tmdb_id) + if not mediainfo: + logger.error(f'媒体信息识别失败!') + return [] # 缺失的媒体信息 if no_exists: # 过滤剧集 diff --git a/app/chain/subscribe.py b/app/chain/subscribe.py index 643139a1..dd317af8 100644 --- a/app/chain/subscribe.py +++ b/app/chain/subscribe.py @@ -57,6 +57,27 @@ class SubscribeChain(ChainBase): return False # 更新媒体图片 self.obtain_image(mediainfo=mediainfo) + # 总集数 + if mediainfo.type == MediaType.TV: + if not kwargs.get('total_episode'): + 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: + logger.error(f"媒体信息识别失败!") + return False + if not mediainfo.seasons: + logger.error(f"媒体信息中没有季集信息,标题:{title},tmdbid:{tmdbid}") + return False + total_episode = len(mediainfo.seasons.get(kwargs.get('season') or 1) or []) + if not total_episode: + logger.error(f'未获取到总集数,标题:{title},tmdbid:{tmdbid}') + return False + kwargs.update({ + 'total_episode': total_episode + }) # 添加订阅 state, err_msg = self.subscribes.add(mediainfo, season=season, **kwargs) if not state: diff --git a/app/chain/user_message.py b/app/chain/user_message.py index f428172a..13fb0131 100644 --- a/app/chain/user_message.py +++ b/app/chain/user_message.py @@ -287,6 +287,7 @@ class UserMessageChain(ChainBase): if not medias: self.post_message(title=f"{meta.get_name()} 没有找到对应的媒体信息!", userid=userid) return + logger.info(f"搜索到 {len(medias)} 条相关媒体信息") self._user_cache[userid] = { 'type': action, 'items': medias diff --git a/app/db/models/site.py b/app/db/models/site.py index cf830d22..85381005 100644 --- a/app/db/models/site.py +++ b/app/db/models/site.py @@ -31,3 +31,7 @@ class Site(Base): @staticmethod def get_by_domain(db: Session, domain: str): return db.query(Site).filter(Site.domain == domain).first() + + @staticmethod + def get_actives(db: Session): + return db.query(Site).filter(Site.is_active is True).all() diff --git a/app/db/sites.py b/app/db/sites.py index db98a744..67a4f114 100644 --- a/app/db/sites.py +++ b/app/db/sites.py @@ -31,6 +31,12 @@ class Sites: """ return Site.list(self._db) + def list_active(self): + """ + 按状态获取站点列表 + """ + return Site.get_actives(self._db) + def get_by_domain(self, domain: str) -> Site: """ 按域名获取站点 diff --git a/app/db/subscribes.py b/app/db/subscribes.py index fd8a11c8..e73b5a6b 100644 --- a/app/db/subscribes.py +++ b/app/db/subscribes.py @@ -5,7 +5,6 @@ from sqlalchemy.orm import Session from app.core.context import MediaInfo from app.db import SessionLocal from app.db.models.subscribe import Subscribe -from app.utils.types import MediaType class Subscribes: @@ -21,15 +20,6 @@ class Subscribes: """ 新增订阅 """ - # 总集数 - if mediainfo.type == MediaType.TV: - if not kwargs.get('total_episode'): - total_episode = len(mediainfo.seasons.get(kwargs.get('season') or 1) or []) - if not total_episode: - return False, "未识别到总集数" - kwargs.update({ - 'total_episode': total_episode - }) subscribe = Subscribe(name=mediainfo.title, year=mediainfo.year, type=mediainfo.type.value, diff --git a/app/modules/themoviedb/tmdb_cache.py b/app/modules/themoviedb/tmdb_cache.py index ab24c8e8..299eb88a 100644 --- a/app/modules/themoviedb/tmdb_cache.py +++ b/app/modules/themoviedb/tmdb_cache.py @@ -61,7 +61,7 @@ class TmdbCache(metaclass=Singleton): expire = info.get(CACHE_EXPIRE_TIMESTAMP_STR) if not expire or int(time.time()) < expire: info[CACHE_EXPIRE_TIMESTAMP_STR] = int(time.time()) + EXPIRE_TIMESTAMP - self.update(meta, info) + self._meta_data[key] = info elif expire and self._tmdb_cache_expire: self.delete(key) return info or {} @@ -136,7 +136,7 @@ class TmdbCache(metaclass=Singleton): if cache_year: cache_year = cache_year[:4] self._meta_data[self.__get_key(meta)] = { - "id": str(info.get("id")), + "id": info.get("id"), "type": info.get("media_type"), "year": cache_year, "title": cache_title,