Split core and TUI crates
This commit is contained in:
@@ -9,22 +9,28 @@ 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`.
|
||||
`crates/tele-tui/src/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 |
|
||||
| `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
|
||||
|
||||
@@ -37,16 +43,20 @@ User input -> input handlers -> App methods -> TdClientTrait -> TDLib API
|
||||
- `TdClientTrait` задаёт API для приложения и тестов.
|
||||
- Реальный клиент живёт в `TdClient`, тесты используют `FakeTdClient`.
|
||||
- Updates должны фильтроваться по активному `client_id`, особенно для мультиаккаунта.
|
||||
- `TdClient` не зависит от desktop notifications. Он отдаёт входящие сообщения
|
||||
через `drain_incoming_message_events()`, а `tele-tui` решает, показывать ли
|
||||
desktop notification.
|
||||
|
||||
## Тесты
|
||||
|
||||
| Область | Где искать |
|
||||
|---------|------------|
|
||||
| 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` |
|
||||
| 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-файлы
|
||||
|
||||
|
||||
Reference in New Issue
Block a user