added .read state
This commit is contained in:
1 parent
299f78de36
commit
16c9fab509
9 files changed
+513
-19
No files matched your search
+20
-1
@@ -37,7 +37,8 @@ XEP-0045-комнатами в отдельном разделе «Группо
|
||||
собственных дополнительных устройств; при выключенном отправляется обычный
|
||||
`<body>` внутри TLS-соединения. Ошибка OMEMO никогда не вызывает автоматический
|
||||
fallback на plaintext. UI сразу показывает optimistic message и обновляет
|
||||
состояние по результату записи/receipt.
|
||||
состояние по результату записи/receipt; XEP-0333 `<displayed/>`-маркер
|
||||
собеседника переводит исходящее сообщение в состояние «прочитано».
|
||||
|
||||
## OMEMO 2
|
||||
|
||||
@@ -218,6 +219,24 @@ trickle ICE candidates накапливаются до успешного нач
|
||||
clientID карточки на исходном устройстве. Пропущенный входящий звонок
|
||||
увеличивает счётчик непрочитанных на каждом устройстве.
|
||||
|
||||
Состояние «прочитано» (`.read`) синхронизируется между устройствами тем же
|
||||
каналом. Устройство, получившее от собеседника `<displayed/>`-маркер
|
||||
(XEP-0333) или, для MUC, маркер от участника комнаты, переводит исходящее
|
||||
сообщение в `.read` и отправляет собственному bare JID служебное сообщение с
|
||||
`<read-marker xmlns='https://luma.chat/read-marker'>` (чат, origin-id, stanza-id
|
||||
сообщения). Carbons доставляют его на остальные устройства, MAM архивирует —
|
||||
поэтому свежая установка и повторные прогоны архива сходятся к одному
|
||||
состоянию, даже когда маркер приходит раньше самого сообщения (MAM отдаёт
|
||||
станзы от новых к старым): маркер ждёт в `pendingReadMarkers` до upsert
|
||||
сообщения. Для комнат маркер адресован собственному bare JID и ссылается на
|
||||
stanza-id из MUC-MAM, так что состояние прочтения не попадает в архив
|
||||
комнаты. При открытии 1:1-чата Luma отправляет собеседнику `<displayed/>` для
|
||||
последнего входящего сообщения (в MUC маркеры не отправляются — XEP-0333).
|
||||
Слияние копий одного исходящего сообщения (live/MAM/MUC-MAM/Carbons)
|
||||
монотонно: `Delivery.merged(with:)` не позволяет архивному повтору с `.sent`
|
||||
понизить уже установленные `.delivered`/`.read`, а `.failed` остаётся
|
||||
неизменным до явной повторной отправки.
|
||||
|
||||
Текущая реализация принимает вызов при живом XMPP-соединении. Wake-up завершённого
|
||||
iOS-приложения намеренно не имитируется: production-путь требует VoIP push,
|
||||
PushKit/CallKit и серверной APNs-инфраструктуры.
|
||||
|
||||
Reference in new issue
Block a user