This commit is contained in:
Simone Tesini 2025-08-02 00:49:07 +02:00
commit d9e7b8f0ff
3 changed files with 57 additions and 4 deletions

View file

@ -3,3 +3,5 @@ flask-cors
flask-socketio flask-socketio
dotenv dotenv
requests requests
qrcode
Pillow

View file

@ -7,9 +7,11 @@ from flask_socketio import SocketIO, emit
from .connect import get_connection from .connect import get_connection
from .room import Room from .room import Room
from .song import Song, add_song_in_db, get_song_by_title_artist, init_db from .song import Song, init_db, get_song_by_title_artist, add_song_in_db
from .song_fetch import download_song_mp3, lastfm_query_search from .song_fetch import lastfm_query_search, download_song_mp3
from .state import State from .qrcode_gen import generate_qr
from typing import Any
dotenv.load_dotenv() dotenv.load_dotenv()
@ -174,5 +176,22 @@ def add_song():
return {"artist": info.artist, "title": info.title, "tags": info.tags, "image_id": info.img_id} return {"artist": info.artist, "title": info.title, "tags": info.tags, "image_id": info.img_id}
@app.get("/api/room/qrcode")
def room_qrcode():
if (room_id := request.args.get("room")) is None:
return error("Missing room id")
if (pin := request.args.get("pin")) is not None:
pin = int(pin)
stream = generate_qr(
base_uri="https://chillbox.leoinvents.com",
room_id=int(room_id),
pin=pin,
)
return Response(stream, content_type="image/jpeg")
if __name__ == "__main__": if __name__ == "__main__":
socketio.run(app, debug=True) socketio.run(app, debug=True)

32
backend/src/qrcode_gen.py Normal file
View file

@ -0,0 +1,32 @@
import qrcode
import urllib.parse
from io import BytesIO
def create_login_url(base_uri: str, room_id: int, pin: int | None) -> str:
parsed = urllib.parse.urlparse(base_uri)
params = {
"room": room_id,
}
if pin is not None:
params["pin"] = pin
parsed = parsed._replace(path="join", query=urllib.parse.urlencode(params))
return urllib.parse.urlunparse(parsed)
def generate_qr(base_uri: str, room_id: int, pin: int | None) -> BytesIO:
url = create_login_url(base_uri, room_id, pin)
qr = qrcode.make(url)
out = BytesIO()
qr.save(out, format="jpeg")
out.seek(0)
return out