refactor: Separate timestamp updates for the main header and notification checks, and update the version to v1.6.11.

This commit is contained in:
Kantine Wrapper
2026-03-09 14:41:49 +01:00
parent bb5dab64cd
commit 12fe759970
8 changed files with 40 additions and 27 deletions

View File

@@ -59,11 +59,11 @@ Das System umfasst die Darstellung von Menüplänen in einer Wochenübersicht, d
| FR-082 | Das System muss beim erstmaligen Laden die Betriebssystem-Präferenz für das Farbschema berücksichtigen. | Niedrig | v1.0.1 | | FR-082 | Das System muss beim erstmaligen Laden die Betriebssystem-Präferenz für das Farbschema berücksichtigen. | Niedrig | v1.0.1 |
| **Header UI & Navigation** | | | | | **Header UI & Navigation** | | | |
| FR-090 | Die Hauptnavigation (Wochen-Toggles) muss linksbündig neben dem App-Titel positioniert sein. | Niedrig | v1.5.0 | | FR-090 | Die Hauptnavigation (Wochen-Toggles) muss linksbündig neben dem App-Titel positioniert sein. | Niedrig | v1.5.0 |
| FR-091 | Ein dynamisches Alarm-Icon im Header muss den Überwachungsstatus geflaggter Menüs anzeigen (Gelb=Überwachung aktiv aber kein Menü verfügbar, Grün=Mindestens ein Menü verfügbar, Versteckt=keine Flags). Der Tooltip muss den Zeitpunkt der letzten Prüfung als relativen String (z.B. "vor 4 Min.") enthalten. | Mittel | v1.6.9 (Update v1.5.0) | | FR-091 | Ein dynamisches Alarm-Icon im Header muss den Überwachungsstatus geflaggter Menüs anzeigen (Gelb=Überwachung aktiv aber kein Menü verfügbar, Grün=Mindestens ein Menü verfügbar, Versteckt=keine Flags). Der Tooltip muss den Zeitpunkt der letzten Prüfung als relativen String (z.B. "vor 4 Min.") enthalten. | Mittel | v1.6.11 (Update v1.5.0) |
| FR-092 | Solange Menüdaten für die Nächste Woche verfügbar sind, aber noch keine Bestellungen getätigt wurden, muss der entsprechende Navigation-Button animiert und farblich (Gelb) hervorgehoben werden. Nach der ersten Bestellung muss die Hervorhebung automatisch erlöschen. Zusätzlich muss beim erstmaligen Erscheinen der Daten ein einmaliger Toast-Hinweis angezeigt werden. | Mittel | v1.6.0 (Update v1.4.21) | | FR-092 | Solange Menüdaten für die Nächste Woche verfügbar sind, aber noch keine Bestellungen getätigt wurden, muss der entsprechende Navigation-Button animiert und farblich (Gelb) hervorgehoben werden. Nach der ersten Bestellung muss die Hervorhebung automatisch erlöschen. Zusätzlich muss beim erstmaligen Erscheinen der Daten ein einmaliger Toast-Hinweis angezeigt werden. | Mittel | v1.6.0 (Update v1.4.21) |
| **Sprachfilter** | | | | | **Sprachfilter** | | | |
| FR-120 | Das System muss zweisprachige Menübeschreibungen (Deutsch/Englisch) erkennen und dem Benutzer erlauben, via UI-Toggle zwischen DE, EN und ALL (beide Sprachen) zu wechseln. Die Sprachpräferenz muss persistent gespeichert werden. Allergen-Codes müssen in allen Modi angezeigt werden. | Mittel | v1.6.0 | | FR-120 | Das System muss zweisprachige Menübeschreibungen (Deutsch/Englisch) erkennen und dem Benutzer erlauben, via UI-Toggle zwischen DE, EN und ALL (beide Sprachen) zu wechseln. Die Sprachpräferenz muss persistent gespeichert werden. Allergen-Codes müssen in allen Modi angezeigt werden. | Mittel | v1.6.0 |
| FR-121 | Das System muss bei fehlenden Übersetzungen in zweisprachigen Menüs robust reagieren. Wenn ein Gang nur in einer Sprache vorliegt, muss dieser Teil für beide Sprachansichten herangezogen werden, um die Konsistenz der Ganganzahl zu gewährleisten. | Mittel | v1.7.0 | | FR-121 | Das System muss bei fehlenden Übersetzungen in zweisprachigen Menüs robust reagieren. Wenn ein Gang nur in einer Sprache vorliegt, muss dieser Teil für beide Sprachansichten herangezogen werden, um die Konsistenz der Ganganzahl zu gewährleisten. | Mittel | v1.6.10 |
| **Benutzer-Feedback** | | | | | **Benutzer-Feedback** | | | |
| FR-095 | Alle benutzerrelevanten Aktionen (Bestellung, Stornierung, Fehler) müssen durch nicht-blockierende Benachrichtigungen (Toasts) bestätigt werden. | Mittel | v1.0.1 | | FR-095 | Alle benutzerrelevanten Aktionen (Bestellung, Stornierung, Fehler) müssen durch nicht-blockierende Benachrichtigungen (Toasts) bestätigt werden. | Mittel | v1.0.1 |
| FR-096 | Bei einem Verbindungsfehler muss ein Fehlerdialog mit Fallback-Link zur Originalseite angezeigt werden. | Mittel | v1.0.1 | | FR-096 | Bei einem Verbindungsfehler muss ein Fehlerdialog mit Fallback-Link zur Originalseite angezeigt werden. | Mittel | v1.0.1 |

