From 10ca8d8aa4658a8e65e3704392555a26670e1fa9 Mon Sep 17 00:00:00 2001 From: k1ngsterr1 Date: Wed, 11 Mar 2026 18:13:28 +0700 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=BB=D0=BE=D0=B6=D0=BD=D1=8B=D0=B9=20online=20?= =?UTF-8?q?=D0=B2=20=D1=87=D0=B0=D1=82-=D0=BB=D0=B8=D1=81=D1=82=D0=B5:=20?= =?UTF-8?q?=D1=81=D0=B1=D1=80=D0=BE=D1=81=20=D1=83=D1=81=D1=82=D0=B0=D1=80?= =?UTF-8?q?=D0=B5=D0=B2=D1=88=D0=B8=D1=85=20=D1=81=D1=82=D0=B0=D1=82=D1=83?= =?UTF-8?q?=D1=81=D0=BE=D0=B2=20=D0=BF=D1=80=D0=B8=20=D1=81=D1=82=D0=B0?= =?UTF-8?q?=D1=80=D1=82=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/rosetta/messenger/database/MessageEntities.kt | 4 ++++ .../com/rosetta/messenger/ui/chats/ChatsListViewModel.kt | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/app/src/main/java/com/rosetta/messenger/database/MessageEntities.kt b/app/src/main/java/com/rosetta/messenger/database/MessageEntities.kt index 94e405d..e592a88 100644 --- a/app/src/main/java/com/rosetta/messenger/database/MessageEntities.kt +++ b/app/src/main/java/com/rosetta/messenger/database/MessageEntities.kt @@ -682,6 +682,10 @@ interface DialogDao { lastSeen: Long ) + /** Сбросить online-флаг у всех диалогов аккаунта (защита от устаревшего кэша при старте) */ + @Query("UPDATE dialogs SET is_online = 0 WHERE account = :account AND is_online != 0") + suspend fun clearOnlineStatuses(account: String) + /** Получить онлайн статус пользователя */ @Query( """ diff --git a/app/src/main/java/com/rosetta/messenger/ui/chats/ChatsListViewModel.kt b/app/src/main/java/com/rosetta/messenger/ui/chats/ChatsListViewModel.kt index 8126bbc..e539ed1 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/chats/ChatsListViewModel.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/chats/ChatsListViewModel.kt @@ -266,6 +266,12 @@ class ChatsListViewModel(application: Application) : AndroidViewModel(applicatio // Запускаем все подписки в одном родительском Job для отмены при смене аккаунта accountSubscriptionsJob = viewModelScope.launch { + // 🟢 Сбрасываем устаревшие online-флаги из прошлого сеанса. + // Актуальные статусы придут сразу после PacketOnlineSubscribe. + withContext(Dispatchers.IO) { + runCatching { dialogDao.clearOnlineStatuses(publicKey) } + } + // Подписываемся на обычные диалоги @OptIn(FlowPreview::class) launch {