Browse Source

dev itemChanged

marinofaggiana 5 years ago
parent
commit
98762f254d
1 changed files with 56 additions and 4 deletions
  1. 56 4
      File Provider Extension/FileProviderExtension.swift

+ 56 - 4
File Provider Extension/FileProviderExtension.swift

@@ -266,14 +266,66 @@ class FileProviderExtension: NSFileProviderExtension, CCNetworkingDelegate {
     
     override func itemChanged(at url: URL) {
         
+        var size = 0 as Double
+        var error: NSError?
         let pathComponents = url.pathComponents
-
         assert(pathComponents.count > 2)
-
         let itemIdentifier = NSFileProviderItemIdentifier(pathComponents[pathComponents.count - 2])
-        let fileName = pathComponents[pathComponents.count - 1]
         
-        //uploadFileItemChanged(for: itemIdentifier, fileName: fileName, url: url)
+        guard let metadata = NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "account == %@ AND ocId == %@", fileProviderData.sharedInstance.account, itemIdentifier.rawValue)) else {
+            return
+        }
+        guard let parentItemIdentifier = fileProviderUtility.sharedInstance.getParentItemIdentifier(metadata: metadata, homeServerUrl: fileProviderData.sharedInstance.homeServerUrl) else {
+            return
+        }
+        
+        if url.startAccessingSecurityScopedResource() == false {
+            return
+        }
+        
+        // typefile directory ? (NOT PERMITTED)
+        do {
+            let attributes = try fileProviderUtility.sharedInstance.fileManager.attributesOfItem(atPath: url.path)
+            size = attributes[FileAttributeKey.size] as! Double
+            let typeFile = attributes[FileAttributeKey.type] as! FileAttributeType
+            if typeFile == FileAttributeType.typeDirectory {
+                return
+            }
+        } catch {
+            return
+        }
+
+        let fileName = NCUtility.sharedInstance.createFileName(url.lastPathComponent, serverUrl: metadata.serverUrl, account: fileProviderData.sharedInstance.account)
+        let fileNameServerUrl = metadata.serverUrl + "/" + fileName
+        let fileNameLocalPath = url.path
+        
+        OCNetworking.sharedManager()?.upload(withAccount: fileProviderData.sharedInstance.account, fileNameServerUrl: fileNameServerUrl, fileNameLocalPath: fileNameLocalPath, encode: true, communication: OCNetworking.sharedManager()?.sharedOCCommunicationExtension(), progress: { (progress) in
+            
+        }, completion: { (account, ocId, etag, date, message, errorCode) in
+            
+            if account == fileProviderData.sharedInstance.account && errorCode == 0 {
+                
+                self.fileCoordinator.coordinate(readingItemAt: url, options: .withoutChanges, error: &error) { (url) in
+                    _ = fileProviderUtility.sharedInstance.copyFile(url.path, toPath: CCUtility.getDirectoryProviderStorageOcId(ocId, fileNameView: fileName))
+                }
+                
+                metadata.date = date! as NSDate
+                metadata.etag = etag!
+                metadata.size = size
+                
+                guard let metadataDB = NCManageDatabase.sharedInstance.addMetadata(metadata) else {
+                    return
+                }
+                NCManageDatabase.sharedInstance.addLocalFile(metadata: metadataDB)
+                
+                let item = FileProviderItem(metadata: metadataDB, parentItemIdentifier: parentItemIdentifier)
+                fileProviderData.sharedInstance.fileProviderSignalUpdateItem[item.itemIdentifier] = item
+                
+                fileProviderData.sharedInstance.signalEnumerator(for: [parentItemIdentifier, .workingSet])
+            }
+            
+            url.stopAccessingSecurityScopedResource()
+        })
     }
     
     override func stopProvidingItem(at url: URL) {