diff --git a/app/modules/filetransfer/__init__.py b/app/modules/filetransfer/__init__.py index 21c05fe3..b4da4cb7 100644 --- a/app/modules/filetransfer/__init__.py +++ b/app/modules/filetransfer/__init__.py @@ -13,6 +13,7 @@ from app.log import logger from app.modules import _ModuleBase from app.schemas import TransferInfo, ExistMediaInfo, TmdbEpisode from app.schemas.types import MediaType +from app.utils.string import StringUtils from app.utils.system import SystemUtils lock = Lock() @@ -53,6 +54,8 @@ class FileTransferModule(_ModuleBase): return TransferInfo(success=False, path=path, message="未找到媒体库目录") + else: + logger.info(f"获取转移目标路径:{target}") # 转移 return self.transfer_media(in_path=path, in_meta=meta, @@ -629,7 +632,8 @@ class FileTransferModule(_ModuleBase): if in_path: for path in dest_paths: try: - relative = in_path.relative_to(path).as_posix() + # 计算in_path和path的公共字符串长度 + relative = StringUtils.find_common_prefix(str(in_path), str(path)) if len(relative) > max_length: max_length = len(relative) target_path = path diff --git a/app/utils/string.py b/app/utils/string.py index bacfaa53..bfa06154 100644 --- a/app/utils/string.py +++ b/app/utils/string.py @@ -656,3 +656,18 @@ class StringUtils: return True except ValueError: return False + + @staticmethod + def find_common_prefix(str1: str, str2: str) -> str: + if not str1 or not str2: + return '' + common_prefix = [] + min_len = min(len(str1), len(str2)) + + for i in range(min_len): + if str1[i] == str2[i]: + common_prefix.append(str1[i]) + else: + break + + return ''.join(common_prefix)