View File

@@ -1,3 +1,7 @@
## v1.6.11 (2026-03-09)
- 🔄 **Refactor**: Trennung der Zeitstempel für die Hauptaktualisierung (Header) und die Benachrichtigungsprüfung (Bell-Icon). Das Polling aktualisiert nun nicht mehr fälschlicherweise die "Aktualisiert am"-Zeit im Header.
- 🏷️ **Metadata**: Version auf v1.6.11 angehoben.
## v1.6.10 (2026-03-09) ## v1.6.10 (2026-03-09)
- **Feature**: Robuste Kurs-Erkennung in zweisprachigen Menüs ([FR-121](REQUIREMENTS.md#FR-121)). - **Feature**: Robuste Kurs-Erkennung in zweisprachigen Menüs ([FR-121](REQUIREMENTS.md#FR-121)).
- **Fix**: Verhindert das Verschieben von Gängen bei fehlenden englischen Übersetzungen. - **Fix**: Verhindert das Verschieben von Gängen bei fehlenden englischen Übersetzungen.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

17
dist/install.html vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -14,7 +14,7 @@
// === Constants === // === Constants ===
const API_BASE = 'https://api.bessa.app/v1'; const API_BASE = 'https://api.bessa.app/v1';
const GUEST_TOKEN = 'c3418725e95a9f90e3645cbc846b4d67c7c66131'; const GUEST_TOKEN = 'c3418725e95a9f90e3645cbc846b4d67c7c66131';
const CLIENT_VERSION = 'v1.6.10'; const CLIENT_VERSION = 'v1.6.11';
const VENUE_ID = 591; const VENUE_ID = 591;
const MENU_ID = 7; const MENU_ID = 7;
const POLL_INTERVAL_MS = 5 * 60 * 1000; // 5 minutes const POLL_INTERVAL_MS = 5 * 60 * 1000; // 5 minutes
@@ -1091,11 +1091,11 @@
if (anyAvailable) break; if (anyAvailable) break;
} }
let lastUpdatedStr = localStorage.getItem('kantine_last_updated'); let lastUpdatedStr = localStorage.getItem('kantine_last_checked');
let timeStr = 'gerade eben'; // Fallback instead of Unbekannt let timeStr = 'gerade eben'; // Fallback instead of Unbekannt
if (!lastUpdatedStr) { if (!lastUpdatedStr) {
lastUpdatedStr = new Date().toISOString(); lastUpdatedStr = new Date().toISOString();
localStorage.setItem('kantine_last_updated', lastUpdatedStr); localStorage.setItem('kantine_last_checked', lastUpdatedStr);
} }
const lastUpdated = new Date(lastUpdatedStr); const lastUpdated = new Date(lastUpdatedStr);
@@ -1227,8 +1227,9 @@
await new Promise(r => setTimeout(r, 200)); await new Promise(r => setTimeout(r, 200));
} }
} }
// Update timestamp after successful polling cycle // Update ONLY the polling status timestamp (Bell Tooltip)
updateLastUpdatedTime(new Date().toISOString()); localStorage.setItem('kantine_last_checked', new Date().toISOString());
updateAlarmBell();
} }
// === Highlight Management === // === Highlight Management ===
@@ -1565,7 +1566,8 @@
const subtitle = document.getElementById('last-updated-subtitle'); const subtitle = document.getElementById('last-updated-subtitle');
if (!isoTimestamp) return; if (!isoTimestamp) return;
lastUpdatedTimestamp = isoTimestamp; lastUpdatedTimestamp = isoTimestamp;
localStorage.setItem('kantine_last_updated', isoTimestamp); // Persist for session-over-tab consistency localStorage.setItem('kantine_last_updated', isoTimestamp);
localStorage.setItem('kantine_last_checked', isoTimestamp); // Also update bell on full refresh
try { try {
const date = new Date(isoTimestamp); const date = new Date(isoTimestamp);
const timeStr = date.toLocaleTimeString('de-DE', { hour: '2-digit', minute: '2-digit' }); const timeStr = date.toLocaleTimeString('de-DE', { hour: '2-digit', minute: '2-digit' });

View File

@@ -1 +1 @@
v1.6.10 v1.6.11