fix: mark incoming messages as read when opening chat and load all history

Fixes two critical bugs:
1. Unread badge not clearing when opening chat - incoming messages weren't marked as viewed
2. Only last 2-3 messages loaded instead of full history due to incorrect break condition

Changes:
- Add incoming message IDs to pending_view_messages queue on chat open
- Remove premature break in get_chat_history() that stopped after 2 messages
- Add FakeTdClient.pending_view_messages field for testing
- Implement process_pending_view_messages() in FakeTdClient

Tests added:
- test_incoming_message_shows_unread_badge: verify "(1)" appears for unread
- test_opening_chat_clears_unread_badge: verify badge clears after opening
- test_opening_chat_loads_many_messages: verify all 50 messages load, not just last few

All 28 chat_list tests pass.
This commit is contained in:
Mikhail Kilin
2026-02-04 02:07:47 +03:00
parent 5ac10ea24c
commit dec60ea74e
5 changed files with 193 additions and 6 deletions

View File

@@ -167,10 +167,9 @@ impl MessageManager {
}
}
// Если получили достаточно сообщений, прекращаем попытки
if all_messages.len() >= 2 || attempt == max_attempts {
break;
}
// Если получили непустой результат, прекращаем попытки
// (TDLib вернёт столько сообщений, сколько доступно, до limit)
break;
}
// Если сообщений мало, ждём перед следующей попыткой