From 92c57928319432f668c19c66dfec23d724488362 Mon Sep 17 00:00:00 2001 From: Christoph Stahl Date: Wed, 1 Nov 2023 13:04:30 +0100 Subject: [PATCH] Updatable config, server side checking of waiting room --- src/App.vue | 96 +++++++++++++++++++------------- src/components/AlreadyQueued.vue | 5 +- src/components/Config.vue | 37 ++++++++++++ src/components/DesktopLayout.vue | 1 + src/components/Footer.vue | 5 +- src/components/MobileLayout.vue | 1 + src/components/QueueDesktop.vue | 3 +- src/components/QueueInner.vue | 6 +- src/components/QueueTab.vue | 3 +- 9 files changed, 110 insertions(+), 47 deletions(-) create mode 100644 src/components/Config.vue diff --git a/src/App.vue b/src/App.vue index 5bad1ac..b2f1400 100644 --- a/src/App.vue +++ b/src/App.vue @@ -10,6 +10,7 @@ import WelcomeReveal from './components/WelcomeReveal.vue' import GetUserName from './components/GetUserName.vue' import Footer from './components/Footer.vue' import AlreadyQueued from './components/AlreadyQueued.vue' +import Config from './components/Config.vue' const router = useRouter() @@ -31,7 +32,9 @@ const state = ref({ 'last_msg': "", 'join_msg': null, 'uid': null, - 'double_entry': {'artist': null, 'title': null, 'reason': null} + 'double_entry': {'artist': null, 'title': null, 'reason': null}, + 'waiting_room_policy': null, + 'config': {} }) onMounted(() => { @@ -66,6 +69,10 @@ function setCurrentName(name) { state.value.current_name = name } function updateName(evt) { evt.target.textContent = state.value.name;} function setServer(server) { state.value.server = server } function setSearchTerm(searchTerm) { state.value.search.searchTerm = searchTerm } +function update_config(config) { + state.socket.emit("update_config", {"config": config}) + close_config() +} function search() { var yt_checker = /^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/; @@ -77,6 +84,10 @@ function search() { } } +function show_config() { + state.socket.emit("show_config"); + } + function waitingRoomToQueue(uuid) { state.socket.emit("waiting-room-to-queue", {"uuid": uuid}) } @@ -91,45 +102,21 @@ function checked_append_with_name(entry, name) { $("#getusername").foundation("open"); } else { $("#getusername").foundation("close"); - - var splitUserName = name.toLowerCase() - .replace(".", " ") - .replace(","," ") - .replace(/[^a-zA-Z0-9\s\b]/, "") - .split(/\b/).filter(e => e.trim().length > 0 && !["der", "die", "das", "und", "alle"].includes(e)); - var uid_in_queue = false; - var name_in_queue = false; - for (const entry of state.value.queue) { - /* if(entry.uid == state.value.uid && !state.value.admin) { - state.value.double_entry = entry; - state.value.double_entry.reason = "uid"; - uid_in_queue = true; - break; - } */ - - var splitEntryUserName = entry.performer.toLowerCase() - .replace(".", " ") - .replace(","," ") - .replace(/[^a-zA-Z0-9\s\b]/, "") - .split(/\b/).filter(e => e.trim().length > 0 && !["der", "die", "das", "und", "alle"].includes(e)); - var difference = splitUserName.filter(x => splitEntryUserName.includes(x)); - if (difference.length > 0) { - state.value.double_entry = entry; - state.value.double_entry.reason = "name"; - name_in_queue = true; - break; - } - } - - if(name_in_queue || uid_in_queue) { - state.value.current_entry = entry; - $("#alreadyqueued").foundation("open"); - } else { - raw_append(entry.ident, name, entry.source, state.value.uid); - } + raw_append(entry.ident, name, entry.source, state.value.uid); } } +function append_anyway(ident, name, source, uid) { + $("#getusername").foundation("close"); + $("#alreadyqueued").foundation("close"); + + state.value.current_name = null; + state.value.current_entry = null; + state.value.double_entry = {'artist': null, 'title': null, 'reason': null}; + state.socket.emit("append-anyway", {"ident": ident, "performer": name, "source": source, "uid": uid }); + $("#queue-tab-title").click(); +} + function raw_append(ident, name, source, uid) { $("#getusername").foundation("close"); $("#alreadyqueued").foundation("close"); @@ -156,6 +143,9 @@ function close_name() { state.value.current_entry = null state.value.current_name = null } +function close_config() { + $("#config").foundation("close") +} function close_already_queued() { $("#alreadyqueued").foundation("close"); @@ -202,6 +192,18 @@ function registerSocketEvents() { state.value.queue=val.queue state.value.recent=val.recent state.value.waiting_room = val.waiting_room + state.value.waiting_room_policy = val.config.waiting_room_policy + }) + + state.socket.on("config", (response) => { + state.value.config=response + $("#config").foundation("open") + }) + + state.socket.on("update_config", (response) => { + console.log(response) + state.value.waiting_room_policy = response["waiting_room_policy"] + console.log(state) }) state.socket.on("msg", (response) => { @@ -209,6 +211,12 @@ function registerSocketEvents() { $("#msg").foundation("open") }) + state.socket.on("ask_for_waitingroom", (response) => { + state.value.double_entry = response.old_entry; + state.value.current_entry = response.current_entry; + $("#alreadyqueued").foundation("open"); + }) + state.socket.on("err", (response) => { console.log(response) switch(response.type) { @@ -217,6 +225,12 @@ function registerSocketEvents() { var date = new Date(response.end_time * 1000).toLocaleString(); state.value.last_msg = prefix + date; break; + case "JSON_MALFORMED": + state.value.last_msg = "Malformed JSON in config" + break; + case "NO_ADMIN": + state.value.last_msg = "Forbidden: Not in admin mode" + break; default: state.value.last_msg = "Unknown Error"; break; @@ -303,9 +317,10 @@ function joinRoom() { @close_name="close_name" />
@@ -317,10 +332,13 @@ function joinRoom() {