"""Entry point cho daw_engine.exe (PyInstaller — spec desktop 2026-08-08). Chạy FastAPI backend trên 127.0.0.1:8000 (Dual-Process Desktop Architecture). KHÔNG tự mở browser — Tauri shell (window url=localhost:8000) đảm nhiệm. SINGLE-INSTANCE: nếu port 8000 đã có server → EXIT ngay (bug 09:55 — mỗi lần mở app spawn thêm daw_engine → nhiều instance + port chiếm → màn đen).""" import os import socket import sys os.environ.setdefault("SFDATA_DIR", os.path.join(os.path.expanduser("~"), "SonicForgeDAW")) import uvicorn # noqa: E402 PORT = 8000 def _port_in_use(port: int) -> bool: try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: s.bind(("127.0.0.1", port)) return False except OSError: return True finally: s.close() except Exception: return False if __name__ == "__main__": if _port_in_use(PORT): # Server đang chạy (instance khác — window sẽ dùng nó). KHÔNG spawn thêm. sys.exit(0) uvicorn.run("app.main:app", host="127.0.0.1", port=PORT, log_level="warning")