From db26f2e108a4b07a5d762fd72facc75bb8daa103 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Wed, 3 Jul 2024 11:51:26 +0800 Subject: [PATCH] add storage snapshot --- app/chain/storage.py | 8 +++++++- app/modules/filemanager/__init__.py | 10 ++++++++++ app/modules/filemanager/storage/__init__.py | 21 ++++++++++++++++++++- app/modules/filemanager/storage/alipan.py | 1 + 4 files changed, 38 insertions(+), 2 deletions(-) diff --git a/app/chain/storage.py b/app/chain/storage.py index 3887b634..74be2c7d 100644 --- a/app/chain/storage.py +++ b/app/chain/storage.py @@ -1,5 +1,5 @@ from pathlib import Path -from typing import Optional, Tuple, List +from typing import Optional, Tuple, List, Dict from app import schemas from app.chain import ChainBase @@ -57,3 +57,9 @@ class StorageChain(ChainBase): 重命名文件或目录 """ return self.run_module("rename_file", fileitem=fileitem, name=name) + + def snapshot_storage(self, fileitem: schemas.FileItem) -> Optional[Dict]: + """ + 快照存储 + """ + return self.run_module("snapshot_storage", fileitem=fileitem) diff --git a/app/modules/filemanager/__init__.py b/app/modules/filemanager/__init__.py index 2d953d8b..df5df1af 100644 --- a/app/modules/filemanager/__init__.py +++ b/app/modules/filemanager/__init__.py @@ -173,6 +173,16 @@ class FileManagerModule(_ModuleBase): return None return storage_oper.upload(fileitem, path) + def snapshot_storage(self, fileitem: FileItem) -> Optional[Dict]: + """ + 快照存储 + """ + storage_oper = self.__get_storage_oper(fileitem.storage) + if not storage_oper: + logger.error(f"不支持 {storage} 的快照处理") + return None + return storage_oper.snapshot(fileitem) + def transfer(self, fileitem: FileItem, meta: MetaBase, mediainfo: MediaInfo, transfer_type: str, target_storage: str = None, target_path: Path = None, episodes_info: List[TmdbEpisode] = None, diff --git a/app/modules/filemanager/storage/__init__.py b/app/modules/filemanager/storage/__init__.py index 77fa40c8..04fbd543 100644 --- a/app/modules/filemanager/storage/__init__.py +++ b/app/modules/filemanager/storage/__init__.py @@ -1,6 +1,6 @@ from abc import ABCMeta, abstractmethod from pathlib import Path -from typing import Optional, List, Union +from typing import Optional, List, Union, Dict from app import schemas from app.helper.storage import StorageHelper @@ -137,4 +137,23 @@ class StorageBase(metaclass=ABCMeta): 软链接文件 """ pass + + def snapshot(self, fileitm: schemas.FileItem) -> Dict[str, float]: + """ + 快照文件系统,输出所有层级文件信息 + """ + files_info = {} + + def __snapshot_file(_fileitm: schemas.FileItem): + """ + 递归获取文件信息 + """ + files_info[_fileitm.path] = _fileitm.size + if _fileitm.type == "dir": + for sub_file in self.list(_fileitm): + __snapshot_file(sub_file) + + __snapshot_file(fileitm) + + return files_info \ No newline at end of file diff --git a/app/modules/filemanager/storage/alipan.py b/app/modules/filemanager/storage/alipan.py index d62802ea..efe1a31f 100644 --- a/app/modules/filemanager/storage/alipan.py +++ b/app/modules/filemanager/storage/alipan.py @@ -494,6 +494,7 @@ class AliPan(StorageBase): """ 获取文件或目录,不存在返回None """ + def __find_item(_fileitem: schemas.FileItem, _name: str) -> Optional[schemas.FileItem]: """ 查找下级目录中匹配名称的目录或文件