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

3.3 KiB
Raw Blame History

Контекст проекта

Текущий статус

Фаза 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/.