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:
@@ -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 = ""
|
||||
|
||||
Reference in New Issue
Block a user