Files
telegram-tui/ROADMAP.md
Mikhail Kilin 7bc264198f feat: implement Phase 12 — voice message playback with ffplay
Add voice message playback infrastructure:
- AudioPlayer using ffplay subprocess with SIGSTOP/SIGCONT for pause/resume
- VoiceCache with LRU eviction (100 MB limit)
- TDLib integration: VoiceInfo, VoiceDownloadState, PlaybackState types
- download_voice_note() in TdClientTrait
- Keybindings: Space (play/pause), ←/→ (seek ±5s)
- Auto-stop playback on message navigation
- Remove debug_log module
2026-02-09 02:35:49 +03:00

5.1 KiB
Raw Blame History

Roadmap

Завершённые фазы

Фаза Описание Ключевые результаты
1 Базовая инфраструктура ratatui + crossterm, vim-навигация, русская раскладка
2 TDLib интеграция tdlib-rs, авторизация, загрузка чатов и сообщений
3 Улучшение UX Отправка, поиск, скролл, realtime обновления
4 Папки и фильтрация Загрузка папок из Telegram, переключение 1-9
5 Расширенный функционал Онлайн-статус, галочки прочтения, медиа-заглушки, muted
6 Полировка 60 FPS, оптимизация памяти, graceful shutdown, динамический инпут
7 Рефакторинг памяти Единый источник данных, LRU-кэш (500 users), lazy loading
8 Дополнительные фичи Markdown, edit/delete, reply/forward, блочный курсор
9 Расширенные возможности Typing, pinned, поиск в чате, черновики, профиль, копирование, реакции, конфиг
10 Desktop уведомления (83%) notify-rust, muted фильтр, mentions, медиа. TODO: кастомные звуки
11 Inline просмотр фото Dual renderer (Halfblocks + iTerm2/Sixel), throttling 15 FPS, modal viewer, lazy loading
12 Голосовые сообщения (WIP) ffplay player, SIGSTOP/SIGCONT pause, VoiceCache, TDLib интеграция
13 Глубокий рефакторинг 5 файлов (4582→модули), 5 traits, shared components, docs

Фаза 11: Inline просмотр фото в чате [DONE ]

UX: Always-show inline preview (50 chars, Halfblocks) → v/м открывает fullscreen modal (iTerm2/Sixel) → / навигация между фото.

Реализовано:

  • Dual renderer архитектура:
    • inline_image_renderer: Halfblocks (быстро, Unicode блоки) для навигации
    • modal_image_renderer: iTerm2/Sixel (медленно, высокое качество) для просмотра
  • Performance optimizations:
    • Frame throttling: inline 15 FPS, текст 60 FPS
    • Lazy loading: только видимые изображения
    • LRU cache: max 100 протоколов
    • Skip partial rendering (no flickering)
  • UX улучшения:
    • Always-show inline preview (фикс. ширина 50 chars)
    • Fullscreen modal на v/м с aspect ratio
    • Loading indicator " Загрузка..." в модалке
    • Navigation hotkeys: / между фото, Esc/q закрыть
  • Типы и API:
    • MediaInfo, PhotoInfo, PhotoDownloadState, ImageModalState
    • ImagesConfig в config.toml
    • Feature flag images для зависимостей
  • Media модуль:
    • cache.rs: ImageCache (LRU)
    • image_renderer.rs: new() + new_fast()
  • UI модули:
    • modals/image_viewer.rs: fullscreen modal
    • messages.rs: throttled second-pass rendering

Результат:

  • 10x faster navigation (lazy loading)
  • Smooth 60 FPS text, 15 FPS images
  • Quality modal viewing (iTerm2/Sixel)
  • No flickering/shrinking

Фаза 12: Прослушивание голосовых сообщений [IN PROGRESS]

Этап 1: Инфраструктура аудио [DONE ]

  • Модуль src/audio/
    • player.rs — AudioPlayer на ffplay (subprocess)
    • cache.rs — VoiceCache (LRU, max 100 MB, ~/.cache/tele-tui/voice/)
  • AudioPlayer API: play(), pause() (SIGSTOP), resume() (SIGCONT), stop()

Этап 2: Интеграция с TDLib [DONE ]

  • Типы: VoiceInfo, VoiceDownloadState, PlaybackState, PlaybackStatus
  • Конвертация MessageVoiceNote в message_conversion.rs
  • download_voice_note() в TdClientTrait + client_impl + fake
  • Методы has_voice(), voice_info(), voice_info_mut() на MessageInfo

Этап 3: UI для воспроизведения [TODO]

  • Индикатор в сообщении (🎤, duration, progress bar)
  • Waveform визуализация (символы ▁▂▃▄▅▆▇█)

Этап 4: Хоткеи [DONE ]

  • Space — play/pause toggle (запуск + пауза/возобновление)
  • ←/→ — seek ±5 сек
  • Автоматическая остановка при навигации на другое сообщение

Этап 5: TODO

  • AudioConfig в config.toml
  • Ticker для progress bar (каждые 100ms)
  • Интеграция VoiceCache в handlers

Технические детали

  • Аудио: ffplay (subprocess), pause/resume через SIGSTOP/SIGCONT
  • Платформы: macOS, Linux (везде где есть ffmpeg)
  • Хоткеи: Space (play/pause), ←/→ (seek)