mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-03-20 12:08:09 +08:00
fix 跨存储整理(115下载除外)
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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]:
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user