diff --git a/app/chain/storage.py b/app/chain/storage.py index f2ef5c8d..17db3f83 100644 --- a/app/chain/storage.py +++ b/app/chain/storage.py @@ -135,9 +135,17 @@ class StorageChain(ChainBase): if not self.delete_file(fileitem): logger.warn(f"【{fileitem.storage}】{fileitem.path} 删除失败") return False - # 处理上级目录 - if mtype and mtype == MediaType.TV: - dir_item = self.get_file_item(storage=fileitem.storage, path=Path(fileitem.path).parent.parent) + if mtype: + # 重命名格式 + rename_format = settings.TV_RENAME_FORMAT \ + if mtype == MediaType.TV else settings.MOVIE_RENAME_FORMAT + # 计算重命名中的文件夹层数 + rename_format_level = len(rename_format.split("/")) - 1 + if rename_format_level < 1: + return True + # 处理上级目录 + dir_item = self.get_file_item(storage=fileitem.storage, + path=Path(fileitem.path).parents[rename_format_level - 1]) else: dir_item = self.get_parent_item(fileitem) if dir_item and len(Path(dir_item.path).parts) > 2: diff --git a/app/chain/transfer.py b/app/chain/transfer.py index f59142ab..8e179856 100644 --- a/app/chain/transfer.py +++ b/app/chain/transfer.py @@ -10,7 +10,7 @@ from app.chain.tmdb import TmdbChain from app.core.config import settings, global_vars from app.core.context import MediaInfo from app.core.meta import MetaBase -from app.core.metainfo import MetaInfoPath +from app.core.metainfo import MetaInfoPath, MetaInfo from app.db.downloadhistory_oper import DownloadHistoryOper from app.db.models.downloadhistory import DownloadHistory from app.db.models.transferhistory import TransferHistory @@ -184,8 +184,6 @@ class TransferChain(ChainBase): # 汇总季集清单 season_episodes: Dict[Tuple, List[int]] = {} - # 汇总元数据 - metas: Dict[Tuple, MetaBase] = {} # 汇总媒体信息 medias: Dict[Tuple, MediaInfo] = {} # 汇总整理信息 @@ -447,7 +445,6 @@ class TransferChain(ChainBase): mkey = (file_mediainfo.tmdb_id, file_meta.begin_season) if mkey not in medias: # 新增信息 - metas[mkey] = file_meta medias[mkey] = file_mediainfo season_episodes[mkey] = file_meta.episode_list transfers[mkey] = transferinfo @@ -471,6 +468,14 @@ class TransferChain(ChainBase): transferinfo=transferinfo ) + # 整理完成事件 + self.eventmanager.send_event(EventType.TransferComplete, { + 'meta': file_meta, + 'mediainfo': file_mediainfo, + 'transferinfo': transferinfo, + 'download_hash': download_hash, + }) + # 更新进度 processed_num += 1 self.progress.update(value=processed_num / total_num * 100, @@ -483,8 +488,9 @@ class TransferChain(ChainBase): # 执行后续处理 for mkey, media in medias.items(): - transfer_meta = metas[mkey] transfer_info = transfers[mkey] + transfer_meta = MetaInfo(transfer_info.target_diritem.name) + transfer_meta.begin_season = mkey[1] # 发送通知 if transfer_info.need_notify: se_str = None @@ -501,13 +507,6 @@ class TransferChain(ChainBase): 'mediainfo': media, 'fileitem': transfer_info.target_diritem }) - # 整理完成事件 - self.eventmanager.send_event(EventType.TransferComplete, { - 'meta': transfer_meta, - 'mediainfo': media, - 'transferinfo': transfer_info, - 'download_hash': download_hash, - }) # 移动模式处理 if all_success and current_transfer_type in ["move"]: diff --git a/app/modules/filemanager/__init__.py b/app/modules/filemanager/__init__.py index 221f8d2c..d9d713f2 100644 --- a/app/modules/filemanager/__init__.py +++ b/app/modules/filemanager/__init__.py @@ -884,6 +884,18 @@ class FileManagerModule(_ModuleBase): rename_format = settings.TV_RENAME_FORMAT \ if mediainfo.type == MediaType.TV else settings.MOVIE_RENAME_FORMAT + # 计算重命名中的文件夹层数 + rename_format_level = len(rename_format.split("/")) - 1 + + if rename_format_level < 1: + # 重命名格式不合法 + logger.error(f"重命名格式不合法:{rename_format}") + return TransferInfo(success=False, + message=f"重命名格式不合法", + fileitem=fileitem, + transfer_type=transfer_type, + need_notify=need_notify) + # 判断是否为文件夹 if fileitem.type == "dir": # 整理整个目录,一般为蓝光原盘 @@ -964,9 +976,15 @@ class FileManagerModule(_ModuleBase): # 目的操作对象 target_oper: StorageBase = self.__get_storage_oper(target_storage) # 目标目录 - target_diritem = target_oper.get_folder( - new_file.parent) if mediainfo.type == MediaType.MOVIE else target_oper.get_folder( - new_file.parent.parent) + target_diritem = target_oper.get_folder(new_file.parents[rename_format_level - 1]) + if not target_diritem: + logger.error(f"目标目录 {new_file.parents[rename_format_level - 1]} 获取失败") + return TransferInfo(success=False, + message=f"目标目录 {new_file.parents[rename_format_level - 1]} 获取失败", + fileitem=fileitem, + fail_list=[fileitem.path], + transfer_type=transfer_type, + need_notify=need_notify) # 目标文件 target_item = target_oper.get_item(new_file) if target_item: diff --git a/app/monitor.py b/app/monitor.py index ce3733dd..9f1d1269 100644 --- a/app/monitor.py +++ b/app/monitor.py @@ -280,9 +280,9 @@ class Monitor(metaclass=Singleton): """ 获取BDMV目录的上级目录 """ - for parent in _path.parents: - if parent.name == "BDMV": - return parent.parent + for p in _path.parents: + if p.name == "BDMV": + return p.parent return None # 全程加锁