fix subscribe api

This commit is contained in:
jxxghp
2024-09-30 13:33:06 +08:00
parent 637e92304f
commit 666f9a536d
4 changed files with 65 additions and 70 deletions
+1 -1
View File
@@ -398,7 +398,7 @@ def user_subscribes(
return Subscribe.list_by_username(db, username) return Subscribe.list_by_username(db, username)
@router.get("/files/{subscribe_id}", summary="订阅相关文件信息", response_model=List[schemas.SubscrbieInfo]) @router.get("/files/{subscribe_id}", summary="订阅相关文件信息", response_model=schemas.SubscrbieInfo)
def subscribe_files( def subscribe_files(
subscribe_id: int, subscribe_id: int,
db: Session = Depends(get_db), db: Session = Depends(get_db),
+37 -37
View File
@@ -25,7 +25,8 @@ from app.helper.message import MessageHelper
from app.helper.subscribe import SubscribeHelper from app.helper.subscribe import SubscribeHelper
from app.helper.torrent import TorrentHelper from app.helper.torrent import TorrentHelper
from app.log import logger from app.log import logger
from app.schemas import NotExistMediaInfo, Notification, SubscrbieInfo, SubscribeEpisodeInfo from app.schemas import NotExistMediaInfo, Notification, SubscrbieInfo, SubscribeEpisodeInfo, SubscribeDownloadFileInfo, \
SubscribeLibraryFileInfo
from app.schemas.types import MediaType, SystemConfigKey, MessageChannel, NotificationType, EventType from app.schemas.types import MediaType, SystemConfigKey, MessageChannel, NotificationType, EventType
@@ -1167,47 +1168,34 @@ class SubscribeChain(ChainBase):
return return
# 返回订阅数据 # 返回订阅数据
subscribe_info = SubscrbieInfo( subscribe_info = SubscrbieInfo()
id=subscribe.id,
name=subscribe.name,
year=subscribe.year,
type=subscribe.type,
tmdbid=subscribe.tmdbid,
doubanid=subscribe.doubanid,
season=subscribe.season,
poster=subscribe.poster,
backdrop=subscribe.backdrop,
vote=subscribe.vote,
description=subscribe.description,
episodes_info={}
)
# 所有集的数据 # 所有集的数据
episodes_info = {} episodes: Dict[int, SubscribeEpisodeInfo] = {}
if subscribe.tmdbid and subscribe.type == MediaType.TV.value: if subscribe.tmdbid and subscribe.type == MediaType.TV.value:
# 查询TMDB中的集信息 # 查询TMDB中的集信息
tmdb_episodes = self.tmdbchain.tmdb_episodes( tmdb_episodes = self.tmdbchain.tmdb_episodes(
tmdbid=subscribe.tmdb_id, tmdbid=subscribe.tmdbid,
season=subscribe.season season=subscribe.season
) )
if tmdb_episodes: if tmdb_episodes:
for episode in tmdb_episodes: for episode in tmdb_episodes:
episode_info = SubscribeEpisodeInfo() info = SubscribeEpisodeInfo()
episodes_info.title = episode.name info.title = episode.name
episodes_info.description = episode.overview info.description = episode.overview
episodes_info.backdrop = f"https://{settings.TMDB_IMAGE_DOMAIN}/t/p/w500${episode.still_path}" info.backdrop = f"https://{settings.TMDB_IMAGE_DOMAIN}/t/p/w500${episode.still_path}"
episodes_info[episode.episode_number] = episode_info episodes[episode.episode_number] = info
elif subscribe.type == MediaType.TV.value: elif subscribe.type == MediaType.TV.value:
# 根据开始结束集计算集信息 # 根据开始结束集计算集信息
for i in range(subscribe.start_episode or 1, subscribe.total_episode + 1): for i in range(subscribe.start_episode or 1, subscribe.total_episode + 1):
episode_info = SubscribeEpisodeInfo() info = SubscribeEpisodeInfo()
episode_info.title = f'{i}' info.title = f'{i}'
episodes_info[i] = episode_info episodes[i] = info
else: else:
# 电影 # 电影
episode_info = SubscribeEpisodeInfo() info = SubscribeEpisodeInfo()
episode_info.title = subscribe.name info.title = subscribe.name
episodes_info[0] = episode_info episodes[0] = info
# 所有下载记录 # 所有下载记录
download_his = self.downloadhis.get_by_mediaid(tmdbid=subscribe.tmdbid, doubanid=subscribe.doubanid) download_his = self.downloadhis.get_by_mediaid(tmdbid=subscribe.tmdbid, doubanid=subscribe.doubanid)
@@ -1221,14 +1209,20 @@ class SubscribeChain(ChainBase):
for file in files: for file in files:
# 识别文件名 # 识别文件名
file_meta = MetaInfo(file.filepath) file_meta = MetaInfo(file.filepath)
# 下载文件信息
file_info = SubscribeDownloadFileInfo(
torrent_title=his.torrent_name,
site_name=his.torrent_site,
downloader=file.downloader,
hash=his.download_hash,
file_path=file.fullpath,
)
if subscribe.type == MediaType.TV.value: if subscribe.type == MediaType.TV.value:
episode_number = file_meta.begin_episode episode_number = file_meta.begin_episode
if episode_number and episodes_info.get(episode_number): if episode_number and episodes.get(episode_number):
episodes_info[episode_number].download_file = file.fullpath episodes[episode_number].download.append(file_info)
episodes_info[episode_number].torrent = torrent_url
else: else:
episodes_info[0].download_file = file.fullpath episodes[0].download.append(file_info)
episodes_info[0].torrent = torrent_url
# 生成元数据 # 生成元数据
meta = MetaInfo(subscribe.name) meta = MetaInfo(subscribe.name)
@@ -1255,13 +1249,19 @@ class SubscribeChain(ChainBase):
for fileitem in library_fileitems: for fileitem in library_fileitems:
# 识别文件名 # 识别文件名
file_meta = MetaInfo(fileitem.path) file_meta = MetaInfo(fileitem.path)
# 媒体库文件信息
file_info = SubscribeLibraryFileInfo(
storage=fileitem.storage,
file_path=fileitem.path,
)
if subscribe.type == MediaType.TV.value: if subscribe.type == MediaType.TV.value:
episode_number = file_meta.begin_episode episode_number = file_meta.begin_episode
if episode_number and episodes_info.get(episode_number): if episode_number and episodes.get(episode_number):
episodes_info[episode_number].library_file = fileitem.path episodes[episode_number].library.append(file_info)
else: else:
episodes_info[0].library_file = fileitem.path episodes[0].library.append(file_info)
# 更新订阅信息 # 更新订阅信息
subscribe_info.episodes_info = episodes_info subscribe_info.subscribe = Subscribe(**subscribe.to_dict())
subscribe_info.episodes = episodes
return subscribe_info return subscribe_info
-3
View File
@@ -1093,9 +1093,6 @@ class FileManagerModule(_ModuleBase):
media_path = dir_path / rel_path.parts[0] media_path = dir_path / rel_path.parts[0]
else: else:
continue continue
# 检查媒体文件夹是否存在
if not media_path.exists():
continue
# 检索媒体文件 # 检索媒体文件
fileitem = storage_oper.get_item(media_path) fileitem = storage_oper.get_item(media_path)
if not fileitem: if not fileitem:
+27 -29
View File
@@ -81,43 +81,41 @@ class Subscribe(BaseModel):
orm_mode = True orm_mode = True
class SubscribeDownloadFileInfo(BaseModel):
# 种子名称
torrent_title: Optional[str] = None
# 站点名称
site_name: Optional[str] = None
# 下载器
downloader: Optional[str] = None
# hash
hash: Optional[str] = None
# 文件路径
file_path: Optional[str] = None
class SubscribeLibraryFileInfo(BaseModel):
# 存储
storage: Optional[str] = "local"
# 文件路径
file_path: Optional[str] = None
class SubscribeEpisodeInfo(BaseModel): class SubscribeEpisodeInfo(BaseModel):
# 种子地址
torrent: Optional[str] = None
# 下载文件路程
download_file: Optional[str] = None
# 媒体库文件路径
library_file: Optional[str] = None
# 标题 # 标题
title: Optional[str] = None title: Optional[str] = None
# 描述 # 描述
description: Optional[str] = None description: Optional[str] = None
# 背景图 # 背景图
backdrop: Optional[str] = None backdrop: Optional[str] = None
# 下载文件信息
download: Optional[List[SubscribeDownloadFileInfo]] = []
# 媒体库文件信息
library: Optional[List[SubscribeLibraryFileInfo]] = []
class SubscrbieInfo(BaseModel): class SubscrbieInfo(BaseModel):
# 订阅ID # 订阅信息
id: Optional[int] = None subscribe: Optional[Subscribe] = None
# 订阅名称
name: Optional[str] = None
# 订阅年份
year: Optional[str] = None
# 订阅类型 电影/电视剧
type: Optional[str] = None
# 媒体ID
tmdbid: Optional[int] = None
doubanid: Optional[str] = None
bangumiid: Optional[int] = None
# 季号
season: Optional[int] = None
# 海报
poster: Optional[str] = None
# 背景图
backdrop: Optional[str] = None
# 评分
vote: Optional[int] = 0
# 描述
description: Optional[str] = None
# 集信息 {集号: {download: 文件路径,library: 文件路径, backdrop: url, title: 标题, description: 描述}} # 集信息 {集号: {download: 文件路径,library: 文件路径, backdrop: url, title: 标题, description: 描述}}
episodes_info: Optional[Dict[int, SubscribeEpisodeInfo]] = {} episodes: Optional[Dict[int, SubscribeEpisodeInfo]] = {}