Files
telegram-tui/CONTEXT.md
2026-05-17 17:58:29 +03:00

4.0 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 группирует альбомы без клонирования сообщений.
  • 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/.