# 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) → `←`/`→` навигация между фото. ### Реализовано: - [x] **Dual renderer архитектура**: - `inline_image_renderer`: Halfblocks (быстро, Unicode блоки) для навигации - `modal_image_renderer`: iTerm2/Sixel (медленно, высокое качество) для просмотра - [x] **Performance optimizations**: - Frame throttling: inline 15 FPS, текст 60 FPS - Lazy loading: только видимые изображения - LRU cache: max 100 протоколов - Skip partial rendering (no flickering) - [x] **UX улучшения**: - Always-show inline preview (фикс. ширина 50 chars) - Fullscreen modal на `v`/`м` с aspect ratio - Loading indicator "⏳ Загрузка..." в модалке - Navigation hotkeys: `←`/`→` между фото, `Esc`/`q` закрыть - [x] **Типы и API**: - `MediaInfo`, `PhotoInfo`, `PhotoDownloadState`, `ImageModalState` - `ImagesConfig` в config.toml - Feature flag `images` для зависимостей - [x] **Media модуль**: - `cache.rs`: ImageCache (LRU) - `image_renderer.rs`: new() + new_fast() - [x] **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 ✅] - [x] Модуль `src/audio/` - `player.rs` — AudioPlayer на ffplay (subprocess) - `cache.rs` — VoiceCache (LRU, max 100 MB, `~/.cache/tele-tui/voice/`) - [x] AudioPlayer API: play(), pause() (SIGSTOP), resume() (SIGCONT), stop() ### Этап 2: Интеграция с TDLib [DONE ✅] - [x] Типы: `VoiceInfo`, `VoiceDownloadState`, `PlaybackState`, `PlaybackStatus` - [x] Конвертация `MessageVoiceNote` в `message_conversion.rs` - [x] `download_voice_note()` в TdClientTrait + client_impl + fake - [x] Методы `has_voice()`, `voice_info()`, `voice_info_mut()` на `MessageInfo` ### Этап 3: UI для воспроизведения [TODO] - [ ] Индикатор в сообщении (🎤, duration, progress bar) - [ ] Waveform визуализация (символы ▁▂▃▄▅▆▇█) ### Этап 4: Хоткеи [DONE ✅] - [x] Space — play/pause toggle (запуск + пауза/возобновление) - [x] ←/→ — seek ±5 сек - [x] Автоматическая остановка при навигации на другое сообщение ### Этап 5: TODO - [ ] AudioConfig в config.toml - [ ] Ticker для progress bar (каждые 100ms) - [ ] Интеграция VoiceCache в handlers ### Технические детали - **Аудио:** ffplay (subprocess), pause/resume через SIGSTOP/SIGCONT - **Платформы:** macOS, Linux (везде где есть ffmpeg) - **Хоткеи:** Space (play/pause), ←/→ (seek)