Marino Faggiana 7 years ago
parent
commit
1c13be0453

+ 4 - 3
Picker/DocumentPickerViewController.swift

@@ -419,8 +419,9 @@ class DocumentPickerViewController: UIDocumentPickerExtensionViewController, CCN
         
         
         recordMetadata = metadata
         recordMetadata = metadata
         
         
-        // Save fileID for PickerFileProvide
-        CCUtility.setFileIDExt(metadata.fileID)
+        // Save for PickerFileProvide
+        CCUtility.setFileNameExt(metadata.fileName)
+        CCUtility.setServerUrlExt(serverUrl)
         
         
         switch selector {
         switch selector {
             
             
@@ -562,7 +563,7 @@ extension DocumentPickerViewController {
                     
                     
                     if fileSize == 0 {
                     if fileSize == 0 {
                         
                         
-                        CCUtility.setFileIDExt("NEW")
+                        CCUtility.setFileNameExt(fileName)
                         CCUtility.setServerUrlExt(self!.serverUrl)
                         CCUtility.setServerUrlExt(self!.serverUrl)
                         self?.dismissGrantingAccess(to: self?.destinationURL)
                         self?.dismissGrantingAccess(to: self?.destinationURL)
                         
                         

+ 38 - 35
PickerFileProvider/FileProvider.swift

@@ -90,6 +90,7 @@ class FileProvider: NSFileProviderExtension, CCNetworkingDelegate {
     }
     }
     
     
     override func itemChanged(at url: URL) {
     override func itemChanged(at url: URL) {
+        
         // Called at some point after the file has changed; the provider may then trigger an upload
         // Called at some point after the file has changed; the provider may then trigger an upload
         
         
         let fileSize = (try! FileManager.default.attributesOfItem(atPath: url.path)[FileAttributeKey.size] as! NSNumber).uint64Value
         let fileSize = (try! FileManager.default.attributesOfItem(atPath: url.path)[FileAttributeKey.size] as! NSNumber).uint64Value
@@ -99,24 +100,30 @@ class FileProvider: NSFileProviderExtension, CCNetworkingDelegate {
             self.stopProvidingItem(at: url)
             self.stopProvidingItem(at: url)
             return
             return
         }
         }
-        
-        let directoryUser = CCUtility.getDirectoryActiveUser(account.user, activeUrl: account.url)
-        
-        guard let fileID = CCUtility.getFileIDExt() else {
+        guard let fileName = CCUtility.getFileNameExt() else {
+            self.stopProvidingItem(at: url)
+            return
+        }
+        if (fileName != url.lastPathComponent) {
+            self.stopProvidingItem(at: url)
+            return
+        }
+        guard let serverUrl = CCUtility.getServerUrlExt() else {
+            self.stopProvidingItem(at: url)
+            return
+        }
+        guard let directoryID = NCManageDatabase.sharedInstance.getDirectoryID(serverUrl) else {
             self.stopProvidingItem(at: url)
             self.stopProvidingItem(at: url)
             return
             return
         }
         }
         
         
-        let fileName = url.lastPathComponent
-        
-        if fileID == "NEW" {
-            
-            let destinationURLDirectoryUser = URL(string: "file://\(directoryUser!)/\(fileName)".addingPercentEncoding(withAllowedCharacters: .urlPathAllowed)!)!
-            guard let serverUrl = CCUtility.getServerUrlExt() else {
-                self.stopProvidingItem(at: url)
-                return
-            }
+        if let metadata = NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "fileName == %@ AND directoryID == %@", fileName, directoryID)) {
             
             
+            // Update
+            let uploadID = k_uploadSessionID + CCUtility.createRandomString(16)
+            let directoryUser = CCUtility.getDirectoryActiveUser(account.user, activeUrl: account.url)
+            let destinationURLDirectoryUser = URL(string: "file://\(directoryUser!)/\(uploadID)".addingPercentEncoding(withAllowedCharacters: .urlPathAllowed)!)!
+
             // copy sourceURL on directoryUser
             // copy sourceURL on directoryUser
             do {
             do {
                 try FileManager.default.removeItem(at: destinationURLDirectoryUser)
                 try FileManager.default.removeItem(at: destinationURLDirectoryUser)
@@ -128,49 +135,45 @@ class FileProvider: NSFileProviderExtension, CCNetworkingDelegate {
                 try FileManager.default.copyItem(at: url, to: destinationURLDirectoryUser)
                 try FileManager.default.copyItem(at: url, to: destinationURLDirectoryUser)
             } catch _ {
             } catch _ {
                 print("file do not exists")
                 print("file do not exists")
+                self.stopProvidingItem(at: url)
                 return
                 return
             }
             }
 
 
-            CCNetworking.shared().settingDelegate(self)
-            CCNetworking.shared().uploadFile(fileName, serverUrl: serverUrl, cryptated: false, onlyPlist: false, session: k_upload_session, taskStatus: Int(k_taskStatusResume), selector: nil, selectorPost: nil, errorCode: 0, delegate: self)
-            
-        } else {
-        
-            guard let metadata = NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "fileID == %@", fileID)) else {
+            if NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "fileName == %@ AND directoryID == %@ AND session == ''", fileName, directoryID)) != nil {
+                print("already exist in upload queue")
                 self.stopProvidingItem(at: url)
                 self.stopProvidingItem(at: url)
                 return
                 return
             }
             }
+
+            // Prepare for send Metadata
+            metadata.fileID = uploadID
+            metadata.sessionID = uploadID
+            metadata.session = k_upload_session
+            metadata.sessionTaskIdentifier = Int(k_taskIdentifierWaitStart)
+            _ = NCManageDatabase.sharedInstance.updateMetadata(metadata)
             
             
-            if (fileName != metadata.fileName) {
-                self.stopProvidingItem(at: url)
-                return
-            }
+        } else {
             
             
-            let uploadID = k_uploadSessionID + CCUtility.createRandomString(16)
-            let destinationURLDirectoryUser = URL(string: "file://\(directoryUser!)/\(uploadID)".addingPercentEncoding(withAllowedCharacters: .urlPathAllowed)!)!
+            // New
+            let directoryUser = CCUtility.getDirectoryActiveUser(account.user, activeUrl: account.url)
+            let destinationURLDirectoryUser = URL(string: "file://\(directoryUser!)/\(fileName)".addingPercentEncoding(withAllowedCharacters: .urlPathAllowed)!)!
             
             
-            // copy sourceURL on directoryUser
             do {
             do {
                 try FileManager.default.removeItem(at: destinationURLDirectoryUser)
                 try FileManager.default.removeItem(at: destinationURLDirectoryUser)
             } catch _ {
             } catch _ {
                 print("file do not exists")
                 print("file do not exists")
             }
             }
-            
             do {
             do {
                 try FileManager.default.copyItem(at: url, to: destinationURLDirectoryUser)
                 try FileManager.default.copyItem(at: url, to: destinationURLDirectoryUser)
             } catch _ {
             } catch _ {
                 print("file do not exists")
                 print("file do not exists")
+                self.stopProvidingItem(at: url)
                 return
                 return
             }
             }
-
-            // Prepare for send Metadata
-            metadata.fileID = uploadID
-            metadata.sessionID = uploadID
-            metadata.session = k_upload_session
-            metadata.sessionTaskIdentifier = Int(k_taskIdentifierWaitStart)
-            _ = NCManageDatabase.sharedInstance.updateMetadata(metadata)
+            
+            CCNetworking.shared().uploadFile(fileName, serverUrl: serverUrl, cryptated: false, onlyPlist: false, session: k_upload_session, taskStatus: Int(k_taskStatusResume), selector: nil, selectorPost: nil, errorCode: 0, delegate: self)
         }
         }
