This commit is contained in:
2025-08-15 14:15:13 -04:00
parent 0cd4a71db2
commit 27fa1f78ed
2 changed files with 24 additions and 5 deletions

View File

@@ -35,6 +35,7 @@ class RIP(FastAPI):
self.task_queue = Queue(
"dls",
connection=self.redis_conn,
default_timeout=3600,
default_result_ttl=86400,
default_failure_ttl=86400,
)
@@ -123,7 +124,7 @@ class RIP(FastAPI):
job = self.task_queue.enqueue(
bulk_download,
args=(track_ids,),
timeout=3600,
job_timeout=3600,
failure_ttl=86400,
result_ttl=86400,
)

View File

@@ -4,6 +4,7 @@ import random
import os
import tarfile
import uuid
import re
import shutil
from pathlib import Path
from urllib.parse import urlparse, unquote
@@ -39,6 +40,23 @@ HEADERS = {
sr = SRUtil()
import re
def sanitize_filename(name: str) -> str:
"""
Remove or replace characters not allowed in filenames.
Also trims whitespace and collapses consecutive spaces.
"""
# Replace slashes/backslashes with a dash
name = name.replace("/", "-").replace("\\", "-")
# Remove illegal characters for most OSes
name = re.sub(r'[<>:"|?*\x00-\x1F]', "", name)
# Strip leading/trailing spaces and dots
name = name.strip().strip(".")
# Collapse multiple spaces into one
name = re.sub(r"\s+", " ", name)
return name or "Unknown"
def bulk_download(track_list: list):
"""
Full RQ-compatible bulk download job with:
@@ -103,9 +121,9 @@ def bulk_download(track_list: list):
track_id,
)
continue
artist = metadata.get("artist", "Unknown Artist")
album = metadata.get("album", "Unknown Album")
title = metadata.get("song", "Unknown Song")
artist = sanitize_filename(metadata.get("artist", "Unknown Artist"))
album = sanitize_filename(metadata.get("album", "Unknown Album"))
title = sanitize_filename(metadata.get("song", "Unknown Song"))
logging.critical("Got metadata: %s/%s/%s", artist, album, title)
@@ -138,7 +156,7 @@ def bulk_download(track_list: list):
per_track_meta.append(track_info)
if job:
job.meta["progress"] = int((i + 1) / total * 100)
job.meta["tracks"] = per_track_meta
job.meta["tracks"] = track_list
job.save_meta()
# Throttle between downloads