#12 sync call history between devices via carbons and MAM
- After a call ends, send a plaintext <call-history/> service message to the user's own bare JID with direction, status, duration, start time, peer and video flag plus the call id as origin-id. - Intercept the payload on live, carbon and MAM paths and upsert the same system call card on every device; deduplication reuses the origin-id as clientID, and missed incoming calls bump unread. - Cover payload parsing and round-trip in CallHistorySyncTests, guard the namespace and interception in verify.sh, and document the flow in ARCHITECTURE.md.
This commit is contained in:
@@ -196,6 +196,15 @@ trickle ICE candidates накапливаются до успешного нач
|
||||
успешным и получает длительность. Удаление `activeCall` до закрытия Jingle-сессии
|
||||
гарантирует, что ответный callback не создаст дубликат карточки.
|
||||
|
||||
Карточка звонка синхронизируется между устройствами: по завершении вызова
|
||||
устройство отправляет самому себе (собственный bare JID) служебное сообщение с
|
||||
`<call-history xmlns='https://luma.chat/call-history'>` (направление, статус,
|
||||
длительность, время начала, собеседник, видео). Carbons доставляют его на
|
||||
остальные устройства, MAM сохраняет в архиве; получатели парсят payload и
|
||||
создают ту же карточку, а дедупликация идёт по origin-id, совпадающему с
|
||||
clientID карточки на исходном устройстве. Пропущенный входящий звонок
|
||||
увеличивает счётчик непрочитанных на каждом устройстве.
|
||||
|
||||
Текущая реализация принимает вызов при живом XMPP-соединении. Wake-up завершённого
|
||||
iOS-приложения намеренно не имитируется: production-путь требует VoIP push,
|
||||
PushKit/CallKit и серверной APNs-инфраструктуры.
|
||||
|
||||
Reference in New Issue
Block a user