From 2c1928822bebe0b0a20f44adecf84c541dbdca7c Mon Sep 17 00:00:00 2001 From: Mat12143 Date: Sat, 2 Aug 2025 09:19:39 +0200 Subject: [PATCH] feat: implemented gps location check --- frontend/src/lib/components/QueueSlider.svelte | 10 +++++----- .../src/lib/components/SuggestionInput.svelte | 18 ++++++++++++++---- frontend/src/lib/types.ts | 12 ++++++------ frontend/src/lib/utils.ts | 4 ++-- frontend/src/routes/admin/[id]/+page.svelte | 11 +++++------ frontend/src/routes/room/[id]/+page.svelte | 12 ++++++++++-- 6 files changed, 42 insertions(+), 25 deletions(-) diff --git a/frontend/src/lib/components/QueueSlider.svelte b/frontend/src/lib/components/QueueSlider.svelte index 94430f0..d20003f 100644 --- a/frontend/src/lib/components/QueueSlider.svelte +++ b/frontend/src/lib/components/QueueSlider.svelte @@ -8,6 +8,10 @@ queueSongs[playingIndex], playingIndex == queueSongs.length - 1 ? createEmptySong() : queueSongs[playingIndex + 1], ]) + + $effect(() => { + console.log(displaySongs) + })
@@ -28,11 +32,7 @@ {/if}
{:else} -
- {#if i === 1} -

No song in queue

- {/if} -
+
{/if} {/each} diff --git a/frontend/src/lib/components/SuggestionInput.svelte b/frontend/src/lib/components/SuggestionInput.svelte index 09982fd..9659e0d 100644 --- a/frontend/src/lib/components/SuggestionInput.svelte +++ b/frontend/src/lib/components/SuggestionInput.svelte @@ -4,15 +4,25 @@ let input = $state("") async function sendSong() { - let resp = await fetch(`/api/addsong?room=${roomId}&query=${input}`, { method: "POST" }) + await fetch(`/api/addsong?room=${roomId}&query=${input}`, { method: "POST" }) input = "" } -
- +
+ { + if (e.key == "Enter") { + sendSong() + } + }} + /> diff --git a/frontend/src/lib/types.ts b/frontend/src/lib/types.ts index 0c2e8f5..db04654 100644 --- a/frontend/src/lib/types.ts +++ b/frontend/src/lib/types.ts @@ -10,19 +10,19 @@ const SongSchema = z.object({ }) export type Song = z.infer -export const parseSong = async function(song: any): Promise { +export const parseSong = async function (song: any): Promise { let resp = await SongSchema.parseAsync(song) return resp } -export const createEmptySong = function(): Song { +export const createEmptySong = function (): Song { return { uuid: "-1", title: "", artist: "", tags: [""], image_id: "", - youtube_id: 0, + youtube_id: "", } } @@ -31,7 +31,7 @@ const SuggestionSchema = SongSchema.extend({ }) export type Suggestion = z.infer -export const parseSuggestion = async function(sugg: any): Promise { +export const parseSuggestion = async function (sugg: any): Promise { let resp = await SuggestionSchema.parseAsync(sugg) return resp } @@ -41,11 +41,11 @@ const RoomSchema = z.object({ name: z.string(), private: z.boolean(), coords: z.tuple([z.number(), z.number()]), - range: z.number().int() + range: z.number().int(), }) export type Room = z.infer -export const parseRoom = async function(room: any): Promise { +export const parseRoom = async function (room: any): Promise { let resp = await RoomSchema.parseAsync(room) return resp } diff --git a/frontend/src/lib/utils.ts b/frontend/src/lib/utils.ts index 1b806c5..580b638 100644 --- a/frontend/src/lib/utils.ts +++ b/frontend/src/lib/utils.ts @@ -1,7 +1,7 @@ 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, lat: number, lon: number): Promise<[FetchError | null, string]> { + let resp = await fetch(`/api/join?room=${roomId}&lat=${lat}&lon=${lon}`) if (resp.status != 200) { return [{ code: 400, message: "Cannot join the room" }, ""] diff --git a/frontend/src/routes/admin/[id]/+page.svelte b/frontend/src/routes/admin/[id]/+page.svelte index e017cc5..c579bed 100644 --- a/frontend/src/routes/admin/[id]/+page.svelte +++ b/frontend/src/routes/admin/[id]/+page.svelte @@ -19,7 +19,7 @@ let url = await getStreamingUrl(currentPlaying.uuid) if (audioController) { audioController.src = url - audioController.play() + await audioController.play() } } @@ -29,11 +29,10 @@ queueSongs = songs playingIndex = index + }) - if (audioController) { - audioController.src = await getStreamingUrl(currentPlaying.uuid) - audioController.play() - } + $effect(() => { + playOnEnd() }) async function playNext() { @@ -53,6 +52,6 @@
- +
{/if} diff --git a/frontend/src/routes/room/[id]/+page.svelte b/frontend/src/routes/room/[id]/+page.svelte index 6237b13..95acdf5 100644 --- a/frontend/src/routes/room/[id]/+page.svelte +++ b/frontend/src/routes/room/[id]/+page.svelte @@ -8,6 +8,8 @@ import { getQueueSongs, getSuggestions, joinRoom } from "$lib/utils.js" import type { FetchError } from "$lib/types.js" import { io, Socket } from "socket.io-client" + import { get_coords } from "$lib/gps.js" + import type { Coordinates } from "$lib/gps.js" let { data } = $props() @@ -23,8 +25,14 @@ onMount(async () => { // Join the room + let { coords, error } = await get_coords() + if (error || coords == null) { + // Default to Lido + coords = { latitude: 46.6769043, longitude: 11.1851585 } + } + let sugg, queue, index - ;[returnError] = await joinRoom(data.roomId) + ;[returnError] = await joinRoom(data.roomId, coords.latitude, coords.longitude) if (returnError) { return } @@ -69,7 +77,7 @@ {#if returnError} {:else} -
+