fix rardar

This commit is contained in:
jxxghp 2023-06-13 20:20:02 +08:00
parent a743403faa
commit ac9dbb5239
5 changed files with 56 additions and 38 deletions

View File

@ -15,12 +15,12 @@ from app.utils.types import MediaType
router = APIRouter() router = APIRouter()
def start_subscribe_chain(title: str, def start_subscribe_chain(title: str, year: str,
mtype: MediaType, tmdbid: int, season: int, username: str): mtype: MediaType, tmdbid: int, season: int, username: str):
""" """
启动订阅链式任务 启动订阅链式任务
""" """
SubscribeChain().process(title=title, SubscribeChain().process(title=title, year=year,
mtype=mtype, tmdbid=tmdbid, season=season, username=username) mtype=mtype, tmdbid=tmdbid, season=season, username=username)
@ -113,6 +113,7 @@ async def seerr_subscribe(request: Request, background_tasks: BackgroundTasks,
mtype=media_type, mtype=media_type,
tmdbid=tmdbId, tmdbid=tmdbId,
title=subject, title=subject,
year="",
season=0, season=0,
username=user_name) username=user_name)
else: else:
@ -126,6 +127,7 @@ async def seerr_subscribe(request: Request, background_tasks: BackgroundTasks,
mtype=media_type, mtype=media_type,
tmdbid=tmdbId, tmdbid=tmdbId,
title=subject, title=subject,
year="",
season=season, season=season,
username=user_name) username=user_name)

View File

@ -4,10 +4,12 @@ from fastapi import APIRouter, HTTPException, Depends
from requests import Session from requests import Session
from app import schemas from app import schemas
from app.chain.subscribe import SubscribeChain
from app.core.config import settings from app.core.config import settings
from app.db import get_db from app.db import get_db
from app.db.models.subscribe import Subscribe from app.db.models.subscribe import Subscribe
from app.schemas import RadarrMovie from app.schemas import RadarrMovie
from app.utils.types import MediaType
from version import APP_VERSION from version import APP_VERSION
arr_router = APIRouter() arr_router = APIRouter()
@ -214,6 +216,37 @@ async def arr_movies(apikey: str, db: Session = Depends(get_db)) -> Any:
return result return result
@arr_router.get("/movie/lookup", response_model=List[schemas.RadarrMovie])
async def arr_movie_lookup(apikey: str, term: str, db: Session = Depends(get_db)) -> Any:
"""
查询Rardar电影 term: `tmdb:${id}`
"""
if not apikey or apikey != settings.API_TOKEN:
raise HTTPException(
status_code=403,
detail="认证失败!",
)
tmdbid = term.replace("tmdb:", "")
subscribe = Subscribe.get_by_tmdbid(db, int(tmdbid))
if subscribe:
return [RadarrMovie(
id=subscribe.id,
title=subscribe.name,
isAvailable=True,
monitored=True,
tmdbId=subscribe.tmdbid,
profileId=1,
qualityProfileId=1,
added=True,
hasFile=False,
)]
else:
raise HTTPException(
status_code=404,
detail="未找到该电影!"
)
@arr_router.get("/movie/{mid}", response_model=schemas.RadarrMovie) @arr_router.get("/movie/{mid}", response_model=schemas.RadarrMovie)
async def arr_movie(apikey: str, mid: int, db: Session = Depends(get_db)) -> Any: async def arr_movie(apikey: str, mid: int, db: Session = Depends(get_db)) -> Any:
""" """
@ -244,39 +277,8 @@ async def arr_movie(apikey: str, mid: int, db: Session = Depends(get_db)) -> Any
) )
@arr_router.get("/movie/lookup", response_model=List[schemas.RadarrMovie])
async def arr_movie_lookup(apikey: str, term: str, db: Session = Depends(get_db)) -> Any:
"""
查询Rardar电影 term: `tmdb:${id}`
"""
if not apikey or apikey != settings.API_TOKEN:
raise HTTPException(
status_code=403,
detail="认证失败!",
)
tmdbid = term.replace("tmdb:", "")
subscribe = Subscribe.get_by_tmdbid(db, int(tmdbid))
if subscribe:
return RadarrMovie(
id=subscribe.id,
title=subscribe.name,
isAvailable=True,
monitored=True,
tmdbId=subscribe.tmdbid,
profileId=1,
qualityProfileId=1,
added=True,
hasFile=False,
)
else:
raise HTTPException(
status_code=404,
detail="未找到该电影!"
)
@arr_router.put("/movie", response_model=schemas.Response) @arr_router.put("/movie", response_model=schemas.Response)
async def arr_add_movie(apikey: str, title: str, tmdbId: int, year: int) -> Any: async def arr_add_movie(apikey: str, title: str, tmdbId: int, year: str) -> Any:
""" """
新增Rardar电影订阅 新增Rardar电影订阅
""" """
@ -285,6 +287,13 @@ async def arr_add_movie(apikey: str, title: str, tmdbId: int, year: int) -> Any:
status_code=403, status_code=403,
detail="认证失败!", detail="认证失败!",
) )
if SubscribeChain().process(title=title, year=year, mtype=MediaType.MOVIE, tmdbid=tmdbId):
return {"success": True, "msg": "添加订阅成功!"}
else:
raise HTTPException(
status_code=500,
detail="添加订阅失败!"
)
@arr_router.delete("/movie/{mid}", response_model=schemas.Response) @arr_router.delete("/movie/{mid}", response_model=schemas.Response)

