diff --git a/mobile/lib/domain/services/trash_sync.service.dart b/mobile/lib/domain/services/trash_sync.service.dart index 0f11748bca..d6fdc9c5e0 100644 --- a/mobile/lib/domain/services/trash_sync.service.dart +++ b/mobile/lib/domain/services/trash_sync.service.dart @@ -35,8 +35,8 @@ class TrashSyncService { if (!_platform.isAndroid || !_appSettingsService.getSetting(AppSettingsEnum.manageLocalMediaAndroid)) { return Future.value(); } - final trashedAssetsChecksums = []; - final modifiedAssetsChecksums = []; + final trashedAssetsChecksums = {}; + final modifiedAssetsChecksums = {}; for (var syncItem in syncItems) { if (syncItem.deletedAt != null) { trashedAssetsChecksums.add(syncItem.checksum); @@ -52,15 +52,20 @@ class TrashSyncService { if (trashedAssetsChecksums.isEmpty) { return Future.value(); } else { - final localAssetsToTrash = await _localAssetRepository.getByChecksums(trashedAssetsChecksums); - if (localAssetsToTrash.isNotEmpty) { + final candidatesToTrash = await _localAssetRepository.getByChecksums(trashedAssetsChecksums); + if (candidatesToTrash.isNotEmpty) { + final groupedByChecksum = {}; + for (final localAsset in candidatesToTrash) { + groupedByChecksum[localAsset.checksum!] = localAsset; + } final mediaUrls = await Future.wait( - localAssetsToTrash.map( + groupedByChecksum.values.map( (localAsset) => _storageRepository.getAssetEntityForAsset(localAsset).then((e) => e?.getMediaUrl()), ), ); _logger.info("Moving to trash ${mediaUrls.join(", ")} assets"); await _localFilesManager.moveToTrash(mediaUrls.nonNulls.toList()); + await _localAssetRepository.delete(candidatesToTrash.map((asset) => asset.id)); } } } diff --git a/mobile/lib/infrastructure/repositories/local_asset.repository.dart b/mobile/lib/infrastructure/repositories/local_asset.repository.dart index 5f36f85d27..17619b44b3 100644 --- a/mobile/lib/infrastructure/repositories/local_asset.repository.dart +++ b/mobile/lib/infrastructure/repositories/local_asset.repository.dart @@ -44,7 +44,7 @@ class DriftLocalAssetRepository extends DriftDatabaseRepository { }); } - Future delete(List ids) { + Future delete(Iterable ids) { if (ids.isEmpty) { return Future.value(); } @@ -71,8 +71,11 @@ class DriftLocalAssetRepository extends DriftDatabaseRepository { } Future> getByChecksums(Iterable checksums) { - if (checksums.isEmpty) return Future.value([]); - final query = _db.localAssetEntity.select()..where((lae) => lae.checksum.isIn(checksums)); + if (checksums.isEmpty) { + return Future.value([]); + } + final query = _db.localAssetEntity.select() + ..where((lae) => lae.checksum.isIn(checksums)); return query.map((row) => row.toDto()).get(); } }