Исправлен ложный online в чат-листе: сброс устаревших статусов при старте

This commit is contained in:
2026-03-11 18:13:28 +07:00
parent 810913b28e
commit 10ca8d8aa4
2 changed files with 10 additions and 0 deletions

View File

@@ -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(
"""

View File

@@ -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 {