Browse Source

refactor: mobile - send livephoto as a separate request (#5275)

* refactor: mobile - send livephoto as a separate request

* fix: create new request for live asset

---------

Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
shenlong 1 năm trước cách đây
mục cha
commit
e65d1d5930
1 tập tin đã thay đổi với 24 bổ sung8 xóa
  1. 24 8
      mobile/lib/modules/backup/services/backup.service.dart

+ 24 - 8
mobile/lib/modules/backup/services/backup.service.dart

@@ -278,13 +278,6 @@ class BackupService {
 
           req.files.add(assetRawUploadData);
 
-          if (entity.isLivePhoto) {
-            var livePhotoRawUploadData = await _getLivePhotoFile(entity);
-            if (livePhotoRawUploadData != null) {
-              req.files.add(livePhotoRawUploadData);
-            }
-          }
-
           setCurrentUploadAssetCb(
             CurrentUploadAsset(
               id: entity.id,
@@ -299,6 +292,29 @@ class BackupService {
           var response =
               await httpClient.send(req, cancellationToken: cancelToken);
 
+          // Send live photo separately
+          if (entity.isLivePhoto) {
+            var livePhotoRawUploadData = await _getLivePhotoFile(entity);
+            if (livePhotoRawUploadData != null) {
+              var livePhotoReq = MultipartRequest(
+                req.method,
+                req.url,
+                onProgress: req.onProgress,
+              )
+                ..headers.addAll(req.headers)
+                ..fields.addAll(req.fields);
+
+              livePhotoReq.files.add(livePhotoRawUploadData);
+              // Send live photo only if the non-motion part is successful
+              if (response.statusCode == 200 || response.statusCode == 201) {
+                response = await httpClient.send(
+                  livePhotoReq,
+                  cancellationToken: cancelToken,
+                );
+              }
+            }
+          }
+
           if (response.statusCode == 200) {
             // asset is a duplicate (already exists on the server)
             duplicatedAssetIds.add(entity.id);
@@ -356,7 +372,7 @@ class BackupService {
       var fileStream = motionFile.openRead();
       String fileName = p.basename(motionFile.path);
       return http.MultipartFile(
-        "livePhotoData",
+        "assetData",
         fileStream,
         motionFile.lengthSync(),
         filename: fileName,