Marino Faggiana 6 years ago
parent
commit
6e187539d1
1 changed files with 87 additions and 83 deletions
  1. 87 83
      PickerFileProvider/FileProviderExtension+Actions.swift

+ 87 - 83
PickerFileProvider/FileProviderExtension+Actions.swift

@@ -382,97 +382,101 @@ extension FileProviderExtension {
         /* ONLY iOS 11*/
         guard #available(iOS 11, *) else { return }
         
-        var size = 0 as Double
-        let metadata = tableMetadata()
-        var error: NSError?
-        
-        guard let tableDirectory = self.providerData.getTableDirectoryFromParentItemIdentifier(parentItemIdentifier) else {
-            completionHandler(nil, NSFileProviderError(.noSuchItem))
-            return
-        }
-        let serverUrl = tableDirectory.serverUrl
+        DispatchQueue.main.async {
             
-        // --------------------------------------------- Copy file here with security access
+            autoreleasepool {
             
-        if fileURL.startAccessingSecurityScopedResource() == false {
-            completionHandler(nil, NSFileProviderError(.noSuchItem))
-            return
-        }
-        
-        // typefile directory ? (NOT PERMITTED)
-        do {
-            let attributes = try self.fileManager.attributesOfItem(atPath: fileURL.path)
-            size = attributes[FileAttributeKey.size] as! Double
-            let typeFile = attributes[FileAttributeKey.type] as! FileAttributeType
-            if typeFile == FileAttributeType.typeDirectory {
-                completionHandler(nil, NSFileProviderError(.noSuchItem))
-                return
-            }
-        } catch {
-            completionHandler(nil, NSFileProviderError(.noSuchItem))
-            return
-        }
-        
-        let fileName = self.createFileName(fileURL.lastPathComponent, directoryID: tableDirectory.directoryID, serverUrl: serverUrl)
-        let fileNamePathDirectory = self.providerData.fileProviderStorageURL!.path + "/" + providerData.FILEID_IMPORT_METADATA_TEMP + tableDirectory.directoryID + fileName
+                var size = 0 as Double
+                let metadata = tableMetadata()
+                var error: NSError?
             
-        do {
-            try FileManager.default.createDirectory(atPath: fileNamePathDirectory, withIntermediateDirectories: true, attributes: nil)
-        } catch  { }
+                guard let tableDirectory = self.providerData.getTableDirectoryFromParentItemIdentifier(parentItemIdentifier) else {
+                    completionHandler(nil, NSFileProviderError(.noSuchItem))
+                    return
+                }
+                let serverUrl = tableDirectory.serverUrl
             
-        fileCoordinator.coordinate(readingItemAt: fileURL, options: .withoutChanges, error: &error) { (url) in
-            _ = self.moveFile(url.path, toPath: fileNamePathDirectory + "/" + fileName)
-        }
+                // --------------------------------------------- Copy file here with security access
             
-        fileURL.stopAccessingSecurityScopedResource()
-            
-        // ---------------------------------------------------------------------------------
-            
-        // Metadata TEMP
-        metadata.account = self.providerData.account
-        metadata.assetLocalIdentifier = providerData.FILEID_IMPORT_METADATA_TEMP + tableDirectory.directoryID + fileName
-        metadata.date = NSDate()
-        metadata.directory = false
-        metadata.directoryID = tableDirectory.directoryID
-        metadata.etag = ""
-        metadata.fileID = providerData.FILEID_IMPORT_METADATA_TEMP + tableDirectory.directoryID + fileName
-        metadata.size = size
-        metadata.status = Double(k_metadataStatusHide)
-        metadata.fileName = fileName
-        metadata.fileNameView = fileName
-        CCUtility.insertTypeFileIconName(fileName, metadata: metadata)
-            
-        if (size > 0) {
-                
-            let metadataNet = CCMetadataNet()
-                
-            metadataNet.account = self.providerData.account
-            metadataNet.assetLocalIdentifier = providerData.FILEID_IMPORT_METADATA_TEMP + tableDirectory.directoryID + fileName
-            metadataNet.fileName = fileName
-            metadataNet.path = fileNamePathDirectory + "/" + fileName
-            metadataNet.selector = selectorUploadFile
-            metadataNet.selectorPost = providerData.selectorPostImportDocument
-            metadataNet.serverUrl = serverUrl
-            metadataNet.session = k_upload_session_extension
-            metadataNet.sessionError = ""
-            metadataNet.sessionID = ""
-            metadataNet.taskStatus = Int(k_taskStatusResume)
-                
-            _ = NCManageDatabase.sharedInstance.addQueueUpload(metadataNet: metadataNet)
-        }
+                if fileURL.startAccessingSecurityScopedResource() == false {
+                    completionHandler(nil, NSFileProviderError(.noSuchItem))
+                    return
+                }
             
-        guard let metadataDB = NCManageDatabase.sharedInstance.addMetadata(metadata) else {
-            completionHandler(nil, NSFileProviderError(.noSuchItem))
-            return
-        }
+                // typefile directory ? (NOT PERMITTED)
+                do {
+                    let attributes = try self.fileManager.attributesOfItem(atPath: fileURL.path)
+                    size = attributes[FileAttributeKey.size] as! Double
+                    let typeFile = attributes[FileAttributeKey.type] as! FileAttributeType
+                    if typeFile == FileAttributeType.typeDirectory {
+                        completionHandler(nil, NSFileProviderError(.noSuchItem))
+                        return
+                    }
+                } catch {
+                    completionHandler(nil, NSFileProviderError(.noSuchItem))
+                    return
+                }
             
-        let item = FileProviderItem(metadata: metadataDB, parentItemIdentifier: parentItemIdentifier, providerData: self.providerData)
-        
-        DispatchQueue.main.sync {
-            uploadFileImportDocument()
+                let fileName = self.createFileName(fileURL.lastPathComponent, directoryID: tableDirectory.directoryID, serverUrl: serverUrl)
+                let fileNamePathDirectory = self.providerData.fileProviderStorageURL!.path + "/" + self.providerData.FILEID_IMPORT_METADATA_TEMP + tableDirectory.directoryID + fileName
+            
+                do {
+                    try FileManager.default.createDirectory(atPath: fileNamePathDirectory, withIntermediateDirectories: true, attributes: nil)
+                } catch  { }
+            
+                self.fileCoordinator.coordinate(readingItemAt: fileURL, options: .withoutChanges, error: &error) { (url) in
+                    _ = self.moveFile(url.path, toPath: fileNamePathDirectory + "/" + fileName)
+                }
+            
+                fileURL.stopAccessingSecurityScopedResource()
+            
+                // ---------------------------------------------------------------------------------
+            
+                // Metadata TEMP
+                metadata.account = self.providerData.account
+                metadata.assetLocalIdentifier = self.providerData.FILEID_IMPORT_METADATA_TEMP + tableDirectory.directoryID + fileName
+                metadata.date = NSDate()
+                metadata.directory = false
+                metadata.directoryID = tableDirectory.directoryID
+                metadata.etag = ""
+                metadata.fileID = self.providerData.FILEID_IMPORT_METADATA_TEMP + tableDirectory.directoryID + fileName
+                metadata.size = size
+                metadata.status = Double(k_metadataStatusHide)
+                metadata.fileName = fileName
+                metadata.fileNameView = fileName
+                CCUtility.insertTypeFileIconName(fileName, metadata: metadata)
+            
+                if (size > 0) {
+                    
+                    let metadataNet = CCMetadataNet()
+                    
+                    metadataNet.account = self.providerData.account
+                    metadataNet.assetLocalIdentifier = self.providerData.FILEID_IMPORT_METADATA_TEMP + tableDirectory.directoryID + fileName
+                    metadataNet.fileName = fileName
+                    metadataNet.path = fileNamePathDirectory + "/" + fileName
+                    metadataNet.selector = selectorUploadFile
+                    metadataNet.selectorPost = self.providerData.selectorPostImportDocument
+                    metadataNet.serverUrl = serverUrl
+                    metadataNet.session = k_upload_session_extension
+                    metadataNet.sessionError = ""
+                    metadataNet.sessionID = ""
+                    metadataNet.taskStatus = Int(k_taskStatusResume)
+                    
+                    _ = NCManageDatabase.sharedInstance.addQueueUpload(metadataNet: metadataNet)
+                }
+            
+                guard let metadataDB = NCManageDatabase.sharedInstance.addMetadata(metadata) else {
+                    completionHandler(nil, NSFileProviderError(.noSuchItem))
+                    return
+                }
+            
+                let item = FileProviderItem(metadata: metadataDB, parentItemIdentifier: parentItemIdentifier, providerData: self.providerData)
+            
+                //uploadFileImportDocument()
+            
+                completionHandler(item, nil)
+            }
         }
-        
-        completionHandler(item, nil)
     }
     
     func createFileName(_ fileName: String, directoryID: String, serverUrl: String) -> String {