SmartListMode (HIDDEN/VISIBLE/AUTO) по семантике веб server-show 0/1/2.
TasksSmartLists.counts()/visibleKeys() — сводка и разрешение видимых коллекций.
25 юнит-тестов зелёные. Далее: агрегация в VM + вывод в TasksListNavView.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Лид внёс DavTask.startRaw в core (2cb7a9a); пробрасываю в toTaskItem().
Умные списки теперь учитывают реальный start. Гейт compile+detekt+test зелёный.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Реальные подписи forbion (Ожидающие выполнения/Свойства/секции обзора), добавлен блок
«Режимы просмотра» (архивные/компактный/обложки), отмечено отсутствие Архивные/Shared
доски в мобильной навигации. Ни одной пишущей операции.
Чистый TasksSmartLists (6 виртуальных списков по веб-Tasks NC: Важное/Сегодня/
На неделе/Все/Текущие/Завершенные) + SmartListVisibility. TaskItem.startRaw +
startLocalDate() (пусто до DTSTART из core — запрошено у лида). testImplementation
junit + TasksSmartListsTest (22 зелёных). Detekt-долг чужого пакета v0.5.133-137
унесён в baseline, код лида не тронут.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Дерево экранов: навигация/доски/обзор/доска-стек-карточка/сайдбары карточки и доски/
диалоги/настройки. Структура из апстрим-src, живой web — визуальная сверка (визуал(?)).
Секция расхождений с feature/deck = приоритетный бэклог.
- Русские месяцы в шапке; нативный DatePickerDialog (material3 крашился)
- 403 при PUT события: учёт supported-calendar-component-set (VTODO-коллекции
не принимают VEVENT) + sabre-precondition в тексте ошибки
- Окно события по _calendar-edit-full-fields.css: pill-поля, крестик, зелёная
галочка-сохранение, нативные пикеры даты/времени, высота 94% экрана
- Talk-беседа к событию: выбор существующей / создание публичной|приватной
- Вложения (ATTACH+FILENAME/FMTTYPE): «из файлов» (WebDAV-пикер) или загрузка
с устройства в /Calendar; round-trip при редактировании события
- Кастомное повторение (_calendar-repeat-modal.css): интервал+частота, дни
недели кружками, окончание никогда/до даты/N раз ↔ RRULE (parse/build/описание)
- Многодневные события (endDate) и несколько напоминаний (VALARM list)
- Управление календарём (✎ в сайдбаре): PROPPATCH имя/цвет, DELETE,
шаринг через DAV oc:invite + OCS sharees (польз./группы, чтение/редакт.)
- Discard-диалог при закрытии редактора с несохранёнными изменениями
- Занятость участников: iTIP VFREEBUSY через DAV outbox, конфликты красным
Доска (whiteboard) открывается через веб-viewer, которому мало Basic-auth:
Vue-XHR ходят по session-cookie+CSRF. Теперь перед загрузкой web-файла
логинимся формой /login app-паролем (NextcloudWebSession, обходит 2FA),
переносим cookie в CookieManager и грузим страницу нативно — для web-файлов
отключено OkHttp-проксирование (оно теряло тело POST/PROPFIND → «нет файлов»).
Collabora-путь не тронут (WOPI-токен самодостаточен).
+NetworkFactory.newBaseBuilder — билдер на общем пуле без auth.
Скрипт HIDE_F7CLOUD_CHROME_JS делал hide(#body-user) — это ВЕСЬ контейнер
приложения Nextcloud; на Collabora-странице документ в отдельном
#documents-content, а на Files-странице (whiteboard) внутри #body-user
лежит и сам viewer → удалялось всё → белый экран. Теперь скрипт
инжектится ТОЛЬКО для Collabora (collaboraBaseUrl не пуст); для web-файлов
chrome не трогаем — доска рисуется в штатном viewer.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- .md/.txt не открывались: их не было в openable-гейте FilesScreen
(тап игнорировался). Добавил MarkdownFiles.isMarkdown в гейт → нативный
редактор открывается.
- .whiteboard ловил «Редактор не ответил вовремя»: editorVisible ставил
только Collabora-JS-мост, которого у whiteboard нет → всегда таймаут.
Теперь для web-файлов (collaboraBaseUrl пуст) готовность = onPageFinished,
таймаут не срабатывает; страница доски догружается (WebView уже с
cookies/DOM-storage/mixed-content/websocket).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- .md/.markdown/.txt/.org/.log теперь открываются в НАТИВНОМ редакторе
(MarkdownRepository GET/PUT по WebDAV) — мгновенно, без тяжёлого веб-Text,
который «вечно грузился» (тянул весь Files UI). Экран MarkdownEditorScreen:
правка в TextField, предпросмотр md с базовым рендером (заголовки/жирный/
курсив/код/списки/цитаты), сохранение по WebDAV, кнопка активна только
при изменениях, back закрывает.
- .whiteboard остаётся веб-вьюером (/f/<id>): доска — Excalidraw-канвас
с реалтайм-бэкендом (whiteboard.f7cloud.ru + JWT), нативно не реализуется;
открывается через штатный viewer Files, как в вебе.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- .md/.markdown/.txt/.whiteboard теперь открываются: WebOpenableFiles →
каноническая ссылка /index.php/f/<fileId> в авторизованном WebView,
сервер сам направляет в Text/Whiteboard (office остаётся на Collabora).
Тап по таким файлам в списке разрешён.
- Предпрогрев: OfficeWarmup.warmWebViewEngine создаёт и уничтожает пустой
WebView при входе в Файлы — первое создание WebView в процессе тянет
провайдер Chromium (сотни мс), из-за чего первый docx/xlsx открывался
медленно; теперь движок прогрет заранее.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Шторка: КАЖДАЯ иконка теперь в белом круге с рамкой и мягкой тенью,
все одного размера (глиф внутри 56% рамки) — как на мобильном сайте
(было: плоские глифы без рамки, разного размера).
- Задачи грузятся быстрее: TasksCache (в памяти на время процесса) —
списки и задачи по спискам показываются мгновенно из кэша при
повторном открытии раздела/списка, сеть обновляет в фоне. Гонки
учтены: результат применяется, только если пользователь ещё на этом
списке.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Паритет веб-версии Задач:
- CalDAV: RELATED-TO;RELTYPE=PARENT в модели/парсере/билдере VTODO
(DavTask.parentUid); createTask принимает parentUid; updateTask и
toggleComplete сохраняют связь с родителем.
- TasksRepository/VM: createSubtask(parent), deleteTask(task) для любой
задачи (не только открытой детали).
- UI: у задачи меню «⋯» → «Добавить вложенную задачу» / «Удалить задачу»;
подзадачи рисуются под родителем с отступом 24dp; диалог ввода названия
подзадачи. Подзадачи исключены из верхнего уровня (не дублируются).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Раньше на Задачах стрелка «назад» уводила на предыдущий раздел (Файлы).
Теперь она закрывает открытый список и показывает панель списков задач
(TasksListNavView: Все/Текущие/конкретные списки) — как сайдбар папок
в Почте/Файлах/Календаре. Проброшен showListsRequest → vm.closeList().
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>