This commit is contained in:
Mikhail Kilin
2026-01-24 02:22:47 +03:00
parent c18f43664e
commit 22c4e17377
9 changed files with 1199 additions and 226 deletions

View File

@@ -1,6 +1,6 @@
# Текущий контекст проекта
## Статус: Фаза 6 завершена — Полировка
## Статус: Фаза 8 в процессе — Дополнительные фичи
### Что сделано
@@ -30,11 +30,23 @@
- **Галочки прочтения** (✓ отправлено, ✓✓ прочитано) — обновляются в реальном времени
- **Отметка сообщений как прочитанных**: при открытии чата счётчик непрочитанных сбрасывается
- **Отправка текстовых сообщений**
- **Редактирование сообщений**: ↑ при пустом инпуте → выбор → Enter → редактирование
- **Удаление сообщений**: в режиме выбора нажать `d` / `в` / `Delete` → модалка подтверждения
- **Индикатор редактирования**: ✎ рядом с временем для отредактированных сообщений
- **Новые сообщения в реальном времени** при открытом чате
- **Поиск по чатам** (Ctrl+S): фильтрация по названию и @username
- **Кеширование имён пользователей**: имена загружаются асинхронно и обновляются в UI
- **Папки Telegram**: загрузка и переключение между папками (1-9)
- **Медиа-заглушки**: [Фото], [Видео], [Голосовое], [Стикер], [GIF] и др.
- **Markdown форматирование в сообщениях**:
- **Жирный** (bold)
- *Курсив* (italic)
- __Подчёркнутый__ (underline)
- ~~Зачёркнутый~~ (strikethrough)
- `Код` (inline code, Pre, PreCode) — cyan на тёмном фоне
- Спойлеры — скрытый текст (серый на сером)
- Ссылки (URL, TextUrl, Email, Phone) — синий с подчёркиванием
- @Упоминания — синий с подчёркиванием
#### Состояние сети
- **Индикатор в футере**: показывает текущее состояние подключения
@@ -54,6 +66,7 @@
#### Динамический инпут
- **Автоматическое расширение**: поле ввода увеличивается при длинном тексте (до 10 строк)
- **Перенос текста**: длинные сообщения переносятся на новые строки
- **Блочный курсор**: vim-style курсор █ с возможностью перемещения по тексту
#### Управление
- `↑/↓` стрелки — навигация по списку чатов
@@ -63,8 +76,19 @@
- `Ctrl+R` — обновить список чатов
- `Ctrl+C` — выход (graceful shutdown)
- `↑/↓` в открытом чате — скролл сообщений (с подгрузкой старых)
- `↑` при пустом инпуте — выбор сообщения для редактирования
- `Enter` в режиме выбора — начать редактирование
- `d` / `в` / `Delete` в режиме выбора — удалить сообщение (с подтверждением)
- `y` / `н` / `Enter` — подтвердить удаление в модалке
- `n` / `т` / `Esc` — отменить удаление в модалке
- `Esc` — отменить выбор/редактирование
- `1-9` — переключение папок (в списке чатов)
- Ввод текста в поле сообщения
- **Редактирование текста в инпуте:**
- `←` / `→` — перемещение курсора
- `Home` — курсор в начало
- `End` — курсор в конец
- `Backspace` — удалить символ слева
- `Delete` — удалить символ справа
### Структура проекта
@@ -132,14 +156,18 @@ API_ID=your_api_id
API_HASH=your_api_hash
```
## Что НЕ сделано / TODO (Фаза 7)
## Что НЕ сделано / TODO (Фаза 8)
- [ ] Удалить дублирование current_messages между App и TdClient
- [ ] Использовать единый источник данных для сообщений
- [ ] Реализовать LRU-кэш для user_names/user_statuses вместо простого лимита
- [ ] Lazy loading для имён пользователей (загружать только видимых)
- [ ] Профилирование памяти и устранение утечек
- [ ] Markdown форматирование в сообщениях
- [x] Удалить дублирование current_messages между App и TdClient
- [x] Использовать единый источник данных для сообщений (td_client.current_chat_messages)
- [x] Реализовать LRU-кэш для user_names/user_statuses/user_usernames
- [x] Lazy loading для имён пользователей (батчевая загрузка последних 5 за цикл, лимит очереди 50)
- [x] Лимиты памяти: сообщения (500), чаты (200), chat_user_ids (500)
- [x] Markdown форматирование в сообщениях
- [x] Редактирование сообщений
- [x] Удаление сообщений
- [ ] Reply на сообщения
- [ ] Forward сообщений
## Известные проблемы