From 254ca4a13d9f08ba31642aa3c532f27a794ed703 Mon Sep 17 00:00:00 2001 From: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com> Date: Thu, 4 Sep 2025 01:58:02 +0530 Subject: [PATCH] fix types --- .../models/asset/asset_metadata.model.dart | 46 ++-- .../lib/domain/utils/migrate_cloud_ids.dart | 4 +- .../remote_asset_metadata.entity.dart | 20 +- .../remote_asset_metadata.entity.drift.dart | 259 ++++++++---------- .../repositories/sync_stream.repository.dart | 14 +- mobile/lib/services/upload.service.dart | 7 +- 6 files changed, 161 insertions(+), 189 deletions(-) diff --git a/mobile/lib/domain/models/asset/asset_metadata.model.dart b/mobile/lib/domain/models/asset/asset_metadata.model.dart index c9a10c4143..ecdd3c3024 100644 --- a/mobile/lib/domain/models/asset/asset_metadata.model.dart +++ b/mobile/lib/domain/models/asset/asset_metadata.model.dart @@ -6,33 +6,33 @@ enum RemoteAssetMetadataKey { final String key; const RemoteAssetMetadataKey(this.key); - - factory RemoteAssetMetadataKey.fromKey(String key) { - switch (key) { - case "mobile-app": - return RemoteAssetMetadataKey.mobileApp; - default: - throw ArgumentError("Unknown AssetMetadataKey key: $key"); - } - } } -class RemoteAssetMetadata { - final String? cloudId; +class RemoteAssetMetadataItem { + final RemoteAssetMetadataKey key; + final Object value; - const RemoteAssetMetadata({this.cloudId}); + const RemoteAssetMetadataItem({required this.key, required this.value}); - Map toMap() { - final mobileAppValue = {}; - if (cloudId != null) { - mobileAppValue["iCloudId"] = cloudId; - } - - return { - "metadata": [ - {"key": RemoteAssetMetadataKey.mobileApp.key, "value": mobileAppValue}, - ], - }; + Map toMap() { + return {'key': key.key, 'value': value}; + } + + String toJson() => json.encode(toMap()); +} + +class RemoteAssetMobileAppMetadata { + final String? cloudId; + + const RemoteAssetMobileAppMetadata({this.cloudId}); + + Map toMap() { + final map = {}; + if (cloudId != null) { + map["iCloudId"] = cloudId; + } + + return map; } String toJson() => json.encode(toMap()); diff --git a/mobile/lib/domain/utils/migrate_cloud_ids.dart b/mobile/lib/domain/utils/migrate_cloud_ids.dart index a85f17232e..a75f47b220 100644 --- a/mobile/lib/domain/utils/migrate_cloud_ids.dart +++ b/mobile/lib/domain/utils/migrate_cloud_ids.dart @@ -24,7 +24,7 @@ Future migrateCloudIds(ProviderContainer ref) async { for (final mapping in mappingsToUpdate) { final mobileMeta = AssetMetadataUpsertItemDto( key: AssetMetadataKey.mobileApp, - value: {"iCloudId": mapping.cloudId}, + value: RemoteAssetMobileAppMetadata(cloudId: mapping.cloudId).toMap(), ); await assetApi.updateAssetMetadata(mapping.assetId, AssetMetadataUpsertDto(items: [mobileMeta])); } @@ -52,7 +52,7 @@ Future> _fetchCloudIdMappings(Drift drift) async { leftOuterJoin( drift.remoteAssetMetadataEntity, drift.remoteAssetMetadataEntity.assetId.equalsExp(drift.remoteAssetEntity.id) & - drift.remoteAssetMetadataEntity.key.equalsValue(RemoteAssetMetadataKey.mobileApp), + drift.remoteAssetMetadataEntity.key.equals(RemoteAssetMetadataKey.mobileApp.key), useColumns: false, ), ]) diff --git a/mobile/lib/infrastructure/entities/remote_asset_metadata.entity.dart b/mobile/lib/infrastructure/entities/remote_asset_metadata.entity.dart index 30e852d591..5783de7668 100644 --- a/mobile/lib/infrastructure/entities/remote_asset_metadata.entity.dart +++ b/mobile/lib/infrastructure/entities/remote_asset_metadata.entity.dart @@ -1,6 +1,7 @@ +import 'dart:convert'; + import 'package:drift/drift.dart'; import 'package:drift/extensions/json1.dart'; -import 'package:immich_mobile/domain/models/asset/asset_metadata.model.dart'; import 'package:immich_mobile/infrastructure/entities/remote_asset.entity.dart'; import 'package:immich_mobile/infrastructure/utils/drift_default.mixin.dart'; @@ -12,26 +13,17 @@ class RemoteAssetMetadataEntity extends Table with DriftDefaultsMixin { TextColumn get assetId => text().references(RemoteAssetEntity, #id, onDelete: KeyAction.cascade)(); - TextColumn get key => text().map(const RemoteAssetMetadataKeyConverter())(); - - TextColumn get cloudId => text().generatedAs(key.jsonExtract(r'$.iCloudId'), stored: true)(); + TextColumn get key => text()(); BlobColumn get value => blob().map(assetMetadataConverter)(); + TextColumn get cloudId => text().generatedAs(key.jsonExtract(r'$.iCloudId'), stored: true)(); + @override Set get primaryKey => {assetId, key}; } -class RemoteAssetMetadataKeyConverter extends TypeConverter { - const RemoteAssetMetadataKeyConverter(); - - @override - RemoteAssetMetadataKey fromSql(String fromDb) => RemoteAssetMetadataKey.fromKey(fromDb); - - @override - String toSql(RemoteAssetMetadataKey value) => value.key; -} - final JsonTypeConverter2, Uint8List, Object?> assetMetadataConverter = TypeConverter.jsonb( fromJson: (json) => json as Map, + toJson: (value) => jsonEncode(value), ); diff --git a/mobile/lib/infrastructure/entities/remote_asset_metadata.entity.drift.dart b/mobile/lib/infrastructure/entities/remote_asset_metadata.entity.drift.dart index 58a50ff903..13c153b039 100644 --- a/mobile/lib/infrastructure/entities/remote_asset_metadata.entity.drift.dart +++ b/mobile/lib/infrastructure/entities/remote_asset_metadata.entity.drift.dart @@ -3,26 +3,24 @@ import 'package:drift/drift.dart' as i0; import 'package:immich_mobile/infrastructure/entities/remote_asset_metadata.entity.drift.dart' as i1; -import 'package:immich_mobile/domain/models/asset/asset_metadata.model.dart' - as i2; -import 'dart:typed_data' as i3; +import 'dart:typed_data' as i2; import 'package:immich_mobile/infrastructure/entities/remote_asset_metadata.entity.dart' - as i4; -import 'package:drift/extensions/json1.dart' as i5; + as i3; +import 'package:drift/extensions/json1.dart' as i4; import 'package:immich_mobile/infrastructure/entities/remote_asset.entity.drift.dart' - as i6; -import 'package:drift/internal/modular.dart' as i7; + as i5; +import 'package:drift/internal/modular.dart' as i6; typedef $$RemoteAssetMetadataEntityTableCreateCompanionBuilder = i1.RemoteAssetMetadataEntityCompanion Function({ required String assetId, - required i2.RemoteAssetMetadataKey key, + required String key, required Map value, }); typedef $$RemoteAssetMetadataEntityTableUpdateCompanionBuilder = i1.RemoteAssetMetadataEntityCompanion Function({ i0.Value assetId, - i0.Value key, + i0.Value key, i0.Value> value, }); @@ -39,31 +37,31 @@ final class $$RemoteAssetMetadataEntityTableReferences super.$_typedResult, ); - static i6.$RemoteAssetEntityTable _assetIdTable(i0.GeneratedDatabase db) => - i7.ReadDatabaseContainer(db) - .resultSet('remote_asset_entity') + static i5.$RemoteAssetEntityTable _assetIdTable(i0.GeneratedDatabase db) => + i6.ReadDatabaseContainer(db) + .resultSet('remote_asset_entity') .createAlias( i0.$_aliasNameGenerator( - i7.ReadDatabaseContainer(db) + i6.ReadDatabaseContainer(db) .resultSet( 'remote_asset_metadata_entity', ) .assetId, - i7.ReadDatabaseContainer( + i6.ReadDatabaseContainer( db, - ).resultSet('remote_asset_entity').id, + ).resultSet('remote_asset_entity').id, ), ); - i6.$$RemoteAssetEntityTableProcessedTableManager get assetId { + i5.$$RemoteAssetEntityTableProcessedTableManager get assetId { final $_column = $_itemColumn('asset_id')!; - final manager = i6 + final manager = i5 .$$RemoteAssetEntityTableTableManager( $_db, - i7.ReadDatabaseContainer( + i6.ReadDatabaseContainer( $_db, - ).resultSet('remote_asset_entity'), + ).resultSet('remote_asset_entity'), ) .filter((f) => f.id.sqlEquals($_column)); final item = $_typedResult.readTableOrNull(_assetIdTable($_db)); @@ -84,13 +82,18 @@ class $$RemoteAssetMetadataEntityTableFilterComposer super.$addJoinBuilderToRootComposer, super.$removeJoinBuilderFromRootComposer, }); - i0.ColumnWithTypeConverterFilters< - i2.RemoteAssetMetadataKey, - i2.RemoteAssetMetadataKey, - String - > - get key => $composableBuilder( + i0.ColumnFilters get key => $composableBuilder( column: $table.key, + builder: (column) => i0.ColumnFilters(column), + ); + + i0.ColumnWithTypeConverterFilters< + Map, + Map, + i2.Uint8List + > + get value => $composableBuilder( + column: $table.value, builder: (column) => i0.ColumnWithTypeConverterFilters(column), ); @@ -99,34 +102,24 @@ class $$RemoteAssetMetadataEntityTableFilterComposer builder: (column) => i0.ColumnFilters(column), ); - i0.ColumnWithTypeConverterFilters< - Map, - Map, - i3.Uint8List - > - get value => $composableBuilder( - column: $table.value, - builder: (column) => i0.ColumnWithTypeConverterFilters(column), - ); - - i6.$$RemoteAssetEntityTableFilterComposer get assetId { - final i6.$$RemoteAssetEntityTableFilterComposer composer = $composerBuilder( + i5.$$RemoteAssetEntityTableFilterComposer get assetId { + final i5.$$RemoteAssetEntityTableFilterComposer composer = $composerBuilder( composer: this, getCurrentColumn: (t) => t.assetId, - referencedTable: i7.ReadDatabaseContainer( + referencedTable: i6.ReadDatabaseContainer( $db, - ).resultSet('remote_asset_entity'), + ).resultSet('remote_asset_entity'), getReferencedColumn: (t) => t.id, builder: ( joinBuilder, { $addJoinBuilderToRootComposer, $removeJoinBuilderFromRootComposer, - }) => i6.$$RemoteAssetEntityTableFilterComposer( + }) => i5.$$RemoteAssetEntityTableFilterComposer( $db: $db, - $table: i7.ReadDatabaseContainer( + $table: i6.ReadDatabaseContainer( $db, - ).resultSet('remote_asset_entity'), + ).resultSet('remote_asset_entity'), $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, joinBuilder: joinBuilder, $removeJoinBuilderFromRootComposer: @@ -152,35 +145,35 @@ class $$RemoteAssetMetadataEntityTableOrderingComposer builder: (column) => i0.ColumnOrderings(column), ); + i0.ColumnOrderings get value => $composableBuilder( + column: $table.value, + builder: (column) => i0.ColumnOrderings(column), + ); + i0.ColumnOrderings get cloudId => $composableBuilder( column: $table.cloudId, builder: (column) => i0.ColumnOrderings(column), ); - i0.ColumnOrderings get value => $composableBuilder( - column: $table.value, - builder: (column) => i0.ColumnOrderings(column), - ); - - i6.$$RemoteAssetEntityTableOrderingComposer get assetId { - final i6.$$RemoteAssetEntityTableOrderingComposer composer = + i5.$$RemoteAssetEntityTableOrderingComposer get assetId { + final i5.$$RemoteAssetEntityTableOrderingComposer composer = $composerBuilder( composer: this, getCurrentColumn: (t) => t.assetId, - referencedTable: i7.ReadDatabaseContainer( + referencedTable: i6.ReadDatabaseContainer( $db, - ).resultSet('remote_asset_entity'), + ).resultSet('remote_asset_entity'), getReferencedColumn: (t) => t.id, builder: ( joinBuilder, { $addJoinBuilderToRootComposer, $removeJoinBuilderFromRootComposer, - }) => i6.$$RemoteAssetEntityTableOrderingComposer( + }) => i5.$$RemoteAssetEntityTableOrderingComposer( $db: $db, - $table: i7.ReadDatabaseContainer( + $table: i6.ReadDatabaseContainer( $db, - ).resultSet('remote_asset_entity'), + ).resultSet('remote_asset_entity'), $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, joinBuilder: joinBuilder, $removeJoinBuilderFromRootComposer: @@ -201,36 +194,35 @@ class $$RemoteAssetMetadataEntityTableAnnotationComposer super.$addJoinBuilderToRootComposer, super.$removeJoinBuilderFromRootComposer, }); - i0.GeneratedColumnWithTypeConverter - get key => + i0.GeneratedColumn get key => $composableBuilder(column: $table.key, builder: (column) => column); + i0.GeneratedColumnWithTypeConverter, i2.Uint8List> + get value => + $composableBuilder(column: $table.value, builder: (column) => column); + i0.GeneratedColumn get cloudId => $composableBuilder(column: $table.cloudId, builder: (column) => column); - i0.GeneratedColumnWithTypeConverter, i3.Uint8List> - get value => - $composableBuilder(column: $table.value, builder: (column) => column); - - i6.$$RemoteAssetEntityTableAnnotationComposer get assetId { - final i6.$$RemoteAssetEntityTableAnnotationComposer composer = + i5.$$RemoteAssetEntityTableAnnotationComposer get assetId { + final i5.$$RemoteAssetEntityTableAnnotationComposer composer = $composerBuilder( composer: this, getCurrentColumn: (t) => t.assetId, - referencedTable: i7.ReadDatabaseContainer( + referencedTable: i6.ReadDatabaseContainer( $db, - ).resultSet('remote_asset_entity'), + ).resultSet('remote_asset_entity'), getReferencedColumn: (t) => t.id, builder: ( joinBuilder, { $addJoinBuilderToRootComposer, $removeJoinBuilderFromRootComposer, - }) => i6.$$RemoteAssetEntityTableAnnotationComposer( + }) => i5.$$RemoteAssetEntityTableAnnotationComposer( $db: $db, - $table: i7.ReadDatabaseContainer( + $table: i6.ReadDatabaseContainer( $db, - ).resultSet('remote_asset_entity'), + ).resultSet('remote_asset_entity'), $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, joinBuilder: joinBuilder, $removeJoinBuilderFromRootComposer: @@ -284,8 +276,7 @@ class $$RemoteAssetMetadataEntityTableTableManager updateCompanionCallback: ({ i0.Value assetId = const i0.Value.absent(), - i0.Value key = - const i0.Value.absent(), + i0.Value key = const i0.Value.absent(), i0.Value> value = const i0.Value.absent(), }) => i1.RemoteAssetMetadataEntityCompanion( assetId: assetId, @@ -295,7 +286,7 @@ class $$RemoteAssetMetadataEntityTableTableManager createCompanionCallback: ({ required String assetId, - required i2.RemoteAssetMetadataKey key, + required String key, required Map value, }) => i1.RemoteAssetMetadataEntityCompanion.insert( assetId: assetId, @@ -379,7 +370,7 @@ i0.Index get uQRemoteAssetMetadataCloudId => i0.Index( 'CREATE UNIQUE INDEX IF NOT EXISTS UQ_remote_asset_metadata_cloud_id ON remote_asset_metadata_entity (cloud_id) WHERE("key" = \'mobile-app\')', ); -class $RemoteAssetMetadataEntityTable extends i4.RemoteAssetMetadataEntity +class $RemoteAssetMetadataEntityTable extends i3.RemoteAssetMetadataEntity with i0.TableInfo< $RemoteAssetMetadataEntityTable, @@ -403,20 +394,29 @@ class $RemoteAssetMetadataEntityTable extends i4.RemoteAssetMetadataEntity 'REFERENCES remote_asset_entity (id) ON DELETE CASCADE', ), ); + static const i0.VerificationMeta _keyMeta = const i0.VerificationMeta('key'); + @override + late final i0.GeneratedColumn key = i0.GeneratedColumn( + 'key', + aliasedName, + false, + type: i0.DriftSqlType.string, + requiredDuringInsert: true, + ); @override late final i0.GeneratedColumnWithTypeConverter< - i2.RemoteAssetMetadataKey, - String + Map, + i2.Uint8List > - key = - i0.GeneratedColumn( - 'key', + value = + i0.GeneratedColumn( + 'value', aliasedName, false, - type: i0.DriftSqlType.string, + type: i0.DriftSqlType.blob, requiredDuringInsert: true, - ).withConverter( - i1.$RemoteAssetMetadataEntityTable.$converterkey, + ).withConverter>( + i1.$RemoteAssetMetadataEntityTable.$convertervalue, ); static const i0.VerificationMeta _cloudIdMeta = const i0.VerificationMeta( 'cloudId', @@ -427,29 +427,14 @@ class $RemoteAssetMetadataEntityTable extends i4.RemoteAssetMetadataEntity aliasedName, false, generatedAs: i0.GeneratedAs( - i5.JsonExtensions(key).jsonExtract(r'$.iCloudId'), - false, + i4.JsonExtensions(key).jsonExtract(r'$.iCloudId'), + true, ), type: i0.DriftSqlType.string, requiredDuringInsert: false, ); @override - late final i0.GeneratedColumnWithTypeConverter< - Map, - i3.Uint8List - > - value = - i0.GeneratedColumn( - 'value', - aliasedName, - false, - type: i0.DriftSqlType.blob, - requiredDuringInsert: true, - ).withConverter>( - i1.$RemoteAssetMetadataEntityTable.$convertervalue, - ); - @override - List get $columns => [assetId, key, cloudId, value]; + List get $columns => [assetId, key, value, cloudId]; @override String get aliasedName => _alias ?? actualTableName; @override @@ -470,6 +455,14 @@ class $RemoteAssetMetadataEntityTable extends i4.RemoteAssetMetadataEntity } else if (isInserting) { context.missing(_assetIdMeta); } + if (data.containsKey('key')) { + context.handle( + _keyMeta, + key.isAcceptableOrUnknown(data['key']!, _keyMeta), + ); + } else if (isInserting) { + context.missing(_keyMeta); + } if (data.containsKey('cloud_id')) { context.handle( _cloudIdMeta, @@ -492,15 +485,9 @@ class $RemoteAssetMetadataEntityTable extends i4.RemoteAssetMetadataEntity i0.DriftSqlType.string, data['${effectivePrefix}asset_id'], )!, - key: i1.$RemoteAssetMetadataEntityTable.$converterkey.fromSql( - attachedDatabase.typeMapping.read( - i0.DriftSqlType.string, - data['${effectivePrefix}key'], - )!, - ), - cloudId: attachedDatabase.typeMapping.read( + key: attachedDatabase.typeMapping.read( i0.DriftSqlType.string, - data['${effectivePrefix}cloud_id'], + data['${effectivePrefix}key'], )!, value: i1.$RemoteAssetMetadataEntityTable.$convertervalue.fromSql( attachedDatabase.typeMapping.read( @@ -508,6 +495,10 @@ class $RemoteAssetMetadataEntityTable extends i4.RemoteAssetMetadataEntity data['${effectivePrefix}value'], )!, ), + cloudId: attachedDatabase.typeMapping.read( + i0.DriftSqlType.string, + data['${effectivePrefix}cloud_id'], + )!, ); } @@ -516,10 +507,8 @@ class $RemoteAssetMetadataEntityTable extends i4.RemoteAssetMetadataEntity return $RemoteAssetMetadataEntityTable(attachedDatabase, alias); } - static i0.TypeConverter $converterkey = - const i4.RemoteAssetMetadataKeyConverter(); - static i0.JsonTypeConverter2, i3.Uint8List, Object?> - $convertervalue = i4.assetMetadataConverter; + static i0.JsonTypeConverter2, i2.Uint8List, Object?> + $convertervalue = i3.assetMetadataConverter; @override bool get withoutRowId => true; @override @@ -529,26 +518,22 @@ class $RemoteAssetMetadataEntityTable extends i4.RemoteAssetMetadataEntity class RemoteAssetMetadataEntityData extends i0.DataClass implements i0.Insertable { final String assetId; - final i2.RemoteAssetMetadataKey key; - final String cloudId; + final String key; final Map value; + final String cloudId; const RemoteAssetMetadataEntityData({ required this.assetId, required this.key, - required this.cloudId, required this.value, + required this.cloudId, }); @override Map toColumns(bool nullToAbsent) { final map = {}; map['asset_id'] = i0.Variable(assetId); + map['key'] = i0.Variable(key); { - map['key'] = i0.Variable( - i1.$RemoteAssetMetadataEntityTable.$converterkey.toSql(key), - ); - } - { - map['value'] = i0.Variable( + map['value'] = i0.Variable( i1.$RemoteAssetMetadataEntityTable.$convertervalue.toSql(value), ); } @@ -562,11 +547,11 @@ class RemoteAssetMetadataEntityData extends i0.DataClass serializer ??= i0.driftRuntimeOptions.defaultSerializer; return RemoteAssetMetadataEntityData( assetId: serializer.fromJson(json['assetId']), - key: serializer.fromJson(json['key']), - cloudId: serializer.fromJson(json['cloudId']), + key: serializer.fromJson(json['key']), value: i1.$RemoteAssetMetadataEntityTable.$convertervalue.fromJson( serializer.fromJson(json['value']), ), + cloudId: serializer.fromJson(json['cloudId']), ); } @override @@ -574,52 +559,52 @@ class RemoteAssetMetadataEntityData extends i0.DataClass serializer ??= i0.driftRuntimeOptions.defaultSerializer; return { 'assetId': serializer.toJson(assetId), - 'key': serializer.toJson(key), - 'cloudId': serializer.toJson(cloudId), + 'key': serializer.toJson(key), 'value': serializer.toJson( i1.$RemoteAssetMetadataEntityTable.$convertervalue.toJson(value), ), + 'cloudId': serializer.toJson(cloudId), }; } i1.RemoteAssetMetadataEntityData copyWith({ String? assetId, - i2.RemoteAssetMetadataKey? key, - String? cloudId, + String? key, Map? value, + String? cloudId, }) => i1.RemoteAssetMetadataEntityData( assetId: assetId ?? this.assetId, key: key ?? this.key, - cloudId: cloudId ?? this.cloudId, value: value ?? this.value, + cloudId: cloudId ?? this.cloudId, ); @override String toString() { return (StringBuffer('RemoteAssetMetadataEntityData(') ..write('assetId: $assetId, ') ..write('key: $key, ') - ..write('cloudId: $cloudId, ') - ..write('value: $value') + ..write('value: $value, ') + ..write('cloudId: $cloudId') ..write(')')) .toString(); } @override - int get hashCode => Object.hash(assetId, key, cloudId, value); + int get hashCode => Object.hash(assetId, key, value, cloudId); @override bool operator ==(Object other) => identical(this, other) || (other is i1.RemoteAssetMetadataEntityData && other.assetId == this.assetId && other.key == this.key && - other.cloudId == this.cloudId && - other.value == this.value); + other.value == this.value && + other.cloudId == this.cloudId); } class RemoteAssetMetadataEntityCompanion extends i0.UpdateCompanion { final i0.Value assetId; - final i0.Value key; + final i0.Value key; final i0.Value> value; const RemoteAssetMetadataEntityCompanion({ this.assetId = const i0.Value.absent(), @@ -628,7 +613,7 @@ class RemoteAssetMetadataEntityCompanion }); RemoteAssetMetadataEntityCompanion.insert({ required String assetId, - required i2.RemoteAssetMetadataKey key, + required String key, required Map value, }) : assetId = i0.Value(assetId), key = i0.Value(key), @@ -636,7 +621,7 @@ class RemoteAssetMetadataEntityCompanion static i0.Insertable custom({ i0.Expression? assetId, i0.Expression? key, - i0.Expression? value, + i0.Expression? value, }) { return i0.RawValuesInsertable({ if (assetId != null) 'asset_id': assetId, @@ -647,7 +632,7 @@ class RemoteAssetMetadataEntityCompanion i1.RemoteAssetMetadataEntityCompanion copyWith({ i0.Value? assetId, - i0.Value? key, + i0.Value? key, i0.Value>? value, }) { return i1.RemoteAssetMetadataEntityCompanion( @@ -664,12 +649,10 @@ class RemoteAssetMetadataEntityCompanion map['asset_id'] = i0.Variable(assetId.value); } if (key.present) { - map['key'] = i0.Variable( - i1.$RemoteAssetMetadataEntityTable.$converterkey.toSql(key.value), - ); + map['key'] = i0.Variable(key.value); } if (value.present) { - map['value'] = i0.Variable( + map['value'] = i0.Variable( i1.$RemoteAssetMetadataEntityTable.$convertervalue.toSql(value.value), ); } diff --git a/mobile/lib/infrastructure/repositories/sync_stream.repository.dart b/mobile/lib/infrastructure/repositories/sync_stream.repository.dart index e41b284cf3..a5cbc53abc 100644 --- a/mobile/lib/infrastructure/repositories/sync_stream.repository.dart +++ b/mobile/lib/infrastructure/repositories/sync_stream.repository.dart @@ -2,7 +2,6 @@ import 'dart:convert'; import 'package:drift/drift.dart'; import 'package:immich_mobile/domain/models/album/album.model.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/domain/models/memory.model.dart'; import 'package:immich_mobile/domain/models/user_metadata.model.dart'; @@ -22,7 +21,7 @@ import 'package:immich_mobile/infrastructure/entities/user.entity.drift.dart'; import 'package:immich_mobile/infrastructure/entities/user_metadata.entity.drift.dart'; import 'package:immich_mobile/infrastructure/repositories/db.repository.dart'; import 'package:logging/logging.dart'; -import 'package:openapi/api.dart' as api show AssetVisibility, AlbumUserRole, UserMetadataKey, AssetMetadataKey; +import 'package:openapi/api.dart' as api show AssetVisibility, AlbumUserRole, UserMetadataKey; import 'package:openapi/api.dart' hide AssetVisibility, AlbumUserRole, UserMetadataKey, AssetMetadataKey; class SyncStreamRepository extends DriftDatabaseRepository { @@ -201,8 +200,8 @@ class SyncStreamRepository extends DriftDatabaseRepository { await _db.batch((batch) { for (final metadata in data) { final companion = RemoteAssetMetadataEntityCompanion( - key: Value(metadata.key.toRemoteAssetMetadataKey()), - value: Value(jsonDecode(metadata.value as String)), + key: Value(metadata.key.value), + value: Value(metadata.value as Map), ); batch.insert( @@ -613,10 +612,3 @@ extension on String { } } } - -extension on api.AssetMetadataKey { - RemoteAssetMetadataKey toRemoteAssetMetadataKey() => switch (this) { - api.AssetMetadataKey.mobileApp => RemoteAssetMetadataKey.mobileApp, - _ => throw Exception('Unknown AssetMetadataKey value: $this'), - }; -} diff --git a/mobile/lib/services/upload.service.dart b/mobile/lib/services/upload.service.dart index 9e5836e4a6..6c3dd05269 100644 --- a/mobile/lib/services/upload.service.dart +++ b/mobile/lib/services/upload.service.dart @@ -365,7 +365,12 @@ class UploadService { 'fileModifiedAt': modifiedAt.toUtc().toIso8601String(), 'isFavorite': isFavorite?.toString() ?? 'false', 'duration': '0', - 'metadata': RemoteAssetMetadata(cloudId: cloudId).toJson(), + 'metadata': jsonEncode([ + RemoteAssetMetadataItem( + key: RemoteAssetMetadataKey.mobileApp, + value: RemoteAssetMobileAppMetadata(cloudId: cloudId).toMap(), + ), + ]), if (fields != null) ...fields, };