3.1 KiB
3.1 KiB
Структура проекта
Карта подсистем без полного дерева файлов.
Поток данных
TDLib updates -> mpsc channel -> App state -> UI render
User input -> input handlers -> App methods -> TdClientTrait -> TDLib API
main.rs держит event loop: клавиатура, TDLib updates, фоновые задачи и отрисовка по needs_redraw.
Подсистемы
| Путь | Назначение |
|---|---|
src/app/ |
Центральное состояние App<T: TdClientTrait>, экраны, режимы и modal state |
src/app/methods/ |
Trait-based методы navigation/messages/compose/search/modal |
src/input/ |
Роутинг клавиатуры и обработчики global/chat/compose/modal/search |
src/tdlib/ |
TDLib wrapper: auth, chats, users, reactions, updates, conversion, operations |
src/ui/ |
Отрисовка экранов, списка чатов, сообщений, footer, compose bar и модалок |
src/config/ |
TOML config, credentials, keybindings, validation |
src/accounts/ |
Профили, accounts.toml, migration, per-account lock files |
src/audio/ |
Голосовые сообщения через ffplay и VoiceCache |
src/media/ |
Inline images и modal viewer под feature images |
src/utils/ |
Форматирование, validation, retry, TDLib log helpers |
State
ChatState описывает режим открытого чата: normal selection, editing, reply, forward, delete confirmation, reaction picker, profile, search, pinned messages.
Отдельно есть InputMode: в Normal mode работают команды, в Insert mode вводится текст.
TDLib слой
TdClientTraitзадаёт API для приложения и тестов.- Реальный клиент живёт в
TdClient, тесты используютFakeTdClient. - Updates должны фильтроваться по активному
client_id, особенно для мультиаккаунта.
Тесты
| Область | Где искать |
|---|---|
| Test builders и fake TDLib | tests/helpers/ |
| Snapshot UI | tests/* + tests/snapshots/ |
| Навигация и ввод | tests/input_navigation.rs, tests/vim_mode.rs, tests/navigation.rs |
| Аккаунты | tests/accounts.rs, tests/account_switcher.rs |
| User journeys | tests/e2e_smoke.rs, tests/e2e_user_journey.rs |
Runtime-файлы
| Путь | Назначение |
|---|---|
~/.config/tele-tui/config.toml |
Пользовательская конфигурация |
~/.config/tele-tui/credentials |
API_ID и API_HASH |
~/.config/tele-tui/accounts.toml |
Список аккаунтов |
~/.local/share/tele-tui/accounts/{name}/tdlib_data/ |
TDLib database аккаунта |
~/.local/share/tele-tui/accounts/{name}/tele-tui.lock |
Lock активного аккаунта |
~/.cache/tele-tui/voice/ |
Кэш голосовых сообщений |