This commit is contained in:
jxxghp
2024-12-17 12:44:37 +08:00
parent c6830059b2
commit 3400a9f87a

View File

@@ -1,4 +1,3 @@
import copy
import json
import subprocess
from pathlib import Path
@@ -57,12 +56,6 @@ class Rclone(StorageBase):
else:
return None
def __get_fileitem(self, path: Path):
"""
获取文件项
"""
return self.get_item(path)
def __get_rcloneitem(self, item: dict, parent: str = "/") -> schemas.FileItem:
"""
获取rclone文件项
@@ -137,12 +130,12 @@ class Rclone(StorageBase):
retcode = subprocess.run(
[
'rclone', 'mkdir',
f'MP:{fileitem.path}/{name}'
f'MP:{Path(fileitem.path) / name}'
],
startupinfo=self.__get_hidden_shell()
).returncode
if retcode == 0:
return self.get_item(Path(f"{fileitem.path}/{name}"))
return self.get_item(Path(fileitem.path) / name)
except Exception as err:
logger.error(f"rclone创建目录失败{err}")
return None
@@ -188,20 +181,6 @@ class Rclone(StorageBase):
获取文件或目录不存在返回None
"""
try:
ret = subprocess.run(
[
'rclone', 'lsjson',
f'MP:{path}'
],
capture_output=True,
startupinfo=self.__get_hidden_shell()
)
if ret.returncode == 0:
# 判断是否是文件
if str(path.name) in str(ret.stdout.decode('utf-8')):
items = json.loads(ret.stdout)
return self.__get_rcloneitem(items[0], parent=str(path.parent) + "/")
ret = subprocess.run(
[
'rclone', 'lsjson',
@@ -211,15 +190,13 @@ class Rclone(StorageBase):
startupinfo=self.__get_hidden_shell()
)
if ret.returncode == 0:
# 判断是否是目录
if str(path.name) in str(ret.stdout.decode('utf-8')):
items = json.loads(ret.stdout)
for item in items:
if item.get("Path") == path.name:
return self.__get_rcloneitem(item, parent=str(path.parent) + "/")
items = json.loads(ret.stdout)
for item in items:
if item.get("Name") == path.name:
return self.__get_rcloneitem(item, parent=str(path.parent) + "/")
return None
except Exception as err:
logger.error(f"rclone获取文件失败{err}")
logger.debug(f"rclone获取文件失败:{err}")
return None
def delete(self, fileitem: schemas.FileItem) -> bool:
@@ -249,7 +226,7 @@ class Rclone(StorageBase):
[
'rclone', 'moveto',
f'MP:{fileitem.path}',
f'MP:{Path(fileitem.path).parent}/{name}'
f'MP:{Path(fileitem.path).parent / name}'
],
startupinfo=self.__get_hidden_shell()
).returncode
@@ -297,7 +274,7 @@ class Rclone(StorageBase):
startupinfo=self.__get_hidden_shell()
).returncode
if retcode == 0:
return self.__get_fileitem(new_path)
return self.get_item(new_path)
except Exception as err:
logger.error(f"rclone上传文件失败{err}")
return None