From 35d2dc089317fe9d45fa3feabc4e349ab4ad0dcc Mon Sep 17 00:00:00 2001 From: Shawn Date: Fri, 12 Jun 2026 14:24:09 -0400 Subject: [PATCH] R4: Save Tone3000 downloads with readable filenames instead of internal IDs --- src/system/tonedownload.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/system/tonedownload.py b/src/system/tonedownload.py index af5b75c..51c866c 100644 --- a/src/system/tonedownload.py +++ b/src/system/tonedownload.py @@ -526,9 +526,13 @@ class Tone3000Client: dest_dir = self._models_dir dest_dir.mkdir(parents=True, exist_ok=True) - filename = model.filename - if not filename.endswith(".nam"): - filename += ".nam" + # Use readable name, fall back to Tone3000 filename + display_name = (model.name or model.filename or "model").strip() + # Sanitize: lowercase, replace spaces/special chars, keep .nam + safe_name = re.sub(r"[^\w\-]+", "_", display_name).strip("_").lower() + if not safe_name: + safe_name = "model" + filename = safe_name + ".nam" dest_path = dest_dir / filename return await self._download_file(model.download_url, dest_path, progress_callback) @@ -542,9 +546,12 @@ class Tone3000Client: dest_dir = self._irs_dir dest_dir.mkdir(parents=True, exist_ok=True) - filename = ir.filename - if not filename.endswith(".wav"): - filename += ".wav" + # Use readable name, fall back to Tone3000 filename + display_name = (ir.name or ir.filename or "ir").strip() + safe_name = re.sub(r"[^\w\-]+", "_", display_name).strip("_").lower()[:64] + if not safe_name: + safe_name = "ir" + filename = safe_name + ".wav" dest_path = dest_dir / filename return await self._download_file(ir.download_url, dest_path, progress_callback)