Marino Faggiana 7 年之前
父节点
当前提交
9055d4160c

+ 44 - 18
PickerFileProvider/FileProvider.swift

@@ -47,7 +47,6 @@ var fileNamePathImport = [String]()
 let FILEID_IMPORT_METADATA_TEMP = k_uploadSessionID + "FILE_PROVIDER_EXTENSION"
 
 var timerUpload: Timer?
-var timerCheck: Timer?
 
 var fileManagerExtension = FileManager()
 
@@ -59,6 +58,8 @@ class FileProvider: NSFileProviderExtension, CCNetworkingDelegate {
         
         setupActiveAccount()
         
+        verifyUploadQueueInLock()
+        
         if #available(iOSApplicationExtension 11.0, *) {
             
             listFavoriteIdentifierRank = NCManageDatabase.sharedInstance.getTableMetadatasDirectoryFavoriteIdentifierRank()
@@ -74,17 +75,6 @@ class FileProvider: NSFileProviderExtension, CCNetworkingDelegate {
                 RunLoop.main.add(timerUpload!, forMode: .defaultRunLoopMode)
             }
             
-            // Timer for check
-            if timerCheck == nil {
-                
-                timerCheck = Timer.init(timeInterval: TimeInterval((k_timerProcessAutoDownloadUpload*2)+(k_timerProcessAutoDownloadUpload/2)+1), repeats: true, block: { (Timer) in
-                    
-                    self.verifyUploadQueueInLock()
-                })
-                
-                RunLoop.main.add(timerCheck!, forMode: .defaultRunLoopMode)
-            }
-            
         } else {
             
             NSFileCoordinator().coordinate(writingItemAt: self.documentStorageURL, options: [], error: nil, byAccessor: { newURL in
@@ -252,6 +242,7 @@ class FileProvider: NSFileProviderExtension, CCNetworkingDelegate {
 
             let pathComponents = url.pathComponents
             let identifier = NSFileProviderItemIdentifier(pathComponents[pathComponents.count - 2])
+            var fileSize = 0 as Double
             var localEtag = ""
             var localEtagFPE = ""
             
@@ -281,8 +272,17 @@ class FileProvider: NSFileProviderExtension, CCNetworkingDelegate {
                     }
                 }
                 
-                completionHandler(nil)
-                return
+                do {
+                    let attributes = try fileManagerExtension.attributesOfItem(atPath: url.path)
+                    fileSize = attributes[FileAttributeKey.size] as! Double
+                } catch let error {
+                    print("error: \(error)")
+                }
+                
+                if (fileSize > 0) {
+                    completionHandler(nil)
+                    return
+                }
             }
             
             guard let serverUrl = NCManageDatabase.sharedInstance.getServerUrl(metadata.directoryID) else {
@@ -969,9 +969,13 @@ class FileProvider: NSFileProviderExtension, CCNetworkingDelegate {
             if let metadata = NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "account = %@ AND fileID = %@", account, fileID)) {
                 
                 // Rename directory file
-                _ = moveFile(fileProviderStorageURL!.path + "/" + assetLocalIdentifier, toPath: fileProviderStorageURL!.path + "/" + fileID)
+                if fileManagerExtension.fileExists(atPath: fileProviderStorageURL!.path + "/" + assetLocalIdentifier) {
+                    _ = moveFile(fileProviderStorageURL!.path + "/" + assetLocalIdentifier, toPath: fileProviderStorageURL!.path + "/" + fileID)
+                } else {
+                    print("aia")
+                }
                 
-                 NCManageDatabase.sharedInstance.setLocalFile(fileID: fileID, date: nil, exifDate: nil, exifLatitude: nil, exifLongitude: nil, fileName: nil, etag: metadata.etag, etagFPE: metadata.etag)
+                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)
@@ -1027,10 +1031,17 @@ class FileProvider: NSFileProviderExtension, CCNetworkingDelegate {
             return
         }
         
-        listUpdateItems.removeAll()
         let item = try? self.item(for: identifier)
         if item != nil {
-            listUpdateItems.append(item!)
+            var found = false
+            for updateItem in listUpdateItems {
+                if updateItem.itemIdentifier.rawValue == identifier.rawValue {
+                    found = true
+                }
+            }
+            if !found {
+                listUpdateItems.append(item!)
+            }
         }
         
         if serverUrl == homeServerUrl {
@@ -1176,3 +1187,18 @@ func setupActiveAccount() {
         NSLog("Unable to create directory \(error.debugDescription)")
     }
 }
+
+func createFileIdentifier(itemIdentifier: String, fileName: String) {
+    
+    let identifierPath = fileProviderStorageURL!.path + "/" + itemIdentifier
+    let fileIdentifier = identifierPath + "/" + fileName
+    
+    do {
+        try fileManagerExtension.createDirectory(atPath: identifierPath, withIntermediateDirectories: true, attributes: nil)
+    } catch { }
+    
+    // If do not exists create file with size = 0
+    if fileManagerExtension.fileExists(atPath: fileIdentifier) == false {
+        fileManagerExtension.createFile(atPath: fileIdentifier, contents: nil, attributes: nil)
+    }
+}

+ 5 - 1
PickerFileProvider/FileProviderEnumerator.swift

@@ -97,7 +97,9 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator {
                     NCManageDatabase.sharedInstance.deleteMetadata(predicate: NSPredicate(format: "account = %@ AND directoryID = %@ AND session = ''", account, directoryID!), clearDateReadDirectoryID: directoryID!)
                     if let metadataDB = NCManageDatabase.sharedInstance.addMetadatas(metadatas as! [tableMetadata], serverUrl: serverUrl) {
                         items = self.selectItems(numPage: 0, account: account, serverUrl: serverUrl, metadatas: metadataDB)
-                        observer.didEnumerate(items)
+                        if (items.count > 0) {
+                            observer.didEnumerate(items)
+                        }
                     }
                 }
                 
@@ -162,6 +164,8 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator {
             }
             counter += 1
             if (counter >= start && counter <= stop) {
+                // create FS
+                createFileIdentifier(itemIdentifier: metadata.fileID, fileName: metadata.fileNameView)
                 let item = FileProviderItem(metadata: metadata, serverUrl: serverUrl)
                 items.append(item)
             }

+ 2 - 0
PickerFileProvider/FileProviderEnumeratorFile.swift

@@ -49,6 +49,8 @@ class FileProviderEnumeratorFile: NSObject, NSFileProviderEnumerator {
             return
         }
         
+        // Create FS
+        createFileIdentifier(itemIdentifier: metadata.fileID, fileName: metadata.fileNameView)
         let item = FileProviderItem(metadata: metadata, serverUrl: serverUrl)
         items.append(item)
         

+ 4 - 0
PickerFileProvider/FileProviderEnumeratorWorkingSet.swift

@@ -49,6 +49,8 @@ class FileProviderEnumeratorWorkingSet: NSObject, NSFileProviderEnumerator {
                     continue
                 }
                 
+                // Create FS
+                createFileIdentifier(itemIdentifier: metadata.fileID, fileName: metadata.fileNameView)
                 let item = FileProviderItem(metadata: metadata, serverUrl: serverUrl)
                 items.append(item)
             }
@@ -65,6 +67,8 @@ class FileProviderEnumeratorWorkingSet: NSObject, NSFileProviderEnumerator {
             guard let serverUrl = NCManageDatabase.sharedInstance.getServerUrl(metadata.directoryID) else {
                 continue
             }
+            // Create FS
+            createFileIdentifier(itemIdentifier: metadata.fileID, fileName: metadata.fileNameView)
             let item = FileProviderItem(metadata: metadata, serverUrl: serverUrl)
             items.append(item)
         }

+ 11 - 13
PickerFileProvider/FileProviderItem.swift

@@ -110,21 +110,9 @@ class FileProviderItem: NSObject, NSFileProviderItem {
         // Verify file exists on cache
         if (!metadata.directory) {
             
-            let identifierPath = fileProviderStorageURL!.path + "/" + metadata.fileID
-            let fileIdentifier = identifierPath + "/" + metadata.fileNameView
+            let fileIdentifier = fileProviderStorageURL!.path + "/" + metadata.fileID + "/" + metadata.fileNameView
             var fileSize = 0 as Double
          
-            do {
-                try FileManager.default.createDirectory(atPath: identifierPath, withIntermediateDirectories: true, attributes: nil)
-            } catch let error {
-                print("error: \(error)")
-            }
-            
-            // If do not exists create file with size = 0
-            if fileManagerExtension.fileExists(atPath: fileIdentifier) == false {
-                fileManagerExtension.createFile(atPath: fileIdentifier, contents: nil, attributes: nil)
-            }
-            
             do {
                 let attributes = try fileManagerExtension.attributesOfItem(atPath: fileIdentifier)
                 fileSize = attributes[FileAttributeKey.size] as! Double
@@ -172,5 +160,15 @@ 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
+        }
     }
 }