fix: implement dynamic message history loading with retry logic
Проблема: - При открытии чата видно только последнее сообщение - TDLib возвращал 1 сообщение при первом запросе - Не было retry логики для ожидания синхронизации с сервером Решение: 1. Динамическая загрузка с retry (до 20 попыток на чанк) 2. Загрузка всей доступной истории (без лимита) 3. Retry при получении малого количества сообщений 4. Корректная чанковая загрузка по 50 сообщений Алгоритм: - При открытии чата: get_chat_history(i32::MAX) - загружает всё - Чанками по 50: TDLIB_MESSAGE_LIMIT - Retry если получено < 50 при первой загрузке - Остановка если 3 раза подряд пусто - Порядок: старые чанки вставляются в начало (splice) - При скролле: load_older_messages_if_needed() подгружает автоматически Изменения: src/tdlib/messages.rs: - Убрана фиксированная задержка 100ms после open_chat - Добавлен счетчик consecutive_empty_results - Retry логика без искусственных sleep() - Проверка: если получено мало - продолжить попытки src/input/main_input.rs: - limit: 100 → i32::MAX (без ограничений) - timeout: 10s → 30s tests/chat_list.rs: - test_chat_history_chunked_loading: проверка 100, 120, 200 сообщений - test_chat_history_loads_all_without_limit: загрузка 200 без лимита - test_load_older_messages_pagination: подгрузка при скролле Все тесты: 104/104 ✅ Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -21,7 +21,10 @@
|
||||
- **Иконка 🔇** для замьюченных чатов
|
||||
- **Индикатор @** для чатов с непрочитанными упоминаниями
|
||||
- **Онлайн-статус**: зелёная точка ● для онлайн пользователей
|
||||
- Загрузка истории сообщений при открытии чата (множественные попытки)
|
||||
- **Загрузка истории сообщений**: динамическая чанковая подгрузка (по 50 сообщений)
|
||||
- Retry логика: до 20 попыток на чанк, ждет пока TDLib синхронизирует с сервера
|
||||
- Без ограничений: загружает всю доступную историю при открытии чата
|
||||
- Автоматическая подгрузка старых сообщений при скролле вверх
|
||||
- **Группировка сообщений по дате** (разделители "Сегодня", "Вчера", дата) — по центру
|
||||
- **Группировка сообщений по отправителю** (заголовок с именем)
|
||||
- **Выравнивание сообщений**: исходящие справа (зелёные), входящие слева
|
||||
|
||||
Reference in New Issue
Block a user