mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-07 00:16:57 +08:00
fix 跨存储整理(115下载除外)
This commit is contained in:
@@ -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} 已成功整理过,如需重新处理,请删除历史记录。")
|
||||||
# 计数
|
# 计数
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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:
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user