add subscribe/files api

This commit is contained in:
jxxghp
2024-09-08 13:02:42 +08:00
parent 01505ceaa7
commit 34ae663d5a
13 changed files with 241 additions and 38 deletions

View File

@@ -1043,12 +1043,12 @@ class FileManagerModule(_ModuleBase):
else:
return Path(render_str)
def media_exists(self, mediainfo: MediaInfo, **kwargs) -> Optional[ExistMediaInfo]:
def media_files(self, mediainfo: MediaInfo) -> List[FileItem]:
"""
判断媒体文件是否存在于文件系统(网盘或本地文件),只支持标准媒体库结构
:param mediainfo: 识别的媒体信息
:return: 如不存在返回None存在时返回信息包括每季已存在所有集{type: movie/tv, seasons: {season: [episodes]}}
获取对应媒体的媒体库文件列表
:param mediainfo: 媒体信息
"""
ret_fileitems = []
# 检查本地媒体库
dest_dirs = DirectoryHelper().get_library_dirs()
# 检查每一个媒体库目录
@@ -1059,8 +1059,6 @@ class FileManagerModule(_ModuleBase):
continue
# 媒体分类路径
dir_path = self.__get_dest_dir(mediainfo=mediainfo, target_dir=dest_dir)
if not storage_oper.get_item(dir_path):
continue
# 重命名格式
rename_format = settings.TV_RENAME_FORMAT \
if mediainfo.type == MediaType.TV else settings.MOVIE_RENAME_FORMAT
@@ -1079,30 +1077,45 @@ class FileManagerModule(_ModuleBase):
if not media_path.exists():
continue
# 检索媒体文件
media_files = SystemUtils.list_files(directory=media_path, extensions=settings.RMT_MEDIAEXT)
if not media_files:
fileitem = storage_oper.get_item(media_path)
if not fileitem:
continue
if mediainfo.type == MediaType.MOVIE:
# 电影存在任何文件为存在
logger.info(f"{mediainfo.title_year} 在本地文件系统中找到了")
return ExistMediaInfo(type=MediaType.MOVIE)
else:
# 电视剧检索集数
seasons: Dict[int, list] = {}
for media_file in media_files:
file_meta = MetaInfo(media_file.stem)
season_index = file_meta.begin_season or 1
episode_index = file_meta.begin_episode
if not episode_index:
continue
if season_index not in seasons:
seasons[season_index] = []
media_files = storage_oper.list(fileitem)
if media_files:
ret_fileitems.extend(media_files)
return ret_fileitems
def media_exists(self, mediainfo: MediaInfo, **kwargs) -> Optional[ExistMediaInfo]:
"""
判断媒体文件是否存在于文件系统(网盘或本地文件),只支持标准媒体库结构
:param mediainfo: 识别的媒体信息
:return: 如不存在返回None存在时返回信息包括每季已存在所有集{type: movie/tv, seasons: {season: [episodes]}}
"""
# 检查媒体库
fileitems = self.media_files(mediainfo)
if not fileitems:
return None
if mediainfo.type == MediaType.MOVIE:
# 电影存在任何文件为存在
logger.info(f"{mediainfo.title_year} 在本地文件系统中找到了")
return ExistMediaInfo(type=MediaType.MOVIE)
else:
# 电视剧检索集数
seasons: Dict[int, list] = {}
for fileitem in fileitems:
file_meta = MetaInfo(fileitem.basename)
season_index = file_meta.begin_season or 1
episode_index = file_meta.begin_episode
if not episode_index:
continue
if season_index not in seasons:
seasons[season_index] = []
if episode_index not in seasons[season_index]:
seasons[season_index].append(episode_index)
# 返回剧集情况
logger.info(f"{mediainfo.title_year} 在本地文件系统中找到了这些季集:{seasons}")
return ExistMediaInfo(type=MediaType.TV, seasons=seasons)
# 不存在
return None
# 返回剧集情况
logger.info(f"{mediainfo.title_year} 在本地文件系统中找到了这些季集:{seasons}")
return ExistMediaInfo(type=MediaType.TV, seasons=seasons)
def __delete_version_files(self, target_storage: str, path: Path) -> bool:
"""

View File

@@ -248,7 +248,7 @@ class SlackModule(_ModuleBase, _MessageBase):
continue
client: Slack = self.get_client(conf.name)
if client:
client.send_meidas_msg(title=message.title, medias=medias, userid=message.userid)
client.send_medias_msg(title=message.title, medias=medias, userid=message.userid)
def post_torrents_message(self, message: Notification, torrents: List[Context]) -> None:
"""

View File

@@ -168,7 +168,7 @@ class Slack:
logger.error(f"Slack消息发送失败: {msg_e}")
return False, str(msg_e)
def send_meidas_msg(self, medias: List[MediaInfo], userid: str = "", title: str = "") -> Optional[bool]:
def send_medias_msg(self, medias: List[MediaInfo], userid: str = "", title: str = "") -> Optional[bool]:
"""
发送列表类消息
"""

View File

@@ -117,7 +117,7 @@ class SynologyChatModule(_ModuleBase, _MessageBase):
continue
client: SynologyChat = self.get_client(conf.name)
if client:
client.send_meidas_msg(title=message.title, medias=medias,
client.send_medias_msg(title=message.title, medias=medias,
userid=message.userid)
def post_torrents_message(self, message: Notification, torrents: List[Context]) -> None:

View File

@@ -90,7 +90,7 @@ class SynologyChat:
logger.error(f"SynologyChat发送消息错误{str(msg_e)}")
return False
def send_meidas_msg(self, medias: List[MediaInfo], userid: str = "", title: str = "") -> Optional[bool]:
def send_medias_msg(self, medias: List[MediaInfo], userid: str = "", title: str = "") -> Optional[bool]:
"""
发送列表类消息
"""

View File

@@ -163,7 +163,7 @@ class TelegramModule(_ModuleBase, _MessageBase):
continue
client: Telegram = self.get_client(conf.name)
if client:
client.send_meidas_msg(title=message.title, medias=medias,
client.send_medias_msg(title=message.title, medias=medias,
userid=message.userid, link=message.link)
def post_torrents_message(self, message: Notification, torrents: List[Context]) -> None:

View File

@@ -114,7 +114,7 @@ class Telegram:
logger.error(f"发送消息失败:{msg_e}")
return False
def send_meidas_msg(self, medias: List[MediaInfo], userid: str = "",
def send_medias_msg(self, medias: List[MediaInfo], userid: str = "",
title: str = "", link: str = None) -> Optional[bool]:
"""
发送媒体列表消息