docs: add Phase 11 - image display in chat
Documented new feature for displaying images directly in terminal instead of text placeholders like "[Фото]". Documentation Changes: - ROADMAP.md: Added Phase 11 with 6 stages - Stage 1: Infrastructure (media module, ImageCache, dependencies) - Stage 2: TDLib integration (PhotoInfo, download_photo) - Stage 3: UI rendering (inline previews, scaling) - Stage 4: Fullscreen viewer (new ViewImage mode) - Stage 5: Configuration and UX (MediaConfig in config.toml) - Stage 6: Error handling and fallback - CONTEXT.md: Added PLANNED section for Phase 11 - Technical stack: ratatui-image 1.0, TDLib downloadFile - Protocols: Sixel, Kitty Graphics, iTerm2, Unicode Halfblocks - Architecture: src/media/ module with 3 submodules - LRU cache (100 MB limit) - Async loading, lazy loading for visible images - Configuration options in config.toml - HOTKEYS.md: Added new hotkeys - `v` / `м` - open image in fullscreen (in selection mode) - `←` / `→` - navigate between images (in viewer mode) - `Esc` - close image viewer - Added new "View Image Mode" section - PROJECT_STRUCTURE.md: Added media/ module documentation - image_cache.rs - LRU cache for downloaded images - image_loader.rs - Async loading via TDLib - image_renderer.rs - Rendering with protocol detection - Updated dependencies section - Updated App state with new fields Technical Details: - Terminal protocol auto-detection (Sixel/Kitty/iTerm2/Halfblocks) - Cross-platform support (Linux, macOS, Windows) - Graceful fallback to Unicode halfblocks for all terminals - Async non-blocking image loading - Smart caching with size limits - Configurable quality and protocol settings New Configuration (config.toml): - show_images: bool - enable/disable image display - image_cache_mb: usize - cache size limit in MB - preview_quality: "low" | "medium" | "high" - render_protocol: "auto" | "sixel" | "kitty" | "iterm2" | "halfblocks" Status: PLANNED (documentation complete, implementation pending) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
95
ROADMAP.md
95
ROADMAP.md
@@ -195,3 +195,98 @@
|
||||
- Кросс-платформенное тестирование (требует ручного тестирования)
|
||||
- icon - кастомная иконка приложения
|
||||
- Actions в уведомлениях (кнопки "Ответить", "Прочитано")
|
||||
|
||||
## Фаза 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 (xterm, WezTerm, mintty)
|
||||
- Kitty Graphics Protocol (Kitty terminal)
|
||||
- iTerm2 Inline Images (iTerm2 на macOS)
|
||||
- Unicode Halfblocks (fallback для всех)
|
||||
- **Поддерживаемые форматы:**
|
||||
- JPEG, PNG, GIF, WebP, BMP
|
||||
- **Новые хоткеи:**
|
||||
- `v` / `м` - открыть изображение в полном размере (режим выбора)
|
||||
- `←` / `→` - навигация между изображениями (в режиме просмотра)
|
||||
- `Esc` - закрыть полноэкранный просмотр
|
||||
|
||||
Reference in New Issue
Block a user