41 lines
1.4 KiB
Python
41 lines
1.4 KiB
Python
import os
|
|
import platform
|
|
from fastapi import APIRouter, Depends
|
|
from pydantic import BaseModel
|
|
from typing import Optional
|
|
from app.core.vst_scanner import NativePluginScanner
|
|
from app.api.v1.auth import get_current_user
|
|
|
|
router = APIRouter()
|
|
|
|
# Thư mục mặc định theo OS (spec desktop VST 2026-08-08)
|
|
DEFAULT_PLUGIN_DIRS = {
|
|
"Linux": ["/opt/daw_engine/vst3", os.path.expanduser("~/.vst3")],
|
|
"Windows": [os.path.expandvars(r"%ProgramFiles%\Common Files\VST3")],
|
|
"Darwin": ["/Library/Audio/Plug-Ins/Components", os.path.expanduser("~/Library/Audio/Plug-Ins/Components")],
|
|
}
|
|
|
|
|
|
class PluginScanRequest(BaseModel):
|
|
custom_directories: Optional[list] = None
|
|
scan_formats: Optional[list] = None
|
|
force_rescan: Optional[bool] = False
|
|
|
|
|
|
@router.post("/plugins/scan")
|
|
async def scan_desktop_plugins(req: PluginScanRequest, current_user: dict = Depends(get_current_user)):
|
|
"""Quét VST3/AU từ thư mục custom — spec: POST /api/v1/desktop/plugins/scan."""
|
|
os_name = platform.system()
|
|
dirs = req.custom_directories or DEFAULT_PLUGIN_DIRS.get(os_name, ["/opt/daw_engine/vst3"])
|
|
if isinstance(dirs, str):
|
|
dirs = [dirs]
|
|
scanner = NativePluginScanner()
|
|
plugins = scanner.scan_directories(dirs)
|
|
return {
|
|
"status": "success",
|
|
"os": os_name,
|
|
"scanned_directories": dirs,
|
|
"total_found": len(plugins),
|
|
"plugins": plugins,
|
|
}
|