-        
+
         self.stopProvidingItem(at: url)
         self.stopProvidingItem(at: url)
     }
     }
     
     

+ 2 - 2
iOSClient/Utility/CCUtility.h

@@ -74,7 +74,7 @@
 + (void)setCryptatedExt:(BOOL)cryptated;
 + (void)setCryptatedExt:(BOOL)cryptated;
 + (void)setServerUrlExt:(NSString *)serverUrl;
 + (void)setServerUrlExt:(NSString *)serverUrl;
 + (void)setTitleServerUrlExt:(NSString *)titleServerUrl;
 + (void)setTitleServerUrlExt:(NSString *)titleServerUrl;
-+ (void)setFileIDExt:(NSString *)fileID;
++ (void)setFileNameExt:(NSString *)fileName;
 
 
 + (void)setEmail:(NSString *)email;
 + (void)setEmail:(NSString *)email;
 
 
@@ -118,7 +118,7 @@
 + (BOOL)getCryptatedExt;
 + (BOOL)getCryptatedExt;
 + (NSString *)getServerUrlExt;
 + (NSString *)getServerUrlExt;
 + (NSString *)getTitleServerUrlExt;
 + (NSString *)getTitleServerUrlExt;
-+ (NSString *)getFileIDExt;
++ (NSString *)getFileNameExt;
 
 
 + (NSString *)getEmail;
 + (NSString *)getEmail;
 
 

+ 4 - 4
iOSClient/Utility/CCUtility.m

@@ -171,9 +171,9 @@
     [UICKeyChainStore setString:titleServerUrl forKey:@"titleServerUrlExt" service:k_serviceShareKeyChain];
     [UICKeyChainStore setString:titleServerUrl forKey:@"titleServerUrlExt" service:k_serviceShareKeyChain];
 }
 }
 
 
-+ (void)setFileIDExt:(NSString *)fileID
++ (void)setFileNameExt:(NSString *)fileName
 {
 {
-    [UICKeyChainStore setString:fileID forKey:@"fileIDExt" service:k_serviceShareKeyChain];
+    [UICKeyChainStore setString:fileName forKey:@"fileNameExt" service:k_serviceShareKeyChain];
 }
 }
 
 
 + (void)setEmail:(NSString *)email
 + (void)setEmail:(NSString *)email
@@ -370,9 +370,9 @@
     return [UICKeyChainStore stringForKey:@"titleServerUrlExt" service:k_serviceShareKeyChain];
     return [UICKeyChainStore stringForKey:@"titleServerUrlExt" service:k_serviceShareKeyChain];
 }
 }
 
 
-+ (NSString *)getFileIDExt
++ (NSString *)getFileNameExt
 {
 {
-    return [UICKeyChainStore stringForKey:@"fileIDExt" service:k_serviceShareKeyChain];
+    return [UICKeyChainStore stringForKey:@"fileNameExt" service:k_serviceShareKeyChain];
 }
 }
 
 
 + (NSString *)getEmail
 + (NSString *)getEmail