mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-06-15 06:28:17 +08:00
fix storage api
This commit is contained in:
@@ -164,3 +164,14 @@ def rename(fileitem: schemas.FileItem,
|
||||
progress.end(ProgressKey.BatchRename)
|
||||
return schemas.Response(success=True)
|
||||
return schemas.Response(success=False)
|
||||
|
||||
|
||||
@router.get("/usage/{name}", summary="存储空间信息", response_model=schemas.StorageUsage)
|
||||
def usage(name: str, _: schemas.TokenPayload = Depends(get_current_active_superuser)) -> Any:
|
||||
"""
|
||||
查询存储空间
|
||||
"""
|
||||
ret = StorageChain().storage_usage(name)
|
||||
if ret:
|
||||
return ret
|
||||
return schemas.StorageUsage()
|
||||
|
||||
@@ -69,3 +69,9 @@ class StorageChain(ChainBase):
|
||||
快照存储
|
||||
"""
|
||||
return self.run_module("snapshot_storage", storage=storage, path=path)
|
||||
|
||||
def storage_usage(self, storage: str) -> Optional[schemas.StorageUsage]:
|
||||
"""
|
||||
存储使用情况
|
||||
"""
|
||||
return self.run_module("storage_usage", storage=storage)
|
||||
|
||||
@@ -16,7 +16,7 @@ from app.helper.module import ModuleHelper
|
||||
from app.log import logger
|
||||
from app.modules import _ModuleBase
|
||||
from app.modules.filemanager.storage import StorageBase
|
||||
from app.schemas import TransferInfo, ExistMediaInfo, TmdbEpisode, TransferDirectoryConf, FileItem
|
||||
from app.schemas import TransferInfo, ExistMediaInfo, TmdbEpisode, TransferDirectoryConf, FileItem, StorageUsage
|
||||
from app.schemas.types import MediaType
|
||||
from app.utils.system import SystemUtils
|
||||
|
||||
@@ -193,6 +193,16 @@ class FileManagerModule(_ModuleBase):
|
||||
return None
|
||||
return storage_oper.snapshot(path)
|
||||
|
||||
def storage_usage(self, storage: str) -> Optional[StorageUsage]:
|
||||
"""
|
||||
存储使用情况
|
||||
"""
|
||||
storage_oper = self.__get_storage_oper(storage)
|
||||
if not storage_oper:
|
||||
logger.error(f"不支持 {storage} 的存储使用情况")
|
||||
return None
|
||||
return storage_oper.usage()
|
||||
|
||||
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,
|
||||
|
||||
@@ -138,6 +138,13 @@ class StorageBase(metaclass=ABCMeta):
|
||||
"""
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def usage(self) -> Optional[schemas.StorageUsage]:
|
||||
"""
|
||||
存储使用情况
|
||||
"""
|
||||
pass
|
||||
|
||||
def snapshot(self, path: Path) -> Dict[str, float]:
|
||||
"""
|
||||
快照文件系统,输出所有层级文件信息(不含目录)
|
||||
|
||||
@@ -744,3 +744,9 @@ class AliPan(StorageBase):
|
||||
软链接文件
|
||||
"""
|
||||
pass
|
||||
|
||||
def usage(self) -> Optional[schemas.StorageUsage]:
|
||||
"""
|
||||
存储使用情况
|
||||
"""
|
||||
pass
|
||||
|
||||
@@ -3,6 +3,7 @@ from pathlib import Path
|
||||
from typing import Optional, List
|
||||
|
||||
from app import schemas
|
||||
from app.helper.directory import DirectoryHelper
|
||||
from app.log import logger
|
||||
from app.modules.filemanager.storage import StorageBase
|
||||
from app.schemas.types import StorageSchema
|
||||
@@ -231,3 +232,14 @@ class LocalStorage(StorageBase):
|
||||
logger.error(f"移动文件失败:{message}")
|
||||
return False
|
||||
return True
|
||||
|
||||
def usage(self) -> Optional[schemas.StorageUsage]:
|
||||
"""
|
||||
存储使用情况
|
||||
"""
|
||||
library_dirs = DirectoryHelper().get_local_library_dirs()
|
||||
total_storage, free_storage = SystemUtils.space_usage([Path(d.library_path) for d in library_dirs])
|
||||
return schemas.StorageUsage(
|
||||
total=total_storage,
|
||||
available=free_storage
|
||||
)
|
||||
|
||||
@@ -296,3 +296,9 @@ class Rclone(StorageBase):
|
||||
|
||||
def softlink(self, fileitm: schemas.FileItem, target_file: Path) -> bool:
|
||||
pass
|
||||
|
||||
def usage(self) -> Optional[schemas.StorageUsage]:
|
||||
"""
|
||||
存储使用情况
|
||||
"""
|
||||
pass
|
||||
|
||||
@@ -375,3 +375,9 @@ class U115Pan(StorageBase, metaclass=Singleton):
|
||||
|
||||
def softlink(self, fileitm: schemas.FileItem, target_file: Path) -> bool:
|
||||
pass
|
||||
|
||||
def usage(self) -> Optional[schemas.StorageUsage]:
|
||||
"""
|
||||
存储使用情况
|
||||
"""
|
||||
pass
|
||||
|
||||
@@ -15,3 +15,4 @@ from .tmdb import *
|
||||
from .transfer import *
|
||||
from .rule import *
|
||||
from .system import *
|
||||
from .file import *
|
||||
|
||||
41
app/schemas/file.py
Normal file
41
app/schemas/file.py
Normal file
@@ -0,0 +1,41 @@
|
||||
from typing import Optional
|
||||
|
||||
from pydantic import BaseModel
|
||||
|
||||
|
||||
class FileItem(BaseModel):
|
||||
# 存储类型
|
||||
storage: Optional[str] = "local"
|
||||
# 类型 dir/file
|
||||
type: Optional[str] = None
|
||||
# 文件路径
|
||||
path: Optional[str] = "/"
|
||||
# 文件名
|
||||
name: Optional[str] = None
|
||||
# 文件名
|
||||
basename: Optional[str] = None
|
||||
# 文件后缀
|
||||
extension: Optional[str] = None
|
||||
# 文件大小
|
||||
size: Optional[int] = None
|
||||
# 修改时间
|
||||
modify_time: Optional[float] = None
|
||||
# 子节点
|
||||
children: Optional[list] = []
|
||||
# ID
|
||||
fileid: Optional[str] = None
|
||||
# 父ID
|
||||
parent_fileid: Optional[str] = None
|
||||
# 缩略图
|
||||
thumbnail: Optional[str] = None
|
||||
# 115 pickcode
|
||||
pickcode: Optional[str] = None
|
||||
# drive_id
|
||||
drive_id: Optional[str] = None
|
||||
|
||||
|
||||
class StorageUsage(BaseModel):
|
||||
# 总空间
|
||||
total: float = 0.0
|
||||
# 剩余空间
|
||||
available: float = 0.0
|
||||
@@ -3,36 +3,7 @@ from typing import Optional
|
||||
|
||||
from pydantic import BaseModel
|
||||
|
||||
|
||||
class FileItem(BaseModel):
|
||||
# 存储类型
|
||||
storage: Optional[str] = "local"
|
||||
# 类型 dir/file
|
||||
type: Optional[str] = None
|
||||
# 文件路径
|
||||
path: Optional[str] = "/"
|
||||
# 文件名
|
||||
name: Optional[str] = None
|
||||
# 文件名
|
||||
basename: Optional[str] = None
|
||||
# 文件后缀
|
||||
extension: Optional[str] = None
|
||||
# 文件大小
|
||||
size: Optional[int] = None
|
||||
# 修改时间
|
||||
modify_time: Optional[float] = None
|
||||
# 子节点
|
||||
children: Optional[list] = []
|
||||
# ID
|
||||
fileid: Optional[str] = None
|
||||
# 父ID
|
||||
parent_fileid: Optional[str] = None
|
||||
# 缩略图
|
||||
thumbnail: Optional[str] = None
|
||||
# 115 pickcode
|
||||
pickcode: Optional[str] = None
|
||||
# drive_id
|
||||
drive_id: Optional[str] = None
|
||||
from app.schemas.file import FileItem
|
||||
|
||||
|
||||
class TransferTorrent(BaseModel):
|
||||
|
||||
Reference in New Issue
Block a user