Merge branch 'main' of https://repos.hackathon.bz.it/2025-summer/team-1
This commit is contained in:
commit
d9e7b8f0ff
3 changed files with 57 additions and 4 deletions
|
@ -2,4 +2,6 @@ Flask==3.1.0
|
|||
flask-cors
|
||||
flask-socketio
|
||||
dotenv
|
||||
requests
|
||||
requests
|
||||
qrcode
|
||||
Pillow
|
|
@ -7,9 +7,11 @@ from flask_socketio import SocketIO, emit
|
|||
|
||||
from .connect import get_connection
|
||||
from .room import Room
|
||||
from .song import Song, add_song_in_db, get_song_by_title_artist, init_db
|
||||
from .song_fetch import download_song_mp3, lastfm_query_search
|
||||
from .state import State
|
||||
from .song import Song, init_db, get_song_by_title_artist, add_song_in_db
|
||||
from .song_fetch import lastfm_query_search, download_song_mp3
|
||||
from .qrcode_gen import generate_qr
|
||||
|
||||
from typing import Any
|
||||
|
||||
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}
|
||||
|
||||
|
||||
@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__":
|
||||
socketio.run(app, debug=True)
|
||||
|
|
32
backend/src/qrcode_gen.py
Normal file
32
backend/src/qrcode_gen.py
Normal 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
|
Loading…
Add table
Add a link
Reference in a new issue