Files
telegram-tui/CONTEXT.md
Mikhail Kilin eea5eb9584 fixes
2026-01-18 20:06:17 +03:00

3.8 KiB
Raw Blame History

Текущий контекст проекта

Статус: Базовая интеграция с 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)

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" (нужно загружать имена пользователей)