34 lines
978 B
Python
34 lines
978 B
Python
from __future__ import annotations
|
|
|
|
import re
|
|
from pathlib import Path
|
|
|
|
from .database import utcnow
|
|
|
|
_CATALOG_PATTERNS = (
|
|
re.compile(r"(?i)\b(FC2[-_ ]?PPV[-_ ]?\d{5,9})\b"),
|
|
re.compile(r"(?i)\b([A-Z]{2,10}[-_ ]?\d{2,7})\b"),
|
|
)
|
|
|
|
|
|
def infer_catalog_code(filename: str) -> str | None:
|
|
stem = Path(filename).stem
|
|
for pattern in _CATALOG_PATTERNS:
|
|
match = pattern.search(stem)
|
|
if match:
|
|
value = re.sub(r"[-_ ]+", "-", match.group(1).upper())
|
|
if not value.isdigit():
|
|
return value
|
|
return None
|
|
|
|
|
|
def ensure_inferred_metadata(conn, video_id: str, filename: str) -> None:
|
|
code = infer_catalog_code(filename)
|
|
if not code:
|
|
return
|
|
conn.execute(
|
|
"INSERT INTO video_metadata(video_id,catalog_code,updated_at) VALUES(?,?,?) "
|
|
"ON CONFLICT(video_id) DO UPDATE SET catalog_code=coalesce(video_metadata.catalog_code,excluded.catalog_code)",
|
|
(video_id, code, utcnow()),
|
|
)
|