Some checks are pending
CI / Check (pull_request) Waiting to run
CI / Format (pull_request) Waiting to run
CI / Clippy (pull_request) Waiting to run
CI / Build (macos-latest) (pull_request) Waiting to run
CI / Build (ubuntu-latest) (pull_request) Waiting to run
CI / Build (windows-latest) (pull_request) Waiting to run
132 lines
11 KiB
Markdown
132 lines
11 KiB
Markdown
# 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 символов, максимального нет, не ограничиваем
|