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

53 lines
3.7 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.
# 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 и бэкенд:** не затрагиваются.
- **Веб-клиент:** не затрагивается.
- **Не затрагивается:** восстановление потерянных копий из корзины сервера.