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
|
@ -3,3 +3,5 @@ flask-cors
|
||||||
flask-socketio
|
flask-socketio
|
||||||
dotenv
|
dotenv
|
||||||
requests
|
requests
|
||||||
|
qrcode
|
||||||
|
Pillow
|
|
@ -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
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