Browse Source

Use hash from MediaDataUpload for fileMetadata

Neeraj Gupta 3 years ago
parent
commit
41f70abb67
2 changed files with 14 additions and 9 deletions
  1. 13 7
      lib/models/file.dart
  2. 1 2
      lib/utils/file_uploader.dart

+ 13 - 7
lib/models/file.dart

@@ -1,7 +1,4 @@
-import 'dart:io' as io;
-
 import 'package:flutter/foundation.dart';
-import 'package:flutter_sodium/flutter_sodium.dart';
 import 'package:path/path.dart';
 import 'package:photo_manager/photo_manager.dart';
 import 'package:photos/core/configuration.dart';
@@ -11,8 +8,8 @@ import 'package:photos/models/file_type.dart';
 import 'package:photos/models/location.dart';
 import 'package:photos/models/magic_metadata.dart';
 import 'package:photos/services/feature_flag_service.dart';
-import 'package:photos/utils/crypto_util.dart';
 import 'package:photos/utils/exif_util.dart';
+import 'package:photos/utils/file_uploader_util.dart';
 
 class File extends EnteFile {
   int generatedID;
@@ -140,7 +137,9 @@ class File extends EnteFile {
     metadataVersion = metadata["version"] ?? 0;
   }
 
-  Future<Map<String, dynamic>> getMetadataForUpload(io.File sourceFile) async {
+  Future<Map<String, dynamic>> getMetadataForUpload(
+    MediaUploadData mediaUploadData,
+  ) async {
     final asset = await getAsset();
     // asset can be null for files shared to app
     if (asset != null) {
@@ -150,12 +149,19 @@ class File extends EnteFile {
       }
     }
     if (fileType == FileType.image) {
-      final exifTime = await getCreationTimeFromEXIF(sourceFile);
+      final exifTime =
+          await getCreationTimeFromEXIF(mediaUploadData.sourceFile);
       if (exifTime != null) {
         creationTime = exifTime.microsecondsSinceEpoch;
       }
     }
-    hash = Sodium.bin2base64(await CryptoUtil.getHash(sourceFile));
+    // in metadataVersion V1, the hash for livePhoto is the hash of the
+    // zipped file.
+    // web uploads files without MetadataVersion and upload image hash as 'ha
+    // sh' key and video as 'vidHash'
+    hash = (fileType == FileType.livePhoto)
+        ? mediaUploadData.zipHash
+        : mediaUploadData.fileHash;
     return getMetadata();
   }
 

+ 1 - 2
lib/utils/file_uploader.dart

@@ -346,8 +346,7 @@ class FileUploader {
       final fileUploadURL = await _getUploadURL();
       String fileObjectKey = await _putFile(fileUploadURL, encryptedFile);
 
-      final metadata =
-          await file.getMetadataForUpload(mediaUploadData.sourceFile);
+      final metadata = await file.getMetadataForUpload(mediaUploadData);
       final encryptedMetadataData = await CryptoUtil.encryptChaCha(
         utf8.encode(jsonEncode(metadata)),
         fileAttributes.key,