Add room list & room creation endpoints
This commit is contained in:
parent
2df62ff714
commit
48e3241e8e
1 changed files with 47 additions and 15 deletions
|
@ -1,6 +1,5 @@
|
||||||
import dotenv
|
import dotenv
|
||||||
from flask import Flask, Response, jsonify, request
|
from flask import Flask, Response, jsonify, request
|
||||||
|
|
||||||
from flask_cors import CORS
|
from flask_cors import CORS
|
||||||
from flask_socketio import SocketIO, emit
|
from flask_socketio import SocketIO, emit
|
||||||
|
|
||||||
|
@ -18,19 +17,7 @@ socketio = SocketIO(app)
|
||||||
CORS(app)
|
CORS(app)
|
||||||
|
|
||||||
|
|
||||||
ROOMS: dict[int, Room] = {
|
ROOMS: dict[int, Room] = {} # { room_id: room, ... }
|
||||||
1234: Room(
|
|
||||||
1234,
|
|
||||||
(0.0, 1.0),
|
|
||||||
"Test Room",
|
|
||||||
None,
|
|
||||||
{"Rock", "Metal"},
|
|
||||||
{},
|
|
||||||
[],
|
|
||||||
[Song(mbid="test", title="<title placeholder>", artist="<artist placeholder>", tags=["Metal"], image_id="img-id", youtube_id="yt-id")],
|
|
||||||
playing_idx=1,
|
|
||||||
)
|
|
||||||
} # { room_id: room, ... }
|
|
||||||
|
|
||||||
|
|
||||||
def error(msg: str, status: int = 400) -> Response:
|
def error(msg: str, status: int = 400) -> Response:
|
||||||
|
@ -83,11 +70,56 @@ def queue_next():
|
||||||
# room.renew_queue()
|
# room.renew_queue()
|
||||||
emit("update_songs", {"songs": [1, 2, 3]}, broadcast=True, namespace="/")
|
emit("update_songs", {"songs": [1, 2, 3]}, broadcast=True, namespace="/")
|
||||||
|
|
||||||
return {"success": True, "ended": True, "index": room.playing_idx, "queue": []}
|
return {"success": True, "ended": True, "index": room.playing_idx, "queue": room.playing}
|
||||||
|
|
||||||
return {"success": True, "ended": False, "index": room.playing_idx}
|
return {"success": True, "ended": False, "index": room.playing_idx}
|
||||||
|
|
||||||
|
|
||||||
|
@app.post("/api/room/new")
|
||||||
|
def room_new():
|
||||||
|
if (room_name := request.args.get("name")) is None:
|
||||||
|
return error("Missing room name")
|
||||||
|
|
||||||
|
if (room_cords := request.args.get("coords")) is None:
|
||||||
|
return error("Missing room coords")
|
||||||
|
|
||||||
|
if room_pin := request.args.get("pin"):
|
||||||
|
room_pin = int(room_pin)
|
||||||
|
else:
|
||||||
|
room_pin = None
|
||||||
|
|
||||||
|
lat, lon = room_cords.split(",")
|
||||||
|
|
||||||
|
room = Room(
|
||||||
|
id=max(ROOMS or [0]) + 1, #
|
||||||
|
coord=(float(lat), float(lon)),
|
||||||
|
name=room_name,
|
||||||
|
pin=room_pin,
|
||||||
|
tags=set([tag for tag in request.args.get("tags", "").split(",") if tag]),
|
||||||
|
songs={},
|
||||||
|
history=[],
|
||||||
|
playing=[],
|
||||||
|
playing_idx=-1,
|
||||||
|
)
|
||||||
|
|
||||||
|
ROOMS[room.id] = room
|
||||||
|
|
||||||
|
return {"success": True, "room_id": room.id}
|
||||||
|
|
||||||
|
|
||||||
|
@app.get("/api/room")
|
||||||
|
def room():
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
"id": room.id,
|
||||||
|
"name": room.name,
|
||||||
|
"private": room.pin is not None,
|
||||||
|
"coords": room.coord,
|
||||||
|
}
|
||||||
|
for room in ROOMS.values()
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
init_db()
|
init_db()
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
socketio.run(app, debug=True)
|
socketio.run(app, debug=True)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue