diff --git a/mobile/lib/domain/models/asset/metadata.model.dart b/mobile/lib/domain/models/asset/metadata.model.dart new file mode 100644 index 0000000000..1a4a93f7fd --- /dev/null +++ b/mobile/lib/domain/models/asset/metadata.model.dart @@ -0,0 +1,20 @@ +import 'dart:convert'; + +class AssetMetadata { + final String? cloudId; + + const AssetMetadata({this.cloudId}); + + Map toMap() { + return { + "metadata": [ + { + "key": "mobile-app", + "value": cloudId != null ? {"iCloudId": cloudId} : {}, + }, + ], + }; + } + + String toJson() => json.encode(toMap()); +} diff --git a/mobile/lib/services/upload.service.dart b/mobile/lib/services/upload.service.dart index a711608e7f..e4ac3df0cc 100644 --- a/mobile/lib/services/upload.service.dart +++ b/mobile/lib/services/upload.service.dart @@ -7,6 +7,7 @@ import 'package:flutter/material.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:immich_mobile/constants/constants.dart'; import 'package:immich_mobile/domain/models/asset/base_asset.model.dart'; +import 'package:immich_mobile/domain/models/asset/metadata.model.dart'; import 'package:immich_mobile/domain/models/store.model.dart'; import 'package:immich_mobile/entities/store.entity.dart'; import 'package:immich_mobile/infrastructure/repositories/backup.repository.dart'; @@ -291,6 +292,7 @@ class UploadService { priority: priority, isFavorite: asset.isFavorite, requiresWiFi: requiresWiFi, + cloudId: asset.cloudId, ); } @@ -320,6 +322,7 @@ class UploadService { priority: 0, // Highest priority to get upload immediately isFavorite: asset.isFavorite, requiresWiFi: requiresWiFi, + cloudId: asset.cloudId, ); } @@ -346,6 +349,7 @@ class UploadService { String? metadata, int? priority, bool? isFavorite, + String? cloudId, bool requiresWiFi = true, }) async { final serverEndpoint = Store.get(StoreKey.serverEndpoint); @@ -361,6 +365,7 @@ class UploadService { 'fileModifiedAt': modifiedAt.toUtc().toIso8601String(), 'isFavorite': isFavorite?.toString() ?? 'false', 'duration': '0', + 'metadata': AssetMetadata(cloudId: cloudId).toJson(), if (fields != null) ...fields, };