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
+1 -1
View File
@@ -272,7 +272,7 @@ class TransferChain(ChainBase):
# 整理成功的不再处理 # 整理成功的不再处理
if not force: if not force:
transferd = self.transferhis.get_by_src(file_item.path) transferd = self.transferhis.get_by_src(file_item.path, storage=file_item.storage)
if transferd and transferd.status: if transferd and transferd.status:
logger.info(f"{file_item.path} 已成功整理过,如需重新处理,请删除历史记录。") logger.info(f"{file_item.path} 已成功整理过,如需重新处理,请删除历史记录。")
# 计数 # 计数
+5 -1
View File
@@ -95,7 +95,11 @@ class TransferHistory(Base):
@staticmethod @staticmethod
@db_query @db_query
def get_by_src(db: Session, src: str): def get_by_src(db: Session, src: str, storage: str = None):
if storage:
return db.query(TransferHistory).filter(TransferHistory.src == src,
TransferHistory.src_storage == storage).first()
else:
return db.query(TransferHistory).filter(TransferHistory.src == src).first() return db.query(TransferHistory).filter(TransferHistory.src == src).first()
@staticmethod @staticmethod
+3 -2
View File
@@ -28,12 +28,13 @@ class TransferHistoryOper(DbOper):
""" """
return TransferHistory.list_by_title(self._db, title) return TransferHistory.list_by_title(self._db, title)
def get_by_src(self, src: str) -> TransferHistory: def get_by_src(self, src: str, storage: str = None) -> TransferHistory:
""" """
按源查询转移记录 按源查询转移记录
:param src: 数据key :param src: 数据key
:param storage: 存储类型
""" """
return TransferHistory.get_by_src(self._db, src) return TransferHistory.get_by_src(self._db, src, storage)
def get_by_dest(self, dest: str) -> TransferHistory: def get_by_dest(self, dest: str) -> TransferHistory:
""" """
+1 -1
View File
@@ -750,7 +750,7 @@ class FileManagerModule(_ModuleBase):
target_file=target_file, target_file=target_file,
transfer_type=transfer_type) transfer_type=transfer_type)
if new_item: if new_item:
logger.info(f"文件 {fileitem.path} {transfer_type}完成") logger.debug(f"文件 {fileitem.path} {transfer_type}完成")
# 处理其他相关文件 # 处理其他相关文件
self.__transfer_other_files(fileitem=fileitem, self.__transfer_other_files(fileitem=fileitem,
target_storage=target_storage, target_storage=target_storage,
+7 -1
View File
@@ -6,6 +6,8 @@ import time
from pathlib import Path from pathlib import Path
from typing import Optional, Tuple, List from typing import Optional, Tuple, List
from aligo.response import CreateFileResponse
from app import schemas from app import schemas
from app.core.config import settings from app.core.config import settings
from app.log import logger from app.log import logger
@@ -267,6 +269,8 @@ class AliPan(StorageBase):
return None return None
item = self.aligo.create_folder(name=name, parent_file_id=fileitem.fileid, drive_id=fileitem.drive_id) item = self.aligo.create_folder(name=name, parent_file_id=fileitem.fileid, drive_id=fileitem.drive_id)
if item: 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 self.__get_fileitem(item)
return None return None
@@ -276,8 +280,10 @@ class AliPan(StorageBase):
""" """
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):
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 return None
+19 -7
View File
@@ -66,14 +66,26 @@ class Rclone(StorageBase):
modify_time=path.stat().st_mtime, modify_time=path.stat().st_mtime,
) )
def __get_rcloneitem(self, item: dict): def __get_rcloneitem(self, item: dict, parent: str = "/") -> schemas.FileItem:
""" """
获取rclone文件项 获取rclone文件项
""" """
if not item:
return schemas.FileItem()
if item.get("IsDir"):
return schemas.FileItem( return schemas.FileItem(
storage=self.schema.value, storage=self.schema.value,
type="dir" if item.get("IsDir") else "file", type="dir",
path=item.get("Path"), 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"), name=item.get("Name"),
basename=Path(item.get("Name")).stem, basename=Path(item.get("Name")).stem,
extension=Path(item.get("Name")).suffix[1:], extension=Path(item.get("Name")).suffix[1:],
@@ -113,7 +125,7 @@ class Rclone(StorageBase):
) )
if ret.returncode == 0: if ret.returncode == 0:
items = json.loads(ret.stdout) 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: except Exception as err:
logger.error(f"rclone浏览文件失败:{err}") logger.error(f"rclone浏览文件失败:{err}")
return [] return []
@@ -164,7 +176,7 @@ class Rclone(StorageBase):
if dir_file: if dir_file:
fileitem = dir_file fileitem = dir_file
else: else:
dir_file = self.create_folder(dir_file, part) dir_file = self.create_folder(fileitem, part)
if not dir_file: if not dir_file:
logger.warn(f"rclone创建目录 {fileitem.path}{part} 失败!") logger.warn(f"rclone创建目录 {fileitem.path}{part} 失败!")
return None return None
@@ -256,8 +268,8 @@ class Rclone(StorageBase):
retcode = subprocess.run( retcode = subprocess.run(
[ [
'rclone', 'copyto', 'rclone', 'copyto',
fileitem.path, str(path),
f'MP:{path}' f'MP:{Path(fileitem.path) / path.name}'
], ],
startupinfo=self.__get_hidden_shell() startupinfo=self.__get_hidden_shell()
).returncode ).returncode
+4 -3
View File
@@ -202,7 +202,8 @@ class U115Pan(StorageBase, metaclass=Singleton):
if not self.__init_cloud(): if not self.__init_cloud():
return None return None
try: try:
result = self.cloud.storage().make_dir(fileitem.parent_fileid, name) result = self.cloud.storage().make_dir(fileitem.fileid, name)
if result:
return schemas.FileItem( return schemas.FileItem(
storage=self.schema.value, storage=self.schema.value,
fileid=result.file_id, fileid=result.file_id,
@@ -242,12 +243,12 @@ class U115Pan(StorageBase, metaclass=Singleton):
if dir_file: if dir_file:
fileitem = dir_file fileitem = dir_file
else: else:
dir_file = self.create_folder(dir_file, part) dir_file = self.create_folder(fileitem, part)
if not dir_file: if not dir_file:
logger.warn(f"115创建目录 {fileitem.path}{part} 失败!") logger.warn(f"115创建目录 {fileitem.path}{part} 失败!")
return None return None
fileitem = dir_file fileitem = dir_file
return fileitem return fileitem if fileitem.fileid != "0" else None
def get_item(self, path: Path) -> Optional[schemas.FileItem]: def get_item(self, path: Path) -> Optional[schemas.FileItem]:
""" """
+1 -1
View File
@@ -299,7 +299,7 @@ class Monitor(metaclass=Singleton):
logger.info(f"{event_path} 是蓝光原盘目录,更正文件路径为:{event_path}") logger.info(f"{event_path} 是蓝光原盘目录,更正文件路径为:{event_path}")
# 查询历史记录,已转移的不处理 # 查询历史记录,已转移的不处理
if self.transferhis.get_by_src(str(event_path)): if self.transferhis.get_by_src(str(event_path), storage=storage):
logger.info(f"{event_path} 已经整理过了") logger.info(f"{event_path} 已经整理过了")
return return