Fix disc numbering consistency and false tracklist matches

executor: disc=1 now generates '1-01' prefix (same as disc=2 → '2-01'),
  so multi-disc albums have consistent D-TT scheme throughout.
  Single-disc tracks without disc tag stay as plain 'TT'.

hint_extractor: tracklist pattern 2 now requires '.' ')' or ':' as separator
  (not bare whitespace) — prevents false-positive matches like
  '2 x CD, Compilation, Remastered' being parsed as track 2.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Dieter Schlüter 2026-04-29 02:50:20 +02:00
commit 28f716f8f2
2 changed files with 7 additions and 3 deletions

View file

@ -72,7 +72,9 @@ def _proposed_filename(
Fehlende Teile werden weggelassen. Fehlende Teile werden weggelassen.
""" """
tn = f"{proposal.track_number:02d}" if proposal.track_number else "00" tn = f"{proposal.track_number:02d}" if proposal.track_number else "00"
disc_prefix = f"{proposal.disc_number}-" if proposal.disc_number and proposal.disc_number > 1 else "" # Wenn disc_number gesetzt (auch disc=1): immer "D-TT" — konsistent über alle CDs.
# disc=None (Einzel-CD ohne Tag): nur "TT".
disc_prefix = f"{proposal.disc_number}-" if proposal.disc_number else ""
prefix = f"{disc_prefix}{tn}" prefix = f"{disc_prefix}{tn}"
track_artist = _safe_name(proposal.artist or "Unknown") track_artist = _safe_name(proposal.artist or "Unknown")

View file

@ -41,8 +41,10 @@ _DIR_PATTERNS = [
# Tracklist line patterns # Tracklist line patterns
_TRACKLIST_PATTERNS = [ _TRACKLIST_PATTERNS = [
re.compile(r"^(?P<disc>\d{1,2})[- _](?P<track>\d{1,3})\s+(?P<title>.+?)(?:\s+\d+:\d{2})?$"), re.compile(r"^(?P<disc>\d{1,2})[- _](?P<track>\d{1,3})\s+(?P<title>.+?)(?:\s+\d+:\d{2})?$"),
re.compile(r"^(?P<track>\d{1,3})[.):\s]+(?P<title>.+?)(?:\s+\d+:\d{2})?$"), # Separator muss . ) oder : sein — reines Leerzeichen reicht nicht
re.compile(r"^(?P<track>[A-Z]\d{1,2})[.):\s]+(?P<title>.+?)(?:\s+\d+:\d{2})?$"), # (verhindert False-Positives wie "2 x CD, Compilation, Remastered")
re.compile(r"^(?P<track>\d{1,3})[.):]\s*(?P<title>.+?)(?:\s+\d+:\d{2})?$"),
re.compile(r"^(?P<track>[A-Z]\d{1,2})[.):]\s*(?P<title>.+?)(?:\s+\d+:\d{2})?$"),
] ]
_DISC_SECTION_RE = re.compile(r"(?i)(?:cd|disc|disk|side)[_ \-]*(\d{1,2})") _DISC_SECTION_RE = re.compile(r"(?i)(?:cd|disc|disk|side)[_ \-]*(\d{1,2})")