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 {