mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-03-20 03:57:30 +08:00
72 lines
1.8 KiB
Python
72 lines
1.8 KiB
Python
from typing import Optional
|
|
|
|
from pathlib import Path
|
|
from pydantic import BaseModel, Field
|
|
from app.schemas.types import StorageSchema
|
|
|
|
|
|
class FileURI(BaseModel):
|
|
# 文件路径
|
|
path: Optional[str] = "/"
|
|
# 存储类型
|
|
storage: Optional[str] = Field(default="local")
|
|
|
|
@property
|
|
def uri(self) -> str:
|
|
return self.path if self.storage == "local" else f"{self.storage}:{self.path}"
|
|
|
|
@classmethod
|
|
def from_uri(cls, uri: str) -> "FileURI":
|
|
storage, path = 'local', uri
|
|
for s in StorageSchema:
|
|
protocol = f"{s.value}:"
|
|
if uri.startswith(protocol):
|
|
path = uri[len(protocol):]
|
|
storage = s.value
|
|
break
|
|
if not path.startswith("/"):
|
|
path = "/" + path
|
|
path = Path(path).as_posix()
|
|
return cls(storage=storage, path=path)
|
|
|
|
class FileItem(FileURI):
|
|
# 类型 dir/file
|
|
type: Optional[str] = None
|
|
# 文件名
|
|
name: Optional[str] = None
|
|
# 文件名
|
|
basename: Optional[str] = None
|
|
# 文件后缀
|
|
extension: Optional[str] = None
|
|
# 文件大小
|
|
size: Optional[int] = None
|
|
# 修改时间
|
|
modify_time: Optional[float] = None
|
|
# 子节点
|
|
children: Optional[list] = Field(default_factory=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
|
|
# url
|
|
url: Optional[str] = None
|
|
|
|
|
|
class StorageUsage(BaseModel):
|
|
# 总空间
|
|
total: float = 0.0
|
|
# 剩余空间
|
|
available: float = 0.0
|
|
|
|
|
|
class StorageTransType(BaseModel):
|
|
# 传输类型
|
|
transtype: Optional[dict] = Field(default_factory=dict)
|
|
|