From dbc27aa87454c8b6526ae499362e2ec728b8380a Mon Sep 17 00:00:00 2001 From: rainbow napkin Date: Wed, 20 May 2026 23:18:18 -0400 Subject: [PATCH 1/2] Updated package.json --- package.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index c66dc18..54af4f0 100644 --- a/package.json +++ b/package.json @@ -5,10 +5,10 @@ "license": "AGPL-3.0-only", "dependencies": { "@braintree/sanitize-url": "^7.1.1", - "altcha": "^1.0.7", + "altcha": "^2.3.0", "altcha-lib": "^1.2.0", "argon2": "^0.44.0", - "bcrypt": "^5.1.1", + "bcrypt": "^6.0.0", "bootstrap-icons": "^1.11.3", "connect-mongo": "^5.1.0", "cookie-parser": "^1.4.7", @@ -20,8 +20,8 @@ "hls.js": "^1.6.2", "mongoose": "^8.4.3", "node-cron": "^3.0.3", - "nodemailer": "^7.0.9", - "socket.io": "^4.8.1", + "nodemailer": "^8.0.7", + "socket.io": "^4.2.0", "youtube-dl-exec": "^3.0.20" }, "scripts": { From 13e2b9fe11c2ef46865422eb76f3cfe91a0df3b9 Mon Sep 17 00:00:00 2001 From: rainbow napkin Date: Wed, 20 May 2026 09:50:00 -0400 Subject: [PATCH 2/2] Fixed multi-day livestream rendering. --- .../channel/panels/queuePanel/queuePanel.js | 32 ++++++++++++++++--- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/www/js/channel/panels/queuePanel/queuePanel.js b/www/js/channel/panels/queuePanel/queuePanel.js index 7eefc46..2bfd1c7 100644 --- a/www/js/channel/panels/queuePanel/queuePanel.js +++ b/www/js/channel/panels/queuePanel/queuePanel.js @@ -1233,6 +1233,11 @@ class queuePanel extends panelObj{ //Convert start epoch to JS date object const started = new Date(nowPlaying.startTime); + //If the date the scheduler is set to isn't within the livestream + if(!utils.isSameDate(started, this.day) && !utils.dateWithinRange(started, new Date(), this.day)){ + return; + } + //If this started today if(utils.isSameDate(this.day, started)){ //Set entryDiv top-border location based on start time @@ -1246,15 +1251,29 @@ class queuePanel extends panelObj{ entryDiv.style.top = `${this.offsetByDate(dawn)}px`; //Apply rest of the styling rules for items that started yestarday - entryDiv.classList.add('started-yesterday') + entryDiv.classList.add('started-yesterday'); } //Create entry title const entryTitle = document.createElement('p'); entryTitle.textContent = utils.unescapeEntities(nowPlaying.title); - //Set entry div bottom-border location based on current time, round to match time marker - entryDiv.style.bottom = `${Math.round(this.offsetByDate(date, true))}px` + + //If we're looking at today + if(utils.isSameDate(this.day, new Date())){ + //Set entry div bottom-border location based on current time, round to match time marker + entryDiv.style.bottom = `${Math.round(this.offsetByDate(date, true))}px`; + }else{ + //Get midnight + const dusk = new Date(); + dusk.setHours(23,59,59,999); + + //Set stream to continue to run into the next morning + entryDiv.style.bottom = `${Math.round(this.offsetByDate(dusk, true))}px`; + + //Apply rest of the styling rules for items that end after today + entryDiv.classList.add('ends-tomorrow'); + } //Assembly entryDiv entryDiv.appendChild(entryTitle); @@ -1285,8 +1304,11 @@ class queuePanel extends panelObj{ //Append entry div to queue container this.queueContainer.appendChild(entryDiv); }else{ - //Update existing entry, round offset to match time marker - staleEntry.style.bottom = `${Math.round(this.offsetByDate(date, true))}px` + //If we're looking at today + if(utils.isSameDate(this.day, new Date())){ + //Update existing entry, round offset to match time marker + staleEntry.style.bottom = `${Math.round(this.offsetByDate(date, true))}px` + } } //Keep tooltip date seperate so it re-calculates live duration properly