Browse Source

Ensure that the location is saved to the metadata if unavailable before uploading

Vishnu Mohandas 4 years ago
parent
commit
6cabe8c21a

+ 3 - 24
lib/db/files_db.dart

@@ -267,34 +267,13 @@ class FilesDB {
     }
     }
   }
   }
 
 
-  Future<int> update(
-    int generatedID,
-    int uploadedID,
-    int ownerID,
-    int collectionID,
-    int updationTime,
-    String encryptedKey,
-    String keyDecryptionNonce,
-    String fileDecryptionHeader,
-    String thumbnailDecryptionHeader,
-    String metadataDecryptionHeader,
-  ) async {
+  Future<int> update(File file) async {
     final db = await instance.database;
     final db = await instance.database;
-    final values = new Map<String, dynamic>();
-    values[columnUploadedFileID] = uploadedID;
-    values[columnOwnerID] = ownerID;
-    values[columnCollectionID] = collectionID;
-    values[columnUpdationTime] = updationTime;
-    values[columnEncryptedKey] = encryptedKey;
-    values[columnKeyDecryptionNonce] = keyDecryptionNonce;
-    values[columnFileDecryptionHeader] = fileDecryptionHeader;
-    values[columnThumbnailDecryptionHeader] = thumbnailDecryptionHeader;
-    values[columnMetadataDecryptionHeader] = metadataDecryptionHeader;
     return await db.update(
     return await db.update(
       table,
       table,
-      values,
+      _getRowForFile(file),
       where: '$columnGeneratedID = ?',
       where: '$columnGeneratedID = ?',
-      whereArgs: [generatedID],
+      whereArgs: [file.generatedID],
     );
     );
   }
   }
 
 

+ 3 - 15
lib/services/favorites_service.dart

@@ -48,22 +48,10 @@ class FavoritesService {
 
 
   Future<void> addToFavorites(File file) async {
   Future<void> addToFavorites(File file) async {
     final collectionID = await _getOrCreateFavoriteCollectionID();
     final collectionID = await _getOrCreateFavoriteCollectionID();
-    var fileID = file.uploadedFileID;
-    if (fileID == null) {
+    if (file.uploadedFileID == null) {
       file.collectionID = collectionID;
       file.collectionID = collectionID;
-      fileID = (await _fileUploader.encryptAndUploadFile(file)).uploadedFileID;
-      await _filesDB.update(
-        file.generatedID,
-        file.uploadedFileID,
-        file.ownerID,
-        file.collectionID,
-        file.updationTime,
-        file.encryptedKey,
-        file.keyDecryptionNonce,
-        file.fileDecryptionHeader,
-        file.thumbnailDecryptionHeader,
-        file.metadataDecryptionHeader,
-      );
+      final uploadedFile = (await _fileUploader.encryptAndUploadFile(file));
+      await _filesDB.update(uploadedFile);
     } else {
     } else {
       await _collectionsService.addToCollection(collectionID, [file]);
       await _collectionsService.addToCollection(collectionID, [file]);
       _cachedFavoriteFiles.add(file);
       _cachedFavoriteFiles.add(file);

+ 11 - 24
lib/services/sync_service.dart

@@ -216,18 +216,7 @@ class SyncService {
               .addToCollection(file.collectionID, [existingFile]);
               .addToCollection(file.collectionID, [existingFile]);
         } else {
         } else {
           final uploadedFile = await _uploader.encryptAndUploadFile(file);
           final uploadedFile = await _uploader.encryptAndUploadFile(file);
-          await _db.update(
-            file.generatedID,
-            uploadedFile.uploadedFileID,
-            uploadedFile.ownerID,
-            uploadedFile.collectionID,
-            uploadedFile.updationTime,
-            file.encryptedKey,
-            file.keyDecryptionNonce,
-            file.fileDecryptionHeader,
-            file.thumbnailDecryptionHeader,
-            file.metadataDecryptionHeader,
-          );
+          await _db.update(uploadedFile);
         }
         }
         Bus.instance.fire(PhotoUploadEvent(
         Bus.instance.fire(PhotoUploadEvent(
             completed: i + 1, total: filesToBeUploaded.length));
             completed: i + 1, total: filesToBeUploaded.length));
@@ -244,18 +233,16 @@ class SyncService {
         final existingFile = await _db.getMatchingFile(file.localID, file.title,
         final existingFile = await _db.getMatchingFile(file.localID, file.title,
             file.deviceFolder, file.creationTime, file.modificationTime,
             file.deviceFolder, file.creationTime, file.modificationTime,
             alternateTitle: getHEICFileNameForJPG(file));
             alternateTitle: getHEICFileNameForJPG(file));
-        await _db.update(
-          existingFile.generatedID,
-          file.uploadedFileID,
-          file.ownerID,
-          file.collectionID,
-          file.updationTime,
-          file.encryptedKey,
-          file.keyDecryptionNonce,
-          file.fileDecryptionHeader,
-          file.thumbnailDecryptionHeader,
-          file.metadataDecryptionHeader,
-        );
+        file.localID = existingFile.localID;
+        if (existingFile.collectionID == null ||
+            existingFile.collectionID == file.collectionID) {
+          // Uploaded for the first time || updated within the same collection
+          file.generatedID = existingFile.generatedID;
+          await _db.update(file);
+        } else {
+          // If an existing file was added to a collection
+          await _db.insert(file);
+        }
       } catch (e) {
       } catch (e) {
         file.localID = null; // File uploaded from a different device
         file.localID = null; // File uploaded from a different device
         await _db.insert(file);
         await _db.insert(file);

+ 6 - 0
lib/utils/file_uploader.dart

@@ -6,6 +6,7 @@ import 'package:logging/logging.dart';
 import 'package:photos/core/configuration.dart';
 import 'package:photos/core/configuration.dart';
 import 'package:photos/core/constants.dart';
 import 'package:photos/core/constants.dart';
 import 'package:photos/models/file.dart';
 import 'package:photos/models/file.dart';
+import 'package:photos/models/location.dart';
 import 'package:photos/models/upload_url.dart';
 import 'package:photos/models/upload_url.dart';
 import 'package:photos/services/collections_service.dart';
 import 'package:photos/services/collections_service.dart';
 import 'package:photos/utils/crypto_util.dart';
 import 'package:photos/utils/crypto_util.dart';
@@ -93,6 +94,11 @@ class FileUploader {
     String thumbnailObjectKey =
     String thumbnailObjectKey =
         await putFile(thumbnailUploadURL, io.File(encryptedThumbnailPath));
         await putFile(thumbnailUploadURL, io.File(encryptedThumbnailPath));
 
 
+    if (file.location.latitude == 0 && file.location.longitude == 0) {
+      final latLong = await (await file.getAsset()).latlngAsync();
+      file.location = Location(latLong.latitude, latLong.longitude);
+    }
+
     final encryptedMetadataData = CryptoUtil.encryptChaCha(
     final encryptedMetadataData = CryptoUtil.encryptChaCha(
         utf8.encode(jsonEncode(file.getMetadata())), fileAttributes.key);
         utf8.encode(jsonEncode(file.getMetadata())), fileAttributes.key);