# 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`: ```text 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.