diff --git a/app/chain/__init__.py b/app/chain/__init__.py index 7af8fcfa..c1e97317 100644 --- a/app/chain/__init__.py +++ b/app/chain/__init__.py @@ -402,14 +402,16 @@ class ChainBase(metaclass=ABCMeta): target_path=target_path, episodes_info=episodes_info, scrape=scrape) def transfer_completed(self, hashs: str, path: Path = None, - downloader: str = None) -> None: + downloader: str = None, transfer_type: str = None) -> None: """ 转移完成后的处理 :param hashs: 种子Hash :param path: 源目录 :param downloader: 下载器 + :param transfer_type: 整理方式 """ - return self.run_module("transfer_completed", hashs=hashs, path=path, downloader=downloader) + return self.run_module("transfer_completed", hashs=hashs, path=path, + downloader=downloader, transfer_type=transfer_type) def remove_torrents(self, hashs: Union[str, list], delete_file: bool = True, downloader: str = None) -> bool: diff --git a/app/chain/transfer.py b/app/chain/transfer.py index f2a69a3f..b576f2a7 100644 --- a/app/chain/transfer.py +++ b/app/chain/transfer.py @@ -68,11 +68,13 @@ class TransferChain(ChainBase): # 如果没有下载器监控的目录则不处理 downloader_monitor = False for dir_info in download_dirs: - if dir_info.monitor_type == "downloader": + # 只有下载器监控的本地目录才处理 + if dir_info.monitor_type == "downloader" and dir_info.storage == "local": downloader_monitor = True break if not downloader_monitor: return True + logger.info("开始整理下载器中已经完成下载的文件 ...") # 从下载器获取种子列表 torrents: Optional[List[TransferTorrent]] = self.list_torrents(status=TorrentStatus.TRANSFER) @@ -82,8 +84,6 @@ class TransferChain(ChainBase): logger.info(f"获取到 {len(torrents)} 个已完成的下载任务") - # 检查是否为下载器监控目录中的文件 - need_handle = False for torrent in torrents: # 文件路径 file_path = Path(torrent.path) @@ -91,15 +91,16 @@ class TransferChain(ChainBase): logger.warn(f"文件不存在:{file_path}") continue # 检查是否为下载器监控目录中的文件 + transfer_dirinfo = None for dir_info in download_dirs: if dir_info.monitor_type != "downloader": continue if not dir_info.download_path: continue if file_path.is_relative_to(Path(dir_info.download_path)): - need_handle = True + transfer_dirinfo = dir_info break - if not need_handle: + if not transfer_dirinfo: logger.info(f"文件 {file_path} 不在下载器监控目录中,不通过下载器进行整理") # 设置下载任务状态 self.transfer_completed(hashs=torrent.hash, path=torrent.path) @@ -137,7 +138,8 @@ class TransferChain(ChainBase): ) # 设置下载任务状态 - self.transfer_completed(hashs=torrent.hash, path=torrent.path) + self.transfer_completed(hashs=torrent.hash, path=torrent.path, + transfer_type=transfer_dirinfo.transfer_type) # 结束 logger.info("所有下载器中下载完成的文件已整理完成") return True diff --git a/app/modules/qbittorrent/__init__.py b/app/modules/qbittorrent/__init__.py index dab640ea..ae964d0e 100644 --- a/app/modules/qbittorrent/__init__.py +++ b/app/modules/qbittorrent/__init__.py @@ -264,29 +264,28 @@ class QbittorrentModule(_ModuleBase, _DownloaderBase): return ret_torrents def transfer_completed(self, hashs: str, path: Path = None, - downloader: str = None) -> None: + downloader: str = None, transfer_type: str = None) -> None: """ 转移完成后的处理 :param hashs: 种子Hash :param path: 源目录 :param downloader: 下载器 + :param transfer_type: 整理方式 """ server: Qbittorrent = self.get_server(downloader) if not server: return None server.set_torrents_tag(ids=hashs, tags=['已整理']) - # FIXME 移动模式删除种子 - """ - if settings.TRANSFER_TYPE in ["move"]: + # 移动模式删除种子 + if transfer_type and transfer_type in ["move"]: if self.remove_torrents(hashs): logger.info(f"移动模式删除种子成功:{hashs} ") - # 删除残留文件 + # 删除本地残留文件 if path and path.exists(): files = SystemUtils.list_files(path, settings.RMT_MEDIAEXT) if not files: logger.warn(f"删除残留文件夹:{path}") shutil.rmtree(path, ignore_errors=True) - """ def remove_torrents(self, hashs: Union[str, list], delete_file: bool = True, downloader: str = None) -> Optional[bool]: diff --git a/app/modules/transmission/__init__.py b/app/modules/transmission/__init__.py index 53aebbe4..4c8efe9c 100644 --- a/app/modules/transmission/__init__.py +++ b/app/modules/transmission/__init__.py @@ -250,13 +250,13 @@ class TransmissionModule(_ModuleBase, _DownloaderBase): return ret_torrents def transfer_completed(self, hashs: str, path: Path = None, - downloader: str = None) -> None: + downloader: str = None, transfer_type: str = None) -> None: """ 转移完成后的处理 :param hashs: 种子Hash :param path: 源目录 :param downloader: 下载器 - :return: None + :param transfer_type: 整理方式 """ # 获取下载器 server: Transmission = self.get_server(downloader) @@ -270,18 +270,16 @@ class TransmissionModule(_ModuleBase, _DownloaderBase): else: tags = ['已整理'] server.set_torrent_tag(ids=hashs, tags=tags) - # FIXME 移动模式删除种子 - """ - if settings.TRANSFER_TYPE in ["move"]: + # 移动模式删除种子 + if transfer_type and transfer_type in ["move"]: if self.remove_torrents(hashs): logger.info(f"移动模式删除种子成功:{hashs} ") - # 删除残留文件 + # 删除本地残留文件 if path and path.exists(): files = SystemUtils.list_files(path, settings.RMT_MEDIAEXT) if not files: logger.warn(f"删除残留文件夹:{path}") shutil.rmtree(path, ignore_errors=True) - """ def remove_torrents(self, hashs: Union[str, list], delete_file: bool = True, downloader: str = None) -> Optional[bool]: