Files
telegram-tui/docs/TDLIB_INTEGRATION.md
2026-05-17 03:56:04 +03:00

2.2 KiB
Raw Blame History

TDLib integration notes

Проект использует tdlib-rs с feature download-tdlib. Актуальные версии смотри в Cargo.toml.

Runtime

  • Credentials: ~/.config/tele-tui/credentials, fallback .env.
  • TDLib data: ~/.local/share/tele-tui/accounts/{name}/tdlib_data/.
  • Каждый аккаунт защищён lock file: ~/.local/share/tele-tui/accounts/{name}/tele-tui.lock.

Auth flow

TDLib авторизация идёт через updateAuthorizationState:

WaitTdlibParameters -> WaitPhoneNumber -> WaitCode -> WaitPassword? -> Ready

UI должен показывать понятное состояние и не блокировать event loop дольше необходимого.

Updates

  • Receive loop передаёт в UI пару (client_id, Update).
  • UI применяет update только если client_id == active_client_id.
  • При переключении аккаунта pending updates старого клиента должны игнорироваться.

Это критично для multi-account: без фильтрации старый клиент может испортить state нового аккаунта.

Messages

  • История грузится порциями, открытие чата не должно блокировать первый redraw.
  • Reply-info и downloads уходят в фоновые задачи.
  • Read/unread для исходящих сообщений должен опираться на last_read_outbox_message_id.
  • Send/edit/delete/forward/search проходят через TdClientTrait, чтобы тесты могли использовать FakeTdClient.

Folders

Telegram-папки доступны через TDLib chat folders и переключаются клавишами 1-9.

Практические правила

  • Не добавлять долгие await в UI loop без явной причины.
  • Не смешивать updates разных client_id.
  • Не обходить TdClientTrait в коде, который должен тестироваться.
  • Не хранить TDLib database в корне проекта; использовать XDG account paths.