mirror of
https://github.com/hanxi/xiaomusic.git
synced 2026-03-15 08:13:16 +08:00
feat(api): support downloadonemusic dirname under music_path (#751)
Co-authored-by: pc hu <>
This commit is contained in:
@@ -172,23 +172,29 @@ async def downloadonemusic(data: DownloadOneMusic, Verifcation=Depends(verificat
|
||||
Args:
|
||||
data.name: 文件名(可选)
|
||||
data.url: 下载链接(必填)
|
||||
data.dirname: 子目录名(可选),相对于下载目录
|
||||
data.dirname: 子目录名(可选),相对于 music 根目录
|
||||
"""
|
||||
try:
|
||||
download_proc = await download_one_music(
|
||||
config, data.url, data.name, data.dirname
|
||||
)
|
||||
|
||||
# 计算实际下载路径
|
||||
download_path = config.download_path
|
||||
download_root = config.download_path
|
||||
if data.dirname:
|
||||
download_path = os.path.join(config.download_path, data.dirname)
|
||||
download_root = safe_join_path(config.music_path, data.dirname)
|
||||
os.makedirs(download_root, exist_ok=True)
|
||||
|
||||
download_proc = await download_one_music(
|
||||
config,
|
||||
data.url,
|
||||
data.name,
|
||||
download_root=download_root,
|
||||
)
|
||||
|
||||
async def check_download_proc():
|
||||
# 等待子进程完成
|
||||
exit_code = await download_proc.wait()
|
||||
log.info(f"Download completed with exit code {exit_code}")
|
||||
chmoddir(download_path)
|
||||
try:
|
||||
chmoddir(download_root)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
asyncio.create_task(check_download_proc())
|
||||
return {"ret": "OK"}
|
||||
|
||||
@@ -191,7 +191,9 @@ async def download_playlist(config, url: str, dirname: str):
|
||||
return download_proc
|
||||
|
||||
|
||||
async def download_one_music(config, url: str, name: str = "", dirname: str = ""):
|
||||
async def download_one_music(
|
||||
config, url: str, name: str = "", download_root: str | None = None
|
||||
):
|
||||
"""
|
||||
下载单首歌曲
|
||||
|
||||
@@ -199,20 +201,16 @@ async def download_one_music(config, url: str, name: str = "", dirname: str = ""
|
||||
config: 配置对象
|
||||
url: 歌曲 URL
|
||||
name: 文件名(可选)
|
||||
dirname: 子目录名(可选),相对于 download_path
|
||||
download_root: 下载目录(可选),默认为 config.download_path
|
||||
|
||||
Returns:
|
||||
下载进程对象
|
||||
"""
|
||||
# 计算下载路径
|
||||
download_path = config.download_path
|
||||
if dirname:
|
||||
download_path = os.path.join(config.download_path, dirname)
|
||||
os.makedirs(download_path, exist_ok=True)
|
||||
|
||||
title = "%(title)s.%(ext)s"
|
||||
if name:
|
||||
title = f"{name}.%(ext)s"
|
||||
download_root = download_root or config.download_path
|
||||
|
||||
sbp_args = (
|
||||
"yt-dlp",
|
||||
"--no-playlist",
|
||||
@@ -222,7 +220,7 @@ async def download_one_music(config, url: str, name: str = "", dirname: str = ""
|
||||
"--audio-quality",
|
||||
"0",
|
||||
"--paths",
|
||||
download_path,
|
||||
download_root,
|
||||
"-o",
|
||||
title,
|
||||
"--ffmpeg-location",
|
||||
|
||||
Reference in New Issue
Block a user