Hopefully make chalkboard announc when content has changed but not in a spammy way.
This commit is contained in:
@@ -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')
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user