# 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: кастомные звуки | | 13 | Глубокий рефакторинг | 5 файлов (4582→модули), 5 traits, shared components, docs | --- ## Фаза 11: Показ изображений в чате [PLANNED] ### Этап 1: Инфраструктура [TODO] - [ ] Модуль src/media/ - image_cache.rs - LRU кэш для загруженных изображений - image_loader.rs - Асинхронная загрузка через TDLib - image_renderer.rs - Рендеринг в ratatui - [ ] Зависимости - ratatui-image 1.0 - поддержка изображений в TUI - Определение протокола терминала (Sixel/Kitty/iTerm2/Halfblocks) - [ ] ImageCache с лимитами - LRU кэш с максимальным размером в МБ - Автоматическая очистка старых изображений - MAX_IMAGE_CACHE_SIZE = 100 MB (по умолчанию) ### Этап 2: Интеграция с TDLib [TODO] - [ ] Обработка MessageContentPhoto - Добавить PhotoInfo в MessageInfo - Извлечение file_id, width, height из Photo - Выбор оптимального размера изображения (до 800px) - [ ] Загрузка файлов - Метод TdClient::download_photo(file_id) - Асинхронная загрузка через downloadFile API - Обработка состояний загрузки (pending/downloading/ready) - [ ] Кэширование - Сохранение путей к загруженным файлам - Повторное использование уже загруженных изображений ### Этап 3: Рендеринг в UI [TODO] - [ ] Модификация render_messages() - Определение возможностей терминала при старте - Рендеринг изображений через ratatui-image - Автоматическое масштабирование под размер области - Сохранение aspect ratio - [ ] Превью в списке сообщений - Миниатюры размером 20x10 символов - Lazy loading (загрузка только видимых) - Placeholder пока изображение грузится - [ ] Индикатор загрузки - Текстовая заглушка "[Загрузка фото...]" - Progress bar для больших файлов - Процент загрузки ### Этап 4: Полноэкранный просмотр [TODO] - [ ] Новый режим: ViewImage - `v` / `м` в режиме выбора - открыть изображение - Показ на весь экран терминала - `Esc` для закрытия - [ ] Информация об изображении - Размер файла - Разрешение (width x height) - Формат (JPEG/PNG/GIF) - [ ] Навигация - `←` / `→` - предыдущее/следующее изображение в чате - Автоматическая загрузка соседних изображений ### Этап 5: Конфигурация и UX [TODO] - [ ] MediaConfig в config.toml - show_images: bool - включить/отключить показ изображений - image_cache_mb: usize - размер кэша в МБ - preview_quality: "low" | "medium" | "high" - render_protocol: "auto" | "sixel" | "kitty" | "iterm2" | "halfblocks" - [ ] Поддержка различных терминалов - Auto-detection протокола при старте - Fallback на Unicode halfblocks для любого терминала - Опция отключения изображений если терминал не поддерживает - [ ] Оптимизация производительности - Асинхронная загрузка (не блокирует UI) - Приоритизация видимых изображений - Fast resize для превью - Кэширование отмасштабированных версий ### Этап 6: Обработка ошибок [TODO] - [ ] Graceful fallback - Текстовая заглушка "[Фото]" если загрузка не удалась - Повторная попытка по запросу пользователя - Логирование проблем через tracing - [ ] Ограничения - Таймаут загрузки (30 сек) - Максимальный размер файла для автозагрузки (10 MB) - Предупреждение для больших файлов ### Технические детали - **Поддерживаемые протоколы:** Sixel, Kitty Graphics, iTerm2 Inline Images, Unicode Halfblocks (fallback) - **Поддерживаемые форматы:** JPEG, PNG, GIF, WebP, BMP - **Новые хоткеи:** `v`/`м` - полноэкранный просмотр, `←`/`→` - навигация, `Esc` - закрыть --- ## Фаза 12: Прослушивание голосовых сообщений [PLANNED] ### Этап 1: Инфраструктура аудио [TODO] - [ ] Модуль src/audio/ - player.rs - AudioPlayer на rodio - cache.rs - VoiceCache для загруженных файлов - state.rs - PlaybackState (статус, позиция, громкость) - [ ] Зависимости - rodio 0.17 - Pure Rust аудио библиотека - Feature flag "audio" в Cargo.toml - [ ] AudioPlayer API - play(), pause()/resume(), stop(), seek(), set_volume(), get_position() - [ ] VoiceCache - Кэш загруженных OGG файлов в ~/.cache/tele-tui/voice/ - LRU политика очистки, MAX_VOICE_CACHE_SIZE = 100 MB ### Этап 2: Интеграция с TDLib [TODO] - [ ] Обработка MessageContentVoiceNote - Добавить VoiceNoteInfo в MessageInfo - Извлечение file_id, duration, mime_type, waveform - [ ] Загрузка файлов - Метод TdClient::download_voice_note(file_id) - Асинхронная загрузка через downloadFile API - Обработка состояний (pending/downloading/ready) - [ ] Кэширование путей к загруженным файлам ### Этап 3: UI для воспроизведения [TODO] - [ ] Индикатор в сообщении - Иконка 🎤 и длительность голосового - Progress bar во время воспроизведения - Статус: ▶ (playing), ⏸ (paused), ⏹ (stopped), ⏳ (loading) - Текущее время / общая длительность (0:08 / 0:15) - [ ] Footer с управлением - "[Space] Play/Pause [s] Stop [←/→] Seek [↑/↓] Volume" - [ ] Waveform визуализация (опционально) - Символы ▁▂▃▄▅▆▇█ для визуализации ### Этап 4: Хоткеи для управления [TODO] - [ ] Новые команды - Space - play/pause, s/ы - stop - ←/→ - seek ±5 сек, ↑/↓ - volume ±10% - [ ] Контекстная обработка (управление только во время воспроизведения) - [ ] Поддержка русской раскладки ### Этап 5: Конфигурация и UX [TODO] - [ ] AudioConfig в config.toml - enabled, default_volume, seek_step_seconds, autoplay, cache_size_mb, show_waveform - system_player_fallback, system_player (mpv, ffplay) - [ ] Асинхронная загрузка (не блокирует UI) - [ ] Ticker для обновления progress bar (каждые 100ms) ### Этап 6: Обработка ошибок [TODO] - [ ] Graceful fallback на системный плеер (mpv/ffplay) - [ ] Таймаут загрузки (30 сек), повторная попытка - [ ] Ограничения: максимальный размер файла, автоочистка кэша ### Этап 7: Дополнительные улучшения [TODO] - [ ] Автоматическая остановка при закрытии чата - [ ] Сохранение позиции при паузе - [ ] Префетчинг следующего голосового (опционально) ### Технические детали - **Аудио библиотека:** rodio 0.17 (Pure Rust, кроссплатформенная, OGG Opus) - **Платформы:** Linux (ALSA/PulseAudio), macOS (CoreAudio), Windows (WASAPI) - **Fallback:** mpv --no-video, ffplay -nodisp - **Новые хоткеи:** Space - play/pause, s/ы - stop, ←/→ - seek, ↑/↓ - volume