support path_mapping for downloader

This commit is contained in:
stkevintan
2025-12-08 14:00:39 +08:00
parent 63a890e85d
commit 378ba51f4d
7 changed files with 42 additions and 15 deletions

View File

@@ -1,5 +1,6 @@
from abc import abstractmethod, ABCMeta
from typing import Generic, Tuple, Union, TypeVar, Type, Dict, Optional, Callable
from pathlib import Path
from app.helper.service import ServiceConfigHelper
from app.schemas import Notification, NotificationConf, MediaServerConf, DownloaderConf
@@ -290,6 +291,30 @@ class _DownloaderBase(ServiceBase[TService, DownloaderConf]):
重置默认配置名称
"""
self._default_config_name = None
def normalize_path(self, path: Path, downloader: Optional[str]) -> str:
"""
根据下载器配置和路径映射,规范化下载路径
:param path: 原始路径
:param conf: 下载器配置
:return: 规范化后的路径
"""
dir = path.as_posix()
conf = self.get_config(downloader)
if conf and conf.path_mapping:
for (src, dst) in conf.path_mapping:
src = Path(src.strip()).as_posix()
dst = Path(dst.strip()).as_posix()
if dir.startswith(src):
dir = dir.replace(src, dst, 1)
break
# 处理存储协议前缀
for s in StorageSchema:
prefix = f"{s.value}:"
if dir.startswith(prefix):
return dir[len(prefix):]
return dir
class _MediaServerBase(ServiceBase[TService, MediaServerConf]):