Files
ds-galo/openspec/changes/android-album-restore-progress/proposal.md
T
iu fcc7ac05c1 feat(android): показывать ход восстановления оригиналов
Возврат из переноса в копии скачивает оригиналы с сервера, но ход нигде не
отражался: карточка умела показывать только загрузку, а восстановление шло в
области экрана и обрывалось при уходе с него.

Добавлен RestoreCoordinator: выполняет восстановление в области приложения
(уход с экрана больше не прерывает), ведёт ход «альбом -> восстановлено из
всего» и защищает от одновременного запуска по одному альбому. RestoreManager
сообщает ход по каждому элементу и вынесен за интерфейс AlbumRestorer; SyncCheck
ходит через координатора и, как и раньше, дожидается завершения.

Карточка альбома показывает «Копии — восстановление N%» (пульсирует), экран
альбома устройства — строку «Восстановление оригиналов: X из Y» с полосой.

Изменение OpenSpec: android-album-restore-progress.
2026-10-16 20:15:05 +03:00

3.7 KiB

Proposal

Why

При возврате из режима переноса в копии (MOVE → COPY) приложение скачивает оригиналы с сервера и записывает их поверх превью, но никак не показывает ход. Карточка альбома умеет показывать только загрузку (upload-джобы), которых при этом переходе не возникает, поэтому третья строка молчит, а операция идёт.

Дополнительно восстановление запускается в области экрана (viewModelScope): стоит уйти с экрана альбома устройства — и оно обрывается на середине, хотя пользователь именно затем и уходит в список, чтобы посмотреть ход.

(Для альбома с потерянными копиями восстановление и не начнётся: такие элементы в целевой набор не входят — это отдельный случай, здесь не меняется.)

What Changes

  • Восстановление становится наблюдаемой операцией: приложение ведёт счётчик «готово из всего» по каждому альбому устройства.
  • Восстановление выполняется в области приложения, а не экрана: уход с экрана альбома не прерывает его.
  • Карточка альбома показывает ход: Копии — восстановление N% (и пульсирует, пока идёт).
  • Экран альбома устройства также показывает ход восстановления.
  • BREAKING: нет. Загрузка, разгрузка и режимы не меняются; добавляется только видимость и устойчивость уже существующей операции.

Capabilities

New Capabilities

Нет — поведение относится к существующим способностям.

Modified Capabilities

  • phone-album-sync: восстановление оригиналов выполняется до конца независимо от ухода с экрана и сообщает ход (сколько элементов восстановлено из скольких).
  • android-client: карточка альбома и экран альбома устройства показывают ход восстановления оригиналов.

Impact

  • Код (Android): data/sync/RestoreManager (обратный вызов хода, интерфейс исполнителя), новый data/sync/RestoreCoordinator (область приложения + прогресс по альбомам), di/AppContainer (создание координатора), data/sync/SyncCheck (восстановление через координатора), ui/devicealbum/DeviceAlbumViewModel (запуск через координатора, ход в состоянии) и DeviceAlbumScreen (строка хода), domain/sync/AlbumSyncProgress и ui/albums/AlbumsViewModel/AlbumsScreen (ход на карточке).
  • Схема Room: без изменений.
  • API и бэкенд: не затрагиваются.
  • Веб-клиент: не затрагивается.
  • Не затрагивается: восстановление потерянных копий из корзины сервера.