Hopefully make chalkboard announc when content has changed but not in a spammy way.

This commit is contained in:
Storm Dragon
2026-05-27 19:21:50 -04:00
parent 7cfbcda152
commit 8e265edbbd
2 changed files with 62 additions and 1 deletions
@@ -2,7 +2,7 @@
# shellcheck shell=bash disable=SC2034,SC2154 # shellcheck shell=bash disable=SC2034,SC2154
pkgname=skald-git pkgname=skald-git
pkgver=0.0.0.r1536.ga35ae10 pkgver=0.0.0.r1537.g7cfbcda
pkgrel=1 pkgrel=1
pkgdesc='Audio-only hall-based conferencing server' pkgdesc='Audio-only hall-based conferencing server'
arch=('x86_64' 'aarch64') arch=('x86_64' 'aarch64')
+61
View File
@@ -2614,6 +2614,17 @@ function announceChat(text) {
let chalkboardRevision = 0; let chalkboardRevision = 0;
let chalkboardSendTimer = null; let chalkboardSendTimer = null;
let applyingChalkboardUpdate = false; let applyingChalkboardUpdate = false;
let chalkboardAnnouncementTimer = null;
let chalkboardHasPendingAnnouncement = false;
let chalkboardPendingHasText = false;
let chalkboardLocalTextPending = null;
function clearChalkboardAnnouncementTimer() {
if(chalkboardAnnouncementTimer) {
clearTimeout(chalkboardAnnouncementTimer);
chalkboardAnnouncementTimer = null;
}
}
function canEditChalkboard() { function canEditChalkboard() {
if(!serverConnection || !serverConnection.permissions) if(!serverConnection || !serverConnection.permissions)
@@ -2650,6 +2661,10 @@ function updateChalkboardCopyButton() {
function resetChalkboard() { function resetChalkboard() {
chalkboardRevision = 0; chalkboardRevision = 0;
chalkboardHasPendingAnnouncement = false;
chalkboardPendingHasText = false;
chalkboardLocalTextPending = null;
clearChalkboardAnnouncementTimer();
if(chalkboardSendTimer) { if(chalkboardSendTimer) {
clearTimeout(chalkboardSendTimer); clearTimeout(chalkboardSendTimer);
chalkboardSendTimer = null; chalkboardSendTimer = null;
@@ -2682,6 +2697,37 @@ async function copyChalkboardToClipboard() {
} }
} }
function announcePendingChalkboardUpdate() {
clearChalkboardAnnouncementTimer();
if(!chalkboardHasPendingAnnouncement)
return;
announceChat(
chalkboardPendingHasText ?
'Chalkboard updated. Contents available in the chalkboard.' :
'Chalkboard cleared.',
);
chalkboardHasPendingAnnouncement = false;
}
function scheduleChalkboardUpdateAnnouncement(hasText) {
let chalkboard = /** @type {HTMLTextAreaElement} */
(document.getElementById('chalkboard'));
if(!chalkboard)
return;
chalkboardHasPendingAnnouncement = true;
chalkboardPendingHasText = hasText;
if(document.activeElement === chalkboard)
return;
clearChalkboardAnnouncementTimer();
chalkboardAnnouncementTimer = setTimeout(() => {
chalkboardAnnouncementTimer = null;
announceChat(hasText ? 'Chalkboard updated.' : 'Chalkboard cleared.');
}, 2000);
}
/** /**
* @param {any} message * @param {any} message
*/ */
@@ -2700,10 +2746,20 @@ function applyChalkboardUpdate(message) {
(document.getElementById('chalkboard')); (document.getElementById('chalkboard'));
if(!chalkboard) if(!chalkboard)
return; return;
let isLocalEcho =
chalkboardLocalTextPending !== null &&
text === chalkboardLocalTextPending;
if(chalkboard.value !== text) { if(chalkboard.value !== text) {
applyingChalkboardUpdate = true; applyingChalkboardUpdate = true;
chalkboard.value = text; chalkboard.value = text;
applyingChalkboardUpdate = false; applyingChalkboardUpdate = false;
if(isLocalEcho) {
chalkboardLocalTextPending = null;
} else {
scheduleChalkboardUpdateAnnouncement(text.length > 0);
}
} else if(isLocalEcho) {
chalkboardLocalTextPending = null;
} }
updateChalkboardAccess(); updateChalkboardAccess();
} }
@@ -2719,6 +2775,7 @@ function scheduleChalkboardSend() {
(document.getElementById('chalkboard')); (document.getElementById('chalkboard'));
if(!chalkboard || !serverConnection || !serverConnection.socket) if(!chalkboard || !serverConnection || !serverConnection.socket)
return; return;
chalkboardLocalTextPending = chalkboard.value;
serverConnection.hallAction('chalkboard', { serverConnection.hallAction('chalkboard', {
text: chalkboard.value, text: chalkboard.value,
revision: chalkboardRevision, revision: chalkboardRevision,
@@ -3718,6 +3775,10 @@ document.getElementById('chalkboard').addEventListener('keydown', function(e) {
return; return;
}); });
document.getElementById('chalkboard').addEventListener('focus', function(e) {
announcePendingChalkboardUpdate();
});
document.getElementById('chalkboard-copy').addEventListener('click', function(e) { document.getElementById('chalkboard-copy').addEventListener('click', function(e) {
e.preventDefault(); e.preventDefault();
copyChalkboardToClipboard(); copyChalkboardToClipboard();