Skip to content

Benachrichtigungen: „Anderswo gelesen“ statt „Gelesen“, Wegwischen gleicht nicht mehr ab - #461

Merged
CallMeTechie merged 1 commit into
masterfrom
fix/notify-read-elsewhere
Nov 9, 2026
Merged

CallMeTechie merged 1 commit into
masterfrom
fix/notify-read-elsewhere

Conversation

@CallMeTechie

Copy link
Copy Markdown
Owner

Problem

Ein seit Tagen ausgeschalteter Laptop („FEC Laptop“) stand im Zustellprotokoll bei mehreren Mitteilungen auf „Gelesen“ – und zählte als „2/2 zugestellt“. Ursache: der Gelesen-Abgleich. Hat die Person eine Mitteilung auf dem Handy gelesen oder nur weggewischt, wurden alle anderen Geräte als gelesen markiert, auch wenn sie die Mitteilung nie bekommen hatten.

Änderungen

1. „Anderswo gelesen“ im Admin

  • Neue Spalte notification_deliveries.read_via (Migration 144 notify_read_via): self (das Gerät selbst), device (auf einem anderen Gerät der Person gelesen), portal (im Portal gelesen), elsewhere (Altbestand, Herkunft unbekannt).
  • Zustellprotokoll: Status „Anderswo gelesen“ (neutral/grau) statt „Gelesen“; darunter z. B. „nicht zugestellt · auf anderem Gerät gelesen …“ bzw. „… · im Portal gelesen …“ / „… · anderswo gelesen …“. Wurde die Mitteilung vorher zugestellt: „zugestellt … · auf anderem Gerät gelesen …“.
  • Ablauf: neuer Eintrag „Anderswo gelesen: N Geräte als gelesen markiert“; „Auf N Geräten gelesen“ zählt nur noch Lesen auf dem Gerät selbst.
  • „zugestellt“ (statsFor, Übersicht, Verlauf, Ablauf) zählt nur Zeilen mit delivered_at. Eine anderswo gelesene, nie zugestellte Zeile gilt aber nicht als fehlend: Status „ok“, im Verlauf „1/2 · 1 anderswo gelesen“, nicht im Filter „Nicht zugestellt“.
  • Kennzahl „davon N gelesen“ (read_24h) nur eigenes Lesen.
  • Reiter Geräte, Spalte „Bestätigt“: nur noch Bestätigungen, die das Gerät selbst geschickt hat.
  • Admin-API: deliveries[].read_via, elsewhere in Verlauf/Übersicht (docs/feature-notification-center.md ergänzt).

2. Wegwischen gleicht nicht mehr ab

  • Nur ein echtes read (geöffnet, angetippt, Knopf, „Gelesen“) markiert die Mitteilung auf den anderen Geräten der Person als gelesen und schickt event: read.
  • dismissed (weggewischt) gilt nur für die eigene Zeile; die anderen Geräte behalten die Mitteilung als ungelesen und bekommen sie beim nächsten Verbinden.
  • Portal „Gelesen“/„Alle als gelesen“ bleibt ein echtes Lesen für alle Geräte.

Kleinigkeiten dazu

  • Jede Bestätigung eines Geräts setzt delivered_at, auch auf einer schon anderswo gelesenen Zeile (vorher ging ein spätes „delivered“ verloren). Öffnet das Gerät die Mitteilung danach selbst, gilt sie als eigenes Lesen.

Bestehende Daten (Migration 144)

Die Herkunft wurde bisher nicht gespeichert. Eine eigene Bestätigung setzte immer delivered_at, der Abgleich nie. Daher: gelesene Zeilen ohne delivered_at → elsewhere („Anderswo gelesen“), alle anderen gelesenen → self. Eine Zeile, die das Gerät erhalten hatte und die danach anderswo gelesen wurde, ist nachträglich nicht erkennbar und bleibt „Gelesen“.

Kompatibilität

Android- und Windows-Apps unverändert: eine abgeglichene Zeile steht im Posteingang weiter als read, zählt nicht als ungelesen und wird nicht erneut zugestellt. event: read kommt nur noch bei echtem Lesen. Der Portal-Posteingang zählt eine Mitteilung weiterhin als erledigt, sobald sie auf irgendeinem Gerät gelesen oder weggewischt wurde (unverändert).

Tests

  • Neu: tests/notify_read_elsewhere.test.js (Wegwischen ohne Abgleich, Lesen mit read_via device, Portal read_via portal, spätes „delivered“, eigenes Öffnen danach, statsFor/Status/Verlauf/Übersicht, „Bestätigt“, Detail-API und Ablauf, Seiten-Helfer, Migration auf Altdaten).
  • tests/notify_admin_api.test.js: Antwortformen um elsewhere/read_via ergänzt.

Generated by Claude Code

…eicht nicht mehr ab

Im Zustellprotokoll stand bei einem ausgeschalteten Gerät „Gelesen“, wenn
die Person die Mitteilung auf einem anderen Gerät gelesen oder dort nur
weggewischt hatte – und es zählte als „zugestellt“.

- Neue Spalte notification_deliveries.read_via (Migration 144): self,
  device, portal; bestehende gelesene Zeilen ohne delivered_at werden
  „elsewhere“, alle anderen gelesenen „self“.
- Nur ein echtes „read“ markiert die anderen Geräte der Person als gelesen
  (read_via device); „dismissed“ (weggewischt) gilt nur für das eigene
  Gerät. Portal „Gelesen“/„Alle als gelesen“ wirkt weiter auf alle Geräte
  (read_via portal).
- Jede Bestätigung eines Geräts setzt delivered_at, auch auf einer schon
  anderswo gelesenen Zeile; öffnet das Gerät sie selbst, gilt sie als
  eigenes Lesen.
- Admin: „zugestellt“ zählt nur Zeilen mit delivered_at, „gelesen“ und
  read_24h nur Lesen auf dem Gerät selbst; anderswo gelesene, nie
  zugestellte Zeilen fehlen nicht (Status ok, „1/2 · 1 anderswo gelesen“).
  „Bestätigt“ im Reiter Geräte nur aus eigenen Bestätigungen.
- Zustellprotokoll: „Anderswo gelesen“ (neutral), darunter „nicht
  zugestellt · auf anderem Gerät gelesen …“ bzw. „… im Portal gelesen …“;
  Ablauf-Eintrag „Anderswo gelesen: N Geräte als gelesen markiert“.
- Geräte-APIs unverändert: eine abgeglichene Zeile bleibt „read“.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016xX1efcZF1f6G9rhmaJNLD
@CallMeTechie
CallMeTechie merged commit e57a454 into master Nov 9, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants