immich/i18n
Peter Ombodi 493cde9d55
feat: opt-in sync of deletes and restores from web to Android (beta timeline) (#20473)
* feature(mobile, beta, Android): handle remote asset trash/restore events and rescan media
- Handle move to trash and restore from trash for remote assets on Android
- Trigger MediaScannerConnection to rescan affected media files

* feature(mobile, beta, Android): fix rescan

* fix imports

* fix checking conditions

* refactor naming

* fix line breaks

* refactor code
rollback changes in BackgroundServicePlugin

* refactor code (use separate TrashService)

* refactor code

* parallelize restoreFromTrash calls with Future.wait
format trash.provider.dart

* try to re-format trash.provider.dart

* re-format trash.provider.dart

* rename TrashService to TrashSyncService to avoid duplicated names
revert changes in original trash.provider.dart

* refactor code (minor nitpicks)

* process restoreFromTrash sequentially instead of Future.wait

* group local assets by checksum before moving to trash
delete LocalAssetEntity records when moved to trash
refactor code

* fix format

* use checksum for asset restoration
refactro code

* fix format

* sync trash only for backup-selected assets

* feat(db): add local_trashed_asset table and integrate with restoration flow
- Add new `local_trashed_asset` table to store metadata of trashed assets
- Save trashed asset info into `local_trashed_asset` before deletion
- Use `local_trashed_asset` as source for asset restoration
- Implement file restoration by `mediaId`

* resolve merge conflicts

* fix index creating on migration

* rework trashed assets handling
- add new table trashed_local_asset
- mirror trashed assets data in trashed_local_asset.
- compute checksums for assets trashed out-of-app.
- restore assets present in trashed_local_asset and non-trashed in remote_asset.
- simplify moving-to-trash logic based on remote_asset events.

* resolve merge conflicts
use updated approach for calculating checksums

* use CurrentPlatform instead _platform
fix mocks

* revert redundant changes

* Include trashed items in getMediaChanges
Process trashed items delta during incremental sync

* fix merge conflicts

* fix format

* trashed_local_asset table mirror of local_asset table structure
trashed_local_asset<->local_asset transfer data on move to trash or restore
refactor code

* refactor and format code

* refactor TrashedAsset model
fix missed data transfering

* refactor code
remove unused model

* fix label

* fix merge conflicts

* optimize, refactor code
remove redundant code and checking
getTrashedAssetsForAlbum for iOS
tests for hash trashed assets

* format code

* fix migration
fix tests

* fix generated file

* reuse exist checksums on trash data update
handle restoration errors
fix import

* format code

* sync_stream.service depend on repos
refactor assets restoration
update dependencies in tests

* remove trashed asset model
remove trash_sync.service
refactor DriftTrashedLocalAssetRepository, LocalSyncService

* rework fetching trashed assets data on native side
optimize handling trashed assets in local sync service
refactor code

* update NativeSyncApi on iOS side
remove unused code

* optimize sync trashed assets call in full sync mode
refactor code

* fix format

* remove albumIds from getTrashedAssets params
fix upsert in trashed local asset repo
refactor code

* fix getTrashedAssets params

* fix(trash-sync): clean up NativeSyncApiImplBase and correct applyDelta

* refactor(trash-sync): optimize performance and fix minor issues

* refactor(trash-sync): add missed index

* feat(trash-sync): remove sinceLastCheckpoint param from getTrashedAssets

* fix(trash-sync): fix target table

* fix(trash-sync): remove unused extension

* fix(trash-sync): remove unused code

* fix(trash-sync): refactor code

* fix(trash-sync): reformat file

* fix(trash_sync): refactor code

* fix(trash_sync): improve moving to trash

* refactor(trash_sync): integrate MANAGE_MEDIA permission request into login flow and advanced settings

* refactor(trash_sync): add additional checking for experimental trash sync flag and MANAGE_MEDIA permission.

* refactor(trash_sync): resolve merge conflicts

* refactor(trash_sync): fix format

* resolve merge conflicts
add await for alert dialog
add missed request

* refactor(trash_sync): rework MANAGE_MEDIA info widget
show rationale text in permission request alert dialog
refactor setting getter

* fix(trash_sync): restore missing text values

* fix(trash_sync): format file

* fix(trash_sync): check backup enabled and remove remote asset existence check

* fix(trash_sync): remove checking backup enabled
test(trash_sync): cover sync-stream trash/restore paths and dedupe mocks

* test(trash_sync): cover trash/restore flows for local_sync_service

* chore(e2e): restore test-assets submodule pointer

---------

Co-authored-by: Peter Ombodi <peter.ombodi@gmail.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-11-10 16:20:51 +07:00
..
af.json chore(web): update translations (#22937) 2025-10-30 14:40:49 +07:00
ar.json chore(web): update translations (#22937) 2025-10-30 14:40:49 +07:00
az.json chore(web): update translations (#22486) 2025-10-03 15:10:09 +07:00
be.json chore(web): update translations (#22937) 2025-10-30 14:40:49 +07:00
bg.json chore(web): update translations (#22937) 2025-10-30 14:40:49 +07:00
bi.json chore(web): update translations (#21464) 2025-09-05 19:53:36 +07:00
bn.json chore(web): update translations (#22623) 2025-10-14 16:22:42 +07:00
ca.json chore(web): update translations (#22937) 2025-10-30 14:40:49 +07:00
cs.json chore(web): update translations (#22937) 2025-10-30 14:40:49 +07:00
cv.json chore(web): update translations (#20449) 2025-08-21 20:48:05 +07:00
da.json chore(web): update translations (#23375) 2025-10-31 18:02:30 +07:00
de.json chore(web): update translations (#23375) 2025-10-31 18:02:30 +07:00
el.json chore(web): update translations (#22937) 2025-10-30 14:40:49 +07:00
en.json feat: opt-in sync of deletes and restores from web to Android (beta timeline) (#20473) 2025-11-10 16:20:51 +07:00
es.json chore(web): update translations (#22937) 2025-10-30 14:40:49 +07:00
et.json chore(web): update translations (#22937) 2025-10-30 14:40:49 +07:00
eu.json chore(web): update translations (#22937) 2025-10-30 14:40:49 +07:00
fa.json chore(web): update translations (#22937) 2025-10-30 14:40:49 +07:00
fi.json chore(web): update translations (#22937) 2025-10-30 14:40:49 +07:00
fil.json chore(web): update translations (#22937) 2025-10-30 14:40:49 +07:00
fr.json chore(web): update translations (#23375) 2025-10-31 18:02:30 +07:00
gl.json chore(web): update translations (#22937) 2025-10-30 14:40:49 +07:00
he.json chore(web): update translations (#22937) 2025-10-30 14:40:49 +07:00
hi.json chore(web): update translations (#23375) 2025-10-31 18:02:30 +07:00
hr.json chore(web): update translations (#22937) 2025-10-30 14:40:49 +07:00
hu.json chore(web): update translations (#22937) 2025-10-30 14:40:49 +07:00
hy.json chore(web): update translations (#20449) 2025-08-21 20:48:05 +07:00
id.json chore(web): update translations (#22937) 2025-10-30 14:40:49 +07:00
it.json chore(web): update translations (#22937) 2025-10-30 14:40:49 +07:00
ja.json chore(web): update translations (#22937) 2025-10-30 14:40:49 +07:00
ka.json chore(web): update translations (#22937) 2025-10-30 14:40:49 +07:00
kk.json chore(web): update translations (#21130) 2025-08-31 00:52:11 +07:00
kmr.json fix: weblate conflicts (#18389) 2025-05-20 13:15:10 +07:00
kn.json chore(web): update translations (#22486) 2025-10-03 15:10:09 +07:00
ko.json chore(web): update translations (#22937) 2025-10-30 14:40:49 +07:00
lb.json chore: move weblate translations to root directory (#13604) 2024-10-22 15:39:28 +07:00
lt.json chore(web): update translations (#22937) 2025-10-30 14:40:49 +07:00
lv.json chore(web): update translations (#22937) 2025-10-30 14:40:49 +07:00
mfa.json chore: move weblate translations to root directory (#13604) 2024-10-22 15:39:28 +07:00
mk.json chore(web): update translations (#22937) 2025-10-30 14:40:49 +07:00
ml.json chore(web): update translations (#22937) 2025-10-30 14:40:49 +07:00
mn.json chore(web): update translations (#19228) 2025-07-22 10:27:32 +07:00
mr.json chore(web): update translations (#22937) 2025-10-30 14:40:49 +07:00
ms.json chore(web): update translations (#22288) 2025-09-23 18:20:27 +07:00
nb_NO.json chore(web): update translations (#23375) 2025-10-31 18:02:30 +07:00
nl.json chore(web): update translations (#22937) 2025-10-30 14:40:49 +07:00
nn.json chore(web): update translations (#22937) 2025-10-30 14:40:49 +07:00
pa.json chore(web): update translations (#22623) 2025-10-14 16:22:42 +07:00
pl.json chore(web): update translations (#23375) 2025-10-31 18:02:30 +07:00
pt.json chore(web): update translations (#23375) 2025-10-31 18:02:30 +07:00
pt_BR.json chore(web): update translations (#22937) 2025-10-30 14:40:49 +07:00
ro.json chore(web): update translations (#22937) 2025-10-30 14:40:49 +07:00
ru.json chore(web): update translations (#23375) 2025-10-31 18:02:30 +07:00
sk.json chore(web): update translations (#22937) 2025-10-30 14:40:49 +07:00
sl.json chore(web): update translations (#22937) 2025-10-30 14:40:49 +07:00
sq.json chore(web): update translations (#21624) 2025-09-11 10:28:48 +07:00
sr_Cyrl.json chore(web): update translations (#22937) 2025-10-30 14:40:49 +07:00
sr_Latn.json chore(web): update translations (#22937) 2025-10-30 14:40:49 +07:00
sv.json chore(web): update translations (#23375) 2025-10-31 18:02:30 +07:00
ta.json chore(web): update translations (#23375) 2025-10-31 18:02:30 +07:00
te.json chore(web): update translations (#22937) 2025-10-30 14:40:49 +07:00
th.json chore(web): update translations (#22937) 2025-10-30 14:40:49 +07:00
tr.json chore(web): update translations (#23375) 2025-10-31 18:02:30 +07:00
uk.json chore(web): update translations (#22937) 2025-10-30 14:40:49 +07:00
ur.json chore(web): update translations (#20449) 2025-08-21 20:48:05 +07:00
vi.json chore(web): update translations (#22937) 2025-10-30 14:40:49 +07:00
zh_Hant.json chore(web): update translations (#23375) 2025-10-31 18:02:30 +07:00
zh_SIMPLIFIED.json chore(web): update translations (#22937) 2025-10-30 14:40:49 +07:00