feat: split frontend into separate folder

This commit is contained in:
Radu C. Martin 2025-04-15 18:36:26 +02:00
parent 4bd6ad85e3
commit d265b92f1d
3 changed files with 79 additions and 80 deletions

33
main.py
View file

@ -1,7 +1,7 @@
import asyncio
from fastapi import FastAPI, WebSocket, WebSocketDisconnect
from fastapi.responses import HTMLResponse
from fastapi.staticfiles import StaticFiles
from models import MusicPlayer, PlayerState, WSConnectionType
from services import ConnectionManager, DownloadService
@ -12,17 +12,16 @@ tags_metadata = [
{"name": "experimental"},
{"name": "queue"},
]
app = FastAPI(openapi_tags=tags_metadata)
api_app = FastAPI(openapi_tags=tags_metadata, title="Dashdio API")
player = MusicPlayer()
dl_service = DownloadService()
ws_manager = ConnectionManager()
app = FastAPI(title="Dashdio App")
# Interface
@app.get("/", response_class=HTMLResponse)
async def root():
with open("index.html") as f:
return f.read()
app.mount("/api", api_app)
app.mount("/", StaticFiles(directory="ui", html=True), name="ui")
@app.on_event("startup")
@ -46,7 +45,7 @@ async def queue_broadcast_loop():
# Status updates
@app.websocket("/player")
@api_app.websocket("/player")
async def websocket_player(websocket: WebSocket):
await ws_manager.connect(websocket, WSConnectionType.state)
try:
@ -58,7 +57,7 @@ async def websocket_player(websocket: WebSocket):
# Queue updates
@app.websocket("/queue")
@api_app.websocket("/queue")
async def websocket_queue(websocket: WebSocket):
await ws_manager.connect(websocket, WSConnectionType.queue)
try:
@ -69,48 +68,48 @@ async def websocket_queue(websocket: WebSocket):
ws_manager.disconnect(websocket)
@app.get("/queue", tags=["queue"])
@api_app.get("/queue", tags=["queue"])
def get_queue():
return player.get_queue()
@app.post("/queue", tags=["queue"])
@api_app.post("/queue", tags=["queue"])
async def post_to_queue(url: str):
track = await dl_service.download(url)
await player.add_to_queue(track)
@app.delete("/queue/{track_id}", tags=["queue"])
@api_app.delete("/queue/{track_id}", tags=["queue"])
def delete_from_queue(track_id: str):
player.remove_from_queue_by_id(track_id)
@app.post("/player/play", tags=["player"])
@api_app.post("/player/play", tags=["player"])
async def player_play():
await player.play()
@app.post("/player/stop", tags=["player"])
@api_app.post("/player/stop", tags=["player"])
async def player_stop():
await player.stop()
@app.post("/player/skip", tags=["player"])
@api_app.post("/player/skip", tags=["player"])
async def player_skip():
await player.next()
# Player
@app.put("/player/volume", tags=["player"])
@api_app.put("/player/volume", tags=["player"])
async def set_volume(volume: float):
await player.set_volume(volume)
@app.get("/player/volume", tags=["player"])
@api_app.get("/player/volume", tags=["player"])
def get_volume():
return {"volume": player.get_volume()}
@app.get("/player", tags=["player"])
@api_app.get("/player", tags=["player"])
def get_player_state() -> PlayerState:
return player.get_state()