# Roadmap ## Фаза 1: Базовая инфраструктура [DONE] - [x] Настройка проекта (Cargo.toml) - [x] TUI фреймворк (ratatui + crossterm) - [x] Базовый layout (папки, список чатов, область сообщений) - [x] Vim-style навигация (hjkl, стрелки) - [x] Русская раскладка (ролд) ## Фаза 2: TDLib интеграция [DONE] - [x] Подключение tdlib-rs - [x] Авторизация (телефон + код + 2FA) - [x] Сохранение сессии - [x] Загрузка списка чатов - [x] Загрузка истории сообщений - [x] Отключение логов TDLib ## Фаза 3: Улучшение UX [DONE] - [x] Отправка сообщений - [x] Фильтрация чатов (только Main, без архива) - [x] Поиск по чатам (Ctrl+S) - [x] Скролл истории сообщений - [x] Загрузка имён пользователей (вместо User_ID) - [x] Отметка сообщений как прочитанные - [x] Реальное время: новые сообщения ## Фаза 4: Папки и фильтрация [DONE] - [x] Загрузка папок из Telegram - [x] Переключение между папками (1-9) - [x] Фильтрация чатов по папке ## Фаза 5: Расширенный функционал [DONE] - [x] Отображение онлайн-статуса (зелёная точка ●) - [x] Статус доставки/прочтения (✓, ✓✓) - [x] Поддержка медиа-заглушек (фото, видео, голосовые, стикеры и др.) - [x] Mentions (@) — индикатор непрочитанных упоминаний - [x] Muted чаты (иконка 🔇) ## Фаза 6: Полировка [DONE] - [x] Оптимизация использования памяти (базовая) - Очистка сообщений при закрытии чата - Лимит кэша пользователей (500) - Периодическая очистка неактивных записей - [x] Оптимизация 60 FPS - Poll таймаут 16ms - Флаг `needs_redraw` — рендеринг только при изменениях - Обработка Event::Resize для перерисовки при изменении размера - [x] Минимальное разрешение (80x20) - Предупреждение если терминал слишком мал - [x] Обработка ошибок сети - NetworkState enum (WaitingForNetwork, Connecting, etc.) - Индикатор в футере с цветовой индикацией - [x] Graceful shutdown - AtomicBool флаг для остановки polling - Корректное закрытие TDLib клиента - Таймаут ожидания завершения задач - [x] Динамический инпут - Автоматическое расширение до 10 строк - Wrap для длинного текста - [x] Перенос длинных сообщений - Автоматический wrap на несколько строк - Правильное выравнивание для исходящих/входящих ## Фаза 7: Глубокий рефакторинг памяти [DONE] - [x] Удалить дублирование current_messages между App и TdClient - [x] Использовать единый источник данных для сообщений - [x] Реализовать LRU-кэш для user_names/user_statuses вместо простого лимита - [x] Lazy loading для имён пользователей (батчевая загрузка последних 5 за цикл) - [x] Лимиты памяти: - MAX_MESSAGES_IN_CHAT = 500 - MAX_CHATS = 200 - MAX_CHAT_USER_IDS = 500 - MAX_USER_CACHE_SIZE = 500 (LRU) ## Фаза 8: Дополнительные фичи [DONE] - [x] Markdown форматирование в сообщениях - Bold, Italic, Underline, Strikethrough - Code (inline, Pre, PreCode) - Spoiler (скрытый текст) - URLs, упоминания (@) - [x] Редактирование сообщений - ↑ при пустом инпуте → выбор сообщения - Enter для начала редактирования - Подсветка выбранного сообщения (▶) - Esc для отмены - [x] Удаление сообщений - d / в / Delete в режиме выбора - Модалка подтверждения (y/n) - Удаление для всех если возможно - [x] Индикатор редактирования (✎) - Отображается рядом с временем для отредактированных сообщений - [x] Блочный курсор в поле ввода - Vim-style курсор █ - Перемещение ←/→, Home/End - Редактирование в любой позиции - [x] Reply на сообщения - `r` / `к` в режиме выбора → режим ответа - Превью сообщения в поле ввода - Esc для отмены - [x] Forward сообщений - `f` / `а` в режиме выбора → режим пересылки - Превью сообщения в поле ввода - Выбор чата стрелками, Enter для пересылки - Esc для отмены - Отображение "↪ Переслано от" для пересланных сообщений ## Фаза 9: Расширенные возможности [DONE] - [x] Typing indicator ("печатает...") - Показывать когда собеседник печатает - Отправлять свой статус печати при наборе текста - [x] Закреплённые сообщения (Pinned) - Отображать pinned message вверху открытого чата - Клик/хоткей для перехода к закреплённому сообщению - [x] Поиск по сообщениям в чате - `Ctrl+F` — поиск текста внутри открытого чата - Навигация по результатам (n/N или стрелки) - Подсветка найденных совпадений - [x] Черновики - Сохранять набранный текст при переключении между чатами - Индикатор черновика в списке чатов - Восстановление текста при возврате в чат - [x] Профиль пользователя/чата - `Ctrl+i` — открыть информацию о чате/собеседнике - Для личных чатов: имя, username, телефон, био - Для групп: название, описание, количество участников - [x] Копирование сообщений - `y` / `н` в режиме выбора — скопировать текст в системный буфер обмена - Использовать clipboard crate для кроссплатформенности - [x] Реакции - Отображение реакций под сообщениями - `e` в режиме выбора — добавить реакцию (emoji picker) - Список доступных реакций чата - [x] Конфигурационный файл - `~/.config/tele-tui/config.toml` - Настройки: цветовая схема, часовой пояс, хоткеи - Загрузка конфига при старте ## Фаза 10: Desktop уведомления [DONE - 83%] ### Стадия 1: Базовая реализация [DONE] - [x] NotificationManager модуль - notify-rust интеграция (версия 4.11) - Feature flag "notifications" в Cargo.toml - Базовая структура с настройками - [x] Конфигурация уведомлений - NotificationsConfig в config.toml - enabled: bool - вкл/выкл уведомлений - only_mentions: bool - только упоминания - show_preview: bool - показывать превью текста - [x] Интеграция с TdClient - Поле notification_manager в TdClient - Метод configure_notifications() - Обработка в handle_new_message_update() - [x] Базовая отправка уведомлений - Уведомления для сообщений не из текущего чата - Форматирование title (имя чата) и body (текст/медиа-заглушка) - Sender name из MessageInfo ### Стадия 2: Улучшения [IN PROGRESS] - [x] Синхронизация muted чатов - Загрузка списка muted чатов из Telegram - Вызов sync_muted_chats() при инициализации и обновлении (Ctrl+R) - Muted чаты автоматически фильтруются из уведомлений - [x] Фильтрация по упоминаниям - Метод MessageInfo::has_mention() проверяет TextEntityType::Mention и MentionName - NotificationManager применяет фильтр only_mentions из конфига - Работает для @username и inline mentions - [x] Поддержка типов медиа - Метод beautify_media_labels() заменяет текстовые заглушки на emoji - Поддержка: 📷 Фото, 🎥 Видео, 🎞️ GIF, 🎤 Голосовое, 🎨 Стикер - Также: 📎 Файл, 🎵 Аудио, 📹 Видеосообщение, 📍 Локация, 👤 Контакт, 📊 Опрос - [ ] Кастомизация звуков - Настройка звуков уведомлений в config.toml - Разные звуки для разных типов сообщений ### Стадия 3: Полировка [DONE] - [x] Обработка ошибок - Graceful fallback если уведомления недоступны (возвращает Ok без паники) - Логирование ошибок через tracing::warn! - Детальное логирование причин пропуска уведомлений (debug level) - [x] Дополнительные настройки - timeout_ms - продолжительность показа (0 = системное значение) - urgency - уровень важности: "low", "normal", "critical" (только Linux) - Красивые эмодзи для типов медиа - [ ] Опциональные улучшения (не критично) - Кросс-платформенное тестирование (требует ручного тестирования) - icon - кастомная иконка приложения - Actions в уведомлениях (кнопки "Ответить", "Прочитано")