diff --git a/app/modules/filemanager/storages/rclone.py b/app/modules/filemanager/storages/rclone.py index b83946bb..3ddbbab0 100644 --- a/app/modules/filemanager/storages/rclone.py +++ b/app/modules/filemanager/storages/rclone.py @@ -1,4 +1,3 @@ -import copy import json import subprocess from pathlib import Path @@ -57,12 +56,6 @@ class Rclone(StorageBase): else: return None - def __get_fileitem(self, path: Path): - """ - 获取文件项 - """ - return self.get_item(path) - def __get_rcloneitem(self, item: dict, parent: str = "/") -> schemas.FileItem: """ 获取rclone文件项 @@ -137,12 +130,12 @@ class Rclone(StorageBase): retcode = subprocess.run( [ 'rclone', 'mkdir', - f'MP:{fileitem.path}/{name}' + f'MP:{Path(fileitem.path) / name}' ], startupinfo=self.__get_hidden_shell() ).returncode if retcode == 0: - return self.get_item(Path(f"{fileitem.path}/{name}")) + return self.get_item(Path(fileitem.path) / name) except Exception as err: logger.error(f"rclone创建目录失败:{err}") return None @@ -188,20 +181,6 @@ class Rclone(StorageBase): 获取文件或目录,不存在返回None """ try: - ret = subprocess.run( - [ - 'rclone', 'lsjson', - f'MP:{path}' - ], - capture_output=True, - startupinfo=self.__get_hidden_shell() - ) - if ret.returncode == 0: - # 判断是否是文件 - if str(path.name) in str(ret.stdout.decode('utf-8')): - items = json.loads(ret.stdout) - return self.__get_rcloneitem(items[0], parent=str(path.parent) + "/") - ret = subprocess.run( [ 'rclone', 'lsjson', @@ -211,15 +190,13 @@ class Rclone(StorageBase): startupinfo=self.__get_hidden_shell() ) if ret.returncode == 0: - # 判断是否是目录 - if str(path.name) in str(ret.stdout.decode('utf-8')): - items = json.loads(ret.stdout) - for item in items: - if item.get("Path") == path.name: - return self.__get_rcloneitem(item, parent=str(path.parent) + "/") + items = json.loads(ret.stdout) + for item in items: + if item.get("Name") == path.name: + return self.__get_rcloneitem(item, parent=str(path.parent) + "/") return None except Exception as err: - logger.error(f"rclone获取文件失败:{err}") + logger.debug(f"rclone获取文件项失败:{err}") return None def delete(self, fileitem: schemas.FileItem) -> bool: @@ -249,7 +226,7 @@ class Rclone(StorageBase): [ 'rclone', 'moveto', f'MP:{fileitem.path}', - f'MP:{Path(fileitem.path).parent}/{name}' + f'MP:{Path(fileitem.path).parent / name}' ], startupinfo=self.__get_hidden_shell() ).returncode @@ -297,7 +274,7 @@ class Rclone(StorageBase): startupinfo=self.__get_hidden_shell() ).returncode if retcode == 0: - return self.__get_fileitem(new_path) + return self.get_item(new_path) except Exception as err: logger.error(f"rclone上传文件失败:{err}") return None