diff --git a/app/api/endpoints/transfer.py b/app/api/endpoints/transfer.py index c9afb507..732d6d97 100644 --- a/app/api/endpoints/transfer.py +++ b/app/api/endpoints/transfer.py @@ -5,7 +5,9 @@ from fastapi import APIRouter, Depends from sqlalchemy.orm import Session from app import schemas +from app.chain.media import MediaChain from app.chain.transfer import TransferChain +from app.core.metainfo import MetaInfoPath from app.core.security import verify_token, verify_apitoken from app.db import get_db from app.db.models.transferhistory import TransferHistory @@ -14,6 +16,35 @@ from app.schemas import MediaType router = APIRouter() +@router.get("/name", summary="查询整理后的名称", response_model=schemas.Response) +def query_name(path: str, filetype: str, + _: schemas.TokenPayload = Depends(verify_token)) -> Any: + """ + 查询整理后的名称 + :param path: 文件路径 + :param filetype: 文件类型 + :param _: Token校验 + """ + meta = MetaInfoPath(Path(path)) + mediainfo = MediaChain().recognize_media(meta) + if not mediainfo: + return schemas.Response(success=False, message="未识别到媒体信息") + new_path = TransferChain().recommend_name(meta=meta, mediainfo=mediainfo) + if not new_path: + return schemas.Response(success=False, message="未识别到新名称") + if filetype == "dir": + parents = Path(new_path).parents + if len(parents) > 2: + new_name = parents[1].name + else: + new_name = parents[0].name + else: + new_name = Path(new_path).name + return schemas.Response(success=True, data={ + "name": new_name + }) + + @router.post("/manual", summary="手动转移", response_model=schemas.Response) def manual_transfer(path: str = None, logid: int = None, diff --git a/app/chain/transfer.py b/app/chain/transfer.py index 282b8e48..2b4eff4a 100644 --- a/app/chain/transfer.py +++ b/app/chain/transfer.py @@ -44,6 +44,15 @@ class TransferChain(ChainBase): self.systemconfig = SystemConfigOper() self.directoryhelper = DirectoryHelper() + def recommend_name(self, meta: MetaBase, mediainfo: MediaInfo) -> Optional[str]: + """ + 获取重命名后的名称 + :param meta: 元数据 + :param mediainfo: 媒体信息 + :return: 重命名后的名称(含目录) + """ + return self.run_module("recommend_name", meta=meta, mediainfo=mediainfo) + def process(self) -> bool: """ 获取下载器中的种子列表,并执行转移 diff --git a/app/modules/filetransfer/__init__.py b/app/modules/filetransfer/__init__.py index caf198d9..45345736 100644 --- a/app/modules/filetransfer/__init__.py +++ b/app/modules/filetransfer/__init__.py @@ -83,6 +83,25 @@ class FileTransferModule(_ModuleBase): def init_setting(self) -> Tuple[str, Union[str, bool]]: pass + def recommend_name(self, meta: MetaBase, mediainfo: MediaInfo) -> Optional[str]: + """ + 获取重命名后的名称 + :param meta: 元数据 + :param mediainfo: 媒体信息 + :return: 重命名后的名称(含目录) + """ + # 重命名格式 + rename_format = settings.TV_RENAME_FORMAT \ + if mediainfo.type == MediaType.TV else settings.MOVIE_RENAME_FORMAT + # 获取重命名后的名称 + path = self.get_rename_path( + template_string=rename_format, + rename_dict=self.__get_naming_dict(meta=meta, + mediainfo=mediainfo, + file_ext=Path(meta.title).suffix) + ) + return str(path) + def transfer(self, path: Path, meta: MetaBase, mediainfo: MediaInfo, transfer_type: str, target: Path = None, episodes_info: List[TmdbEpisode] = None,