View File

@ -96,6 +96,7 @@ class DoubanSyncChain(ChainBase):
logger.info(f'{mediainfo.get_title_string()} 未下载未完整,添加订阅 ...') logger.info(f'{mediainfo.get_title_string()} 未下载未完整,添加订阅 ...')
# 添加订阅 # 添加订阅
self.subscribechain.process(title=mediainfo.title, self.subscribechain.process(title=mediainfo.title,
year=mediainfo.year,
mtype=mediainfo.type, mtype=mediainfo.type,
tmdbid=mediainfo.tmdb_id, tmdbid=mediainfo.tmdb_id,
season=meta.begin_season, season=meta.begin_season,

View File

@ -28,7 +28,7 @@ class SubscribeChain(ChainBase):
self.subscribes = Subscribes() self.subscribes = Subscribes()
self.siteshelper = SitesHelper() self.siteshelper = SitesHelper()
def process(self, title: str, def process(self, title: str, year: str,
mtype: MediaType = None, mtype: MediaType = None,
tmdbid: int = None, tmdbid: int = None,
season: int = None, season: int = None,
@ -45,6 +45,8 @@ class SubscribeChain(ChainBase):
title, _ = result title, _ = result
# 识别元数据 # 识别元数据
metainfo = MetaInfo(title) metainfo = MetaInfo(title)
if year:
metainfo.year = year
if mtype: if mtype:
metainfo.type = mtype metainfo.type = mtype
if season: if season:
@ -305,6 +307,7 @@ class SubscribeChain(ChainBase):
if no_exists \ if no_exists \
and no_exists.get(tmdb_id) \ and no_exists.get(tmdb_id) \
and (total_episode or start_episode): and (total_episode or start_episode):
index = 0
for no_exist in no_exists.get(tmdb_id): for no_exist in no_exists.get(tmdb_id):
# 替换原季值 # 替换原季值
if no_exist.get("season") == begin_season: if no_exist.get("season") == begin_season:
@ -315,7 +318,7 @@ class SubscribeChain(ChainBase):
if total_episode and start_episode: if total_episode and start_episode:
# 有开始集和总集数 # 有开始集和总集数
episodes = list(range(start_episode, total_episode + 1)) episodes = list(range(start_episode, total_episode + 1))
no_exist = { no_exists[tmdb_id][index] = {
"season": begin_season, "season": begin_season,
"episodes": episodes, "episodes": episodes,
"total_episodes": total_episode, "total_episodes": total_episode,
@ -324,7 +327,7 @@ class SubscribeChain(ChainBase):
elif not start_episode: elif not start_episode:
# 有总集数没有开始集 # 有总集数没有开始集
episodes = list(range(min(episode_list or [1]), total_episode + 1)) episodes = list(range(min(episode_list or [1]), total_episode + 1))
no_exist = { no_exists[tmdb_id][index] = {
"season": begin_season, "season": begin_season,
"episodes": episodes, "episodes": episodes,
"total_episodes": total_episode, "total_episodes": total_episode,
@ -333,10 +336,11 @@ class SubscribeChain(ChainBase):
elif not total_episode: elif not total_episode:
# 有开始集没有总集数 # 有开始集没有总集数
episodes = list(range(start_episode, max(episode_list or [total]) + 1)) episodes = list(range(start_episode, max(episode_list or [total]) + 1))
no_exist = { no_exists[tmdb_id][index] = {
"season": begin_season, "season": begin_season,
"episodes": episodes, "episodes": episodes,
"total_episodes": max(episode_list or [total]), "total_episodes": max(episode_list or [total]),
"start_episode": start_episode "start_episode": start_episode
} }
index += 1
return no_exists return no_exists

View File

@ -129,6 +129,7 @@ class UserMessageChain(ChainBase):
# 订阅媒体 # 订阅媒体
mediainfo: MediaInfo = cache_list[int(text) - 1] mediainfo: MediaInfo = cache_list[int(text) - 1]
self.subscribechain.process(title=mediainfo.title, self.subscribechain.process(title=mediainfo.title,
year=mediainfo.year,
mtype=mediainfo.type, mtype=mediainfo.type,
tmdbid=mediainfo.tmdb_id, tmdbid=mediainfo.tmdb_id,
season=self._current_meta.begin_season, season=self._current_meta.begin_season,
@ -157,6 +158,7 @@ class UserMessageChain(ChainBase):
logger.info(f'{self._current_media.get_title_string()} 未下载未完整,添加订阅 ...') logger.info(f'{self._current_media.get_title_string()} 未下载未完整,添加订阅 ...')
# 添加订阅 # 添加订阅
self.subscribechain.process(title=self._current_media.title, self.subscribechain.process(title=self._current_media.title,
year=self._current_media.year,
mtype=self._current_media.type, mtype=self._current_media.type,
tmdbid=self._current_media.tmdb_id, tmdbid=self._current_media.tmdb_id,
season=self._current_meta.begin_season, season=self._current_meta.begin_season,