mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-05 23:47:41 +08:00
fix monitor
This commit is contained in:
+14
-17
@@ -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:
|
||||||
|
|||||||
@@ -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
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user