Documented new feature for playing voice messages directly from TUI with full playback controls and visual feedback. Documentation Changes: - ROADMAP.md: Added Phase 12 with 7 stages - Stage 1: Audio infrastructure (audio module, AudioPlayer, VoiceCache) - Stage 2: TDLib integration (VoiceNoteInfo, download_voice_note) - Stage 3: UI for playback (progress bar, status indicators, footer) - Stage 4: Hotkeys (play/pause, stop, seek, volume control) - Stage 5: Configuration and UX (AudioConfig, ticker updates) - Stage 6: Error handling and fallback (system player) - Stage 7: Additional improvements (prefetching, animations) - CONTEXT.md: Added PLANNED section for Phase 12 - Technical stack: rodio 0.17, TDLib downloadFile - Platforms: Linux (ALSA/PulseAudio), macOS (CoreAudio), Windows (WASAPI) - Architecture: src/audio/ module with 3 submodules - LRU cache (100 MB limit) - Async loading, ticker for progress updates - Configuration options in config.toml - Fallback to system players (mpv, ffplay) - HOTKEYS.md: Added new hotkeys - `Space` - play/pause (in voice message selection mode) - `s` / `ы` - stop playback - `←` / `→` - seek -5s/+5s (during playback) - `↑` / `↓` - volume +/-10% (during playback) - Added new "Voice Playback" section - Added new "Voice Playback Mode" section - PROJECT_STRUCTURE.md: Added audio/ module documentation - player.rs - AudioPlayer with rodio - cache.rs - VoiceCache for downloaded OGG files - state.rs - PlaybackState (status, position, duration, volume) - Updated dependencies section (rodio 0.17) - Updated App state with audio fields Technical Details: - rodio 0.17 Pure Rust audio library (cross-platform) - OGG Opus support (Telegram voice message format) - Visual progress bar: ▶ ████████░░░░░░ 0:08 / 0:15 - Status indicators: ▶ (playing), ⏸ (paused), ⏹ (stopped), ⏳ (loading) - Smart caching with size limits - Async non-blocking file download - Ticker for smooth progress updates (100ms) - Graceful fallback to system players New Configuration (config.toml): - enabled: bool - enable/disable audio playback - default_volume: f32 - volume (0.0 - 1.0) - seek_step_seconds: i32 - seek step in seconds (default 5) - autoplay: bool - autoplay on selection - cache_size_mb: usize - cache size limit in MB - show_waveform: bool - show waveform visualization - system_player_fallback: bool - use system player fallback - system_player: String - system player command (mpv, ffplay) Status: PLANNED (documentation complete, implementation pending) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
195 lines
8.0 KiB
Markdown
195 lines
8.0 KiB
Markdown
# Горячие клавиши tele-tui
|
||
|
||
## Общая навигация
|
||
|
||
| Клавиша | Русская раскладка | Действие |
|
||
|---------|-------------------|----------|
|
||
| `↑` / `k` | `р` | Вверх по списку |
|
||
| `↓` / `j` | `о` | Вниз по списку |
|
||
| `Enter` | | Открыть чат / Отправить сообщение |
|
||
| `Esc` | | Закрыть чат / Отменить действие |
|
||
| `Ctrl+C` | | Выход из приложения |
|
||
| `Ctrl+R` | | Обновить список чатов |
|
||
|
||
## Папки и поиск
|
||
|
||
| Клавиша | Действие |
|
||
|---------|----------|
|
||
| `1-9` | Переключение между папками Telegram |
|
||
| `Ctrl+S` | Открыть поиск по чатам |
|
||
| `Ctrl+F` | Открыть поиск в текущем чате |
|
||
| `n` | Следующий результат поиска |
|
||
| `N` | Предыдущий результат поиска |
|
||
|
||
## Работа с сообщениями
|
||
|
||
### Навигация и выбор
|
||
|
||
| Клавиша | Действие |
|
||
|---------|----------|
|
||
| `↑/↓` | Скролл сообщений (в открытом чате) |
|
||
| `↑` | Выбор сообщения (при пустом поле ввода) |
|
||
| `Esc` | Отменить выбор |
|
||
|
||
### Действия с сообщениями
|
||
|
||
| Клавиша | Русская раскладка | Действие |
|
||
|---------|-------------------|----------|
|
||
| `Enter` | | Редактировать выбранное сообщение |
|
||
| `r` | `к` | Ответить на сообщение (Reply) |
|
||
| `f` | `а` | Переслать сообщение (Forward) |
|
||
| `d` / `Delete` | `в` | Удалить сообщение |
|
||
| `y` | `н` | Копировать текст в буфер обмена |
|
||
| `e` | `у` | Добавить реакцию (Emoji picker) |
|
||
| `v` | `м` | Открыть изображение в полном размере |
|
||
| `Ctrl+i` | `Ctrl+ш` | Открыть профиль чата/пользователя |
|
||
|
||
## Просмотр изображений
|
||
|
||
### Режим просмотра изображения
|
||
|
||
| Клавиша | Действие |
|
||
|---------|----------|
|
||
| `v` / `м` | Открыть изображение (в режиме выбора) |
|
||
| `←` | Предыдущее изображение в чате |
|
||
| `→` | Следующее изображение в чате |
|
||
| `Esc` | Закрыть просмотр изображения |
|
||
|
||
**Примечание**: Изображения отображаются inline в чате автоматически. Используйте `v` для просмотра в полном размере.
|
||
|
||
## Прослушивание голосовых сообщений
|
||
|
||
### Управление воспроизведением
|
||
|
||
| Клавиша | Русская раскладка | Действие |
|
||
|---------|-------------------|----------|
|
||
| `Space` | | Воспроизвести/Пауза (в режиме выбора голосового) |
|
||
| `s` | `ы` | Остановить воспроизведение |
|
||
|
||
### Во время воспроизведения
|
||
|
||
| Клавиша | Действие |
|
||
|---------|----------|
|
||
| `Space` | Пауза / Возобновить |
|
||
| `s` / `ы` | Остановить |
|
||
| `←` | Перемотка назад (по умолчанию -5 сек) |
|
||
| `→` | Перемотка вперед (по умолчанию +5 сек) |
|
||
| `↑` | Увеличить громкость (+10%) |
|
||
| `↓` | Уменьшить громкость (-10%) |
|
||
|
||
**Примечание**: Голосовые сообщения показывают progress bar во время воспроизведения: `▶ ████████░░░░░░ 0:08 / 0:15`
|
||
|
||
## Модалки подтверждения
|
||
|
||
### Удаление сообщения
|
||
|
||
| Клавиша | Русская раскладка | Действие |
|
||
|---------|-------------------|----------|
|
||
| `y` / `Enter` | `н` | Подтвердить удаление |
|
||
| `n` / `Esc` | `т` | Отменить удаление |
|
||
|
||
## Emoji Picker (реакции)
|
||
|
||
| Клавиша | Действие |
|
||
|---------|----------|
|
||
| `←` | Влево по сетке эмодзи |
|
||
| `→` | Вправо по сетке эмодзи |
|
||
| `↑` | Вверх по сетке эмодзи |
|
||
| `↓` | Вниз по сетке эмодзи |
|
||
| `Enter` | Добавить/удалить реакцию |
|
||
| `Esc` | Закрыть emoji picker |
|
||
|
||
## Редактирование текста
|
||
|
||
### Навигация по тексту
|
||
|
||
| Клавиша | Действие |
|
||
|---------|----------|
|
||
| `←` | Курсор влево |
|
||
| `→` | Курсор вправо |
|
||
| `Home` | Курсор в начало строки |
|
||
| `End` | Курсор в конец строки |
|
||
|
||
### Редактирование
|
||
|
||
| Клавиша | Действие |
|
||
|---------|----------|
|
||
| `Backspace` | Удалить символ слева от курсора |
|
||
| `Delete` | Удалить символ справа от курсора |
|
||
| `Enter` | Новая строка / Отправить (зависит от контекста) |
|
||
|
||
## Режимы работы
|
||
|
||
### Режим списка чатов
|
||
- Навигация: `↑/↓`
|
||
- Открыть чат: `Enter`
|
||
- Поиск: `Ctrl+S`
|
||
- Папки: `1-9`
|
||
|
||
### Режим открытого чата
|
||
- Скролл: `↑/↓`
|
||
- Выбор сообщения: `↑` (при пустом инпуте)
|
||
- Поиск в чате: `Ctrl+F`
|
||
- Закрыть чат: `Esc`
|
||
|
||
### Режим выбора сообщения
|
||
- Редактировать: `Enter`
|
||
- Ответить: `r` / `к`
|
||
- Переслать: `f` / `а`
|
||
- Удалить: `d` / `в` / `Delete`
|
||
- Копировать: `y` / `н`
|
||
- Реакция: `e` / `у`
|
||
- Просмотр изображения: `v` / `м` (если выбрано сообщение с фото)
|
||
- Воспроизведение голосового: `Space` (если выбрано голосовое сообщение)
|
||
- Отменить: `Esc`
|
||
|
||
### Режим редактирования
|
||
- Редактировать текст: см. "Редактирование текста"
|
||
- Отправить: `Enter`
|
||
- Отменить: `Esc`
|
||
|
||
### Режим ответа (Reply)
|
||
- Редактировать ответ: см. "Редактирование текста"
|
||
- Отправить: `Enter`
|
||
- Отменить: `Esc`
|
||
|
||
### Режим пересылки (Forward)
|
||
- Выбрать чат: `↑/↓`
|
||
- Переслать: `Enter`
|
||
- Отменить: `Esc`
|
||
|
||
### Режим просмотра изображения
|
||
- Навигация: `←/→` (предыдущее/следующее изображение)
|
||
- Закрыть: `Esc`
|
||
|
||
### Режим воспроизведения голосового
|
||
- Пауза/Возобновить: `Space`
|
||
- Остановить: `s` / `ы`
|
||
- Перемотка: `←/→` (-5с / +5с)
|
||
- Громкость: `↑/↓` (+/- 10%)
|
||
|
||
## Поддержка русской раскладки
|
||
|
||
Все основные vim-клавиши поддерживают русскую раскладку:
|
||
|
||
| Английская | Русская | Действие |
|
||
|------------|---------|----------|
|
||
| `h` | `р` | Влево |
|
||
| `j` | `о` | Вниз |
|
||
| `k` | `л` | Вверх |
|
||
| `l` | `д` | Вправо |
|
||
| `r` | `к` | Reply |
|
||
| `f` | `а` | Forward |
|
||
| `d` | `в` | Delete |
|
||
| `y` | `н` | Copy (Yank) |
|
||
| `e` | `у` | Emoji reaction |
|
||
| `v` | `м` | View image |
|
||
| `s` | `ы` | Stop audio |
|
||
|
||
## Подсказки
|
||
|
||
- Текущие доступные команды всегда отображаются в нижней части экрана (footer)
|
||
- При открытой модалке доступны только действия этой модалки
|
||
- `Esc` всегда отменяет текущее действие и возвращает на шаг назад
|
||
- Блочный курсор █ показывает текущую позицию при редактировании текста
|