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

49 lines
3.3 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.
# Контекст проекта
## Текущий статус
Фаза 14: мультиаккаунт, в работе.
Цель фазы: безопасные профили Telegram-аккаунтов, переключение аккаунтов и подготовка к более быстрому multi-client UX.
## Уже сделано
- Профили аккаунтов: `AccountProfile`, `accounts.toml`, XDG data paths.
- Миграция старого `tdlib_data/` в per-account directory.
- CLI `--account <name>`.
- Account switcher modal по `Ctrl+A`: выбор и добавление аккаунта.
- Single-client переключение через `recreate_client()`.
- Footer показывает имя аккаунта, если он не `default`.
- Per-account lock file защищает TDLib database от двух процессов.
- TDLib receive loop передаёт `client_id`; UI применяет updates только активного клиента.
- `pending_chat_init` не должен блокировать первый redraw; reply-info и photo downloads уходят в фоновые tasks.
- Keybindings стали детерминированными; русская vim-раскладка: `h/j/k/l` -> `р/о/л/д`.
- `AudioPlayer` проверяет наличие `ffplay`.
- `message_grouping` группирует альбомы без клонирования сообщений.
## Осталось
- Быстрые hotkeys `Ctrl+1`..`Ctrl+9` для аккаунтов без модалки.
- Удаление/переименование аккаунта в account switcher.
- Бейджи непрочитанных с других аккаунтов.
- Решить, нужен ли переход от single-client reinit к одновременным клиентам.
- Добавить/уточнить tests для accounts + TDLib update routing.
## Риски
- Multi-account код должен фильтровать TDLib updates по `client_id`.
- Инициализация чата и фоновые downloads не должны блокировать первый redraw.
- Read/unread статус исходящих сообщений зависит от корректной TDLib metadata.
- Конфликтующие keybindings должны оставаться детерминированными.
- Переключение аккаунтов требует проверки lock release/acquire и auth flow.
## Ключевые решения
- Главный state хранится в `App<T: TdClientTrait>`, чтобы тесты могли использовать `FakeTdClient`.
- Методы `App` разбиты на traits: navigation, messages, compose, search, modal.
- UI рендерится только при `needs_redraw`; текстовый интерфейс целится в 60 FPS.
- Фото под feature `images`: inline Halfblocks + modal iTerm2/Sixel.
- Голосовые сообщения проигрываются через `ffplay`, cache живёт в `~/.cache/tele-tui/voice/`.
- Credentials читаются из `~/.config/tele-tui/credentials`, fallback `.env`.
- TDLib data аккаунтов хранится в `~/.local/share/tele-tui/accounts/{name}/tdlib_data/`.