From 9ecc8c14d8c3dee9ad90402148b4a451dd7a380d Mon Sep 17 00:00:00 2001 From: honus <63273720+0honus0@users.noreply.github.com> Date: Mon, 16 Dec 2024 23:20:49 +0800 Subject: [PATCH 1/2] fix rclone bug --- app/modules/filemanager/storages/rclone.py | 23 ++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/app/modules/filemanager/storages/rclone.py b/app/modules/filemanager/storages/rclone.py index 642b983d..e54191b1 100644 --- a/app/modules/filemanager/storages/rclone.py +++ b/app/modules/filemanager/storages/rclone.py @@ -206,8 +206,27 @@ class Rclone(StorageBase): startupinfo=self.__get_hidden_shell() ) if ret.returncode == 0: - items = json.loads(ret.stdout) - return self.__get_rcloneitem(items[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', + f'MP:{path.parent}' + ], + 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) + for item in items: + if item.get("Path") == path.name: + return self.__get_rcloneitem(item, parent=str(path.parent) + "/") + return None except Exception as err: logger.error(f"rclone获取文件失败:{err}") return None From 7e4a18b365cb517ffc8fcbcca0733ae79b6e7a9f Mon Sep 17 00:00:00 2001 From: honus <63273720+0honus0@users.noreply.github.com> Date: Tue, 17 Dec 2024 00:18:52 +0800 Subject: [PATCH 2/2] fix rclone __get_fileitem err --- app/modules/filemanager/storages/rclone.py | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/app/modules/filemanager/storages/rclone.py b/app/modules/filemanager/storages/rclone.py index e54191b1..b83946bb 100644 --- a/app/modules/filemanager/storages/rclone.py +++ b/app/modules/filemanager/storages/rclone.py @@ -61,16 +61,7 @@ class Rclone(StorageBase): """ 获取文件项 """ - return schemas.FileItem( - storage=self.schema.value, - type="file", - path=str(path).replace("\\", "/"), - name=path.name, - basename=path.stem, - extension=path.suffix[1:], - size=path.stat().st_size, - modify_time=path.stat().st_mtime, - ) + return self.get_item(path) def __get_rcloneitem(self, item: dict, parent: str = "/") -> schemas.FileItem: """