Browse Source

Change protocol Upload file

Marino Faggiana 6 years ago
parent
commit
bcbbfd1506

+ 67 - 74
PickerFileProvider/FileProvider.swift

@@ -287,16 +287,8 @@ class FileProvider: NSFileProviderExtension {
                     if (lenght > 0) {
                         
                         // copy download file to url
-                        do {
-                            try FileManager.default.removeItem(atPath: url.path)
-                        } catch let error {
-                            print("error: \(error)")
-                        }
-                        do {
-                            try FileManager.default.copyItem(atPath: "\(directoryUser)/\(metadata.fileID)", toPath: url.path)
-                        } catch let error {
-                            print("error: \(error)")
-                        }
+                        _ = self.copyFile("\(directoryUser)/\(metadata.fileID)", toPath: url.path)
+                        
                         // create thumbnail
                         CCGraphics.createNewImage(from: metadata.fileID, directoryUser: directoryUser, fileNameTo: metadata.fileID, extension: (metadata.fileNameView as NSString).pathExtension, size: "m", imageForUpload: false, typeFile: metadata.typeFile, writePreview: true, optimizedFileName: CCUtility.getOptimizedPhoto())
                     
@@ -369,18 +361,8 @@ class FileProvider: NSFileProviderExtension {
                 
                 _ = ocNetworking?.uploadFileNameServerUrl(serverUrl+"/"+fileName, fileNameLocalPath: url.path, communication: CCNetworking.shared().sharedOCCommunicationExtensionUpload(k_upload_session_extension), success: { (fileID, etag, date) in
                     
-                    let toPath = "\(directoryUser)/\(metadata.fileID)"
-
-                    do {
-                        try FileManager.default.removeItem(atPath: toPath)
-                    } catch let error {
-                        print("error: \(error)")
-                    }
-                    do {
-                        try FileManager.default.copyItem(atPath:  url.path, toPath: toPath)
-                    } catch let error {
-                        print("error: \(error)")
-                    }
+                    _ = self.copyFile(url.path, toPath: "\(directoryUser)/\(metadata.fileID)")
+                    
                     // create thumbnail
                     CCGraphics.createNewImage(from: metadata.fileID, directoryUser: directoryUser, fileNameTo: metadata.fileID, extension: (metadata.fileNameView as NSString).pathExtension, size: "m", imageForUpload: false, typeFile: metadata.typeFile, writePreview: true, optimizedFileName: CCUtility.getOptimizedPhoto())
                     
@@ -450,19 +432,7 @@ class FileProvider: NSFileProviderExtension {
                 let destinationDirectoryUser = "\(directoryUser!)/\(uploadID)"
                 
                 // copy sourceURL on directoryUser
-                do {
-                    try FileManager.default.removeItem(atPath: destinationDirectoryUser)
-                } catch let error {
-                    print("error: \(error)")
-                }
-                
-                do {
-                    try FileManager.default.copyItem(atPath: url.path, toPath: destinationDirectoryUser)
-                } catch let error {
-                    print("error: \(error)")
-                    self.stopProvidingItem(at: url)
-                    return
-                }
+                _ = self.copyFile(url.path, toPath: destinationDirectoryUser)
                 
                 // Prepare for send Metadata
                 metadata!.sessionID = uploadID
@@ -476,19 +446,8 @@ class FileProvider: NSFileProviderExtension {
                 let directoryUser = CCUtility.getDirectoryActiveUser(account.user, activeUrl: account.url)
                 let destinationDirectoryUser = "\(directoryUser!)/\(fileName)"
                 
-                do {
-                    try FileManager.default.removeItem(atPath: destinationDirectoryUser)
-                } catch let error {
-                    print("error: \(error)")
-                }
-                do {
-                    try FileManager.default.copyItem(atPath: url.path, toPath: destinationDirectoryUser)
-                } catch let error {
-                    print("error: \(error)")
-                    self.stopProvidingItem(at: url)
-                    return
-                }
-                
+                _ = self.copyFile(url.path, toPath: destinationDirectoryUser)
+
                 CCNetworking.shared().uploadFile(fileName, serverUrl: serverUrl, session: k_upload_session, taskStatus: Int(k_taskStatusResume), selector: nil, selectorPost: nil, errorCode: 0, delegate: self)
             }
             
@@ -738,6 +697,7 @@ class FileProvider: NSFileProviderExtension {
         var error: NSError?
         var directoryPredicate: NSPredicate
         var size = 0 as Double
+        var fileNamePathUpload: URL?
         
         if parentItemIdentifier == .rootContainer {
             directoryPredicate = NSPredicate(format: "account = %@ AND serverUrl = %@", account, homeServerUrl)
@@ -758,6 +718,7 @@ class FileProvider: NSFileProviderExtension {
             return
         }
         
+        /*
         // exists with same name ? add + 1
         if NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "account = %@ AND fileNameView = %@ AND directoryID = %@", account, fileName, directoryParent.directoryID)) != nil {
             
@@ -781,6 +742,7 @@ class FileProvider: NSFileProviderExtension {
                 }
             }
         }
+        */
         
         // Verify if upload is aready
         if (uploading.contains(serverUrl+"/"+fileName) == true) {
@@ -790,21 +752,17 @@ class FileProvider: NSFileProviderExtension {
             uploading.append(serverUrl+"/"+fileName)
         }
         
-        let fileNameLocalPath = NSURL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(fileName)!
-            
+        // Create dir for Upload
+        do {
+            try FileManager.default.createDirectory(atPath: groupURL!.appendingPathComponent("File Provider Storage").appendingPathComponent("Upload").path, withIntermediateDirectories: true, attributes: nil)
+        } catch let error as NSError {
+            NSLog("Unable to create directory \(error.debugDescription)")
+        }
+        
+        let fileNameLocalPath = groupURL!.appendingPathComponent("File Provider Storage").appendingPathComponent("Upload").appendingPathComponent(fileName)
+        
         fileCoordinator.coordinate(readingItemAt: fileURL, options: NSFileCoordinator.ReadingOptions.withoutChanges, error: &error) { (url) in
-                
-            do {
-                try FileManager.default.removeItem(atPath: fileNameLocalPath.path)
-            } catch let error {
-                print("error: \(error)")
-            }
-                
-            do {
-                try FileManager.default.copyItem(atPath: url.path, toPath: fileNameLocalPath.path)
-            } catch let error {
-                print("error: \(error)")
-            }
+            _ = self.copyFile( url.path, toPath: fileNameLocalPath.path)
         }
             
         fileURL.stopAccessingSecurityScopedResource()
@@ -815,9 +773,22 @@ class FileProvider: NSFileProviderExtension {
         } catch let error {
             print("error: \(error)")
         }
+        
+        // Upload file 0 len
+        if (size == 0) {
+            fileNamePathUpload = fileNameLocalPath
+        } else {
+            fileNamePathUpload = groupURL!.appendingPathComponent("File Provider Storage").appendingPathComponent("Upload").appendingPathComponent(fileName+".000")
+            do {
+                try FileManager.default.removeItem(atPath: fileNamePathUpload!.path)
+            } catch let error {
+                print("error: \(error)")
+            }
+            FileManager.default.createFile(atPath: fileNamePathUpload!.path, contents: nil, attributes: nil)
+        }
     
         // upload (NO SESSION ?!?!?)
-        _ = ocNetworking?.uploadFileNameServerUrl(serverUrl+"/"+fileName, fileNameLocalPath: fileNameLocalPath.path, communication: CCNetworking.shared().sharedOCCommunication(), success: { (fileID, etag, date) in
+        _ = ocNetworking?.uploadFileNameServerUrl(serverUrl+"/"+fileName, fileNameLocalPath: fileNamePathUpload?.path, communication: CCNetworking.shared().sharedOCCommunication(), success: { (fileID, etag, date) in
                 
             let metadata = tableMetadata()
                 
@@ -850,23 +821,27 @@ class FileProvider: NSFileProviderExtension {
                 }
             }
             
-            do {
-                try FileManager.default.removeItem(atPath: toPath)
-            } catch let error {
-                print("error: \(error)")
-            }
-            do {
-                try FileManager.default.copyItem(atPath:  fileNameLocalPath.path, toPath: toPath)
-            } catch let error {
-                print("error: \(error)")
-            }
+            _ = self.copyFile(fileNameLocalPath.path, toPath: toPath)
             
             // add item
             let item = FileProviderItem(metadata: metadataDB, serverUrl: serverUrl)
             
             // remove file uploading
             self.uploading = self.uploading.filter() { $0 != serverUrl+"/"+fileName }
-                        
+            
+            // add queue upload
+            let metadataNet = CCMetadataNet()
+            metadataNet.account = account
+            metadataNet.assetLocalIdentifier = ""
+            metadataNet.fileName = fileName
+            metadataNet.path = toPath
+            metadataNet.selector = selectorUploadFile
+            metadataNet.selectorPost = ""
+            metadataNet.serverUrl = serverUrl
+            metadataNet.session = k_upload_session
+            metadataNet.taskStatus = Int(k_taskStatusResume)
+            _ = NCManageDatabase.sharedInstance.addQueueUpload(metadataNet: metadataNet)
+            
             completionHandler(item, nil)
             
             // Refresh UI
@@ -906,4 +881,22 @@ class FileProvider: NSFileProviderExtension {
             }
         }
     }
+    
+    func copyFile(_ atPath: String, toPath: String) -> Error? {
+        
+        var errorResult: Error?
+        
+        do {
+            try FileManager.default.removeItem(atPath: toPath)
+        } catch let error {
+            print("error: \(error)")
+        }
+        do {
+            try FileManager.default.copyItem(atPath: atPath, toPath: toPath)
+        } catch let error {
+            errorResult = error
+        }
+        
+        return errorResult
+    }
 }

+ 21 - 4
iOSClient/AppDelegate.m

@@ -1448,7 +1448,13 @@
         metadataNet = [[NCManageDatabase sharedInstance] getQueueUploadLockWithSelector:selectorUploadAutoUpload];
         if (metadataNet) {
             
-            [[CCNetworking sharedNetworking] uploadFileFromAssetLocalIdentifier:metadataNet delegate:_activeMain];
+            if (metadataNet.path == nil) {
+                [[CCNetworking sharedNetworking] uploadFileFromAssetLocalIdentifier:metadataNet delegate:_activeMain];
+            } else {
+                NSString *toPath = [NSString stringWithFormat:@"%@/%@", self.directoryUser, metadataNet.fileName];
+                [CCUtility copyFileAtPath:metadataNet.path toPath:toPath];
+                [[CCNetworking sharedNetworking] uploadFile:metadataNet.fileName serverUrl:metadataNet.serverUrl session:metadataNet.session taskStatus:k_taskStatusResume selector:metadataNet.selector selectorPost:metadataNet.selectorPost errorCode:0 delegate:nil];
+            }
             
             counterNewUpload++;
         }
@@ -1476,7 +1482,13 @@
             metadataNet = [[NCManageDatabase sharedInstance] getQueueUploadLockWithSelector:selectorUploadAutoUploadAll];
             if (metadataNet) {
                 
-                [[CCNetworking sharedNetworking] uploadFileFromAssetLocalIdentifier:metadataNet delegate:_activeMain];
+                if (metadataNet.path == nil) {
+                    [[CCNetworking sharedNetworking] uploadFileFromAssetLocalIdentifier:metadataNet delegate:_activeMain];
+                } else {
+                    NSString *toPath = [NSString stringWithFormat:@"%@/%@", self.directoryUser, metadataNet.fileName];
+                    [CCUtility copyFileAtPath:metadataNet.path toPath:toPath];
+                    [[CCNetworking sharedNetworking] uploadFile:metadataNet.fileName serverUrl:metadataNet.serverUrl session:metadataNet.session taskStatus:k_taskStatusResume selector:metadataNet.selector selectorPost:metadataNet.selectorPost errorCode:0 delegate:nil];
+                }
                 
                 counterNewUpload++;
             }
@@ -1492,8 +1504,13 @@
         metadataNet = [[NCManageDatabase sharedInstance] getQueueUploadLockWithSelector:selectorUploadFile];
         if (metadataNet) {
             
-            [[CCNetworking sharedNetworking] uploadFileFromAssetLocalIdentifier:metadataNet delegate:_activeMain];
-            
+            if (metadataNet.path == nil) {
+                [[CCNetworking sharedNetworking] uploadFileFromAssetLocalIdentifier:metadataNet delegate:_activeMain];
+            } else {
+                NSString *toPath = [NSString stringWithFormat:@"%@/%@", self.directoryUser, metadataNet.fileName];
+                [CCUtility copyFileAtPath:metadataNet.path toPath:toPath];
+                [[CCNetworking sharedNetworking] uploadFile:metadataNet.fileName serverUrl:metadataNet.serverUrl session:metadataNet.session taskStatus:k_taskStatusResume selector:metadataNet.selector selectorPost:metadataNet.selectorPost errorCode:0 delegate:nil];
+            }
             counterNewUpload++;
         }
         

+ 1 - 0
iOSClient/Database/NCDatabase.swift

@@ -262,6 +262,7 @@ class tableQueueUpload: Object {
     @objc dynamic var date = NSDate()
     @objc dynamic var fileName = ""
     @objc dynamic var lock: Bool = false
+    @objc dynamic var path: String?
     @objc dynamic var selector = ""
     @objc dynamic var selectorPost = ""
     @objc dynamic var serverUrl = ""

+ 4 - 0
iOSClient/Database/NCManageDatabase.swift

@@ -2208,6 +2208,7 @@ class NCManageDatabase: NSObject {
                         addObject.account = tableAccount.account
                         addObject.assetLocalIdentifier = metadataNet.assetLocalIdentifier
                         addObject.fileName = metadataNet.fileName
+                        addObject.path = metadataNet.path
                         addObject.selector = metadataNet.selector
                         
                         if let selectorPost = metadataNet.selectorPost {
@@ -2250,6 +2251,7 @@ class NCManageDatabase: NSObject {
                         addObject.account = tableAccount.account
                         addObject.assetLocalIdentifier = metadataNet.assetLocalIdentifier
                         addObject.fileName = metadataNet.fileName
+                        addObject.path = metadataNet.path
                         addObject.selector = metadataNet.selector
                         
                         if let selectorPost = metadataNet.selectorPost {
@@ -2288,6 +2290,7 @@ class NCManageDatabase: NSObject {
         metadataNet.account = result.account
         metadataNet.assetLocalIdentifier = result.assetLocalIdentifier
         metadataNet.fileName = result.fileName
+        metadataNet.path = result.path
         metadataNet.selector = result.selector
         metadataNet.selectorPost = result.selectorPost
         metadataNet.serverUrl = result.serverUrl
@@ -2325,6 +2328,7 @@ class NCManageDatabase: NSObject {
         metadataNet.account = result.account
         metadataNet.assetLocalIdentifier = result.assetLocalIdentifier
         metadataNet.fileName = result.fileName
+        metadataNet.path = result.path
         metadataNet.selector = result.selector
         metadataNet.selectorPost = result.selectorPost
         metadataNet.serverUrl = result.serverUrl

+ 1 - 1
iOSClient/Networking/CCNetworking.h

@@ -112,7 +112,7 @@
 @property (nonatomic, strong) NSString *keyCipher;
 @property (nonatomic, strong) id options;
 @property (nonatomic, strong) NSString *password;
-@property (nonatomic, strong) NSString *pathFolder;
+@property (nonatomic, strong) NSString *path;
 @property NSInteger priority;
 @property (nonatomic, strong) NSString *serverUrl;
 @property (nonatomic, strong) NSString *serverUrlTo;

+ 1 - 1
iOSClient/Networking/CCNetworking.m

@@ -1525,7 +1525,7 @@
     [metadataNet setKeyCipher: self.keyCipher];
     [metadataNet setOptions: self.options];
     [metadataNet setPassword: self.password];
-    [metadataNet setPathFolder: self.pathFolder];
+    [metadataNet setPath: self.path];
     [metadataNet setPriority: self.priority];
     [metadataNet setServerUrl: self.serverUrl];
     [metadataNet setServerUrlTo: self.serverUrlTo];

+ 0 - 2
iOSClient/Utility/CCUtility.m

@@ -828,7 +828,6 @@
 + (void)moveFileAtPath:(NSString *)atPath toPath:(NSString *)toPath
 {
     if ([[NSFileManager defaultManager] fileExistsAtPath:atPath]) {
-        
         [[NSFileManager defaultManager] removeItemAtPath:toPath error:nil];
         [[NSFileManager defaultManager] copyItemAtPath:atPath toPath:toPath error:nil];
         [[NSFileManager defaultManager] removeItemAtPath:atPath error:nil];
@@ -838,7 +837,6 @@
 + (void)copyFileAtPath:(NSString *)atPath toPath:(NSString *)toPath
 {
     if ([[NSFileManager defaultManager] fileExistsAtPath:atPath]) {
-        
         [[NSFileManager defaultManager] removeItemAtPath:toPath error:nil];
         [[NSFileManager defaultManager] copyItemAtPath:atPath toPath:toPath error:nil];
     }