fix monitor

This commit is contained in:
jxxghp
2024-10-30 08:25:26 +08:00
parent 76d939b665
commit 236d860133
3 changed files with 42 additions and 44 deletions
+14 -17
View File
@@ -20,7 +20,7 @@ from app.helper.directory import DirectoryHelper
from app.helper.format import FormatParser from app.helper.format import FormatParser
from app.helper.progress import ProgressHelper from app.helper.progress import ProgressHelper
from app.log import logger from app.log import logger
from app.schemas import TransferInfo, TransferTorrent, Notification, EpisodeFormat, FileItem from app.schemas import TransferInfo, TransferTorrent, Notification, EpisodeFormat, FileItem, TransferDirectoryConf
from app.schemas.types import TorrentStatus, EventType, MediaType, ProgressKey, NotificationType, MessageChannel, \ from app.schemas.types import TorrentStatus, EventType, MediaType, ProgressKey, NotificationType, MessageChannel, \
SystemConfigKey SystemConfigKey
from app.utils.string import StringUtils from app.utils.string import StringUtils
@@ -65,15 +65,9 @@ class TransferChain(ChainBase):
# 获取下载器监控目录 # 获取下载器监控目录
download_dirs = self.directoryhelper.get_download_dirs() download_dirs = self.directoryhelper.get_download_dirs()
# 如果没有下载器监控的目录则不处理 # 如果没有下载器监控的目录则不处理
downloader_monitor = False if not any(dir_info.monitor_type == "downloader" and dir_info.storage == "local"
for dir_info in download_dirs: for dir_info in download_dirs):
# 只有下载器监控的本地目录才处理
if dir_info.monitor_type == "downloader" and dir_info.storage == "local":
downloader_monitor = True
break
if not downloader_monitor:
return True return True
logger.info("开始整理下载器中已经完成下载的文件 ...") logger.info("开始整理下载器中已经完成下载的文件 ...")
# 从下载器获取种子列表 # 从下载器获取种子列表
torrents: Optional[List[TransferTorrent]] = self.list_torrents(status=TorrentStatus.TRANSFER) torrents: Optional[List[TransferTorrent]] = self.list_torrents(status=TorrentStatus.TRANSFER)
@@ -150,24 +144,25 @@ class TransferChain(ChainBase):
def __do_transfer(self, fileitem: FileItem, def __do_transfer(self, fileitem: FileItem,
meta: MetaBase = None, mediainfo: MediaInfo = None, meta: MetaBase = None, mediainfo: MediaInfo = None,
download_hash: str = None, target_storage: str = None, target_directory: TransferDirectoryConf = None,
target_path: Path = None, transfer_type: str = None, target_storage: str = None, target_path: Path = None,
transfer_type: str = None, scrape: bool = None,
season: int = None, epformat: EpisodeFormat = None, season: int = None, epformat: EpisodeFormat = None,
min_filesize: int = 0, scrape: bool = None, min_filesize: int = 0, download_hash: str = None, force: bool = False) -> Tuple[bool, str]:
force: bool = False) -> Tuple[bool, str]:
""" """
执行一个复杂目录的整理操作 执行一个复杂目录的整理操作
:param fileitem: 文件项 :param fileitem: 文件项
:param meta: 元数据 :param meta: 元数据
:param mediainfo: 媒体信息 :param mediainfo: 媒体信息
:param download_hash: 下载记录hash :param target_directory: 目标目录配置
:param target_storage: 目标存储器 :param target_storage: 目标存储器
:param target_path: 目标路径 :param target_path: 目标路径
:param transfer_type: 整理类型 :param transfer_type: 整理类型
:param scrape: 是否刮削元数据
:param season: 季 :param season: 季
:param epformat: 剧集格式 :param epformat: 剧集格式
:param min_filesize: 最小文件大小(MB) :param min_filesize: 最小文件大小(MB)
:param scrape: 是否刮削元数据 :param download_hash: 下载记录hash
:param force: 是否强制整理 :param force: 是否强制整理
返回:成功标识,错误信息 返回:成功标识,错误信息
""" """
@@ -228,7 +223,8 @@ class TransferChain(ChainBase):
# 如果是目录且不是⼀蓝光原盘,获取所有文件并整理 # 如果是目录且不是⼀蓝光原盘,获取所有文件并整理
if trans_item.type == "dir" and not bluray_dir: if trans_item.type == "dir" and not bluray_dir:
# 遍历获取下载目录所有文件(递归) # 遍历获取下载目录所有文件(递归)
if (files := self.storagechain.list_files(trans_item, recursion=True)): file_items.extend(files) if files := self.storagechain.list_files(trans_item, recursion=True):
file_items.extend(files)
# 如果是蓝光目录,计算⼤⼩ # 如果是蓝光目录,计算⼤⼩
elif bluray_dir: elif bluray_dir:
bluray.append(trans_item) bluray.append(trans_item)
@@ -387,9 +383,10 @@ class TransferChain(ChainBase):
transferinfo: TransferInfo = self.transfer(fileitem=file_item, transferinfo: TransferInfo = self.transfer(fileitem=file_item,
meta=file_meta, meta=file_meta,
mediainfo=file_mediainfo, mediainfo=file_mediainfo,
transfer_type=transfer_type, target_directory=target_directory,
target_storage=target_storage, target_storage=target_storage,
target_path=target_path, target_path=target_path,
transfer_type=transfer_type,
episodes_info=episodes_info, episodes_info=episodes_info,
scrape=scrape) scrape=scrape)
if not transferinfo: if not transferinfo:
+26 -23
View File
@@ -321,30 +321,33 @@ class FileManagerModule(_ModuleBase):
message=f"{target_path} 不是有效目录") message=f"{target_path} 不是有效目录")
# 获取目标路径 # 获取目标路径
directoryhelper = DirectoryHelper() directoryhelper = DirectoryHelper()
if target_path: if not target_directory:
dir_info = directoryhelper.get_dir(mediainfo, dest_path=target_path) # 根据目的路径查找目录配置
else: if target_path:
dir_info = directoryhelper.get_dir(mediainfo) target_directory = directoryhelper.get_dir(mediainfo, dest_path=target_path)
if dir_info: else:
target_directory = directoryhelper.get_dir(mediainfo)
if target_directory:
# 拼装媒体库一、二级子目录
target_path = self.__get_dest_dir(mediainfo=mediainfo, target_dir=target_directory)
# 目标存储类型 # 目标存储类型
if not target_storage: if not target_storage:
target_storage = dir_info.library_storage target_storage = target_directory.library_storage
# 整理方式 # 整理方式
if not transfer_type: if not transfer_type:
transfer_type = dir_info.transfer_type transfer_type = target_directory.transfer_type
# 是否需要刮削 # 是否需要刮削
if scrape is None: if scrape is None:
need_scrape = dir_info.scraping need_scrape = target_directory.scraping
else: else:
need_scrape = scrape need_scrape = scrape
# 是否需要重命名 # 是否需要重命名
need_rename = dir_info.renaming need_rename = target_directory.renaming
# 覆盖模式
overwrite_mode = dir_info.overwrite_mode
# 是否需要通知 # 是否需要通知
need_notify = dir_info.notify need_notify = target_directory.notify
# 拼装媒体库一、二级子目录 # 覆盖模式
target_path = self.__get_dest_dir(mediainfo=mediainfo, target_dir=dir_info) overwrite_mode = target_directory.overwrite_mode
elif target_path: elif target_path:
# 自定义目标路径,仅适用于手动整理的场景 # 自定义目标路径,仅适用于手动整理的场景
need_scrape = scrape or False need_scrape = scrape or False
@@ -365,14 +368,14 @@ class FileManagerModule(_ModuleBase):
return self.transfer_media(fileitem=fileitem, return self.transfer_media(fileitem=fileitem,
in_meta=meta, in_meta=meta,
mediainfo=mediainfo, mediainfo=mediainfo,
transfer_type=transfer_type,
overwrite_mode=overwrite_mode,
target_storage=target_storage, target_storage=target_storage,
target_path=target_path, target_path=target_path,
episodes_info=episodes_info, transfer_type=transfer_type,
need_scrape=need_scrape, need_scrape=need_scrape,
need_rename=need_rename, need_rename=need_rename,
need_notify=need_notify) need_notify=need_notify,
overwrite_mode=overwrite_mode,
episodes_info=episodes_info)
def __get_storage_oper(self, _storage: str, _func: str = None) -> Optional[StorageBase]: def __get_storage_oper(self, _storage: str, _func: str = None) -> Optional[StorageBase]:
""" """
@@ -832,14 +835,14 @@ class FileManagerModule(_ModuleBase):
fileitem: FileItem, fileitem: FileItem,
in_meta: MetaBase, in_meta: MetaBase,
mediainfo: MediaInfo, mediainfo: MediaInfo,
transfer_type: str,
overwrite_mode: str,
target_storage: str, target_storage: str,
target_path: Path, target_path: Path,
episodes_info: List[TmdbEpisode] = None, transfer_type: str,
need_scrape: bool = False, need_scrape: bool = False,
need_rename: bool = True, need_rename: bool = True,
need_notify: bool = True, need_notify: bool = True,
overwrite_mode: str = None,
episodes_info: List[TmdbEpisode] = None,
) -> TransferInfo: ) -> TransferInfo:
""" """
识别并整理一个文件或者一个目录下的所有文件 识别并整理一个文件或者一个目录下的所有文件
@@ -849,11 +852,11 @@ class FileManagerModule(_ModuleBase):
:param target_storage: 目标存储 :param target_storage: 目标存储
:param target_path: 目标路径 :param target_path: 目标路径
:param transfer_type: 文件整理方式 :param transfer_type: 文件整理方式
:param overwrite_mode: 覆盖模式
:param episodes_info: 当前季的全部集信息
:param need_scrape: 是否需要刮削 :param need_scrape: 是否需要刮削
:param need_rename: 是否需要重命名 :param need_rename: 是否需要重命名
:param need_notify: 是否需要通知 :param need_notify: 是否需要通知
:param overwrite_mode: 覆盖模式
:param episodes_info: 当前季的全部集信息
:return: TransferInfo、错误信息 :return: TransferInfo、错误信息
""" """
+2 -4
View File
@@ -386,12 +386,10 @@ class Monitor(metaclass=Singleton):
return return
# 查询转移目的目录 # 查询转移目的目录
dir_info = self.directoryhelper.get_dir(mediainfo, src_path=Path(mon_path)) dir_info = self.directoryhelper.get_dir(mediainfo, src_path=mon_path)
if not dir_info: if not dir_info:
logger.warn(f"{event_path.name} 未找到对应的目标目录") logger.warn(f"{event_path.name} 未找到对应的目标目录")
return return
# 获取目标路径
dest_path = Path(dir_info.library_path)
# 查找这个文件项 # 查找这个文件项
file_item = self.storagechain.get_file_item(storage=storage, path=event_path) file_item = self.storagechain.get_file_item(storage=storage, path=event_path)
@@ -421,7 +419,7 @@ class Monitor(metaclass=Singleton):
transferinfo: TransferInfo = self.chain.transfer(fileitem=file_item, transferinfo: TransferInfo = self.chain.transfer(fileitem=file_item,
meta=file_meta, meta=file_meta,
mediainfo=mediainfo, mediainfo=mediainfo,
target_path=dest_path, target_directory=dir_info,
episodes_info=episodes_info) episodes_info=episodes_info)
if not transferinfo: if not transferinfo: