update calles

This commit is contained in:
Flatlogic Bot 2026-04-09 17:19:17 +00:00
parent 0a99d35d8a
commit 3ec25535e5

View File

@ -226,11 +226,51 @@ document.addEventListener('DOMContentLoaded', () => {
const announcementQueue = [];
const queuedAnnouncementKeys = new Set();
const announcedStorageKey = 'hospitalQueue:announcedKeys';
const maxRememberedAnnouncementKeys = 200;
let announcementPlaying = false;
let activeAnnouncementAudio = null;
let activeSpeechUtterance = null;
let audioLoadTimeoutId = null;
let activeAnnouncementKey = '';
let rememberedAnnouncementKeys = [];
let rememberedAnnouncementKeySet = new Set();
const loadRememberedAnnouncementKeys = () => {
try {
const raw = window.localStorage.getItem(announcedStorageKey);
const parsed = raw ? JSON.parse(raw) : [];
if (Array.isArray(parsed)) {
rememberedAnnouncementKeys = parsed.filter((key) => typeof key === 'string' && key !== '').slice(-maxRememberedAnnouncementKeys);
rememberedAnnouncementKeySet = new Set(rememberedAnnouncementKeys);
}
} catch (e) {
rememberedAnnouncementKeys = [];
rememberedAnnouncementKeySet = new Set();
}
};
const persistRememberedAnnouncementKeys = () => {
try {
window.localStorage.setItem(announcedStorageKey, JSON.stringify(rememberedAnnouncementKeys.slice(-maxRememberedAnnouncementKeys)));
} catch (e) {
console.warn('Failed to persist announcement keys', e);
}
};
const rememberAnnouncementKey = (key) => {
if (!key || rememberedAnnouncementKeySet.has(key)) return;
rememberedAnnouncementKeys.push(key);
rememberedAnnouncementKeySet.add(key);
if (rememberedAnnouncementKeys.length > maxRememberedAnnouncementKeys) {
const overflow = rememberedAnnouncementKeys.length - maxRememberedAnnouncementKeys;
const removedKeys = rememberedAnnouncementKeys.splice(0, overflow);
removedKeys.forEach((removedKey) => rememberedAnnouncementKeySet.delete(removedKey));
}
persistRememberedAnnouncementKeys();
};
loadRememberedAnnouncementKeys();
const syncAnnouncementVisualState = () => {
document.querySelectorAll('.announcement-card').forEach((card) => {
@ -273,9 +313,10 @@ document.addEventListener('DOMContentLoaded', () => {
if (!card) return;
const key = card.dataset.announcementKey || '';
const text = locale === 'ar' ? (card.dataset.announcementAr || '') : (card.dataset.announcementEn || '');
if (!key || !text || queuedAnnouncementKeys.has(key)) return;
if (!key || !text || queuedAnnouncementKeys.has(key) || rememberedAnnouncementKeySet.has(key)) return;
announcementQueue.push({ key, text });
queuedAnnouncementKeys.add(key);
rememberAnnouncementKey(key);
syncAnnouncementVisualState();
playNextAnnouncement();
};
@ -381,38 +422,34 @@ document.addEventListener('DOMContentLoaded', () => {
const checkAnnouncements = () => {
const cards = Array.from(document.querySelectorAll('.announcement-card'));
const latest = cards[0];
const audioEnabled = window.localStorage.getItem('hospitalQueue:audioEnabled') !== 'false';
if (!latest) {
if (cards.length === 0) {
return;
}
const storageKey = `hospitalQueue:lastAnnouncement:${locale}`;
const storedKey = window.localStorage.getItem(storageKey) || '';
const latestKey = latest.dataset.announcementKey || '';
if (!latestKey || latestKey === storedKey) {
return;
}
let newCards = [];
if (!storedKey) {
newCards = [latest];
} else {
for (const card of cards) {
if (rememberedAnnouncementKeys.length === 0) {
cards.forEach((card) => {
const key = card.dataset.announcementKey || '';
if (!key) continue;
if (key === storedKey) break;
newCards.push(card);
}
newCards.reverse();
if (key) rememberAnnouncementKey(key);
});
return;
}
window.localStorage.setItem(storageKey, latestKey);
const newCards = cards.filter((card) => {
const key = card.dataset.announcementKey || '';
return !!key && !rememberedAnnouncementKeySet.has(key) && !queuedAnnouncementKeys.has(key) && key !== activeAnnouncementKey;
}).reverse();
if (audioEnabled) {
newCards.forEach(queueAnnouncement);
if (!audioEnabled) {
newCards.forEach((card) => {
const key = card.dataset.announcementKey || '';
if (key) rememberAnnouncementKey(key);
});
return;
}
newCards.forEach(queueAnnouncement);
};
checkAnnouncements();