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:
roman
2026-09-23 09:30:31 +00:00
parent 853b4e0866
commit 5fedc4f9d7
3 changed files with 58 additions and 4 deletions
+27 -1
View File
@@ -10,7 +10,7 @@ from app.scrapers.base import (
import_all_scrapers,
resolve_hoster,
)
from app.services.downloads import sanitize_filename
from app.services.downloads import plex_filename, sanitize_filename
# ------------------------------------------------------------ format interne
@@ -52,6 +52,32 @@ def test_sanitize_no_traversal():
assert sanitize_filename("../../etc/passwd") == "etc passwd"
# ------------------------------------------------------------ nommage Plex
@pytest.mark.parametrize(
("title", "expected"),
[
(
"The Eminence in Shadow - Saison 1 - E9 (VF)",
"The Eminence in Shadow - S01E09 (VF).mp4",
),
(
"The Eminence in Shadow - Saison 1 - E10 (VF)",
"The Eminence in Shadow - S01E10 (VF).mp4",
),
("Anime X - E1 (VOSTFR)", "Anime X - S01E01 (VOSTFR).mp4"),
("One Piece - E1122", "One Piece - S01E1122.mp4"),
("Série - saison 2 - e3 (vf)", "Série - S02E03 (vf).mp4"),
("Episode Test 1", None),
("Mon Titre", None),
("Series S01E05 VOSTFR WEB-DL", None),
],
)
def test_plex_filename(title, expected):
assert plex_filename(title, ".mp4") == expected
# ------------------------------------------------------------ auth
+2 -2
View File
@@ -139,7 +139,7 @@ async def test_series_subfolder_and_scan(file_server, manager):
d = await dm.enqueue(f"{file_server}/video.mp4", "http://page", "Anime Z - E7 (VOSTFR)")
data = await _wait_status(d["id"], {"done", "failed"})
assert data["status"] == "done", data.get("error")
assert data["file_path"] == "Anime Z/Anime Z - E7 (VOSTFR).mp4"
assert data["file_path"] == "Anime Z/Anime Z - S01E07 (VOSTFR).mp4"
assert (get_settings().download_dir / data["file_path"]).read_bytes() == PAYLOAD
# DB vidée + redémarrage → le fichier en sous-dossier est restauré tel quel
@@ -148,4 +148,4 @@ async def test_series_subfolder_and_scan(file_server, manager):
await dm.start()
items = await dm.list_all()
paths = [i["file_path"] for i in items] # d'autres fichiers de tests peuvent trainer
assert "Anime Z/Anime Z - E7 (VOSTFR).mp4" in paths
assert "Anime Z/Anime Z - S01E07 (VOSTFR).mp4" in paths