61 lines
3.1 KiB
Markdown
61 lines
3.1 KiB
Markdown
# Структура проекта
|
|
|
|
Карта подсистем без полного дерева файлов.
|
|
|
|
## Поток данных
|
|
|
|
```text
|
|
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/` | Кэш голосовых сообщений |
|