Parcourir la source

fix: add file key in table

Prateek Sunal il y a 1 an
Parent
commit
3a8b737968

+ 28 - 2
mobile/lib/db/upload_locks_db.dart

@@ -62,10 +62,14 @@ class UploadLocksDB {
     final Directory documentsDirectory =
         await getApplicationDocumentsDirectory();
     final String path = join(documentsDirectory.path, _databaseName);
+
     return await openDatabase(
       path,
       version: _databaseVersion,
       onCreate: _onCreate,
+      onOpen: (db) async {
+        await _createTrackUploadsTable(db);
+      },
     );
   }
 
@@ -79,10 +83,25 @@ class UploadLocksDB {
                 )
                 ''',
     );
+    await _createTrackUploadsTable(db);
+  }
+
+  Future _createTrackUploadsTable(Database db) async {
+    if ((await db.query(
+      'sqlite_master',
+      where: 'name = ?',
+      whereArgs: [
+        _trackUploadTable.table,
+      ],
+    ))
+        .isNotEmpty) {
+      return;
+    }
+
     await db.execute(
       '''
                 CREATE TABLE ${_trackUploadTable.table} (
-                  ${_trackUploadTable.columnID} TEXT PRIMARY KEY NOT NULL,
+                  ${_trackUploadTable.columnID} INTEGER PRIMARY KEY,
                   ${_trackUploadTable.columnLocalID} TEXT NOT NULL,
                   ${_trackUploadTable.columnFileHash} TEXT NOT NULL UNIQUE,
                   ${_trackUploadTable.columnEncryptedFilePath} TEXT NOT NULL,
@@ -170,7 +189,12 @@ class UploadLocksDB {
   // For multipart download tracking
   Future<bool> doesExists(String localId, String hash) async {
     final db = await instance.database;
-    final rows = await db.query(_trackUploadTable.table);
+    final rows = await db.query(
+      _trackUploadTable.table,
+      where:
+          '${_trackUploadTable.columnLocalID} = ? AND ${_trackUploadTable.columnFileHash} = ?',
+    );
+
     return rows.isNotEmpty;
   }
 
@@ -227,6 +251,7 @@ class UploadLocksDB {
     MultipartUploadURLs urls,
     String encryptedFilePath,
     int fileSize,
+    String fileKey,
   ) async {
     final db = await UploadLocksDB.instance.database;
     final objectKey = urls.objectKey;
@@ -240,6 +265,7 @@ class UploadLocksDB {
         _trackUploadTable.columnCompleteUrl: urls.completeURL,
         _trackUploadTable.columnEncryptedFilePath: encryptedFilePath,
         _trackUploadTable.columnEncryptedFileSize: fileSize,
+        _trackUploadTable.columnFileKey: fileKey,
         _trackUploadTable.columnCompletionStatus: _trackStatus.pending,
         _trackUploadTable.columnPartSize: multipartPartSize,
       },

+ 1 - 0
mobile/lib/utils/file_uploader.dart

@@ -522,6 +522,7 @@ class FileUploader {
             fileUploadURLs,
             encryptedFilePath,
             await encryptedFile.length(),
+            fileAttributes.key!,
           );
           fileObjectKey = await putMultipartFile(fileUploadURLs, encryptedFile);
         }

+ 4 - 0
mobile/lib/utils/multipart_upload_util.dart

@@ -1,12 +1,14 @@
 // ignore_for_file: implementation_imports
 
 import "dart:io";
+import "dart:typed_data";
 
 import "package:dio/dio.dart";
 import "package:logging/logging.dart";
 import "package:photos/core/constants.dart";
 import "package:photos/core/network/network.dart";
 import "package:photos/db/upload_locks_db.dart";
+import "package:photos/utils/crypto_util.dart";
 import "package:photos/utils/xml_parser_util.dart";
 
 final _enteDio = NetworkClient.instance.enteDio;
@@ -79,6 +81,7 @@ Future<void> createTableEntry(
   MultipartUploadURLs urls,
   String encryptedFilePath,
   int fileSize,
+  Uint8List fileKey,
 ) async {
   await UploadLocksDB.instance.createTrackUploadsEntry(
     localId,
@@ -86,6 +89,7 @@ Future<void> createTableEntry(
     urls,
     encryptedFilePath,
     fileSize,
+    CryptoUtil.bin2base64(fileKey),
   );
 }