use a separate table instead of a column on remote asset

This commit is contained in:
shenlong-tanwen
2025-09-06 01:50:48 +05:30
parent 5236a72fb3
commit 03cd491197
16 changed files with 853 additions and 216 deletions
@@ -15,6 +15,7 @@ import 'package:immich_mobile/infrastructure/entities/remote_album.entity.drift.
import 'package:immich_mobile/infrastructure/entities/remote_album_asset.entity.drift.dart';
import 'package:immich_mobile/infrastructure/entities/remote_album_user.entity.drift.dart';
import 'package:immich_mobile/infrastructure/entities/remote_asset.entity.drift.dart';
import 'package:immich_mobile/infrastructure/entities/remote_asset_cloud_id.entity.drift.dart';
import 'package:immich_mobile/infrastructure/entities/stack.entity.drift.dart';
import 'package:immich_mobile/infrastructure/entities/user.entity.drift.dart';
import 'package:immich_mobile/infrastructure/entities/user_metadata.entity.drift.dart';
@@ -183,11 +184,7 @@ class SyncStreamRepository extends DriftDatabaseRepository {
await _db.batch((batch) {
for (final metadata in data) {
if (metadata.key == AssetMetadataKey.mobileApp) {
batch.update(
_db.remoteAssetEntity,
const RemoteAssetEntityCompanion(cloudId: Value(null)),
where: (row) => row.id.equals(metadata.assetId),
);
batch.deleteWhere(_db.remoteAssetCloudIdEntity, (row) => row.assetId.equals(metadata.assetId));
}
}
});
@@ -203,10 +200,11 @@ class SyncStreamRepository extends DriftDatabaseRepository {
for (final metadata in data) {
if (metadata.key == AssetMetadataKey.mobileApp) {
final map = metadata.value as Map<String, Object?>;
batch.update(
final companion = RemoteAssetCloudIdEntityCompanion(cloudId: Value(map['iCloudId']?.toString()));
batch.insert(
_db.remoteAssetEntity,
RemoteAssetEntityCompanion(cloudId: Value(map['iCloudId']?.toString())),
where: (row) => row.id.equals(metadata.assetId),
companion.copyWith(assetId: Value(metadata.assetId)),
onConflict: DoUpdate((_) => companion),
);
}
}