fix: NC 검색 PROPFIND 폴백 + 자막 중복 스킵

- nc_files.py: WebDAV SEARCH 501 시 PROPFIND depth=99 + 로컬 필터 폴백
- subtitle_downloader.py: download_file에 기존 파일 존재 체크 추가 (이미 있으면 스킵)
This commit is contained in:
2026-03-18 21:14:38 +09:00
parent 35b9813d44
commit c55203474b
2 changed files with 24 additions and 0 deletions

View File

@@ -102,7 +102,24 @@ class NCFilesClient:
Returns: Returns:
매칭된 NCFile 리스트 매칭된 NCFile 리스트
""" """
# 1차: WebDAV SEARCH 시도
results = await self.nc.webdav_search(query) results = await self.nc.webdav_search(query)
# 2차: SEARCH 실패 시 (501 등) PROPFIND로 전체 목록 → 로컬 필터
if not results:
logger.info(f"WebDAV SEARCH 미지원, PROPFIND 폴백 사용: '{query}'")
try:
dav_path = f"files/{self.nc.username}/"
all_files = await self.nc.webdav_propfind(dav_path, depth=99)
query_lower = query.lower().lstrip(".")
results = [
f for f in all_files[1:] # 첫 번째는 루트
if query_lower in f.get("name", "").lower()
or query_lower in f.get("content_type", "").lower()
]
except Exception as e:
logger.warning(f"PROPFIND 폴백 실패: {e}")
files = [self._to_ncfile(r) for r in results] files = [self._to_ncfile(r) for r in results]
# 디렉토리보다 파일 우선, 최신순 # 디렉토리보다 파일 우선, 최신순
files.sort(key=lambda f: (f.is_dir, f.name)) files.sort(key=lambda f: (f.is_dir, f.name))

View File

@@ -252,6 +252,13 @@ class SubtitleDownloader:
target_dir = Path(save_dir) if save_dir else self.download_dir target_dir = Path(save_dir) if save_dir else self.download_dir
target_dir.mkdir(parents=True, exist_ok=True) target_dir.mkdir(parents=True, exist_ok=True)
# 이미 같은 파일명이 존재하면 스킵
existing = target_dir / sub.filename
if existing.exists() and existing.stat().st_size > 0:
logger.info(f"자막 이미 존재, 스킵: {existing}")
sub.local_path = str(existing)
return str(existing)
headers = { headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
} }