fix 跨存储整理(115下载除外)

This commit is contained in:
jxxghp
2024-09-25 20:16:31 +08:00
parent f79364bc58
commit 93e053d06a
8 changed files with 60 additions and 36 deletions

View File

@@ -750,7 +750,7 @@ class FileManagerModule(_ModuleBase):
target_file=target_file,
transfer_type=transfer_type)
if new_item:
logger.info(f"文件 {fileitem.path} {transfer_type}完成")
logger.debug(f"文件 {fileitem.path} {transfer_type}完成")
# 处理其他相关文件
self.__transfer_other_files(fileitem=fileitem,
target_storage=target_storage,

View File

@@ -6,6 +6,8 @@ import time
from pathlib import Path
from typing import Optional, Tuple, List
from aligo.response import CreateFileResponse
from app import schemas
from app.core.config import settings
from app.log import logger
@@ -267,6 +269,8 @@ class AliPan(StorageBase):
return None
item = self.aligo.create_folder(name=name, parent_file_id=fileitem.fileid, drive_id=fileitem.drive_id)
if item:
if isinstance(item, CreateFileResponse):
item = self.aligo.get_file(file_id=item.file_id, drive_id=item.drive_id)
return self.__get_fileitem(item)
return None
@@ -276,8 +280,10 @@ class AliPan(StorageBase):
"""
if not self.aligo:
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 isinstance(item, CreateFileResponse):
item = self.aligo.get_file(file_id=item.file_id, drive_id=item.drive_id)
return self.__get_fileitem(item)
return None

View File

@@ -66,20 +66,32 @@ class Rclone(StorageBase):
modify_time=path.stat().st_mtime,
)
def __get_rcloneitem(self, item: dict):
def __get_rcloneitem(self, item: dict, parent: str = "/") -> schemas.FileItem:
"""
获取rclone文件项
"""
return schemas.FileItem(
storage=self.schema.value,
type="dir" if item.get("IsDir") else "file",
path=item.get("Path"),
name=item.get("Name"),
basename=Path(item.get("Name")).stem,
extension=Path(item.get("Name")).suffix[1:],
size=item.get("Size"),
modify_time=StringUtils.str_to_timestamp(item.get("ModTime"))
)
if not item:
return schemas.FileItem()
if item.get("IsDir"):
return schemas.FileItem(
storage=self.schema.value,
type="dir",
path=f"{parent}{item.get('Name')}",
name=item.get("Name"),
basename=item.get("Name"),
modify_time=StringUtils.str_to_timestamp(item.get("ModTime"))
)
else:
return schemas.FileItem(
storage=self.schema.value,
type="file",
path=f"{parent}{item.get('Name')}",
name=item.get("Name"),
basename=Path(item.get("Name")).stem,
extension=Path(item.get("Name")).suffix[1:],
size=item.get("Size"),
modify_time=StringUtils.str_to_timestamp(item.get("ModTime"))
)
def check(self) -> bool:
"""
@@ -113,7 +125,7 @@ class Rclone(StorageBase):
)
if ret.returncode == 0:
items = json.loads(ret.stdout)
return [self.__get_rcloneitem(item) for item in items]
return [self.__get_rcloneitem(item, parent=fileitem.path) for item in items]
except Exception as err:
logger.error(f"rclone浏览文件失败{err}")
return []
@@ -164,7 +176,7 @@ class Rclone(StorageBase):
if dir_file:
fileitem = dir_file
else:
dir_file = self.create_folder(dir_file, part)
dir_file = self.create_folder(fileitem, part)
if not dir_file:
logger.warn(f"rclone创建目录 {fileitem.path}{part} 失败!")
return None
@@ -256,8 +268,8 @@ class Rclone(StorageBase):
retcode = subprocess.run(
[
'rclone', 'copyto',
fileitem.path,
f'MP:{path}'
str(path),
f'MP:{Path(fileitem.path) / path.name}'
],
startupinfo=self.__get_hidden_shell()
).returncode

View File

@@ -202,17 +202,18 @@ class U115Pan(StorageBase, metaclass=Singleton):
if not self.__init_cloud():
return None
try:
result = self.cloud.storage().make_dir(fileitem.parent_fileid, name)
return schemas.FileItem(
storage=self.schema.value,
fileid=result.file_id,
parent_fileid=result.parent_id,
type="dir",
path=f"{fileitem.path}{name}/",
name=name,
modify_time=result.modified_time.timestamp() if result.modified_time else 0,
pickcode=result.pickcode
)
result = self.cloud.storage().make_dir(fileitem.fileid, name)
if result:
return schemas.FileItem(
storage=self.schema.value,
fileid=result.file_id,
parent_fileid=result.parent_id,
type="dir",
path=f"{fileitem.path}{name}/",
name=name,
modify_time=result.modified_time.timestamp() if result.modified_time else 0,
pickcode=result.pickcode
)
except Exception as e:
logger.error(f"115创建目录失败{str(e)}")
return None
@@ -242,12 +243,12 @@ class U115Pan(StorageBase, metaclass=Singleton):
if dir_file:
fileitem = dir_file
else:
dir_file = self.create_folder(dir_file, part)
dir_file = self.create_folder(fileitem, part)
if not dir_file:
logger.warn(f"115创建目录 {fileitem.path}{part} 失败!")
return None
fileitem = dir_file
return fileitem
return fileitem if fileitem.fileid != "0" else None
def get_item(self, path: Path) -> Optional[schemas.FileItem]:
"""