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

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/ Кэш голосовых сообщений