Marino Faggiana 7 năm trước cách đây
mục cha
commit
c73e5a56c4

+ 30 - 41
PickerFileProvider/FileProvider.swift

@@ -894,10 +894,15 @@ class FileProvider: NSFileProviderExtension, CCNetworkingDelegate {
         }
         
         let fileName = createFileName(fileURL.lastPathComponent, directoryID: directoryParent.directoryID, serverUrl: serverUrl)
-                
+        let fileNamePathDirectory = fileProviderStorageURL!.path + "/" + FILEID_IMPORT_METADATA_TEMP + directoryParent.directoryID + fileName
+        
         fileCoordinator.coordinate(readingItemAt: fileURL, options: NSFileCoordinator.ReadingOptions.withoutChanges, error: &error) { (url) in
-            _ = self.copyFile(url.path, toPath: fileProviderStorageURL!.path + "/" + fileName)
-//            _ = self.copyFile(url.path, toPath: fileProviderStorageURL!.path + "/" + fileURL.lastPathComponent)
+            
+            do {
+                try FileManager.default.createDirectory(atPath: fileNamePathDirectory, withIntermediateDirectories: true, attributes: nil)
+            } catch  { }
+            
+            _ = self.copyFile(url.path, toPath: fileNamePathDirectory + "/" + fileName)
         }
             
         fileURL.stopAccessingSecurityScopedResource()
