diff --git a/mobile/lib/infrastructure/repositories/local_album.repository.dart b/mobile/lib/infrastructure/repositories/local_album.repository.dart index 9d4c9bc496..e70947367e 100644 --- a/mobile/lib/infrastructure/repositories/local_album.repository.dart +++ b/mobile/lib/infrastructure/repositories/local_album.repository.dart @@ -300,7 +300,7 @@ class DriftLocalAlbumRepository extends DriftDatabaseRepository { return Future.value(); } - return _db.batch((batch) async { + await _db.batch((batch) async { for (final asset in localAssets) { final companion = LocalAssetEntityCompanion.insert( name: asset.name, @@ -314,11 +314,35 @@ class DriftLocalAlbumRepository extends DriftDatabaseRepository { checksum: const Value(null), orientation: Value(asset.orientation), isFavorite: Value(asset.isFavorite), + adjustmentTime: Value(asset.adjustmentTime), + latitude: Value(asset.latitude), + longitude: Value(asset.longitude), ); batch.insert<$LocalAssetEntityTable, LocalAssetEntityData>( + _db.localAssetEntity, + companion.copyWith(checksum: const Value(null)), + onConflict: DoUpdate( + (old) => companion, + where: (old) => CurrentPlatform.isAndroid + ? old.updatedAt.isNotValue(asset.updatedAt) + : old.latitude.equalsNullable(asset.latitude).not() | + old.longitude.equalsNullable(asset.longitude).not() | + old.createdAt.isNotValue(asset.createdAt), + ), + ); + } + }); + + // Reset checksum if asset changed + return _db.batch((batch) async { + for (final asset in localAssets) { + final companion = const LocalAssetEntityCompanion(checksum: Value(null)); + batch.update( _db.localAssetEntity, companion, - onConflict: DoUpdate((_) => companion, where: (old) => old.updatedAt.isNotValue(asset.updatedAt)), + where: (row) => CurrentPlatform.isIOS + ? row.adjustmentTime.equalsNullable(asset.adjustmentTime).not() + : row.updatedAt.isNotValue(asset.updatedAt), ); } });