feat: split frontend into separate folder
This commit is contained in:
parent
4bd6ad85e3
commit
d265b92f1d
3 changed files with 79 additions and 80 deletions
33
main.py
33
main.py
|
@ -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()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue