Work both for single song and playlist
This commit is contained in:
parent
2cdc6c9866
commit
9aae6083a3
Binary file not shown.
@ -2,25 +2,29 @@ import subprocess
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from config import settings
|
from config import settings
|
||||||
|
|
||||||
|
def is_playlist(query: str) -> bool:
|
||||||
|
return "playlist" in query or "list=" in query
|
||||||
|
|
||||||
def download_song(query: str):
|
def download_song(query: str):
|
||||||
Path(settings.MUSIC_DIR).mkdir(parents=True, exist_ok=True)
|
Path(settings.MUSIC_DIR).mkdir(parents=True, exist_ok=True)
|
||||||
output_template = f"{settings.MUSIC_DIR}/%(title)s.%(ext)s"
|
output_template = f"{settings.MUSIC_DIR}/%(title)s.%(ext)s"
|
||||||
command = [
|
command = [
|
||||||
"yt-dlp",
|
"yt-dlp",
|
||||||
f"ytsearch1:{query}",
|
f"{query if query.startswith('http') else f'ytsearch1:{query}'}",
|
||||||
"--extract-audio",
|
"--extract-audio",
|
||||||
"--audio-format", "mp3",
|
"--audio-format", "mp3",
|
||||||
"--add-metadata",
|
"--add-metadata",
|
||||||
"--output", output_template,
|
"--output", output_template,
|
||||||
"--no-playlist",
|
|
||||||
"--verbose"
|
"--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))
|
print("Running command:", " ".join(command))
|
||||||
result = subprocess.run(command, capture_output=True, text=True)
|
result = subprocess.run(command, capture_output=True, text=True)
|
||||||
print("STDOUT:", result.stdout)
|
print("STDOUT:", result.stdout)
|
||||||
print("STDERR:", result.stderr)
|
print("STDERR:", result.stderr)
|
||||||
if result.returncode != 0:
|
if result.returncode != 0:
|
||||||
raise Exception(f"yt-dlp failed: {result.stderr}")
|
raise Exception(f"yt-dlp failed: {result.stderr}")
|
||||||
# Try to find the actual filename
|
return {"downloaded": "Check music folder for downloaded files"}
|
||||||
# You can parse result.stdout or list the directory for the latest file
|
|
||||||
return {"downloaded": "Check music folder for artist - title.mp3"}
|
|
||||||
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user