Work both for single song and playlist

This commit is contained in:
dvirlabs 2025-08-03 00:41:30 +00:00
parent 2cdc6c9866
commit 9aae6083a3
3 changed files with 9 additions and 5 deletions

View File

@ -2,25 +2,29 @@ import subprocess
from pathlib import Path
from config import settings
def is_playlist(query: str) -> bool:
return "playlist" in query or "list=" in query
def download_song(query: str):
Path(settings.MUSIC_DIR).mkdir(parents=True, exist_ok=True)
output_template = f"{settings.MUSIC_DIR}/%(title)s.%(ext)s"
command = [
"yt-dlp",
f"ytsearch1:{query}",
f"{query if query.startswith('http') else f'ytsearch1:{query}'}",
"--extract-audio",
"--audio-format", "mp3",
"--add-metadata",
"--output", output_template,
"--no-playlist",
"--verbose"
]
# Only add --no-playlist for search queries
if not is_playlist(query) and not query.startswith("http"):
command.append("--no-playlist")
print("Running command:", " ".join(command))
result = subprocess.run(command, capture_output=True, text=True)
print("STDOUT:", result.stdout)
print("STDERR:", result.stderr)
if result.returncode != 0:
raise Exception(f"yt-dlp failed: {result.stderr}")
# Try to find the actual filename
# You can parse result.stdout or list the directory for the latest file
return {"downloaded": "Check music folder for artist - title.mp3"}
return {"downloaded": "Check music folder for downloaded files"}