4.0 KiB
4.0 KiB
Контекст проекта
Текущий статус
Фаза 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группирует альбомы без клонирования сообщений.- TDLib facade split на scoped traits; generic код больше не получает raw
*_mutдоступ к сообщениям. - Локальный
build.rsудалён: линковкой TDLib управляет зависимостьtdlib-rs,cargo check --all-targets --all-featuresснова воспроизводим.
Осталось
- Быстрые 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. TdClientTraitтеперь facade поверх scoped traits; чтение текущих сообщений идёт черезCow, mutation - через явные update-операции.- Пользовательская timezone не хранится в config: runtime использует системную timezone, тесты форматирования используют deterministic time source.
- Методы
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/.