2.2 KiB
2.2 KiB
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.