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:
Mikhail Kilin
2026-02-05 02:43:04 +03:00
parent bea0bcbed0
commit 8844c2953d
4 changed files with 207 additions and 0 deletions

View File

@@ -42,6 +42,43 @@
- `src/app/mod.rs`: вызов configure_notifications() при инициализации
- **Тесты**: Компиляция успешна (cargo build --lib ✅, cargo build ✅)
**📸 PLANNED: Показ изображений в чате (Фаза 11)**
- **Описание**: Отображение изображений прямо в терминале вместо текстовых заглушек "[Фото]"
- **Технологии**:
- ratatui-image 1.0 - поддержка изображений в TUI
- Протоколы: Sixel, Kitty Graphics, iTerm2 Inline Images, Unicode Halfblocks
- TDLib downloadFile API для загрузки фото
- LRU кэш для загруженных изображений (лимит 100 MB)
- **Архитектура**:
- `src/media/` - новый модуль (image_cache, image_loader, image_renderer)
- `PhotoInfo` в `MessageInfo` для хранения метаданных изображения
- Асинхронная загрузка в фоне (не блокирует UI)
- Lazy loading - загрузка только видимых изображений
- **UX фичи**:
- Превью в списке сообщений (миниатюры 20x10 символов)
- Индикатор загрузки с progress bar
- Полноэкранный просмотр: `v` в режиме выбора
- Навигация между изображениями: `←` / `→`
- Auto-detection возможностей терминала
- Fallback на Unicode halfblocks для любых терминалов
- **Конфигурация** (config.toml):
- show_images: bool - включить/отключить
- image_cache_mb: usize - размер кэша
- preview_quality: "low" | "medium" | "high"
- render_protocol: "auto" | "sixel" | "kitty" | "iterm2" | "halfblocks"
- **План реализации**:
- Этап 1: Инфраструктура (модуль media, ImageCache, зависимости)
- Этап 2: Интеграция с TDLib (PhotoInfo, download_photo)
- Этап 3: Рендеринг в UI (превью, масштабирование)
- Этап 4: Полноэкранный просмотр (новый режим ViewImage)
- Этап 5: Конфигурация и оптимизация
- Этап 6: Обработка ошибок и fallback
- **Ожидаемый результат**:
- Фото показываются inline в чате с автоматическим масштабированием
- Поддержка всех популярных терминалов (Kitty, WezTerm, iTerm2, и любых других)
- Производительность: кэширование, асинхронность, lazy loading
- **Статус**: PLANNED (документация готова в ROADMAP.md)
**🐛 FIX: HashMap keybindings коллизии - дубликаты клавиш**
- **Проблема #1**: `KeyCode::Enter` был привязан к 3 командам (OpenChat, SelectMessage, SubmitMessage)
- **Проблема #2**: `KeyCode::Up` был привязан к 2 командам (MoveUp, EditMessage)