From 8dc9acf0715403b3b8c97c95e77741db63f91d9b Mon Sep 17 00:00:00 2001 From: jxxghp Date: Sun, 17 Nov 2024 14:03:03 +0800 Subject: [PATCH] fix 115 --- app/chain/media.py | 8 ++- app/modules/filemanager/storages/alist.py | 7 ++- app/modules/filemanager/storages/rclone.py | 5 +- app/modules/filemanager/storages/u115.py | 66 +++++++++++++--------- 4 files changed, 53 insertions(+), 33 deletions(-) diff --git a/app/chain/media.py b/app/chain/media.py index 9c794a75..cb4feadd 100644 --- a/app/chain/media.py +++ b/app/chain/media.py @@ -342,7 +342,7 @@ class MediaChain(ChainBase, metaclass=Singleton): _fileitem.path = str(_path.parent) item = self.storagechain.upload_file(fileitem=_fileitem, path=tmp_file) if item: - logger.info(f"已保存文件:{item.path}") + logger.info(f"已保存文件:{Path(item.path) / item.name}") if tmp_file.exists(): tmp_file.unlink() @@ -389,6 +389,8 @@ class MediaChain(ChainBase, metaclass=Singleton): logger.warn(f"{filepath.name} nfo文件生成失败!") return # 保存或上传nfo文件到上级目录 + if not parent: + parent = self.storagechain.get_parent_item(fileitem) __save_file(_fileitem=parent, _path=nfo_path, _content=movie_nfo) else: # 电影目录 @@ -441,6 +443,8 @@ class MediaChain(ChainBase, metaclass=Singleton): logger.warn(f"{filepath.name} nfo生成失败!") return # 保存或上传nfo文件到上级目录 + if not parent: + parent = self.storagechain.get_parent_item(fileitem) __save_file(_fileitem=parent, _path=nfo_path, _content=episode_nfo) # 获取集的图片 image_dict = self.metadata_img(mediainfo=file_mediainfo, @@ -455,6 +459,8 @@ class MediaChain(ChainBase, metaclass=Singleton): content = __download_image(image_url) # 保存图片文件到当前目录 if content: + if not parent: + parent = self.storagechain.get_parent_item(fileitem) __save_file(_fileitem=parent, _path=image_path, _content=content) else: diff --git a/app/modules/filemanager/storages/alist.py b/app/modules/filemanager/storages/alist.py index 6072ce23..1df35e5b 100644 --- a/app/modules/filemanager/storages/alist.py +++ b/app/modules/filemanager/storages/alist.py @@ -558,11 +558,12 @@ class Alist(StorageBase): logging.warning(f"请求上传文件 {path} 失败,状态码:{resp.status_code}") return + new_item = self.get_item(Path(fileitem.path) / path.name) if new_name and new_name != path.name: - if self.rename(fileitem, new_name): - return self.get_item(Path(fileitem.path).parent / new_name) + if self.rename(new_item, new_name): + return self.get_item(Path(new_item.path).with_name(new_name)) - return self.get_item(Path(fileitem.path) / path.name) + return new_item def detail(self, fileitem: schemas.FileItem) -> Optional[schemas.FileItem]: """ diff --git a/app/modules/filemanager/storages/rclone.py b/app/modules/filemanager/storages/rclone.py index e582efb6..509cdaa2 100644 --- a/app/modules/filemanager/storages/rclone.py +++ b/app/modules/filemanager/storages/rclone.py @@ -265,16 +265,17 @@ class Rclone(StorageBase): 上传文件 """ try: + new_path = Path(fileitem.path) / (new_name or path.name) retcode = subprocess.run( [ 'rclone', 'copyto', str(path), - f'MP:{Path(fileitem.path) / (new_name or path.name)}' + f'MP:{new_path}' ], startupinfo=self.__get_hidden_shell() ).returncode if retcode == 0: - return self.__get_fileitem(path) + return self.__get_fileitem(new_path) except Exception as err: logger.error(f"rclone上传文件失败:{err}") return None diff --git a/app/modules/filemanager/storages/u115.py b/app/modules/filemanager/storages/u115.py index 4d558598..124b89ac 100644 --- a/app/modules/filemanager/storages/u115.py +++ b/app/modules/filemanager/storages/u115.py @@ -174,7 +174,7 @@ class U115Pan(StorageBase, metaclass=Singleton): name=item.name, basename=item.stem, size=item.stat().st_size, - extension=item.suffix[1:], + extension=item.suffix[1:] if not item.is_dir() else None, modify_time=item.stat().st_mtime ) for item in items if item] except Exception as e: @@ -188,14 +188,15 @@ class U115Pan(StorageBase, metaclass=Singleton): if not self.__init_cloud(): return None try: - result = self.fs.makedirs(path=(Path(fileitem.path) / name), exist_ok=True) # noqa + result = self.fs.makedirs(Path(fileitem.path) / name, exist_ok=True) if result: return schemas.FileItem( storage=self.schema.value, type="dir", - path=f"{fileitem.path}{name}/", + path=f"{result.path}/", name=name, - modify_time=result.get("utime") + basename=Path(result.name).stem, + modify_time=result.mtime ) except Exception as e: logger.error(f"115创建目录失败:{str(e)}") @@ -208,14 +209,15 @@ class U115Pan(StorageBase, metaclass=Singleton): if not self.__init_cloud(): return None try: - result = self.fs.makedirs(path=path, exist_ok=True) # noqa + result = self.fs.makedirs(path, exist_ok=True) if result: return schemas.FileItem( storage=self.schema.value, type="dir", - path=str(path) + "/", - name=path.name, - modify_time=result.get("utime") + path=result.path + "/", + name=result.name, + basename=Path(result.name).stem, + modify_time=result.mtime ) except Exception as e: logger.error(f"115获取目录失败:{str(e)}") @@ -228,19 +230,23 @@ class U115Pan(StorageBase, metaclass=Singleton): if not self.__init_cloud(): return None try: - item = self.fs.attr(path) + try: + item = self.fs.attr(path) + except FileNotFoundError: + return None if item: return schemas.FileItem( storage=self.schema.value, - type="dir" if item.is_dir() else "file", - path=str(path) + ("/" if item.is_dir() else ""), + type="dir" if item.is_directory else "file", + path=item.path + ("/" if item.is_directory else ""), name=item.name, - size=item.stat().st_size, - extension=item.file_extension[1:], - modify_time=item.stat().st_mtime + size=item.size, + extension=item.suffix[1:] if not item.is_directory else None, + modify_time=item.mtime, + thumbnail=item.get("thumb") ) except Exception as e: - logger.error(f"115获取文件失败:{str(e)}") + logger.info(f"115获取文件失败:{str(e)}") return None def detail(self, fileitem: schemas.FileItem) -> Optional[schemas.FileItem]: @@ -250,16 +256,20 @@ class U115Pan(StorageBase, metaclass=Singleton): if not self.__init_cloud(): return None try: - item = self.fs.attr(fileitem.path) + try: + item = self.fs.attr(fileitem.path) + except FileNotFoundError: + return None if item: return schemas.FileItem( storage=self.schema.value, - type="dir" if item.is_dir() else "file", - path=fileitem.path + ("/" if item.is_dir() else ""), + type="dir" if item.is_directory else "file", + path=item.path + ("/" if item.is_directory else ""), name=item.name, - size=item.stat().st_size, - extension=item.file_extension[1:], - modify_time=item.stat().st_mtime + size=item.size, + extension=item.suffix[1:] if not item.is_directory else None, + modify_time=item.mtime, + thumbnail=item.get("thumb") ) except Exception as e: logger.error(f"115获取文件详情失败:{str(e)}") @@ -313,17 +323,19 @@ class U115Pan(StorageBase, metaclass=Singleton): if not self.__init_cloud(): return None try: + new_path = Path(fileitem.path) / (new_name or path.name) with open(path, "rb") as f: - result = self.fs.upload(f, Path(fileitem.path) / (new_name or path.name)) + result = self.fs.upload(f, new_path) if result: return schemas.FileItem( storage=self.schema.value, type="file", - path=fileitem.path, - name=new_name or path.name, - size=result.get("size"), - extension=result.get("extension"), - modify_time=result.get("utime") + path=str(path), + name=result.name, + basename=Path(result.name).stem, + size=result.size, + extension=Path(result.name).suffix[1:], + modify_time=result.mtime ) except Exception as e: logger.error(f"115上传文件失败:{str(e)}")