Новое требование в phone-album-sync о потере/возврате серверной копии у разгруженного превью, требование в android-client о метке потерянного элемента и действии удаления с устройства.
4.1 KiB
4.1 KiB
Proposal
Why
В режиме переноса (C) на устройстве остаётся только превью, а оригинал живёт на
сервере. Если серверное фото исчезает из целевого альбома (удалено с другого
устройства, из web или из экрана серверного альбома), приложение этого не
замечает: локальный индекс продолжает держать serverPhotoId, элемент
показывается с обычным значком облака, а при открытии оригинал бесконечно не
загружается. Пользователь не видит, что связи с сервером больше нет, и не может
этот элемент убрать или перезалить.
What Changes
- Новое локальное состояние ассета ORPHANED: превью на устройстве есть, а серверного фото в целевом альбоме больше нет.
- Определение состояния при проверке синхронизации:
serverPhotoIdэлемента сверяется с живыми фото альбома; отсутствие переводит элемент вORPHANED, повторное появление — обратно вPREVIEW. - Метка элемента в сетке: для
ORPHANEDпоказывается перечёркнутое облако вместо обычного. - Действие
ORPHANED-элемента — «Удалить с устройства»: удаляет превью-файл и запись индекса, сервер не затрагивается (его копии уже нет). Серверные атрибуты (теги, обложка, серверное удаление) для такого элемента недоступны. - Возврат оригинала: если содержимое с исходным hash снова появляется на телефоне (в этом же альбоме или в другом альбоме устройства), элемент заливается заново; в режиме C он снова проходит обычный цикл разгрузки.
- Автоматическое поведение остаётся консервативным: файл-превью не удаляется и не перезаливается без участия пользователя, превью не выдаётся за оригинал.
Capabilities
New Capabilities
Нет.
Modified Capabilities
phone-album-sync: отражение серверных изменений распространяется на разгруженные превью (элемент становитсяORPHANED, файл сохраняется), добавляется действие удаления с устройства и повторная заливка вернувшегося оригинала.android-client: метка перенесённого элемента получает состояние «перечёркнутое облако», а шит элемента — действие «Удалить с устройства» для потерявших серверную копию.
Impact
- Android-клиент:
domain/model/Sync.kt(LocalAssetState),domain/sync/GallerySyncPolicy.kt,data/sync/SyncPlan.kt,data/sync/SyncCoordinator.kt,data/sync/SyncCheck.kt,ui/devicealbum/DeviceAlbumViewModel.kt,ui/devicealbum/DeviceAlbumScreen.kt,domain/attributes/PhotoAttributeSource.kt. - Удаление превью — через MediaStore delete-consent (элемент галереи не принадлежит приложению), переиспользуется существующий путь согласия.
- Серверный API и схема БД не меняются.