From 124e426b21121d1095d0e2705c59008b2e053c61 Mon Sep 17 00:00:00 2001 From: panzerotto Date: Sat, 2 Aug 2025 09:49:52 +0200 Subject: [PATCH 1/4] mod favicon --- frontend/static/favicon.ico | Bin 0 -> 15406 bytes frontend/static/favicon.svg | 1 - 2 files changed, 1 deletion(-) create mode 100644 frontend/static/favicon.ico delete mode 100644 frontend/static/favicon.svg diff --git a/frontend/static/favicon.ico b/frontend/static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..f5208bbaad196c23ce627d638f580f3b3766e042 GIT binary patch literal 15406 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 \ No newline at end of file From 396c7b0cea1037b33114acd64179b9ee23b74696 Mon Sep 17 00:00:00 2001 From: panzerotto Date: Sat, 2 Aug 2025 09:53:18 +0200 Subject: [PATCH 2/4] fix microsmarcio icon --- frontend/src/app.html | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/frontend/src/app.html b/frontend/src/app.html index 7af2f6d..344c77b 100644 --- a/frontend/src/app.html +++ b/frontend/src/app.html @@ -1,15 +1,13 @@ + + + + + %sveltekit.head% + - - - - - %sveltekit.head% - - - -
%sveltekit.body%
- - + +
%sveltekit.body%
+ From 2a8802a0b8386178380fa984b7976e2bee148b87 Mon Sep 17 00:00:00 2001 From: Leonardo Segala Date: Sat, 2 Aug 2025 09:53:24 +0200 Subject: [PATCH 3/4] Add spinner --- frontend/src/lib/components/SuggestionInput.svelte | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/frontend/src/lib/components/SuggestionInput.svelte b/frontend/src/lib/components/SuggestionInput.svelte index 9659e0d..8bbd2ff 100644 --- a/frontend/src/lib/components/SuggestionInput.svelte +++ b/frontend/src/lib/components/SuggestionInput.svelte @@ -1,11 +1,15 @@ @@ -20,7 +24,14 @@ sendSong() } }} + {disabled} /> + {#if disabled} + + + + {/if} + Date: Sat, 2 Aug 2025 10:06:31 +0200 Subject: [PATCH 4/4] add room scanner logic --- backend/src/app.py | 19 ++++--- .../src/lib/components/RoomComponent.svelte | 7 +-- frontend/src/lib/types.ts | 7 +-- frontend/src/lib/utils.ts | 19 ++++--- frontend/src/routes/+page.svelte | 49 ++++++------------- 5 files changed, 45 insertions(+), 56 deletions(-) diff --git a/backend/src/app.py b/backend/src/app.py index 0331aa6..436d5d7 100644 --- a/backend/src/app.py +++ b/backend/src/app.py @@ -1,18 +1,17 @@ import uuid from dataclasses import asdict + import dotenv +from connect import get_connection from flask import Flask, Response, jsonify, request from flask_cors import CORS from flask_socketio import SocketIO, join_room, leave_room - -from state import State -from connect import get_connection -from room import Room -from song import Song, init_db, get_song_by_title_artist, add_song_in_db, get_song_by_uuid -from song_fetch import query_search, yt_get_audio_url, yt_search_song +from gps import Coordinates, distance_between_coords from qrcode_gen import generate_qr -from gps import is_within_range, distance_between_coords, Coordinates - +from room import Room +from song import Song, add_song_in_db, get_song_by_title_artist, get_song_by_uuid, init_db +from song_fetch import query_search, yt_get_audio_url, yt_search_song +from state import State dotenv.load_dotenv() @@ -29,11 +28,11 @@ init_db(state.db) state.rooms[1000] = Room( id=1000, - coord=Coordinates(1, 5), + coord=Coordinates(46.6769043, 11.1851585), name="Test Room", pin=None, tags=set(), - range_size=100, + range_size=150, songs={}, history=[], playing=[], diff --git a/frontend/src/lib/components/RoomComponent.svelte b/frontend/src/lib/components/RoomComponent.svelte index e98e000..4e742db 100644 --- a/frontend/src/lib/components/RoomComponent.svelte +++ b/frontend/src/lib/components/RoomComponent.svelte @@ -3,8 +3,9 @@ let { room }: { room: Room } = $props() - + diff --git a/frontend/src/lib/types.ts b/frontend/src/lib/types.ts index 0c2e8f5..c0d4155 100644 --- a/frontend/src/lib/types.ts +++ b/frontend/src/lib/types.ts @@ -37,11 +37,12 @@ export const parseSuggestion = async function(sugg: any): Promise { } const RoomSchema = z.object({ - id: z.string(), + id: z.number(), name: z.string(), private: z.boolean(), - coords: z.tuple([z.number(), z.number()]), - range: z.number().int() + coords: z.object({ latitude: z.number(), longitude: z.number() }), + range: z.number().int(), + distance: z.number() }) export type Room = z.infer diff --git a/frontend/src/lib/utils.ts b/frontend/src/lib/utils.ts index 1b806c5..29fc5fc 100644 --- a/frontend/src/lib/utils.ts +++ b/frontend/src/lib/utils.ts @@ -1,16 +1,21 @@ +import { get_coords } from "./gps" import { parseSong, parseSuggestion, type FetchError, type Song, type Suggestion } from "./types" -export const joinRoom = async function (roomId: string): Promise<[FetchError | null, string]> { - let resp = await fetch("/api/join?room=" + roomId) +export const joinRoom = async function(roomId: string): Promise<[FetchError | null, string]> { + let { coords, error } = await get_coords() + if (error != null) return [{ code: 400, message: "Cannot join the room due to GPS error" }, ""] + if (coords == null) return [{ code: 400, message: "Cannot join the room due to GPS error" }, ""] - if (resp.status != 200) { + let res = await fetch(`/api/join?room=${roomId}&lat=${coords.latitude}&lon=${coords.longitude}`) + + if (res.status != 200) { return [{ code: 400, message: "Cannot join the room" }, ""] } return [null, "test"] } -export const getSuggestions = async function (roomId: string): Promise<[FetchError | null, Suggestion[]]> { +export const getSuggestions = async function(roomId: string): Promise<[FetchError | null, Suggestion[]]> { let resp = await fetch("/api/room/suggestions?room=" + roomId) if (resp.status != 200) { @@ -31,7 +36,7 @@ export const getSuggestions = async function (roomId: string): Promise<[FetchErr return [null, suggestions] } -export const getQueueSongs = async function (roomId: string): Promise<[FetchError | null, Song[], number]> { +export const getQueueSongs = async function(roomId: string): Promise<[FetchError | null, Song[], number]> { let resp = await fetch("/api/queue?room=" + roomId) if (resp.status != 200) { return [{ code: 400, message: "Failed to load queue songs" }, [], 0] @@ -49,7 +54,7 @@ export const getQueueSongs = async function (roomId: string): Promise<[FetchErro return [null, songs, playingId] } -export const triggerPlayNext = async function (roomId: string): Promise<[FetchError | null, Song[], number]> { +export const triggerPlayNext = async function(roomId: string): Promise<[FetchError | null, Song[], number]> { let resp = await fetch("/api/queue/next?room=" + roomId, { method: "POST" }) if (resp.status != 200) { @@ -66,7 +71,7 @@ export const triggerPlayNext = async function (roomId: string): Promise<[FetchEr return [null, songs, json["index"]] } -export const getStreamingUrl = async function (uuid: string) { +export const getStreamingUrl = async function(uuid: string) { let resp = await fetch("/api/song/audio?song=" + uuid) let json = await resp.json() diff --git a/frontend/src/routes/+page.svelte b/frontend/src/routes/+page.svelte index 319ce8d..c110c6a 100644 --- a/frontend/src/routes/+page.svelte +++ b/frontend/src/routes/+page.svelte @@ -1,9 +1,21 @@
@@ -21,37 +33,8 @@
- - - - - - - - - - - - + {#each rooms as room} + + {/each}
- - - - - - - - - - - - - - - - - - - -