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

@@ -272,7 +272,7 @@ class TransferChain(ChainBase):
# 整理成功的不再处理
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:
logger.info(f"{file_item.path} 已成功整理过,如需重新处理,请删除历史记录。")
# 计数

View File

@@ -95,8 +95,12 @@ class TransferHistory(Base):
@staticmethod
@db_query
def get_by_src(db: Session, src: str):
return db.query(TransferHistory).filter(TransferHistory.src == src).first()
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()
@staticmethod
@db_query

View File

@@ -28,12 +28,13 @@ class TransferHistoryOper(DbOper):
"""
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 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:
"""

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]:
"""

View File

@@ -299,7 +299,7 @@ class Monitor(metaclass=Singleton):
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} 已经整理过了")
return