re-sync updated eTags

pull/20418/head
shenlong-tanwen 2025-12-04 02:26:35 +07:00
parent a2a5b7e758
commit 12febaf4a5
1 changed files with 17 additions and 1 deletions

@ -1,7 +1,9 @@
import 'package:drift/drift.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:immich_mobile/constants/constants.dart';
import 'package:immich_mobile/domain/models/asset/asset_metadata.model.dart';
import 'package:immich_mobile/domain/models/asset/base_asset.model.dart';
import 'package:immich_mobile/extensions/drift_extensions.dart';
import 'package:immich_mobile/infrastructure/entities/local_asset.entity.dart';
import 'package:immich_mobile/infrastructure/repositories/db.repository.dart';
import 'package:immich_mobile/infrastructure/repositories/local_album.repository.dart';
@ -56,6 +58,20 @@ Future<void> _populateCloudIds(Drift drift) async {
typedef _CloudIdMapping = ({String remoteAssetId, LocalAsset localAsset});
Future<List<_CloudIdMapping>> _fetchCloudIdMappings(Drift drift, String userId) async {
final createdAt = drift.localAssetEntity.createdAt.strftime('%s');
final adjustmentTime = coalesce([drift.localAssetEntity.adjustmentTime.strftime('%s'), const Constant('0')]);
final latitude = coalesce([
drift.localAssetEntity.latitude,
const Constant(0.0),
]).truncateTo(2).cast(DriftSqlType.string);
final longitude = coalesce([
drift.localAssetEntity.longitude,
const Constant(0.0),
]).truncateTo(2).cast(DriftSqlType.string);
final delimiter = const Constant(kUploadETagDelimiter);
final eTag = createdAt + delimiter + adjustmentTime + delimiter + latitude + delimiter + longitude;
final query =
drift.remoteAssetEntity.select().join([
leftOuterJoin(
@ -71,7 +87,7 @@ Future<List<_CloudIdMapping>> _fetchCloudIdMappings(Drift drift, String userId)
drift.localAssetEntity.id.isNotNull() &
drift.localAssetEntity.iCloudId.isNotNull() &
drift.remoteAssetEntity.ownerId.equals(userId) &
drift.remoteAssetCloudIdEntity.cloudId.isNull(),
(drift.remoteAssetCloudIdEntity.cloudId.isNull() | drift.remoteAssetCloudIdEntity.eTag.isNotExp(eTag)),
);
return query.map((row) {
return (