Добавлено
- Статистика срабатываний правил —
match_count/last_matched_atнакапливаются
батчем в конце каждого прогона синхронизации (не по одной записи на письмо) и видны
прямо в списке правил («Сработало N раз, последний раз: дата» / «Ещё ни разу»).
Подключено ко всем трём движкам синхронизации (IMAP, Gmail API, MS Graph), у каждого —
свои гарантии от повторного учёта одних и тех же совпадений при повторной
синхронизации после сбоя: для IMAP агрегация безусловна (last_uidпродвигается
по каждому письму атомарно, повторный fetch того же UID невозможен); для Gmail API —
запись статистики происходит вместе с курсоромgmail_history_id, только если весь
прогон завершился без ошибок (курсор один на весь ящик); для MS Graph — учёт идёт
отдельно по каждой папке, только если синхронизация именно этой папки прошла успешно
(у каждой папки свой собственный delta-курсор). POST /api/v1/emails/bulk-deleteиPOST /api/v1/emails/bulk-folder— массовое
удаление и перенос между папками для результатов поиска, плюс кнопки «Удалить
выбранные»/«Переместить выбранные» в Archive UI (переиспользуют чекбоксы, уже
существовавшие для восстановления). Перенос — только в рамках одного аккаунта (папка
привязана кaccount_id); целевая папка ищется по имени и, если её ещё нет,
создаётся сsync_enabled=false— новый методFoldersRepo.GetOrCreateManual
специально не переиспользуетUpsertFolder, чтобы перенос в уже существующую,
активно синхронизируемую папку не сбросил еёlast_uidи не заставил пересинковать
её целиком. Перемещённому письму присваивается синтетический UID из отдельного
диапазона (начиная с 4×10⁹), заведомо выше любого реального IMAP/Gmail/Graph UID, —
это исключает коллизию с UID, который движок синхронизации назначит той же папке
позже.date_from/date_toуPOST /api/v1/restore/bulk— восстановление всего аккаунта
или папки теперь можно сузить диапазоном дат письма, не только полным объёмом; два
новых поля даты в панели «Восстановить весь ящик»/«Восстановить эту папку» в
Archive UI.- Мобильная адаптивная вёрстка Archive UI — результаты поиска на узких экранах (телефон,
планшет в портретной ориентации) показываются карточками вместо таблицы, а не просто
горизонтально скроллятся. Заодно исправлена не связанная напрямую, но обнаруженная
при этой же проверке проблема: верхняя навигация (шапка сайта) не переносилась на
новую строку на узких экранах и обрезала пункт «Настройки» — теперь переносится.
Исправлено
THIRD_PARTY_LICENSES.md— номера версий 17 зависимостей, обновившихся минорными
Dependabot-патчами с момента последней генерации файла, приведены в соответствие с
go.mod(классификация лицензий не менялась — только сами версии были устаревшими).- README.md и
docs/USER_GUIDE.mdдополнены описанием возможностей, добавленных за
несколько предыдущих релизов, но так и не попавших в документацию: импорт
mbox/Maildir/.eml, экспорт.zip/mbox, уведомления о сбоях (webhook/email),
аудит-лог, dry-run правил, ручное удаление письма из архива, восстановление целого
аккаунта/папки. Заодно убран устаревший пример с зафиксированной версией Docker-тега
(:0.2.0) в пользу:latest.
Полный список изменений: v0.9.0...v0.10.0