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
This commit is contained in:
21
CONTEXT.md
21
CONTEXT.md
@@ -1,6 +1,6 @@
|
||||
# Текущий контекст проекта
|
||||
|
||||
## Статус: Фаза 11 — Inline просмотр фото (DONE)
|
||||
## Статус: Фаза 12 — Прослушивание голосовых сообщений (IN PROGRESS)
|
||||
|
||||
### Завершённые фазы (краткий итог)
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
| 9 | Расширенные возможности (typing, pinned, поиск в чате, черновики, профиль, копирование, реакции, конфиг) | DONE |
|
||||
| 10 | Desktop уведомления (notify-rust, muted фильтр, mentions, медиа) | DONE (83%) |
|
||||
| 11 | Inline просмотр фото (ratatui-image, кэш, загрузка) | DONE |
|
||||
| 12 | Прослушивание голосовых сообщений (ffplay, play/pause, seek) | IN PROGRESS |
|
||||
| 13 | Глубокий рефакторинг архитектуры (7 этапов) | DONE |
|
||||
|
||||
### Фаза 11: Inline фото + оптимизации (подробности)
|
||||
@@ -57,6 +58,22 @@ Feature-gated (`images`), 2-tier архитектура:
|
||||
- **Очистка дублей**: ~220 строк удалено (shared components, format_user_status, scroll_to_message)
|
||||
- **Документация**: PROJECT_STRUCTURE.md переписан, 16 файлов получили `//!` docs
|
||||
|
||||
### Фаза 12: Голосовые сообщения (подробности)
|
||||
|
||||
**Реализовано:**
|
||||
- **AudioPlayer** на ffplay (subprocess): play, pause (SIGSTOP), resume (SIGCONT), stop
|
||||
- **VoiceCache**: LRU кэш OGG файлов в `~/.cache/tele-tui/voice/` (max 100 MB)
|
||||
- **Типы**: `VoiceInfo`, `VoiceDownloadState`, `PlaybackState`, `PlaybackStatus`
|
||||
- **TDLib интеграция**: `download_voice_note()`, конвертация `MessageVoiceNote`
|
||||
- **Хоткеи**: Space (play/pause), ←/→ (seek ±5s)
|
||||
- **Автостоп**: при навигации на другое сообщение воспроизведение останавливается
|
||||
|
||||
**Не реализовано:**
|
||||
- UI индикаторы в сообщениях (🎤, progress bar, waveform)
|
||||
- AudioConfig в config.toml
|
||||
- Ticker для progress bar
|
||||
- VoiceCache не интегрирован в handlers
|
||||
|
||||
### Ключевая архитектура
|
||||
|
||||
```
|
||||
@@ -64,6 +81,7 @@ main.rs → event loop (16ms poll)
|
||||
├── input/ → роутер + handlers/ (chat, chat_list, compose, modal, search)
|
||||
├── app/ → App<T: TdClientTrait> + methods/ (5 traits, 67 методов)
|
||||
├── ui/ → рендеринг (messages, chat_list, modals/, compose_bar, components/)
|
||||
├── audio/ → player.rs (ffplay), cache.rs (VoiceCache)
|
||||
├── media/ → [feature=images] cache.rs, image_renderer.rs
|
||||
└── tdlib/ → TDLib wrapper (client, auth, chats, messages/, users, reactions, types)
|
||||
```
|
||||
@@ -86,6 +104,7 @@ main.rs → event loop (16ms poll)
|
||||
5. **Конфиг**: TOML `~/.config/tele-tui/config.toml`, credentials с приоритетом (XDG → .env)
|
||||
6. **Feature-gated images**: `images` feature flag для ratatui-image + image deps
|
||||
7. **Dual renderer**: inline (Halfblocks, 15 FPS) + modal (iTerm2/Sixel, high quality) для баланса скорости/качества
|
||||
8. **Audio via ffplay**: subprocess с SIGSTOP/SIGCONT для pause/resume, автостоп при навигации
|
||||
|
||||
### Зависимости (основные)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user