소스 검색

Save remote only files post edits

Vishnu Mohandas 4 년 전
부모
커밋
4cf2ec73e1
3개의 변경된 파일28개의 추가작업 그리고 1개의 파일을 삭제
  1. 12 0
      lib/db/files_db.dart
  2. 13 1
      lib/services/sync_service.dart
  3. 3 0
      lib/ui/image_editor_page.dart

+ 12 - 0
lib/db/files_db.dart

@@ -364,6 +364,18 @@ class FilesDB {
     return _convertToFiles(results);
   }
 
+  Future<List<File>> getEditedRemoteFiles() async {
+    final db = await instance.database;
+    final results = await db.query(
+      table,
+      where:
+          '($columnCollectionID IS NOT NULL AND $columnCollectionID IS NOT -1) AND ($columnUploadedFileID IS NULL OR $columnUploadedFileID IS -1)',
+      orderBy: '$columnCreationTime DESC',
+      groupBy: '$columnLocalID',
+    );
+    return _convertToFiles(results);
+  }
+
   Future<List<int>> getUploadedFileIDsToBeUpdated() async {
     final db = await instance.database;
     final rows = await db.query(

+ 13 - 1
lib/services/sync_service.dart

@@ -338,8 +338,12 @@ class SyncService {
     final updatedFileIDs = await _db.getUploadedFileIDsToBeUpdated();
     _logger.info(updatedFileIDs.length.toString() + " files updated.");
 
+    final editedFiles = await _db.getEditedRemoteFiles();
+    _logger.info(editedFiles.length.toString() + " files edited.");
+
     _completedUploads = 0;
-    int toBeUploaded = filesToBeUploaded.length + updatedFileIDs.length;
+    int toBeUploaded =
+        filesToBeUploaded.length + updatedFileIDs.length + editedFiles.length;
 
     if (toBeUploaded > 0) {
       Bus.instance.fire(SyncStatusUpdate(SyncStatus.preparing_for_upload));
@@ -363,6 +367,14 @@ class SyncService {
               uploadedFile, alreadyUploaded, toBeUploaded));
       futures.add(future);
     }
+
+    for (final file in editedFiles) {
+      final future = _uploader.upload(file, file.collectionID).then(
+          (uploadedFile) async => await _onFileUploaded(
+              uploadedFile, alreadyUploaded, toBeUploaded));
+      futures.add(future);
+    }
+
     try {
       await Future.wait(futures);
     } on InvalidFileError {

+ 3 - 0
lib/ui/image_editor_page.dart

@@ -267,6 +267,9 @@ class _ImageEditorPageState extends State<ImageEditorPage> {
       final newFile =
           await ente.File.fromAsset(widget.originalFile.deviceFolder, newAsset);
       newFile.creationTime = widget.originalFile.creationTime;
+      if (widget.originalFile.localID == null) {
+        newFile.collectionID = widget.originalFile.collectionID;
+      }
       await FilesDB.instance.insertMultiple([newFile]);
       Bus.instance.fire(LocalPhotosUpdatedEvent([newFile]));
       SyncService.instance.sync();