From b8006d93c33a531107f56c5131e65713afa8aa47 Mon Sep 17 00:00:00 2001 From: Broque Thomas <26755000+Nezreka@users.noreply.github.com> Date: Wed, 1 Apr 2026 15:24:03 -0700 Subject: [PATCH] =?UTF-8?q?Refine=20track=20number=20filename=20extraction?= =?UTF-8?q?=20=E2=80=94=20separator=20required?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit _extract_track_number_from_filename now requires a separator after digits (dash, dot, bracket) to prevent parsing artist names like "50 Cent" as track number 50. Also handles disc-track format "1-03". This is a last-resort fallback only — standard downloads get track numbers from Spotify/iTunes/Deezer metadata. Only affects files with no metadata where the filename starts with digits. --- web_server.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/web_server.py b/web_server.py index f5b8e697..2be2dbdc 100644 --- a/web_server.py +++ b/web_server.py @@ -14706,17 +14706,22 @@ def _clean_track_title(track_title: str, artist_name: str) -> str: def _extract_track_number_from_filename(filename: str, title: str = None) -> int: """Extract track number from filename, returns 1 if not found. - Only matches numbers followed by a separator (dash, dot, space-dash) to avoid - picking up numbers that are part of artist/track names (e.g. '50 Cent').""" + Requires a separator after digits to avoid matching artist names like '50 Cent'.""" import re import os - basename = os.path.splitext(os.path.basename(filename))[0] - # Match patterns like: "01 - Song", "01. Song", "01-Song", "1 Song" - match = re.match(r'^(\d{1,3})\s*[\-\.)\]]\s*', basename.strip()) + basename = os.path.splitext(os.path.basename(filename))[0].strip() + # Match: "01 - Song", "01. Song", "01-Song", "1.Song", "(01) Song", "[01] Song" + match = re.match(r'^\(?(\d{1,3})\)?\s*[\-\.)\]]\s*', basename) if match: num = int(match.group(1)) if 1 <= num <= 999: return num + # Match: "1-03 Song" (disc-track format) + match = re.match(r'^\d[\-\.](\d{1,2})\s*[\-\.]\s*', basename) + if match: + num = int(match.group(1)) + if 1 <= num <= 99: + return num return 1 def _search_track_in_album_context(original_search: dict, artist: dict) -> dict: