Fix dead file cleaner false positives from transfer path resolution failure

Use config_manager for transfer path (same source as playback) instead of
separate DB read that silently falls back to ./Transfer under contention.
Abort scan if transfer folder doesn't exist to prevent mass false findings.
This commit is contained in:
Broque Thomas 2026-03-17 09:51:31 -07:00
parent cc62541a65
commit 0a5a874c08
2 changed files with 18 additions and 2 deletions

View file

@ -56,6 +56,19 @@ class DeadFileCleanerJob(RepairJob):
def scan(self, context: JobContext) -> JobResult:
result = JobResult()
# Safety: abort if transfer folder doesn't exist — prevents mass false positives
if not context.transfer_folder or not os.path.isdir(context.transfer_folder):
logger.error("Transfer folder not found: %s — aborting dead file scan to avoid false positives",
context.transfer_folder)
result.errors += 1
if context.report_progress:
context.report_progress(
phase='Aborted — transfer folder not found',
log_line=f'Transfer folder does not exist: {context.transfer_folder}',
log_type='error'
)
return result
# Fetch all tracks with file paths, joining to get artist/album names
tracks = []
conn = None

View file

@ -500,8 +500,11 @@ class RepairWorker:
self._current_job_name = job.display_name
self._current_progress = {'scanned': 0, 'total': 0, 'percent': 0}
# Re-read transfer path
raw = self._get_transfer_path_from_db()
# Re-read transfer path — prefer config_manager (same source as web_server)
if self._config_manager:
raw = self._config_manager.get('soulseek.transfer_path', './Transfer')
else:
raw = self._get_transfer_path_from_db()
self.transfer_folder = self._resolve_path(raw)
# Notify rich progress system