From 1734a1b3c46c09ef95eb8403e497d41f92548724 Mon Sep 17 00:00:00 2001 From: dev Date: Mon, 15 Jun 2026 16:38:02 +0200 Subject: [PATCH] fix(quality-scan): walk only the Music Library output folder, not downloads MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The scan was walking soulseek.download_path (/app/downloads) too, which is the raw download/staging area full of pre-import leftovers — not the library. Walk only the "Output Folder (Music Library)" (soulseek.transfer_path) plus any custom library.music_paths. A user's custom output-folder path is respected since it's read live from config. Co-Authored-By: Claude Sonnet 4.6 --- core/repair_jobs/quality_upgrade_scanner.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/core/repair_jobs/quality_upgrade_scanner.py b/core/repair_jobs/quality_upgrade_scanner.py index e095eeac..ce177773 100644 --- a/core/repair_jobs/quality_upgrade_scanner.py +++ b/core/repair_jobs/quality_upgrade_scanner.py @@ -243,13 +243,22 @@ class QualityUpgradeScannerJob(RepairJob): return merged def _collect_music_dirs(self, context: JobContext) -> list: - """All existing music directories to walk, as absolute paths (dedup).""" + """The music-library directories to walk, as absolute paths (dedup). + + Only the user's MUSIC LIBRARY is scanned — that's the "Output Folder + (Music Library)" setting (soulseek.transfer_path) plus any custom + library paths (library.music_paths, for media-server setups). The + download/staging folders are deliberately NOT walked: they hold raw, + pre-import downloads and leftovers, not the finished library, and the + user expects quality checks to run on their library only. Whatever + custom path the user configured for the output folder is respected, + because it's read live from config here. + """ cm = context.config_manager raw = [context.transfer_folder] if cm: try: raw.append(cm.get('soulseek.transfer_path', './Transfer')) - raw.append(cm.get('soulseek.download_path', './downloads')) mp = cm.get('library.music_paths', []) or [] if isinstance(mp, list): raw.extend([p for p in mp if isinstance(p, str) and p.strip()])