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:
@@ -23,6 +23,12 @@ tele-tui/
|
||||
│ │ ├── mod.rs
|
||||
│ │ ├── auth.rs
|
||||
│ │ └── main_input.rs
|
||||
│ ├── media/ # Работа с изображениями (PLANNED)
|
||||
│ │ ├── mod.rs # Экспорт публичных типов
|
||||
│ │ ├── image_cache.rs # LRU кэш для загруженных изображений
|
||||
│ │ ├── image_loader.rs # Асинхронная загрузка через TDLib
|
||||
│ │ └── image_renderer.rs # Рендеринг изображений в ratatui
|
||||
│ ├── notifications.rs # Desktop уведомления
|
||||
│ ├── tdlib/ # TDLib интеграция
|
||||
│ │ ├── mod.rs
|
||||
│ │ └── client.rs
|
||||
@@ -102,6 +108,42 @@ tele-tui/
|
||||
#### state.rs
|
||||
- `AppScreen` enum — текущий экран (Loading, Auth, Main)
|
||||
|
||||
### media/ — Работа с изображениями (PLANNED - Фаза 11)
|
||||
|
||||
#### image_cache.rs
|
||||
- `ImageCache` — LRU кэш для загруженных изображений
|
||||
- Лимит по размеру (MB) с автоматической очисткой
|
||||
- Хранение как в памяти (DynamicImage), так и на диске (PathBuf)
|
||||
- MAX_IMAGE_CACHE_SIZE = 100 MB (настраивается в config)
|
||||
|
||||
#### image_loader.rs
|
||||
- `ImageLoader` — асинхронная загрузка изображений через TDLib
|
||||
- Метод `load_photo(file_id)` — получить изображение из кэша или загрузить
|
||||
- Метод `download_and_cache(file)` — загрузка через TDLib downloadFile API
|
||||
- Обработка состояний загрузки (pending/downloading/ready)
|
||||
- Приоритизация видимых изображений
|
||||
|
||||
#### image_renderer.rs
|
||||
- `ImageRenderer` — рендеринг изображений в ratatui
|
||||
- Auto-detection протокола терминала (Sixel/Kitty/iTerm2/Halfblocks)
|
||||
- Автоматическое масштабирование под размер области
|
||||
- Сохранение aspect ratio
|
||||
- Fast resize для превью
|
||||
- Fallback на текстовую заглушку
|
||||
|
||||
#### mod.rs
|
||||
- Экспорт публичных типов
|
||||
- `PhotoInfo` struct — метаданные изображения (file_id, width, height)
|
||||
- `TerminalProtocol` enum — поддерживаемые протоколы отображения
|
||||
|
||||
### notifications.rs — Desktop уведомления
|
||||
|
||||
- `NotificationManager` — управление desktop уведомлениями
|
||||
- Интеграция с notify-rust для кроссплатформенных уведомлений
|
||||
- Фильтрация по muted чатам и mentions
|
||||
- Beautification медиа-типов с emoji
|
||||
- Настраиваемый timeout и urgency (Linux)
|
||||
|
||||
### tdlib/ — Telegram интеграция
|
||||
|
||||
#### client.rs
|
||||
@@ -269,6 +311,7 @@ App {
|
||||
is_delete_confirmation: bool,
|
||||
is_reaction_picker_mode: bool,
|
||||
profile_info: Option<ProfileInfo>,
|
||||
view_image_mode: Option<ViewImageState>, // PLANNED - Фаза 11
|
||||
|
||||
// Search
|
||||
search_query: String,
|
||||
@@ -276,6 +319,10 @@ App {
|
||||
|
||||
// Drafts
|
||||
drafts: HashMap<i64, String>,
|
||||
|
||||
// Media (PLANNED - Фаза 11)
|
||||
image_loader: ImageLoader,
|
||||
image_protocol: StatefulProtocol, // Terminal capabilities
|
||||
}
|
||||
```
|
||||
|
||||
@@ -302,6 +349,14 @@ App {
|
||||
### UI
|
||||
- `ratatui` 0.29 — TUI framework
|
||||
- `crossterm` 0.28 — terminal control
|
||||
- `ratatui-image` 1.0 — отображение изображений в TUI (PLANNED)
|
||||
|
||||
### Media (PLANNED)
|
||||
- `image` — загрузка и обработка изображений
|
||||
- `ratatui-image` — рендеринг в ratatui с поддержкой Sixel/Kitty/iTerm2
|
||||
|
||||
### Notifications
|
||||
- `notify-rust` 4.11 — desktop уведомления (feature flag)
|
||||
|
||||
### Telegram
|
||||
- `tdlib-rs` 1.1 — TDLib bindings
|
||||
|
||||
Reference in New Issue
Block a user