mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-05 15:38:19 +08:00
fix storage
This commit is contained in:
@@ -79,6 +79,8 @@ class StorageBase(metaclass=ABCMeta):
|
|||||||
def create_folder(self, fileitem: schemas.FileItem, name: str) -> Optional[schemas.FileItem]:
|
def create_folder(self, fileitem: schemas.FileItem, name: str) -> Optional[schemas.FileItem]:
|
||||||
"""
|
"""
|
||||||
创建目录
|
创建目录
|
||||||
|
:param fileitem: 父目录
|
||||||
|
:param name: 目录名
|
||||||
"""
|
"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|||||||
@@ -291,6 +291,8 @@ class AliPan(StorageBase, metaclass=Singleton):
|
|||||||
def create_folder(self, fileitem: schemas.FileItem, name: str) -> Optional[schemas.FileItem]:
|
def create_folder(self, fileitem: schemas.FileItem, name: str) -> Optional[schemas.FileItem]:
|
||||||
"""
|
"""
|
||||||
创建目录
|
创建目录
|
||||||
|
:param fileitem: 父目录
|
||||||
|
:param name: 目录名
|
||||||
"""
|
"""
|
||||||
if not self.aligo:
|
if not self.aligo:
|
||||||
return None
|
return None
|
||||||
@@ -305,14 +307,40 @@ class AliPan(StorageBase, metaclass=Singleton):
|
|||||||
"""
|
"""
|
||||||
根据文件路程获取目录,不存在则创建
|
根据文件路程获取目录,不存在则创建
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
def __find_dir(_fileitem: schemas.FileItem, _name: str) -> Optional[schemas.FileItem]:
|
||||||
|
"""
|
||||||
|
查找下级目录中匹配名称的目录
|
||||||
|
"""
|
||||||
|
for sub_folder in self.list(_fileitem):
|
||||||
|
if sub_folder.type != "dir":
|
||||||
|
continue
|
||||||
|
if sub_folder.name == _name:
|
||||||
|
return sub_folder
|
||||||
|
return None
|
||||||
|
|
||||||
if not self.aligo:
|
if not self.aligo:
|
||||||
return None
|
return None
|
||||||
item = self.aligo.get_folder_by_path(path=str(path), create_folder=True)
|
item = self.aligo.get_folder_by_path(path=str(path), create_folder=True)
|
||||||
if item:
|
if item:
|
||||||
|
# 已存在
|
||||||
if isinstance(item, CreateFileResponse):
|
if isinstance(item, CreateFileResponse):
|
||||||
item = self.aligo.get_file(file_id=item.file_id, drive_id=item.drive_id)
|
item = self.aligo.get_file(file_id=item.file_id, drive_id=item.drive_id)
|
||||||
return self.__get_fileitem(item)
|
return self.__get_fileitem(item)
|
||||||
return None
|
# 逐级查找和创建目录
|
||||||
|
fileitem = schemas.FileItem(path="/")
|
||||||
|
for part in path.parts:
|
||||||
|
if part == "/":
|
||||||
|
continue
|
||||||
|
dir_file = __find_dir(fileitem, part)
|
||||||
|
if dir_file:
|
||||||
|
fileitem = dir_file
|
||||||
|
else:
|
||||||
|
dir_file = self.create_folder(fileitem, part)
|
||||||
|
if not dir_file:
|
||||||
|
return None
|
||||||
|
fileitem = dir_file
|
||||||
|
return fileitem
|
||||||
|
|
||||||
def get_item(self, path: Path) -> Optional[schemas.FileItem]:
|
def get_item(self, path: Path) -> Optional[schemas.FileItem]:
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -233,6 +233,8 @@ class Alist(StorageBase, metaclass=Singleton):
|
|||||||
) -> Optional[schemas.FileItem]:
|
) -> Optional[schemas.FileItem]:
|
||||||
"""
|
"""
|
||||||
创建目录
|
创建目录
|
||||||
|
:param fileitem: 父目录
|
||||||
|
:param name: 目录名
|
||||||
"""
|
"""
|
||||||
path = Path(fileitem.path) / name
|
path = Path(fileitem.path) / name
|
||||||
resp: Response = RequestUtils(
|
resp: Response = RequestUtils(
|
||||||
@@ -271,14 +273,16 @@ class Alist(StorageBase, metaclass=Singleton):
|
|||||||
获取目录,如目录不存在则创建
|
获取目录,如目录不存在则创建
|
||||||
"""
|
"""
|
||||||
folder = self.get_item(path)
|
folder = self.get_item(path)
|
||||||
|
if folder:
|
||||||
|
return folder
|
||||||
if not folder:
|
if not folder:
|
||||||
folder = self.create_folder(self.get_parent(schemas.FileItem(
|
folder = self.create_folder(schemas.FileItem(
|
||||||
storage=self.schema.value,
|
storage=self.schema.value,
|
||||||
type="dir",
|
type="dir",
|
||||||
path=path.as_posix() + "/",
|
path=path.parent.as_posix(),
|
||||||
name=path.name,
|
name=path.name,
|
||||||
basename=path.stem
|
basename=path.stem
|
||||||
)), path.name)
|
), path.name)
|
||||||
return folder
|
return folder
|
||||||
|
|
||||||
def get_item(
|
def get_item(
|
||||||
|
|||||||
@@ -115,6 +115,8 @@ class LocalStorage(StorageBase):
|
|||||||
def create_folder(self, fileitem: schemas.FileItem, name: str) -> Optional[schemas.FileItem]:
|
def create_folder(self, fileitem: schemas.FileItem, name: str) -> Optional[schemas.FileItem]:
|
||||||
"""
|
"""
|
||||||
创建目录
|
创建目录
|
||||||
|
:param fileitem: 父目录
|
||||||
|
:param name: 目录名
|
||||||
"""
|
"""
|
||||||
if not fileitem.path:
|
if not fileitem.path:
|
||||||
return None
|
return None
|
||||||
|
|||||||
@@ -139,6 +139,8 @@ class Rclone(StorageBase):
|
|||||||
def create_folder(self, fileitem: schemas.FileItem, name: str) -> Optional[schemas.FileItem]:
|
def create_folder(self, fileitem: schemas.FileItem, name: str) -> Optional[schemas.FileItem]:
|
||||||
"""
|
"""
|
||||||
创建目录
|
创建目录
|
||||||
|
:param fileitem: 父目录
|
||||||
|
:param name: 目录名
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
retcode = subprocess.run(
|
retcode = subprocess.run(
|
||||||
@@ -149,10 +151,7 @@ class Rclone(StorageBase):
|
|||||||
startupinfo=self.__get_hidden_shell()
|
startupinfo=self.__get_hidden_shell()
|
||||||
).returncode
|
).returncode
|
||||||
if retcode == 0:
|
if retcode == 0:
|
||||||
ret_fileitem = copy.deepcopy(fileitem)
|
return self.get_item(Path(f"{fileitem.path}/{name}"))
|
||||||
ret_fileitem.path = f"{fileitem.path}/{name}/"
|
|
||||||
ret_fileitem.name = name
|
|
||||||
return ret_fileitem
|
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
logger.error(f"rclone创建目录失败:{err}")
|
logger.error(f"rclone创建目录失败:{err}")
|
||||||
return None
|
return None
|
||||||
@@ -166,11 +165,11 @@ class Rclone(StorageBase):
|
|||||||
"""
|
"""
|
||||||
查找下级目录中匹配名称的目录
|
查找下级目录中匹配名称的目录
|
||||||
"""
|
"""
|
||||||
for sub_file in self.list(_fileitem):
|
for sub_folder in self.list(_fileitem):
|
||||||
if sub_file.type != "dir":
|
if sub_folder.type != "dir":
|
||||||
continue
|
continue
|
||||||
if sub_file.name == _name:
|
if sub_folder.name == _name:
|
||||||
return sub_file
|
return sub_folder
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# 逐级查找和创建目录
|
# 逐级查找和创建目录
|
||||||
|
|||||||
@@ -225,6 +225,9 @@ class U115Pan(StorageBase, metaclass=Singleton):
|
|||||||
"""
|
"""
|
||||||
if not self.client:
|
if not self.client:
|
||||||
return None
|
return None
|
||||||
|
folder = self.get_item(path)
|
||||||
|
if folder:
|
||||||
|
return folder
|
||||||
try:
|
try:
|
||||||
result = self.client.fs.makedirs(path, exist_ok=True)
|
result = self.client.fs.makedirs(path, exist_ok=True)
|
||||||
if result:
|
if result:
|
||||||
|
|||||||
Reference in New Issue
Block a user