Files
telegram-tui/docs/PROJECT_STRUCTURE.md
2026-05-20 00:31:18 +03:00

71 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Структура проекта
Карта подсистем без полного дерева файлов.
## Поток данных
```text
TDLib updates -> mpsc channel -> App state -> UI render
User input -> input handlers -> App methods -> TdClientTrait -> TDLib API
```
`crates/tele-tui/src/main.rs` держит event loop: клавиатура, TDLib updates,
фоновые задачи и отрисовка по `needs_redraw`.
## Подсистемы
| Путь | Назначение |
|------|------------|
| `crates/tele-core/src/tdlib/` | TDLib wrapper: auth, chats, users, reactions, updates, conversion, operations |
| `crates/tele-core/src/types.rs` | Shared typed IDs |
| `crates/tele-core/src/message_grouping.rs` | Pure message grouping |
| `crates/tele-core/src/accounts/` | Pure account profile types and validation |
| `crates/tele-core/src/test_support/` | Reusable `FakeTdClient` and TDLib test data |
| `crates/tele-tui/src/app/` | Центральное состояние `App<T: TdClientTrait>`, экраны, режимы и modal state |
| `crates/tele-tui/src/app/methods/` | Trait-based методы navigation/messages/compose/search/modal |
| `crates/tele-tui/src/input/` | Роутинг клавиатуры и обработчики global/chat/compose/modal/search |
| `crates/tele-tui/src/ui/` | Отрисовка экранов, списка чатов, сообщений, footer, compose bar и модалок |
| `crates/tele-tui/src/config/` | TOML config, credentials, keybindings, validation |
| `crates/tele-tui/src/accounts/` | `accounts.toml`, migration, account data paths, per-account lock files |
| `crates/tele-tui/src/audio/` | Голосовые сообщения через `ffplay` и `VoiceCache` |
| `crates/tele-tui/src/media/` | Inline images и modal viewer под feature `images` |
| `crates/tele-tui/src/notifications.rs` | Desktop notification delivery and muted-chat syncing |
| `crates/tele-tui/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`, особенно для мультиаккаунта.
- `TdClient` не зависит от desktop notifications. Он отдаёт входящие сообщения
через `drain_incoming_message_events()`, а `tele-tui` решает, показывать ли
desktop notification.
## Тесты
| Область | Где искать |
|---------|------------|
| Core unit tests | `crates/tele-core/src/**` |
| Test builders и fake TDLib | `crates/tele-core/src/test_support/`, `crates/tele-tui/src/test_support/`, `crates/tele-tui/tests/helpers/` |
| Snapshot UI | `crates/tele-tui/tests/*` + `crates/tele-tui/tests/snapshots/` |
| Навигация и ввод | `crates/tele-tui/tests/input_navigation.rs`, `crates/tele-tui/tests/vim_mode.rs`, `crates/tele-tui/tests/navigation.rs` |
| Аккаунты | `crates/tele-tui/tests/accounts.rs`, `crates/tele-tui/tests/account_switcher.rs` |
| User journeys | `crates/tele-tui/tests/e2e_smoke.rs`, `crates/tele-tui/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/` | Кэш голосовых сообщений |