Add TheTVDB episode title matching and release v1.0.3.

Match filenames to TheTVDB episode order (default, aired, DVD, etc.) to fix chaotic SxxExx numbering while preserving titles.

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
Bulk Renamer
2026-07-03 16:47:37 -05:00
co-authored by Cursor
parent 59dba20c1e
commit 085d6dc296
8 changed files with 609 additions and 5 deletions
+34
View File
@@ -9,6 +9,8 @@ from dataclasses import dataclass, field
from pathlib import Path
from typing import List, Optional
from .episode_match import rewrite_episode_number
@dataclass
class Rule(ABC):
@@ -257,6 +259,38 @@ class EpisodeRenumberRule(Rule):
return new_stem, ext
@dataclass
class TvdbEpisodeRenumberRule(Rule):
"""
Renumber SxxExx blocks using a pre-built filename → episode number mapping
(typically from TheTVDB title matching).
"""
episode_mapping: dict = field(default_factory=dict, repr=False)
padding: int = 2
pattern: str = r"(.*?[Ss]\d+[Ee])(\d+)(-[Ee](\d+))?(.*)"
def apply(
self,
stem: str,
ext: str,
index: int,
total: int,
original_name: Optional[str] = None,
) -> tuple[str, str]:
if not self.episode_mapping or original_name is None:
return stem, ext
new_ep = self.episode_mapping.get(original_name)
if new_ep is None:
return stem, ext
new_stem = rewrite_episode_number(
stem,
int(new_ep),
padding=self.padding,
pattern=self.pattern,
)
return new_stem, ext
@dataclass
class PrefixSuffixRule(Rule):
prefix: str = ""