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
5.1 KiB
5.1 KiB
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,ImageModalStateImagesConfigв config.toml- Feature flag
imagesдля зависимостей
- Media модуль:
cache.rs: ImageCache (LRU)image_renderer.rs: new() + new_fast()
- UI модули:
modals/image_viewer.rs: fullscreen modalmessages.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)