update calles
This commit is contained in:
parent
0a99d35d8a
commit
3ec25535e5
@ -226,11 +226,51 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
|
|
||||||
const announcementQueue = [];
|
const announcementQueue = [];
|
||||||
const queuedAnnouncementKeys = new Set();
|
const queuedAnnouncementKeys = new Set();
|
||||||
|
const announcedStorageKey = 'hospitalQueue:announcedKeys';
|
||||||
|
const maxRememberedAnnouncementKeys = 200;
|
||||||
let announcementPlaying = false;
|
let announcementPlaying = false;
|
||||||
let activeAnnouncementAudio = null;
|
let activeAnnouncementAudio = null;
|
||||||
let activeSpeechUtterance = null;
|
let activeSpeechUtterance = null;
|
||||||
let audioLoadTimeoutId = null;
|
let audioLoadTimeoutId = null;
|
||||||
let activeAnnouncementKey = '';
|
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 = () => {
|
const syncAnnouncementVisualState = () => {
|
||||||
document.querySelectorAll('.announcement-card').forEach((card) => {
|
document.querySelectorAll('.announcement-card').forEach((card) => {
|
||||||
@ -273,9 +313,10 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
if (!card) return;
|
if (!card) return;
|
||||||
const key = card.dataset.announcementKey || '';
|
const key = card.dataset.announcementKey || '';
|
||||||
const text = locale === 'ar' ? (card.dataset.announcementAr || '') : (card.dataset.announcementEn || '');
|
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 });
|
announcementQueue.push({ key, text });
|
||||||
queuedAnnouncementKeys.add(key);
|
queuedAnnouncementKeys.add(key);
|
||||||
|
rememberAnnouncementKey(key);
|
||||||
syncAnnouncementVisualState();
|
syncAnnouncementVisualState();
|
||||||
playNextAnnouncement();
|
playNextAnnouncement();
|
||||||
};
|
};
|
||||||
@ -381,38 +422,34 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
|
|
||||||
const checkAnnouncements = () => {
|
const checkAnnouncements = () => {
|
||||||
const cards = Array.from(document.querySelectorAll('.announcement-card'));
|
const cards = Array.from(document.querySelectorAll('.announcement-card'));
|
||||||
const latest = cards[0];
|
|
||||||
const audioEnabled = window.localStorage.getItem('hospitalQueue:audioEnabled') !== 'false';
|
const audioEnabled = window.localStorage.getItem('hospitalQueue:audioEnabled') !== 'false';
|
||||||
|
|
||||||
if (!latest) {
|
if (cards.length === 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const storageKey = `hospitalQueue:lastAnnouncement:${locale}`;
|
if (rememberedAnnouncementKeys.length === 0) {
|
||||||
const storedKey = window.localStorage.getItem(storageKey) || '';
|
cards.forEach((card) => {
|
||||||
const latestKey = latest.dataset.announcementKey || '';
|
|
||||||
if (!latestKey || latestKey === storedKey) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
let newCards = [];
|
|
||||||
if (!storedKey) {
|
|
||||||
newCards = [latest];
|
|
||||||
} else {
|
|
||||||
for (const card of cards) {
|
|
||||||
const key = card.dataset.announcementKey || '';
|
const key = card.dataset.announcementKey || '';
|
||||||
if (!key) continue;
|
if (key) rememberAnnouncementKey(key);
|
||||||
if (key === storedKey) break;
|
});
|
||||||
newCards.push(card);
|
return;
|
||||||
}
|
|
||||||
newCards.reverse();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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) {
|
if (!audioEnabled) {
|
||||||
newCards.forEach(queueAnnouncement);
|
newCards.forEach((card) => {
|
||||||
|
const key = card.dataset.announcementKey || '';
|
||||||
|
if (key) rememberAnnouncementKey(key);
|
||||||
|
});
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
newCards.forEach(queueAnnouncement);
|
||||||
};
|
};
|
||||||
|
|
||||||
checkAnnouncements();
|
checkAnnouncements();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user