This commit is contained in:
Mikhail Kilin
2026-01-21 21:20:18 +03:00
parent 0a9ae8b448
commit 1ef341d907
9 changed files with 326 additions and 95 deletions

View File

@@ -14,16 +14,20 @@
#### Функциональность
- Загрузка списка чатов (до 50 штук)
- **Фильтрация чатов**: показываются только чаты из ChatList::Main (без архива)
- **Фильтрация удалённых аккаунтов**: "Deleted Account" не отображаются в списке
- Отображение названия чата, счётчика непрочитанных и **@username**
- **Иконка 📌** для закреплённых чатов
- Загрузка истории сообщений при открытии чата (множественные попытки)
- **Группировка сообщений по дате** (разделители "Сегодня", "Вчера", дата)
- **Группировка сообщений по дате** (разделители "Сегодня", "Вчера", дата) — по центру
- **Группировка сообщений по отправителю** (заголовок с именем)
- **Отображение времени сообщений** в формате [HH:MM]
- **Галочки прочтения** (✓ отправлено, ✓✓ прочитано)
- **Выравнивание сообщений**: исходящие справа (зелёные), входящие слева
- **Отображение времени и галочек**: `текст (HH:MM ✓✓)` для исходящих, `(HH:MM) текст` для входящих
- **Галочки прочтения** (✓ отправлено, ✓✓ прочитано) — обновляются в реальном времени
- **Отметка сообщений как прочитанных**: при открытии чата счётчик непрочитанных сбрасывается
- **Отправка текстовых сообщений**
- **Новые сообщения в реальном времени** при открытом чате
- **Поиск по чатам** (Ctrl+S): фильтрация по названию и @username
- **Кеширование имён пользователей**: имена загружаются асинхронно и обновляются в UI
#### Управление
- `↑/↓` стрелки — навигация по списку чатов
@@ -32,7 +36,7 @@
- `Ctrl+S` — поиск по чатам (фильтрация по названию и username)
- `Ctrl+R` — обновить список чатов
- `Ctrl+C` — выход
- `Cmd+↑/Cmd+↓` — скролл сообщений в открытом чате (с подгрузкой старых)
- `↑/↓` в открытом чате — скролл сообщений (с подгрузкой старых)
- `1-9` — переключение папок (в списке чатов)
- Ввод текста в поле сообщения
@@ -50,7 +54,7 @@ src/
│ ├── auth.rs # Экран авторизации
│ ├── main_screen.rs # Главный экран
│ ├── chat_list.rs # Список чатов (с pin и username)
│ ├── messages.rs # Область сообщений (группировка по дате/отправителю)
│ ├── messages.rs # Область сообщений (выравнивание, группировка)
│ └── footer.rs # Подвал с командами
├── input/
│ ├── mod.rs # Роутинг ввода
@@ -59,7 +63,7 @@ src/
├── utils.rs # Утилиты (disable_tdlib_logs, format_timestamp, format_date, get_day)
└── tdlib/
├── mod.rs # Модуль экспорта
└── client.rs # TdClient: авторизация, чаты, сообщения, кеш usernames
└── client.rs # TdClient: авторизация, чаты, сообщения, кеш имён
```
### Ключевые решения
@@ -70,11 +74,13 @@ src/
3. **Синхронизация чатов**: Чаты загружаются асинхронно через updates. Main loop периодически синхронизирует `app.chats` с `td_client.chats`.
4. **Кеширование usernames**: При получении `Update::User` сохраняем username в HashMap. При получении приватного чата связываем chat_id с user_id.
4. **Кеширование имён**: При получении `Update::User` сохраняем имя (first_name + last_name) и username в HashMap. Имена подгружаются асинхронно через очередь `pending_user_ids`.
5. **Группировка сообщений**: Сообщения группируются по дате (разделители) и по отправителю (заголовки). Время отображается рядом с каждым сообщением.
5. **Группировка сообщений**: Сообщения группируются по дате (разделители по центру) и по отправителю (заголовки). Исходящие выравниваются вправо, входящие влево.
6. **Новые сообщения**: `current_chat_id` отслеживает открытый чат. При получении `NewMessage` для этого чата сообщение добавляется сразу.
6. **Отметка прочтения**: При открытии чата вызывается `view_messages` для всех сообщений. Новые входящие сообщения автоматически отмечаются как прочитанные. `Update::ChatReadOutbox` обновляет статус галочек.
7. **Фильтрация удалённых аккаунтов**: Чаты с названием "Deleted Account" или пустым именем пользователя автоматически удаляются из списка.
### Зависимости (Cargo.toml)
@@ -100,7 +106,6 @@ API_HASH=your_api_hash
- [ ] Папки телеграма (сейчас только "All")
- [ ] Отображение онлайн-статуса пользователя
- [ ] Markdown форматирование в сообщениях
- [ ] Отметка сообщений как прочитанные
- [ ] Медиа-сообщения (фото, видео, голосовые)
## Известные проблемы