diff --git a/app/api/endpoints/media.py b/app/api/endpoints/media.py index dc6d2f77..a96d35dc 100644 --- a/app/api/endpoints/media.py +++ b/app/api/endpoints/media.py @@ -136,6 +136,24 @@ def category(_: schemas.TokenPayload = Depends(verify_token)) -> Any: return MediaChain().media_category() or {} +@router.get("/group/seasons/{episode_group}", summary="查询剧集组季信息", response_model=List[schemas.MediaSeason]) +def group_seasons(episode_group: str, _: schemas.TokenPayload = Depends(verify_token)) -> Any: + """ + 查询剧集组季信息(themoviedb) + """ + return TmdbChain().tmdb_group_seasons(group_id=episode_group) + + +@router.get("/groups/{tmdbid}", summary="查询媒体剧集组", response_model=List[dict]) +def seasons(tmdbid: int, _: schemas.TokenPayload = Depends(verify_token)) -> Any: + """ + 查询媒体剧集组列表(themoviedb) + """ + mediainfo = MediaChain().recognize_media(tmdbid=tmdbid, mtype=MediaType.TV) + if not mediainfo: + return [] + return mediainfo.episode_groups + @router.get("/seasons", summary="查询媒体季信息", response_model=List[schemas.MediaSeason]) def seasons(mediaid: Optional[str] = None, title: Optional[str] = None, diff --git a/app/chain/subscribe.py b/app/chain/subscribe.py index c0d93ce6..f3888a0f 100644 --- a/app/chain/subscribe.py +++ b/app/chain/subscribe.py @@ -149,7 +149,7 @@ class SubscribeChain(ChainBase, metaclass=Singleton): season = 1 # 总集数 if not kwargs.get('total_episode'): - if not mediainfo.seasons: + if not mediainfo.seasons or episode_group: # 补充媒体信息 mediainfo = self.recognize_media(mtype=mediainfo.type, tmdbid=mediainfo.tmdb_id, diff --git a/app/chain/tmdb.py b/app/chain/tmdb.py index 2ca53c43..771868b6 100644 --- a/app/chain/tmdb.py +++ b/app/chain/tmdb.py @@ -70,6 +70,13 @@ class TmdbChain(ChainBase, metaclass=Singleton): """ return self.run_module("tmdb_seasons", tmdbid=tmdbid) + def tmdb_group_seasons(self, group_id: str) -> List[schemas.TmdbSeason]: + """ + 根据剧集组ID查询themoviedb所有季集信息 + :param group_id: 剧集组ID + """ + return self.run_module("tmdb_group_seasons", group_id=group_id) + def tmdb_episodes(self, tmdbid: int, season: int, episode_group: Optional[str] = None) -> List[schemas.TmdbEpisode]: """ 根据TMDBID查询某季的所有信信息 diff --git a/app/db/models/subscribe.py b/app/db/models/subscribe.py index 052a5bbb..90821a81 100644 --- a/app/db/models/subscribe.py +++ b/app/db/models/subscribe.py @@ -84,8 +84,6 @@ class Subscribe(Base): media_category = Column(String) # 过滤规则组 filter_groups = Column(JSON, default=list) - # 可选剧集组 - episode_groups = Column(JSON, default=list) # 选择的剧集组 episode_group = Column(String) diff --git a/app/db/subscribe_oper.py b/app/db/subscribe_oper.py index 97850a8d..bafc67de 100644 --- a/app/db/subscribe_oper.py +++ b/app/db/subscribe_oper.py @@ -34,7 +34,6 @@ class SubscribeOper(DbOper): backdrop=mediainfo.get_backdrop_image(), vote=mediainfo.vote_average, description=mediainfo.overview, - episode_groups=mediainfo.episode_groups, date=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), **kwargs) subscribe.create(self._db) diff --git a/app/modules/themoviedb/__init__.py b/app/modules/themoviedb/__init__.py index c1a52e14..b65b65a6 100644 --- a/app/modules/themoviedb/__init__.py +++ b/app/modules/themoviedb/__init__.py @@ -488,12 +488,28 @@ class TheMovieDbModule(_ModuleBase): tmdb_info = self.tmdb.get_info(tmdbid=tmdbid, mtype=MediaType.TV) if not tmdb_info: return [] - return [schemas.TmdbSeason(**season) - for season in tmdb_info.get("seasons", []) if season.get("season_number")] + return [schemas.TmdbSeason(**sea) + for sea in tmdb_info.get("seasons", []) if sea.get("season_number")] + + def tmdb_group_seasons(self, group_id: str) -> List[schemas.TmdbSeason]: + """ + 根据剧集组ID查询themoviedb所有季集信息 + :param group_id: 剧集组ID + """ + group_seasons = self.tmdb.get_tv_group_seasons(group_id) + if not group_seasons: + return [] + return [schemas.TmdbSeason( + season_number=sea.get("order"), + name=sea.get("name"), + episode_count=len(sea.get("episodes") or []), + air_date=sea.get("episodes")[0].get("air_date") if sea.get("episodes") else None, + ) for sea in group_seasons] + def tmdb_episodes(self, tmdbid: int, season: int, episode_group: Optional[str] = None) -> List[schemas.TmdbEpisode]: """ - 根据TMDBID查询某季的所有信信息 + 根据TMDBID查询某季的所有集信息 :param tmdbid: TMDBID :param season: 季 :param episode_group: 剧集组 diff --git a/app/schemas/subscribe.py b/app/schemas/subscribe.py index 728ebdb3..1b691e34 100644 --- a/app/schemas/subscribe.py +++ b/app/schemas/subscribe.py @@ -73,8 +73,6 @@ class Subscribe(BaseModel): media_category: Optional[str] = None # 过滤规则组 filter_groups: Optional[List[str]] = Field(default_factory=list) - # 可选剧集组 - episode_groups: Optional[list] = Field(default_factory=list) # 剧集组 episode_group: str = None diff --git a/database/versions/4b544f5d3b07_2_1_3.py b/database/versions/4b544f5d3b07_2_1_3.py index a364ae84..9583caa1 100644 --- a/database/versions/4b544f5d3b07_2_1_3.py +++ b/database/versions/4b544f5d3b07_2_1_3.py @@ -22,7 +22,6 @@ def upgrade() -> None: # ### commands auto generated by Alembic - please adjust! ### with contextlib.suppress(Exception): op.add_column('downloadhistory', sa.Column('episode_group', sa.String, nullable=True)) - op.add_column('subscribe', sa.Column('episode_groups', sa.JSON(), nullable=True)) op.add_column('subscribe', sa.Column('episode_group', sa.String, nullable=True)) op.add_column('subscribehistory', sa.Column('episode_group', sa.String, nullable=True)) op.add_column('transferhistory', sa.Column('episode_group', sa.String, nullable=True))