mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-03-20 03:57:30 +08:00
Revert "refactor(helper): 将LLMHelper StorageHelper的相关方法改为静态方法,移除实例调用"
This reverts commit 9f381b3c73.
This commit is contained in:
@@ -317,7 +317,7 @@ async def get_llm_models(provider: str, api_key: str, base_url: Optional[str] =
|
||||
获取LLM模型列表
|
||||
"""
|
||||
try:
|
||||
models = LLMHelper.get_models(provider, api_key, base_url)
|
||||
models = LLMHelper().get_models(provider, api_key, base_url)
|
||||
return schemas.Response(success=True, data=models)
|
||||
except Exception as e:
|
||||
return schemas.Response(success=False, message=str(e))
|
||||
|
||||
@@ -71,14 +71,13 @@ class LLMHelper:
|
||||
openai_proxy=settings.PROXY_HOST
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def get_models(provider: str, api_key: str, base_url: str = None) -> List[str]:
|
||||
def get_models(self, provider: str, api_key: str, base_url: str = None) -> List[str]:
|
||||
"""获取模型列表"""
|
||||
logger.info(f"获取 {provider} 模型列表...")
|
||||
if provider == "google":
|
||||
return LLMHelper._get_google_models(api_key)
|
||||
return self._get_google_models(api_key)
|
||||
else:
|
||||
return LLMHelper._get_openai_compatible_models(provider, api_key, base_url)
|
||||
return self._get_openai_compatible_models(provider, api_key, base_url)
|
||||
|
||||
@staticmethod
|
||||
def _get_google_models(api_key: str) -> List[str]:
|
||||
|
||||
@@ -20,23 +20,21 @@ class StorageHelper:
|
||||
return []
|
||||
return [schemas.StorageConf(**s) for s in storage_confs]
|
||||
|
||||
@staticmethod
|
||||
def get_storage(storage: str) -> Optional[schemas.StorageConf]:
|
||||
def get_storage(self, storage: str) -> Optional[schemas.StorageConf]:
|
||||
"""
|
||||
获取指定存储配置
|
||||
"""
|
||||
storagies = StorageHelper.get_storagies()
|
||||
storagies = self.get_storagies()
|
||||
for s in storagies:
|
||||
if s.type == storage:
|
||||
return s
|
||||
return None
|
||||
|
||||
@staticmethod
|
||||
def set_storage(storage: str, conf: dict):
|
||||
def set_storage(self, storage: str, conf: dict):
|
||||
"""
|
||||
设置存储配置
|
||||
"""
|
||||
storagies = StorageHelper.get_storagies()
|
||||
storagies = self.get_storagies()
|
||||
if not storagies:
|
||||
storagies = [
|
||||
schemas.StorageConf(
|
||||
@@ -51,12 +49,11 @@ class StorageHelper:
|
||||
break
|
||||
SystemConfigOper().set(SystemConfigKey.Storages, [s.model_dump() for s in storagies])
|
||||
|
||||
@staticmethod
|
||||
def add_storage(storage: str, name: str, conf: dict):
|
||||
def add_storage(self, storage: str, name: str, conf: dict):
|
||||
"""
|
||||
添加存储配置
|
||||
"""
|
||||
storagies = StorageHelper.get_storagies()
|
||||
storagies = self.get_storagies()
|
||||
if not storagies:
|
||||
storagies = [
|
||||
schemas.StorageConf(
|
||||
@@ -73,12 +70,11 @@ class StorageHelper:
|
||||
))
|
||||
SystemConfigOper().set(SystemConfigKey.Storages, [s.model_dump() for s in storagies])
|
||||
|
||||
@staticmethod
|
||||
def reset_storage(storage: str):
|
||||
def reset_storage(self, storage: str):
|
||||
"""
|
||||
重置存储配置
|
||||
"""
|
||||
storagies = StorageHelper.get_storagies()
|
||||
storagies = self.get_storagies()
|
||||
for s in storagies:
|
||||
if s.type == storage:
|
||||
s.config = {}
|
||||
|
||||
@@ -7,6 +7,7 @@ from app.core.context import MediaInfo
|
||||
from app.core.meta import MetaBase
|
||||
from app.core.metainfo import MetaInfo
|
||||
from app.helper.directory import DirectoryHelper
|
||||
from app.helper.message import MessageHelper
|
||||
from app.helper.module import ModuleHelper
|
||||
from app.log import logger
|
||||
from app.modules import _ModuleBase
|
||||
@@ -25,6 +26,11 @@ class FileManagerModule(_ModuleBase):
|
||||
_storage_schemas = []
|
||||
_support_storages = []
|
||||
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.directoryhelper = DirectoryHelper()
|
||||
self.messagehelper = MessageHelper()
|
||||
|
||||
def init_module(self) -> None:
|
||||
# 加载模块
|
||||
self._storage_schemas = ModuleHelper.load('app.modules.filemanager.storages',
|
||||
@@ -65,7 +71,7 @@ class FileManagerModule(_ModuleBase):
|
||||
测试模块连接性
|
||||
"""
|
||||
# 检查目录
|
||||
dirs = DirectoryHelper.get_dirs()
|
||||
dirs = self.directoryhelper.get_dirs()
|
||||
if not dirs:
|
||||
return False, "未设置任何目录"
|
||||
for d in dirs:
|
||||
@@ -132,6 +138,7 @@ class FileManagerModule(_ModuleBase):
|
||||
:param mediainfo: 媒体信息
|
||||
:return: 重命名后的名称(含目录)
|
||||
"""
|
||||
handler = TransHandler()
|
||||
# 重命名格式
|
||||
rename_format = settings.RENAME_FORMAT(mediainfo.type)
|
||||
# 获取集信息
|
||||
@@ -151,9 +158,9 @@ class FileManagerModule(_ModuleBase):
|
||||
episode_group=mediainfo.episode_group,
|
||||
)
|
||||
# 获取重命名后的名称
|
||||
path = TransHandler.get_rename_path(
|
||||
path = handler.get_rename_path(
|
||||
template_string=rename_format,
|
||||
rename_dict=TransHandler.get_naming_dict(meta=meta,
|
||||
rename_dict=handler.get_naming_dict(meta=meta,
|
||||
mediainfo=mediainfo,
|
||||
episodes_info=episodes_info,
|
||||
file_ext=Path(meta.title).suffix)
|
||||
@@ -417,6 +424,7 @@ class FileManagerModule(_ModuleBase):
|
||||
:param target_oper: 目标存储操作对象
|
||||
:return: {path, target_path, message}
|
||||
"""
|
||||
handler = TransHandler()
|
||||
# 检查目录路径
|
||||
if fileitem.storage == "local" and not Path(fileitem.path).exists():
|
||||
return TransferInfo(success=False,
|
||||
@@ -451,7 +459,7 @@ class FileManagerModule(_ModuleBase):
|
||||
# 是否需要刮削
|
||||
need_scrape = target_directory.scraping if scrape is None else scrape
|
||||
# 拼装媒体库一、二级子目录
|
||||
target_path = TransHandler.get_dest_dir(mediainfo=mediainfo, target_dir=target_directory,
|
||||
target_path = handler.get_dest_dir(mediainfo=mediainfo, target_dir=target_directory,
|
||||
need_type_folder=library_type_folder,
|
||||
need_category_folder=library_category_folder)
|
||||
elif target_path:
|
||||
@@ -460,7 +468,7 @@ class FileManagerModule(_ModuleBase):
|
||||
need_notify = False
|
||||
overwrite_mode = "never"
|
||||
# 手动整理的场景,有自定义目标路径
|
||||
target_path = TransHandler.get_dest_path(mediainfo=mediainfo, target_path=target_path,
|
||||
target_path = handler.get_dest_path(mediainfo=mediainfo, target_path=target_path,
|
||||
need_type_folder=library_type_folder,
|
||||
need_category_folder=library_category_folder)
|
||||
else:
|
||||
@@ -503,7 +511,7 @@ class FileManagerModule(_ModuleBase):
|
||||
|
||||
# 整理
|
||||
logger.info(f"获取整理目标路径:【{target_storage}】{target_path}")
|
||||
return TransHandler.transfer_media(fileitem=fileitem,
|
||||
return handler.transfer_media(fileitem=fileitem,
|
||||
in_meta=meta,
|
||||
mediainfo=mediainfo,
|
||||
target_storage=target_storage,
|
||||
@@ -522,6 +530,7 @@ class FileManagerModule(_ModuleBase):
|
||||
获取对应媒体的媒体库文件列表
|
||||
:param mediainfo: 媒体信息
|
||||
"""
|
||||
handler = TransHandler()
|
||||
ret_fileitems = []
|
||||
# 检查本地媒体库
|
||||
dest_dirs = DirectoryHelper.get_library_dirs()
|
||||
@@ -532,7 +541,7 @@ class FileManagerModule(_ModuleBase):
|
||||
if not storage_oper:
|
||||
continue
|
||||
# 媒体分类路径
|
||||
dir_path = TransHandler.get_dest_dir(mediainfo=mediainfo, target_dir=dest_dir)
|
||||
dir_path = handler.get_dest_dir(mediainfo=mediainfo, target_dir=dest_dir)
|
||||
# 重命名格式
|
||||
rename_format = settings.RENAME_FORMAT(mediainfo.type)
|
||||
# 元数据补上常用属性,尽可能确保重命名后的路径不出现空白
|
||||
@@ -546,10 +555,10 @@ class FileManagerModule(_ModuleBase):
|
||||
if meta.begin_episode is None:
|
||||
meta.begin_episode = 1
|
||||
# 获取路径(重命名路径)
|
||||
target_path = TransHandler.get_rename_path(
|
||||
target_path = handler.get_rename_path(
|
||||
path=dir_path,
|
||||
template_string=rename_format,
|
||||
rename_dict=TransHandler.get_naming_dict(meta=meta,
|
||||
rename_dict=handler.get_naming_dict(meta=meta,
|
||||
mediainfo=mediainfo)
|
||||
)
|
||||
# 获取重命名后的媒体文件根路径
|
||||
|
||||
@@ -44,6 +44,9 @@ class StorageBase(metaclass=ABCMeta):
|
||||
transtype = {}
|
||||
snapshot_check_folder_modtime = True
|
||||
|
||||
def __init__(self):
|
||||
self.storagehelper = StorageHelper()
|
||||
|
||||
@abstractmethod
|
||||
def init_storage(self):
|
||||
"""
|
||||
@@ -67,7 +70,7 @@ class StorageBase(metaclass=ABCMeta):
|
||||
"""
|
||||
获取配置
|
||||
"""
|
||||
return StorageHelper.get_storage(self.schema.value)
|
||||
return self.storagehelper.get_storage(self.schema.value)
|
||||
|
||||
def get_conf(self) -> dict:
|
||||
"""
|
||||
@@ -80,7 +83,7 @@ class StorageBase(metaclass=ABCMeta):
|
||||
"""
|
||||
设置配置
|
||||
"""
|
||||
StorageHelper.set_storage(self.schema.value, conf)
|
||||
self.storagehelper.set_storage(self.schema.value, conf)
|
||||
self.init_storage()
|
||||
|
||||
def support_transtype(self) -> dict:
|
||||
@@ -99,7 +102,7 @@ class StorageBase(metaclass=ABCMeta):
|
||||
"""
|
||||
重置置配置
|
||||
"""
|
||||
StorageHelper.reset_storage(self.schema.value)
|
||||
self.storagehelper.reset_storage(self.schema.value)
|
||||
self.init_storage()
|
||||
|
||||
@abstractmethod
|
||||
|
||||
@@ -24,6 +24,9 @@ class TransHandler:
|
||||
文件转移整理类
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
@staticmethod
|
||||
def __update_result(result: TransferInfo, **kwargs):
|
||||
"""
|
||||
@@ -53,8 +56,8 @@ class TransHandler:
|
||||
current_value = value
|
||||
setattr(result, key, current_value)
|
||||
|
||||
@staticmethod
|
||||
def transfer_media(fileitem: FileItem,
|
||||
def transfer_media(self,
|
||||
fileitem: FileItem,
|
||||
in_meta: MetaBase,
|
||||
mediainfo: MediaInfo,
|
||||
target_storage: str,
|
||||
@@ -122,17 +125,17 @@ class TransHandler:
|
||||
if fileitem.type == "dir":
|
||||
# 整理整个目录,一般为蓝光原盘
|
||||
if need_rename:
|
||||
new_path = TransHandler.get_rename_path(
|
||||
new_path = self.get_rename_path(
|
||||
path=target_path,
|
||||
template_string=rename_format,
|
||||
rename_dict=TransHandler.get_naming_dict(meta=in_meta,
|
||||
rename_dict=self.get_naming_dict(meta=in_meta,
|
||||
mediainfo=mediainfo)
|
||||
)
|
||||
new_path = DirectoryHelper.get_media_root_path(
|
||||
rename_format, rename_path=new_path
|
||||
)
|
||||
if not new_path:
|
||||
TransHandler.__update_result(
|
||||
self.__update_result(
|
||||
result=result,
|
||||
success=False,
|
||||
message="重命名格式无效",
|
||||
@@ -151,7 +154,7 @@ class TransHandler:
|
||||
file.size for file in source_oper.list(stream_fileitem) or []
|
||||
)
|
||||
# 整理目录
|
||||
new_diritem, errmsg = TransHandler.__transfer_dir(fileitem=fileitem,
|
||||
new_diritem, errmsg = self.__transfer_dir(fileitem=fileitem,
|
||||
mediainfo=mediainfo,
|
||||
source_oper=source_oper,
|
||||
target_oper=target_oper,
|
||||
@@ -161,7 +164,7 @@ class TransHandler:
|
||||
result=result)
|
||||
if not new_diritem:
|
||||
logger.error(f"文件夹 {fileitem.path} 整理失败:{errmsg}")
|
||||
TransHandler.__update_result(result=result,
|
||||
self.__update_result(result=result,
|
||||
success=False,
|
||||
message=errmsg,
|
||||
fileitem=fileitem,
|
||||
@@ -171,7 +174,7 @@ class TransHandler:
|
||||
|
||||
logger.info(f"文件夹 {fileitem.path} 整理成功")
|
||||
# 返回整理后的路径
|
||||
TransHandler.__update_result(result=result,
|
||||
self.__update_result(result=result,
|
||||
success=True,
|
||||
fileitem=fileitem,
|
||||
target_item=new_diritem,
|
||||
@@ -186,7 +189,7 @@ class TransHandler:
|
||||
# 电视剧
|
||||
if in_meta.begin_episode is None:
|
||||
logger.warn(f"文件 {fileitem.path} 整理失败:未识别到文件集数")
|
||||
TransHandler.__update_result(result=result,
|
||||
self.__update_result(result=result,
|
||||
success=False,
|
||||
message="未识别到文件集数",
|
||||
fileitem=fileitem,
|
||||
@@ -207,10 +210,10 @@ class TransHandler:
|
||||
|
||||
# 目的文件名
|
||||
if need_rename:
|
||||
new_file = TransHandler.get_rename_path(
|
||||
new_file = self.get_rename_path(
|
||||
path=target_path,
|
||||
template_string=rename_format,
|
||||
rename_dict=TransHandler.get_naming_dict(
|
||||
rename_dict=self.get_naming_dict(
|
||||
meta=in_meta,
|
||||
mediainfo=mediainfo,
|
||||
episodes_info=episodes_info,
|
||||
@@ -220,14 +223,14 @@ class TransHandler:
|
||||
|
||||
# 针对字幕文件,文件名中补充额外标识信息
|
||||
if __is_subtitle_file(fileitem):
|
||||
new_file = TransHandler.__rename_subtitles(fileitem, new_file)
|
||||
new_file = self.__rename_subtitles(fileitem, new_file)
|
||||
|
||||
# 文件目录
|
||||
folder_path = DirectoryHelper.get_media_root_path(
|
||||
rename_format, rename_path=new_file
|
||||
)
|
||||
if not folder_path:
|
||||
TransHandler.__update_result(
|
||||
self.__update_result(
|
||||
result=result,
|
||||
success=False,
|
||||
message="重命名格式无效",
|
||||
@@ -245,7 +248,7 @@ class TransHandler:
|
||||
target_diritem = target_oper.get_folder(folder_path)
|
||||
if not target_diritem:
|
||||
logger.error(f"目标目录 {folder_path} 获取失败")
|
||||
TransHandler.__update_result(result=result,
|
||||
self.__update_result(result=result,
|
||||
success=False,
|
||||
message=f"目标目录 {folder_path} 获取失败",
|
||||
fileitem=fileitem,
|
||||
@@ -279,7 +282,7 @@ class TransHandler:
|
||||
logger.info(f"目标文件文件大小更小,将覆盖:{new_file}")
|
||||
overflag = True
|
||||
else:
|
||||
TransHandler.__update_result(result=result,
|
||||
self.__update_result(result=result,
|
||||
success=False,
|
||||
message=f"媒体库存在同名文件,且质量更好",
|
||||
fileitem=fileitem,
|
||||
@@ -291,7 +294,7 @@ class TransHandler:
|
||||
return result
|
||||
elif overwrite_mode == 'never':
|
||||
# 存在不覆盖
|
||||
TransHandler.__update_result(result=result,
|
||||
self.__update_result(result=result,
|
||||
success=False,
|
||||
message=f"媒体库存在同名文件,当前覆盖模式为不覆盖",
|
||||
fileitem=fileitem,
|
||||
@@ -310,13 +313,13 @@ class TransHandler:
|
||||
# 文件不存在,但仅保留最新版本
|
||||
logger.info(
|
||||
f"当前整理覆盖模式设置为 {overwrite_mode},仅保留最新版本,正在删除已有版本文件 ...")
|
||||
TransHandler.__delete_version_files(target_oper, new_file)
|
||||
self.__delete_version_files(target_oper, new_file)
|
||||
else:
|
||||
# 附加文件 总是需要覆盖
|
||||
overflag = True
|
||||
|
||||
# 整理文件
|
||||
new_item, err_msg = TransHandler.__transfer_file(fileitem=fileitem,
|
||||
new_item, err_msg = self.__transfer_file(fileitem=fileitem,
|
||||
mediainfo=mediainfo,
|
||||
target_storage=target_storage,
|
||||
target_file=new_file,
|
||||
@@ -327,7 +330,7 @@ class TransHandler:
|
||||
result=result)
|
||||
if not new_item:
|
||||
logger.error(f"文件 {fileitem.path} 整理失败:{err_msg}")
|
||||
TransHandler.__update_result(result=result,
|
||||
self.__update_result(result=result,
|
||||
success=False,
|
||||
message=err_msg,
|
||||
fileitem=fileitem,
|
||||
@@ -337,7 +340,7 @@ class TransHandler:
|
||||
return result
|
||||
|
||||
logger.info(f"文件 {fileitem.path} 整理成功")
|
||||
TransHandler.__update_result(result=result,
|
||||
self.__update_result(result=result,
|
||||
success=True,
|
||||
fileitem=fileitem,
|
||||
target_item=new_item,
|
||||
@@ -542,8 +545,7 @@ class TransHandler:
|
||||
|
||||
return new_file.with_name(new_file.stem + new_sub_tag + file_ext)
|
||||
|
||||
@staticmethod
|
||||
def __transfer_dir(fileitem: FileItem, mediainfo: MediaInfo,
|
||||
def __transfer_dir(self, fileitem: FileItem, mediainfo: MediaInfo,
|
||||
source_oper: StorageBase, target_oper: StorageBase,
|
||||
transfer_type: str, target_storage: str, target_path: Path,
|
||||
result: TransferInfo) -> Tuple[Optional[FileItem], str]:
|
||||
@@ -578,7 +580,7 @@ class TransHandler:
|
||||
f"Reason: {event_data.reason}")
|
||||
return None, event_data.reason
|
||||
# 处理所有文件
|
||||
state, errmsg = TransHandler.__transfer_dir_files(fileitem=fileitem,
|
||||
state, errmsg = self.__transfer_dir_files(fileitem=fileitem,
|
||||
target_storage=target_storage,
|
||||
source_oper=source_oper,
|
||||
target_oper=target_oper,
|
||||
@@ -590,8 +592,7 @@ class TransHandler:
|
||||
else:
|
||||
return None, errmsg
|
||||
|
||||
@staticmethod
|
||||
def __transfer_dir_files(fileitem: FileItem, target_storage: str,
|
||||
def __transfer_dir_files(self, fileitem: FileItem, target_storage: str,
|
||||
source_oper: StorageBase, target_oper: StorageBase,
|
||||
transfer_type: str, target_path: Path,
|
||||
result: TransferInfo) -> Tuple[bool, str]:
|
||||
@@ -610,7 +611,7 @@ class TransHandler:
|
||||
if item.type == "dir":
|
||||
# 递归整理目录
|
||||
new_path = target_path / item.name
|
||||
state, errmsg = TransHandler.__transfer_dir_files(fileitem=item,
|
||||
state, errmsg = self.__transfer_dir_files(fileitem=item,
|
||||
target_storage=target_storage,
|
||||
source_oper=source_oper,
|
||||
target_oper=target_oper,
|
||||
@@ -622,7 +623,7 @@ class TransHandler:
|
||||
else:
|
||||
# 整理文件
|
||||
new_file = target_path / item.name
|
||||
new_item, errmsg = TransHandler.__transfer_command(fileitem=item,
|
||||
new_item, errmsg = self.__transfer_command(fileitem=item,
|
||||
target_storage=target_storage,
|
||||
source_oper=source_oper,
|
||||
target_oper=target_oper,
|
||||
@@ -630,7 +631,7 @@ class TransHandler:
|
||||
transfer_type=transfer_type)
|
||||
if not new_item:
|
||||
return False, errmsg
|
||||
TransHandler.__update_result(
|
||||
self.__update_result(
|
||||
result=result,
|
||||
file_list=[item.path],
|
||||
file_list_new=[new_item.path],
|
||||
@@ -638,8 +639,7 @@ class TransHandler:
|
||||
# 返回成功
|
||||
return True, ""
|
||||
|
||||
@staticmethod
|
||||
def __transfer_file(fileitem: FileItem, mediainfo: MediaInfo,
|
||||
def __transfer_file(self, fileitem: FileItem, mediainfo: MediaInfo,
|
||||
source_oper: StorageBase, target_oper: StorageBase,
|
||||
target_storage: str, target_file: Path,
|
||||
transfer_type: str, result: TransferInfo,
|
||||
@@ -695,14 +695,14 @@ class TransHandler:
|
||||
logger.info(f"正在删除已存在的文件:【{target_storage}】{target_file}")
|
||||
target_oper.delete(exists_item)
|
||||
# 执行文件整理命令
|
||||
new_item, errmsg = TransHandler.__transfer_command(fileitem=fileitem,
|
||||
new_item, errmsg = self.__transfer_command(fileitem=fileitem,
|
||||
target_storage=target_storage,
|
||||
source_oper=source_oper,
|
||||
target_oper=target_oper,
|
||||
target_file=target_file,
|
||||
transfer_type=transfer_type)
|
||||
if new_item:
|
||||
TransHandler.__update_result(
|
||||
self.__update_result(
|
||||
result=result,
|
||||
file_list=[fileitem.path],
|
||||
file_list_new=[new_item.path],
|
||||
|
||||
Reference in New Issue
Block a user