# TTUI - Требование к приложению ## Описание приложения Терминальный интерфейс для telegram ## Функциональные требования ### Интерфейс ┌─ TTUI ───────────────────────────────────────────────────────────────────────┐ │ 1:All │ 2:Personal │ 3:Work │ 4:Bots │ ├──────────────────────┬───────────────────────────────────────────────────────┤ │ 🔍 Search... │ 👤 Mom (online) │ ├──────────────────────┼───────────────────────────────────────────────────────┤ │ 📌 Saved Messages │ Today, Dec 21│ │ ▌ Mom (2)│ │ │ Boss │ Mom ────────────────────────────────────────── 14:20 │ │ Rust Community │ Привет! Ты покормил кота? │ │ Durov │ │ │ News Channel │ You ─────────────────────────────────────── 14:22 ✓✓ │ │ Spam Bot │ Да, конечно. Купил ему корм. │ │ Wife │ Скоро буду дома. │ │ Team Lead │ │ │ DevOps Chat (9)│ Mom ────────────────────────────────────────── 14:23 │ │ Server Alerts │ Отлично, захвати хлеба. │ │ Gym Bro │ │ │ Design Team │ You ─────────────────────────────────────── 14:25 ✓ │ │ Project X │ Ок. │ │ HR │ │ │ Mom's Friend │ │ │ Taxi Bot │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├──────────────────────┼───────────────────────────────────────────────────────┤ │ [User: Online] │ > **message** │ └──────────────────────┴───────────────────────────────────────────────────────┘ **commands** ### Список желаемого 1) футер - список папок в телеграме 2) список с чатами - лички и группы, сверху инпут для поиска чата 3) основной контент - открытый чат с сообщениями из чата, если никакой чат не открыт, то контент пустой, ничего не показываем. Снизу - инпут для ввода сообщения в чат, который открыт 4) снизу списка чата статус онлайн или нет сам пользователь приложения 5) при открытии чата должна загружаться история чата, а так же подгружаться новые сообщения от собеседника. 6) выделяем сообщения собеседника его никнеймом, группируем его сообщения и разделяем наши сообщения и сообщения собеседника, как на интерфейсе сверху 7) отображаем наше сообщение символом `✓`, если телеграм подтвердил, что сообщение отправлено, и выделяем `✓✓` если собеседник прочитал его 8) при навигации в чате выделяем строку курсивом, при выборе чата (то есть его открытии) ставим в начало символ ▌ 9) `(2)` — счетчик непрочитанных (можно красить в красный/зеленый). 10) `muted` — статус чата (серый цвет). 11) `@` — пинг/меншн. 12) с видео/картинками/голосовые пока ничего не делаем, ренденим заглушку (с упоминанием что это картинка или видео и тд) ### Дополнительно реализованные возможности 13) **Markdown форматирование**: жирный, курсив, подчёркивание, зачёркивание, код, спойлеры, ссылки, упоминания 14) **Редактирование сообщений**: ↑ при пустом инпуте → выбор → Enter → редактирование 15) **Удаление сообщений**: d/в/Delete в режиме выбора → подтверждение → удаление 16) **Reply на сообщения**: r/к в режиме выбора → превью → отправка ответа 17) **Forward сообщений**: f/а в режиме выбора → выбор чата → пересылка 18) **Typing indicator**: отображение "печатает..." когда собеседник набирает текст 19) **Закреплённые сообщения**: отображение pinned message вверху чата с переходом 20) **Поиск по сообщениям**: Ctrl+F для поиска внутри чата, n/N для навигации 21) **Черновики**: автосохранение текста при переключении между чатами 22) **Профиль**: i для просмотра информации о пользователе/группе 23) **Копирование**: y/н для копирования сообщения в системный буфер 24) **Реакции**: e/у для добавления реакций, emoji picker с навигацией стрелками 25) **Конфигурация**: ~/.config/tele-tui/config.toml для настройки цветов и timezone 26) **Credentials**: приоритетная загрузка из ~/.config/tele-tui/credentials или .env 27) **Блочный курсор**: Vim-style курсор █ с навигацией ←/→/Home/End 28) **Динамический инпут**: автоматическое расширение до 10 строк 29) **Онлайн-статус**: зелёная точка ● для онлайн пользователей 30) **Индикаторы**: 📌 закреплённые чаты, 🔇 замьюченные, @ упоминания 31) **Состояние сети**: индикатор в футере (⚠ Нет сети, ⏳ Подключение...) 32) **Graceful shutdown**: корректное закрытие при Ctrl+C ### Управление 1) ctrl+c или command+c - выход из программы 2) "h j k l" - влево, вниз, вверх, вправо (навигация в левом столбце) vim-style управление 3) стрелки - управление, так же как и "h j k l" 4) "command + 1", "command + 2" и так далее - переключение между папками, которые созданы в телеграме 5) из интерфейса "**message**" - это инпут для ввода сообщения в открытый чат 6) ctrl + s - фокус в инпут поиска чата 7) Esc - закрытие открытого чата 8) command + стрелка вверх (или ctrl + k) - выделяем самый верхний чат (без открытия) 9) поддержка русской раскладки: "р о л д" соответствует "h j k l" 10) Ctrl+R - обновить список чатов ### Реализованные команды #### Навигация ``` ↑/↓ или k/j (р/о): Navigate | Enter: Open/Send | Esc: Close/Cancel | 1-9: Folders Ctrl+S: Search Chats | Ctrl+R: Refresh | Ctrl+F: Search in Chat | Ctrl+C: Quit ``` #### Работа с сообщениями ``` ↑ (пустой инпут): Select message | Enter: Edit | r/к: Reply | f/а: Forward d/в/Delete: Delete | y/н: Copy | e/у: React | i: Profile ``` #### Emoji Picker (реакции) ``` ←/→/↑/↓: Navigate | Enter: Toggle reaction | Esc: Close ``` ## Технологии Пишем на rust-е 1) ratatui 0.29 - для tui интерфейса 2) tdlib-rs 1.1 - для подключения апи телеграма (обёртка над TDLib) 3) tokio 1.x - async runtime 4) crossterm 0.28 - кроссплатформенный терминал 5) serde + serde_json 1.0 - сериализация/десериализация 6) toml 0.8 - парсинг конфигурации 7) dirs 5.0 - XDG директории (config, data) 8) clipboard 0.5 - работа с системным буфером обмена 9) chrono 0.4 - форматирование даты/времени 10) dotenvy 0.15 - загрузка .env файлов ## Нефункциональные требования ### Производительность 1) программа должна выдавать 60 фпс 2) интерфейс не должен мерцать 3) минимальное разрешение - 600 символов, максимального нет, не ограничиваем