tunedrop/backend/downloader.py
2025-07-30 21:52:43 +03:00

50 lines
1.4 KiB
Python

import subprocess
import os
import glob
import requests
from config import settings
def download_song(query: str):
# ודא שהתיקייה קיימת
os.makedirs(settings.MUSIC_DIR, exist_ok=True)
output_template = os.path.join(settings.MUSIC_DIR, "%(title)s.%(ext)s")
before_files = set(glob.glob(os.path.join(settings.MUSIC_DIR, "**/*.mp3"), recursive=True))
command = [
"yt-dlp",
f"ytsearch1:{query}",
"--extract-audio",
"--audio-format", "mp3",
"-o", output_template,
"--no-playlist"
]
print("Running command:", " ".join(command)) # Debug
result = subprocess.run(command, capture_output=True, text=True)
after_files = set(glob.glob(os.path.join(settings.MUSIC_DIR, "**/*.mp3"), recursive=True))
new_files = list(after_files - before_files)
if result.returncode != 0:
raise Exception(f"❌ Download failed:\n{result.stderr}")
rescan_status = "skipped"
if settings.NAVIDROME_SCAN_URL:
try:
res = requests.get(settings.NAVIDROME_SCAN_URL, timeout=5)
res.raise_for_status()
rescan_status = "triggered"
except Exception as e:
rescan_status = f"failed: {e}"
return {
"status": "success",
"query": query,
"downloaded_files": new_files,
"yt_dlp_stdout": result.stdout,
"yt_dlp_stderr": result.stderr,
"rescan_status": rescan_status
}