@@ -905,7 +910,7 @@ class FileProvider: NSFileProviderExtension, CCNetworkingDelegate {
         // ---------------------------------------------------------------------------------
         
         do {
-            let attributes = try fileManagerExtension.attributesOfItem(atPath: fileProviderStorageURL!.path + "/" + fileName)
+            let attributes = try fileManagerExtension.attributesOfItem(atPath: fileNamePathDirectory + "/" + fileName)
             size = attributes[FileAttributeKey.size] as! Double
         } catch let error {
             print("error: \(error)")
@@ -917,7 +922,7 @@ class FileProvider: NSFileProviderExtension, CCNetworkingDelegate {
         metadata.directory = false
         metadata.directoryID = directoryParent.directoryID
         metadata.etag = ""
-        metadata.fileID = FILEID_IMPORT_METADATA_TEMP
+        metadata.fileID = FILEID_IMPORT_METADATA_TEMP + directoryParent.directoryID + fileName
         metadata.size = size
         metadata.status = Double(k_metadataStatusHide)
         metadata.fileName = fileURL.lastPathComponent
@@ -929,9 +934,9 @@ class FileProvider: NSFileProviderExtension, CCNetworkingDelegate {
             let metadataNet = CCMetadataNet()
             
             metadataNet.account = account
-            metadataNet.assetLocalIdentifier = k_assetLocalIdentifierFileProviderStorage + k_uploadSessionID + directoryParent.directoryID + fileName
+            metadataNet.assetLocalIdentifier = FILEID_IMPORT_METADATA_TEMP + directoryParent.directoryID + fileName
             metadataNet.fileName = fileName
-            metadataNet.path = fileProviderStorageURL!.path + "/" + fileName
+            metadataNet.path = fileNamePathDirectory + "/" + fileName
             metadataNet.selector = selectorUploadFile
             metadataNet.selectorPost = ""
             metadataNet.serverUrl = serverUrl
@@ -939,10 +944,6 @@ class FileProvider: NSFileProviderExtension, CCNetworkingDelegate {
             metadataNet.taskStatus = Int(k_taskStatusResume)
             
             _ = NCManageDatabase.sharedInstance.addQueueUpload(metadataNet: metadataNet)
-                        
-        } else {
-            
-            // OFFICE 365 LEN = 0
         }
         
         guard let metadataDB = NCManageDatabase.sharedInstance.addMetadata(metadata) else {
@@ -959,34 +960,29 @@ class FileProvider: NSFileProviderExtension, CCNetworkingDelegate {
     
     func uploadFileSuccessFailure(_ fileName: String!, fileID: String!, assetLocalIdentifier: String!, serverUrl: String!, selector: String!, selectorPost: String!, errorMessage: String!, errorCode: Int) {
         
-        let serialQueue = DispatchQueue(label: "uploadFileSuccessFailure")
-        
-        serialQueue.sync {
-        
+        NCManageDatabase.sharedInstance.deleteMetadata(predicate: NSPredicate(format: "fileID = %@", assetLocalIdentifier), clearDateReadDirectoryID: nil)
+
+        if errorCode == 0 {
+                
             NCManageDatabase.sharedInstance.deleteQueueUpload(assetLocalIdentifier: assetLocalIdentifier, selector: selector)
             
             if let metadata = NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "account = %@ AND fileID = %@", account, fileID)) {
                 
-                if (errorCode == 0) {
-                    
-                    let sourcePath = fileProviderStorageURL!.path + "/" + fileName
-                    let destinationPath = fileProviderStorageURL!.path + "/" + fileID + "/" + fileName
-                    
-                    NCManageDatabase.sharedInstance.setLocalFile(fileID: fileID, date: nil, exifDate: nil, exifLatitude: nil, exifLongitude: nil, fileName: nil, etag: metadata.etag, etagFPE: metadata.etag)
-                    
-                    do {
-                        try fileManagerExtension.createDirectory(atPath: fileProviderStorageURL!.path + "/" + fileID, withIntermediateDirectories: true, attributes: nil)
-                    } catch { }
-                    
-                    _ = moveFile(sourcePath, toPath: destinationPath)
-                    
-                    let item = FileProviderItem(metadata: metadata, serverUrl: serverUrl)
-                    self.refreshEnumerator(identifier: item.itemIdentifier, serverUrl: serverUrl)
-                }
+                // Rename directory file
+                _ = moveFile(fileProviderStorageURL!.path + "/" + assetLocalIdentifier, toPath: fileProviderStorageURL!.path + "/" + fileID)
+                
+                 NCManageDatabase.sharedInstance.setLocalFile(fileID: fileID, date: nil, exifDate: nil, exifLatitude: nil, exifLongitude: nil, fileName: nil, etag: metadata.etag, etagFPE: metadata.etag)
+                
+                let item = FileProviderItem(metadata: metadata, serverUrl: serverUrl)
+                self.refreshEnumerator(identifier: item.itemIdentifier, serverUrl: serverUrl)
             }
             
-            uploadFile()
+        } else {
+                
+            NCManageDatabase.sharedInstance.unlockQueueUpload(assetLocalIdentifier: assetLocalIdentifier)
         }
+        
+        uploadFile()
     }
     
     func uploadFile() {
@@ -1031,17 +1027,10 @@ class FileProvider: NSFileProviderExtension, CCNetworkingDelegate {
             return
         }
         
+        listUpdateItems.removeAll()
         let item = try? self.item(for: identifier)
         if item != nil {
-            var found = false
-            for updateItem in listUpdateItems {
-                if updateItem.itemIdentifier.rawValue == identifier.rawValue {
-                    found = true
-                }
-            }
-            if !found {
-                listUpdateItems.append(item!)
-            }
+            listUpdateItems.append(item!)
         }
         
         if serverUrl == homeServerUrl {

+ 3 - 1
PickerFileProvider/FileProviderEnumerator.swift

@@ -130,7 +130,9 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator {
     }
     
     func enumerateChanges(for observer: NSFileProviderChangeObserver, from anchor: NSFileProviderSyncAnchor) {
-        observer.didUpdate(listUpdateItems)
+        if listUpdateItems.count > 0 {
+            observer.didUpdate(listUpdateItems)
+        }
         observer.finishEnumeratingChanges(upTo: anchor, moreComing: false)
     }
     

+ 3 - 1
PickerFileProvider/FileProviderEnumeratorFile.swift

@@ -57,7 +57,9 @@ class FileProviderEnumeratorFile: NSObject, NSFileProviderEnumerator {
     }
     
     func enumerateChanges(for observer: NSFileProviderChangeObserver, from anchor: NSFileProviderSyncAnchor) {
-        observer.didUpdate(listUpdateItems)
+        if listUpdateItems.count > 0 {
+            observer.didUpdate(listUpdateItems)
+        }
         observer.finishEnumeratingChanges(upTo: anchor, moreComing: false)
     }
     

+ 3 - 1
PickerFileProvider/FileProviderEnumeratorWorkingSet.swift

@@ -75,7 +75,9 @@ class FileProviderEnumeratorWorkingSet: NSObject, NSFileProviderEnumerator {
     }
     
     func enumerateChanges(for observer: NSFileProviderChangeObserver, from anchor: NSFileProviderSyncAnchor) {
-        observer.didUpdate(listUpdateItems)
+        if listUpdateItems.count > 0 {
+            observer.didUpdate(listUpdateItems)
+        }
         observer.finishEnumeratingChanges(upTo: anchor, moreComing: false)
     }
     

+ 0 - 10
PickerFileProvider/FileProviderItem.swift

@@ -172,15 +172,5 @@ class FileProviderItem: NSObject, NSFileProviderItem {
         if let tableTag = NCManageDatabase.sharedInstance.getTag(predicate: NSPredicate(format: "account = %@ AND fileID = %@", metadata.account, metadata.fileID)) {
             tagData = tableTag.tagIOS
         }
-        
-        // Removed (if exists) this Item from listUpdate
-        var counter = 0
-        for updateItem in listUpdateItems {
-            if updateItem.itemIdentifier.rawValue == itemIdentifier.rawValue {
-                listUpdateItems.remove(at: counter)
-                break;
-            }
-            counter += 1
-        }
     }
 }

+ 1 - 1
iOSClient/AppDelegate.m

@@ -1544,7 +1544,7 @@
         // Unlock
         for (tableMetadata *metadata in tableMetadatasInLock) {
             if ([[NCManageDatabase sharedInstance] isTableInvalidated:metadata] == NO)
-                [[NCManageDatabase sharedInstance] unlockQueueUploadWithAssetLocalIdentifier:metadata.assetLocalIdentifier path:nil];
+                [[NCManageDatabase sharedInstance] unlockQueueUploadWithAssetLocalIdentifier:metadata.assetLocalIdentifier];
         }
     }
 }

+ 4 - 13
iOSClient/Database/NCManageDatabase.swift

@@ -2418,32 +2418,23 @@ class NCManageDatabase: NSObject {
         return metadataNet
     }
     
-    @objc func unlockQueueUpload(assetLocalIdentifier: String?, path: String?) {
+    @objc func unlockQueueUpload(assetLocalIdentifier: String) {
         
         guard let tableAccount = self.getAccountActive() else {
             return
         }
     
-        var result: tableQueueUpload?
         let realm = try! Realm()
 
         realm.beginWrite()
         
-        if assetLocalIdentifier != nil {
-            result = realm.objects(tableQueueUpload.self).filter("account = %@ AND assetLocalIdentifier = %@", tableAccount.account, assetLocalIdentifier!).first
-        }
-        
-        if path != nil {
-            result = realm.objects(tableQueueUpload.self).filter("account = %@ AND path = %@", tableAccount.account, path!).first
-        }
-        
-        if result == nil {
+        guard let result = realm.objects(tableQueueUpload.self).filter("account = %@ AND assetLocalIdentifier = %@", tableAccount.account, assetLocalIdentifier).first else {
             realm.cancelWrite()
             return
         }
-        
+      
         // UnLock
-        result!.lock = false
+        result.lock = false
         
         do {
             try realm.commitWrite()