fixes
This commit is contained in:
6
.gitignore
vendored
6
.gitignore
vendored
@@ -1 +1,7 @@
|
|||||||
/target
|
/target
|
||||||
|
|
||||||
|
# TDLib session data (contains auth tokens - NEVER commit!)
|
||||||
|
/tdlib_data/
|
||||||
|
|
||||||
|
# Environment variables (contains API keys)
|
||||||
|
.env
|
||||||
|
|||||||
80
CONTEXT.md
Normal file
80
CONTEXT.md
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
# Текущий контекст проекта
|
||||||
|
|
||||||
|
## Статус: Базовая интеграция с TDLib работает
|
||||||
|
|
||||||
|
### Что сделано
|
||||||
|
|
||||||
|
#### TDLib интеграция
|
||||||
|
- Подключена библиотека `tdlib-rs` v1.1 с автоматической загрузкой TDLib
|
||||||
|
- Реализована авторизация через телефон + код + 2FA пароль
|
||||||
|
- Сессия сохраняется автоматически в папке `tdlib_data/`
|
||||||
|
- Отключены логи TDLib через FFI вызов `td_execute` до создания клиента
|
||||||
|
- Updates обрабатываются в отдельном потоке через `mpsc` канал (неблокирующе)
|
||||||
|
|
||||||
|
#### Функциональность
|
||||||
|
- Загрузка списка чатов (до 50 штук)
|
||||||
|
- Отображение названия чата и счётчика непрочитанных
|
||||||
|
- Загрузка истории сообщений при открытии чата
|
||||||
|
- Отображение сообщений с именем отправителя и временем
|
||||||
|
|
||||||
|
#### Управление
|
||||||
|
- `j/k` или стрелки — навигация по списку чатов
|
||||||
|
- `д/л` — русская раскладка для j/k
|
||||||
|
- `Enter` — открыть выбранный чат
|
||||||
|
- `Esc` — закрыть открытый чат
|
||||||
|
- `Ctrl+k` — перейти к первому чату
|
||||||
|
- `Ctrl+R` — обновить список чатов
|
||||||
|
- `Ctrl+C` — выход
|
||||||
|
|
||||||
|
### Структура проекта
|
||||||
|
|
||||||
|
```
|
||||||
|
src/
|
||||||
|
├── main.rs # Точка входа, UI рендеринг, event loop
|
||||||
|
├── tdlib/
|
||||||
|
│ ├── mod.rs # Модуль экспорта
|
||||||
|
│ └── client.rs # TdClient: авторизация, загрузка чатов, сообщений
|
||||||
|
```
|
||||||
|
|
||||||
|
### Ключевые решения
|
||||||
|
|
||||||
|
1. **Неблокирующий receive**: TDLib updates приходят в отдельном потоке и передаются в main loop через `mpsc::channel`. Это позволяет UI оставаться отзывчивым.
|
||||||
|
|
||||||
|
2. **FFI для логов**: Используем прямой вызов `td_execute` для отключения логов синхронно, до создания клиента, чтобы избежать вывода в терминал.
|
||||||
|
|
||||||
|
3. **Синхронизация чатов**: Чаты загружаются асинхронно через updates. Main loop периодически синхронизирует `app.chats` с `td_client.chats`.
|
||||||
|
|
||||||
|
### Зависимости (Cargo.toml)
|
||||||
|
|
||||||
|
```toml
|
||||||
|
ratatui = "0.29"
|
||||||
|
crossterm = "0.28"
|
||||||
|
tdlib-rs = { version = "1.1", features = ["download-tdlib"] }
|
||||||
|
tokio = { version = "1", features = ["full"] }
|
||||||
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
|
serde_json = "1.0"
|
||||||
|
dotenvy = "0.15"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Переменные окружения (.env)
|
||||||
|
|
||||||
|
```
|
||||||
|
API_ID=your_api_id
|
||||||
|
API_HASH=your_api_hash
|
||||||
|
```
|
||||||
|
|
||||||
|
## Что НЕ сделано / TODO
|
||||||
|
|
||||||
|
- [ ] Отправка сообщений
|
||||||
|
- [ ] Поиск по чатам
|
||||||
|
- [ ] Папки телеграма (сейчас только "All")
|
||||||
|
- [ ] Отображение онлайн-статуса пользователя
|
||||||
|
- [ ] Markdown форматирование в сообщениях
|
||||||
|
- [ ] Скролл истории сообщений
|
||||||
|
- [ ] Отметка сообщений как прочитанные
|
||||||
|
- [ ] Обновление чатов в реальном времени (новые сообщения)
|
||||||
|
|
||||||
|
## Известные проблемы
|
||||||
|
|
||||||
|
1. При первом запуске нужно пройти авторизацию
|
||||||
|
2. Имя отправителя показывается как "User_ID" (нужно загружать имена пользователей)
|
||||||
@@ -65,13 +65,21 @@
|
|||||||
7) Esc - закрытие открытого чата
|
7) Esc - закрытие открытого чата
|
||||||
8) command + стрелка вверх (или ctrl + k) - выделяем самый верхний чат (без открытия)
|
8) command + стрелка вверх (или ctrl + k) - выделяем самый верхний чат (без открытия)
|
||||||
9) поддержка русской раскладки: "р о л д" соответствует "h j k l"
|
9) поддержка русской раскладки: "р о л д" соответствует "h j k l"
|
||||||
10) `**commands**` - сюда вставь описания команд, которые есть в приложении
|
10) Ctrl+R - обновить список чатов
|
||||||
|
|
||||||
|
### Реализованные команды (footer)
|
||||||
|
|
||||||
|
```
|
||||||
|
j/k: Navigate | Ctrl+k: First | Enter: Open | Esc: Close | Ctrl+R: Refresh | Ctrl+C: Quit
|
||||||
|
```
|
||||||
|
|
||||||
## Технологии
|
## Технологии
|
||||||
Пишем на rust-е
|
Пишем на rust-е
|
||||||
|
|
||||||
1) ratatui - для tui интерфейса
|
1) ratatui - для tui интерфейса
|
||||||
2) rust-tdlib - для подключения апи телеграма
|
2) tdlib-rs - для подключения апи телеграма (обёртка над TDLib)
|
||||||
|
3) tokio - async runtime
|
||||||
|
4) crossterm - кроссплатформенный терминал
|
||||||
|
|
||||||
## Нефункциональные требования
|
## Нефункциональные требования
|
||||||
|
|
||||||
|
|||||||
48
ROADMAP.md
Normal file
48
ROADMAP.md
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
# Roadmap
|
||||||
|
|
||||||
|
## Фаза 1: Базовая инфраструктура [DONE]
|
||||||
|
|
||||||
|
- [x] Настройка проекта (Cargo.toml)
|
||||||
|
- [x] TUI фреймворк (ratatui + crossterm)
|
||||||
|
- [x] Базовый layout (папки, список чатов, область сообщений)
|
||||||
|
- [x] Vim-style навигация (hjkl, стрелки)
|
||||||
|
- [x] Русская раскладка (ролд)
|
||||||
|
|
||||||
|
## Фаза 2: TDLib интеграция [DONE]
|
||||||
|
|
||||||
|
- [x] Подключение tdlib-rs
|
||||||
|
- [x] Авторизация (телефон + код + 2FA)
|
||||||
|
- [x] Сохранение сессии
|
||||||
|
- [x] Загрузка списка чатов
|
||||||
|
- [x] Загрузка истории сообщений
|
||||||
|
- [x] Отключение логов TDLib
|
||||||
|
|
||||||
|
## Фаза 3: Улучшение UX [IN PROGRESS]
|
||||||
|
|
||||||
|
- [ ] Отправка сообщений
|
||||||
|
- [ ] Поиск по чатам (Ctrl+S)
|
||||||
|
- [ ] Скролл истории сообщений
|
||||||
|
- [ ] Загрузка имён пользователей (вместо User_ID)
|
||||||
|
- [ ] Отметка сообщений как прочитанные
|
||||||
|
- [ ] Реальное время: новые сообщения
|
||||||
|
|
||||||
|
## Фаза 4: Папки и фильтрация
|
||||||
|
|
||||||
|
- [ ] Загрузка папок из Telegram
|
||||||
|
- [ ] Переключение между папками (Cmd+1, Cmd+2, ...)
|
||||||
|
- [ ] Фильтрация чатов по папке
|
||||||
|
|
||||||
|
## Фаза 5: Расширенный функционал
|
||||||
|
|
||||||
|
- [ ] Отображение онлайн-статуса
|
||||||
|
- [ ] Статус доставки/прочтения (✓, ✓✓)
|
||||||
|
- [ ] Поддержка медиа-заглушек (фото, видео, голосовые)
|
||||||
|
- [ ] Mentions (@)
|
||||||
|
- [ ] Muted чаты (серый цвет)
|
||||||
|
|
||||||
|
## Фаза 6: Полировка
|
||||||
|
|
||||||
|
- [ ] Оптимизация 60 FPS
|
||||||
|
- [ ] Минимальное разрешение 600 символов
|
||||||
|
- [ ] Обработка ошибок сети
|
||||||
|
- [ ] Graceful shutdown
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user