Files
f7cloud_mobile/docs/app-map/mail.md
T

206 lines
18 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Карта: Почта
Снята по **мобильной веб-версии** forbion.f7cloud.ru (вьюпорт ~400px, плавающая нижняя панель —
мобильная тема), аккаунт `cloude` / почтовый ящик `cloude@forbion.ru`, **строго read-only**
(mail/073). Живой UI — полный **Nextcloud Mail 5.7.15**.
**Источники узлов:** `[live]` — пройдено в браузере; `[src]` — достроено по читаемому исходнику
`design-reference/forbion-apps/f7mail/src` (форк f7mail) + nextcloud/mail 5.7.15, т.к. узел
требует записи и live не проходился; `[mockup]` — сверено с `design/screens/mail/*.png`.
> ⚠️ **Ограничение read-only для Почты.** В NC Mail пометкой `\Seen` является само **открытие**
> непрочитанного письма — это запись на сервер. У `cloude` все 3 письма во «Входящих» —
> непрочитанные, «Отправленные»/«Черновики» пусты, прочитанных писем нет. Поэтому **экран
> открытого письма live не проходился**; его дерево дано по `[src]`/`[mockup]` и помечено
> `не-пройдено-live: \Seen`. Composer открывался пустым и закрывался без ввода (черновик не
> создавался). Ни одно пишущее действие (отправка/удаление/спам/перемещение/пометки) не нажималось.
---
## Вход
Нижняя плавающая панель оболочки → иконка «конверт» (раздел «Почта», активна) → открывается
**Список писем** текущей папки (по умолчанию «Приоритетные входящие», `/apps/mail/box/priority`).
Оболочку панели/шторки описывает `shell.md` (зона лида).
---
## Экран: Список писем (папка) `[live]`
URL: `/apps/mail/box/<id>` (напр. priority, 517=Входящие).
**Шапка:**
- Поле «Искать в папке» → фокус строки поиска в текущей папке.
- Иконка-слайдеры (справа в поле) → открывает модалку **«Параметры поиска»** (расширенный поиск).
- Круглая зелёная «+» → открывает **Композер** (сворачивается в плашку «Сообщение без названия»).
**Тело:** вертикальный список карточек-писем. Пустая папка → центр-заглушка «**В этой папке нет
сообщений**» + логотип F7 `[live]` (наблюдалось в «Отправленных»).
**Карточка письма (строка):**
- Аватар/инициалы отправителя (цветной кружок).
- Имя отправителя (жирным) + строка-превью темы/начала письма.
- Справа: относительное время («1:00», «вс») + **зелёная точка** = непрочитано.
- Тап по карточке → **Экран открытого письма/треда** (`/box/<id>/thread/<tid>`).
⚠️ помечает `\Seen` — live не нажималось.
**Быстрые действия строки (появляются при наведении/выборе)** `[live]`:
- ✉ конверт → пометить прочитанным/непрочитанным *(запись)*.
- 🌿 лист → важное/снять важность *(запись)*.
- 🗑 корзина → удалить ветку *(запись)*.
- ⋯ → контекстное меню (ниже).
### Контекстное меню письма (⋯ «Больше действий») `[live]`
Верхний ряд иконок: **В избранное** (звезда) · **Прочитать** (конверт) · **Снять важность** (лист).
Далее пункты:
- 🕐 `<дата и время письма>` (инфо-строка, напр. «13 июля 2026 г., 1:00»).
-**Пометить как спам** *(запись)*.
- 🏷 **Изменить метки** → диалог выбора/назначения меток *(запись при сохранении)*.
-**Запланированная отправка** *(в native — открывает composer-ответ с выбором времени)*.
- **Переместить ветку** → выбор папки назначения *(запись)*.
- 🗑 **Удалить ветку** *(запись)*.
-**Больше действий** → подменю:
- **Редактировать как новое сообщение** → Композер с телом письма.
- **Ответить встречей** → создание события-приглашения (CalDAV).
- **Создать задачу** → создание задачи из письма (Tasks).
- **Скачать письмо** → выгрузка .eml.
---
## Экран: Параметры поиска (расширенный поиск) `[live]`
Открывается иконкой-слайдерами в поле поиска. Модалка «**Параметры поиска**», крестик ✕ (закрыть).
**Поля:**
- **Тема** (строка).
- **Тело** — «Найти» (строка).
- **Дата**: «Дата начала» и «Дата окончания» — два пикера даты (иконка календаря).
- **От** — «Выберите отправителей» (мультиселект).
- **Кому** — «Выберите получателей».
- **Коп** — получатели CC.
- **СкрКоп** — получатели BCC.
- **Метки** — «Выбор меток».
- **Отмечено как** (чекбоксы): Важное · В избранное · Непрочитанное · Имеет вложения ·
Упоминания меня.
**Низ:** «Очистить» (сброс) · «**Поиск**» (зелёная).
---
## Экран: Композер (новое сообщение) `[live]`
Открытие: «+» в шапке списка. Сначала **свёрнутая плашка** снизу «Сообщение без названия»
с иконками ⤢ (развернуть) и ✕ (закрыть/отменить). Развёрнутый вид — полноэкранная форма:
**Шапка:** заголовок «Новое сообщение», под ним отправитель «cloude <cloude@forbion.ru>»;
справа — («свернуть») и ✕ («закрыть»).
**Поля:**
- **Кому:** с шевроном-раскрытием → раскрывает **Копия:** (Cc) и **Ск:** (Bcc).
- **Тема сообщения**.
- **Текст** (тело, шеврон сворачивания); в правом нижнем углу тела — 📎 **скрепка** (вложения).
**Низ-панель:**
- **≡A** → панель форматирования текста (rich-text: жирный/курсив/списки и т.п.) `[src]`.
- **⋯** → меню: **Умный подборщик** · **Текстовые шаблоны** · **Отправить позже** ·
**Запросить подтверждение прочтения**.
- **▷ Отправить** (зелёная, неактивна при пустых получателях) *(запись — не нажималось)*.
расхождение: native-композер «⋯» содержит только «Отправить позже» + «Запросить подтверждение
прочтения» (`MailComposeScreen.kt:758,767`) — **нет «Умного подборщика» и «Текстовых шаблонов»**
(см. Расхождения п.2–3). Запланированная отправка, подтверждение прочтения, вложения, rich-text
(≡A) — совпадают.
---
## Экран: Открытое письмо / тред `[src] [mockup]` — не-пройдено-live: \Seen
URL: `/apps/mail/box/<id>/thread/<tid>`. Структура по `MessageView.vue` + макетам
`Почта _ Окно сообщения*.png`, `Сообщение с перепиской *.png`:
**Шапка:** тема письма (заголовок h2). Для локального (черновик/исходящее) — метка статуса.
**Панель действий над письмом:**
- Обычное письмо: **Ответить** · **Переслать** · **В избранное** (toggle) · **Отметить
непрочитанным** (если `\Seen`) · **Архивировать** · **В спам** · **В корзину** · **Удалить**.
- Черновик/исходящее: **Отправить** (если можно) · **Изменить черновик** · **Удалить**.
**Мета-строки:** Кому (to), Копия (cc), «Отправить в» (sendAt — для запланированных).
**Перемещение:** выпадающий выбор папки + кнопка «Переместить».
**Вложения:** список карточек вложений (если есть).
**Тело:** HTML-письмо в WebView-контейнере, либо текстовое в Compose (в native).
**Тред:** несколько писем переписки — сворачиваемые карточки (закрытые/открытое), см.
`Сообщение с перепиской закрытые.png` / `... открытое.png`.
**Плавающая кнопка «↩ Ответить»** (native `MailReplyFab`) — сверено ранее, `[mockup]`.
---
## Навигация папок (шторка «Открыть навигацию») `[live]`
Кнопка-гамбургер почты → выезжает список папок ящика. Сверху: «**Создать сообщение**» и
«**Обновить**». Далее:
- **Приоритетные входящие** (`/box/priority`).
- Аккаунт **cloude@forbion.ru** + кнопка «**Действия**» (⋯ по аккаунту).
- **Входящие** (`/box/517`) · **Непрочитанное** (`/box/unread/517`) · **Избранные**
(`/box/starred/517`) · **Черновики** (`/box/516`) · **Отправленные** (`/box/515`) ·
**Спам** (`/box/513`) · **Корзина** (`/box/514`).
- У каждой папки — кнопка «**Действия**» (⋯: переименование/очистка/подписка и т.п. `[src]`).
---
## Экран: Параметры эл. почты (настройки) `[live] вход` / `[src] глубина`
Точка входа: пункт «**Параметры эл. почты**» (в меню настроек шапки; JS-модалка, `href="#"`).
Глубину подтверждает native `MailSettingsScreens.kt` + макеты `Параметры электронной почты.png`,
`Параметры учётной записи.png`:
- **Основные** (общие параметры почты).
- **Учётные записи** (аккаунты; форма `AccountForm.vue` `[src]`).
- **Внешний вид**.
- **Текстовые шаблоны / подписи**.
- **Конфиденциальность**.
- **Безопасность**.
- **Фильтры** (sieve) — `FiltersSettingsView.vue` `[src]`; в native — общий официальный API
`/apps/mail/api/filter` (список/вкл/выкл/удаление/правка простых; сложные — долг v1).
расхождение(?): live-модалку «Параметры эл. почты» не раскрывал по пунктам (JS-диалог) — при
сверке на устройстве пройти каждый подраздел и сверить состав с native.
---
## Пустые/особые состояния `[live]`
- Пустая папка: «В этой папке нет сообщений» + логотип F7 по центру.
- Свёрнутый композер: плашка «Сообщение без названия» (⤢ / ✕) поверх списка.
---
## Расхождения с нативным `feature/mail`
Сверка карты (живой forbion) с кодом модуля на 91aaaba. Нативный клиент оказался
функционально богат — расширенный поиск, подтверждение прочтения, важность/спам/метки/
создать задачу/создать событие/запланированная отправка **уже есть** и совпадают. Ниже —
только то, где native **отстаёт или отличается** от живого web (это бэклог на добивку).
### Функциональные (native отстаёт) — бэклог
1. **Черновики не сохраняются** `[приоритет]`. Live: папка «Черновики» + композер сохраняет/
восстанавливает черновик. Native: `MailComposeViewModel` не пишет и не восстанавливает
черновик — набранное теряется. (Совпадает с долгом №1 представления mail/070; план п.2.)
2. **Композер «⋯» → «Текстовые шаблоны»** — вставки в тело нет. Live: пункт есть. Native:
текстовые блоки только в настройках (`MailRepository`), в композере не вставляются
(`MailComposeScreen.kt` меню «⋯» = только «Отправить позже» + «Запросить подтверждение
прочтения»).
3. **Композер «⋯» → «Умный подборщик»** (NC smart picker) — в native отсутствует.
4. **Меню письма → «Ответить встречей»** — в native нет (есть смежное «Создать событие»
`MailComponents.kt:1254`, но это не invite-reply).
5. **Меню письма → «Скачать письмо» (.eml)** — в native отсутствует.
6. **Меню письма → «Редактировать как новое сообщение»** — в native отсутствует.
7. **Действие «Архивировать» над письмом** — в native нет отдельного пункта (папка «Архив»
и `archiveMailboxId` есть, но архивирование только через «Переместить сообщение»
`MailComponents.kt:1259`).
### Косметические / вёрстка (для попиксельной сверки)
8. **Подписи виртуальных папок.** Live: «Непрочитанное», «Избранные». Native: «Непрочитанные»,
«Избранное» (`MailRepository.kt:672-673`) — число/форма слова расходятся.
9. **Порядок папок.** Live: Приоритетные → Входящие → Непрочитанное → Избранные → Черновики →
Отправленные → Спам → Корзина. Native: Входящие → Непрочитанные → Избранное → Отправленные →
Черновики → Архив → Корзина → Спам (`MailRepository.kt:671-680`). Порядок отличается.
10. **Быстрые действия строки списка.** Live-web (даже в узком вьюпорте): inline-иконки при
наведении (✉ прочитать / 🌿 важность / 🗑 удалить / ⋯). Native: свайп справа-налево
(`f7SwipeFromRightToDismiss`). ⚠️ вероятно артефакт desktop-web на узком экране, а не
мобильный паттерн — **проверить на реальном мобильном web/устройстве** прежде чем считать
расхождением.
## Открытые вопросы (добить при сверке на устройстве)
1. **Экран открытого письма/треда** — пройти live, когда будет прочитанное письмо или write-ОК
на `\Seen`; там же сверить панель действий и расхождения (архив/скачать/редактировать-как-новое).
2. Модалка «Параметры эл. почты» — раскрыть каждый подраздел live (native — 6 разделов).
3. Действия «⋯» по папке и по аккаунту — раскрыть состав live.
4. Диалоги «Изменить метки», «Переместить», «Запланированная отправка» — раскрыть формы live.
5. Проверить п.10 (быстрые действия строки) на реальном мобильном — hover-иконки vs свайп.