Files
telegram-tui/ROADMAP.md
Mikhail Kilin 6845ee69bf docs: trim CONTEXT.md and ROADMAP.md (3006→246 lines, -92%)
Completed phases condensed to summary tables, detailed history
removed (available in git log). Detailed plans kept only for
upcoming phases 11 (images) and 12 (voice messages).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 16:57:27 +03:00

10 KiB
Raw Blame History

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