diff --git a/main.py b/main.py index c54ef6d..1909f55 100644 --- a/main.py +++ b/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() diff --git a/ui/index.html b/ui/index.html new file mode 100644 index 0000000..140d02e --- /dev/null +++ b/ui/index.html @@ -0,0 +1,56 @@ + + + + + Music Player + + + +
+

🎵 Dashdio

+
+ Artist: -
+ Title: -
+ Status: -
+
+ +
+ 0:00 / 0:00 +
+
+
+ +
+
+ + + + +
+ +

📃 Queue

+ + + + + + + + + + + + + + + +
#ArtistTitleDurationActions
+
+ + + + diff --git a/index.html b/ui/script.js similarity index 52% rename from index.html rename to ui/script.js index fe5ade4..a5521fc 100644 --- a/index.html +++ b/ui/script.js @@ -1,56 +1,4 @@ - - - - - Music Player - - - -
-

🎵 Dashdio

-
- Artist: -
- Title: -
- Status: -
-
- -
- 0:00 / 0:00 -
-
-
-
-
- - - - -
- -

📃 Queue

- - - - - - - - - - - - - - - -
#ArtistTitleDurationActions
-
- - - -