Nommage Plex SxxExx des fichiers téléchargés
Le scanner Plex ignorait les épisodes 1-9 : le pattern « Saison 1 - E9 » n'est reconnu qu'avec un numéro d'épisode à 2 chiffres. Les titres « Série - Saison N - EX (VF) » sont désormais renommés en « Série - S01E09 (VF) » à l'ajout dans la file (plex_filename).
This commit is contained in:
@@ -76,6 +76,33 @@ def series_dirname(title: str) -> str | None:
|
||||
base = sanitize_filename(match.group(1).strip()) if match else ""
|
||||
return base or None
|
||||
|
||||
|
||||
_EPISODE_RE = re.compile(
|
||||
r"^(?P<series>.+?)\s*-\s*(?:Saison\s+(?P<season>\d+)\s*-\s*)?"
|
||||
r"E(?P<ep>\d+(?:[.,]\d+)?)(?P<tail>\s*\([^)]*\))?\s*$",
|
||||
re.IGNORECASE,
|
||||
)
|
||||
|
||||
|
||||
def plex_filename(title: str, extension: str) -> str | None:
|
||||
"""Nom de fichier compatible Plex (« S01E09 ») pour un titre d'épisode.
|
||||
|
||||
Les scrapers produisent « Série - Saison 1 - E9 (VF) » ; le scanner Plex
|
||||
exige « Série - S01E09 (VF) » (les épisodes 1-9 sont sinon ignorés).
|
||||
None si le titre ne suit pas le format épisode → nommage inchangé.
|
||||
"""
|
||||
match = _EPISODE_RE.match(title)
|
||||
if not match:
|
||||
return None
|
||||
series = match.group("series")
|
||||
season = int(match.group("season") or 1)
|
||||
ep_raw = match.group("ep").replace(",", ".")
|
||||
ep = float(ep_raw)
|
||||
ep_label = f"{int(ep):02d}" if ep.is_integer() else ep_raw
|
||||
tail = match.group("tail") or ""
|
||||
return sanitize_filename(f"{series} - S{season:02d}E{ep_label}{tail}") + extension
|
||||
|
||||
|
||||
class DownloadManager:
|
||||
"""File d'attente de téléchargements, injectée dans les routes via app.state."""
|
||||
|
||||
@@ -174,7 +201,8 @@ class DownloadManager:
|
||||
logger.info("Anti-doublon : %s déjà en file (id=%s)", title, existing["id"])
|
||||
return self._to_dict(existing, duplicate=True)
|
||||
|
||||
filename = sanitize_filename(title) + self._guess_extension(video_url)
|
||||
extension = self._guess_extension(video_url)
|
||||
filename = plex_filename(title, extension) or sanitize_filename(title) + extension
|
||||
series = series_dirname(title)
|
||||
file_path = f"{series}/{filename}" if series else filename
|
||||
cursor = await db.execute(
|
||||
|
||||
Reference in New Issue
Block a user