update calles
This commit is contained in:
parent
0a99d35d8a
commit
3ec25535e5
@ -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();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user