From c040ebf059f8b4d70b6f716dc427f54d62bb3570 Mon Sep 17 00:00:00 2001 From: Codex Date: Mon, 9 Mar 2026 22:28:56 +0300 Subject: [PATCH] android: sync pin and archive changes immediately on chat_updated --- android/CHANGELOG.md | 5 +++++ .../messenger/data/realtime/RealtimeEventParser.kt | 8 ++++++-- .../realtime/usecase/HandleRealtimeEventsUseCase.kt | 3 ++- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/android/CHANGELOG.md b/android/CHANGELOG.md index 4ab6f93..17706a4 100644 --- a/android/CHANGELOG.md +++ b/android/CHANGELOG.md @@ -629,3 +629,8 @@ - pin/unpin selected chats, - clear selected chats, - delete selected chats for current user. + +### Step 98 - Realtime sync fix for pin/archive updates +- Improved `chat_updated` handling in realtime flow: + - now refreshes both active and archived chats lists to sync user-scoped flags (`pinned`, `archived`) immediately. +- Added parser fallback for realtime chat events to support payloads with either `chat_id` or `id`. diff --git a/android/app/src/main/java/ru/daemonlord/messenger/data/realtime/RealtimeEventParser.kt b/android/app/src/main/java/ru/daemonlord/messenger/data/realtime/RealtimeEventParser.kt index 0c87ea6..10935b1 100644 --- a/android/app/src/main/java/ru/daemonlord/messenger/data/realtime/RealtimeEventParser.kt +++ b/android/app/src/main/java/ru/daemonlord/messenger/data/realtime/RealtimeEventParser.kt @@ -67,12 +67,16 @@ class RealtimeEventParser @Inject constructor( } "chat_updated" -> { - val chatId = payload["chat_id"].longOrNull() ?: return RealtimeEvent.Ignored + val chatId = payload["chat_id"].longOrNull() + ?: payload["id"].longOrNull() + ?: return RealtimeEvent.Ignored RealtimeEvent.ChatUpdated(chatId = chatId) } "chat_deleted" -> { - val chatId = payload["chat_id"].longOrNull() ?: return RealtimeEvent.Ignored + val chatId = payload["chat_id"].longOrNull() + ?: payload["id"].longOrNull() + ?: return RealtimeEvent.Ignored RealtimeEvent.ChatDeleted(chatId = chatId) } diff --git a/android/app/src/main/java/ru/daemonlord/messenger/domain/realtime/usecase/HandleRealtimeEventsUseCase.kt b/android/app/src/main/java/ru/daemonlord/messenger/domain/realtime/usecase/HandleRealtimeEventsUseCase.kt index b355def..28ed1e5 100644 --- a/android/app/src/main/java/ru/daemonlord/messenger/domain/realtime/usecase/HandleRealtimeEventsUseCase.kt +++ b/android/app/src/main/java/ru/daemonlord/messenger/domain/realtime/usecase/HandleRealtimeEventsUseCase.kt @@ -132,7 +132,8 @@ class HandleRealtimeEventsUseCase @Inject constructor( } is RealtimeEvent.ChatUpdated -> { - chatRepository.refreshChat(chatId = event.chatId) + chatRepository.refreshChats(archived = false) + chatRepository.refreshChats(archived = true) } is RealtimeEvent.ChatDeleted -> {