Marino Faggiana 6 жил өмнө
parent
commit
a2f0208c3e

+ 1 - 13
File Provider Extension/FileProviderData.swift

@@ -122,9 +122,6 @@ class FileProviderData: NSObject {
     
     func getParentItemIdentifier(metadata: tableMetadata) -> NSFileProviderItemIdentifier? {
         
-        /* ONLY iOS 11*/
-        guard #available(iOS 11, *) else { return NSFileProviderItemIdentifier("") }
-        
         if let directory = NCManageDatabase.sharedInstance.getTableDirectory(predicate: NSPredicate(format: "directoryID == %@", metadata.directoryID))  {
             if directory.serverUrl == homeServerUrl {
                 return NSFileProviderItemIdentifier(NSFileProviderItemIdentifier.rootContainer.rawValue)
@@ -142,9 +139,6 @@ class FileProviderData: NSObject {
     
     func getTableDirectoryFromParentItemIdentifier(_ parentItemIdentifier: NSFileProviderItemIdentifier) -> tableDirectory? {
         
-        /* ONLY iOS 11*/
-        guard #available(iOS 11, *) else { return nil }
-        
         var predicate: NSPredicate
         
         if parentItemIdentifier == .rootContainer {
@@ -170,9 +164,6 @@ class FileProviderData: NSObject {
     
     func updateFavoriteForWorkingSet() {
         
-        /* ONLY iOS 11*/
-        guard #available(iOS 11, *) else { return }
-        
         var updateWorkingSet = false
         let oldListFavoriteIdentifierRank = listFavoriteIdentifierRank
         listFavoriteIdentifierRank = NCManageDatabase.sharedInstance.getTableMetadatasDirectoryFavoriteIdentifierRank()
@@ -224,10 +215,7 @@ class FileProviderData: NSObject {
     // Convinent method to signal the enumeration for containers.
     //
     func signalEnumerator(for containerItemIdentifiers: [NSFileProviderItemIdentifier]) {
-        
-        /* ONLY iOS 11*/
-        guard #available(iOS 11, *) else { return }
-        
+                
         currentAnchor += 1
         
         for containerItemIdentifier in containerItemIdentifiers {

+ 8 - 19
File Provider Extension/FileProviderEnumerator.swift

@@ -35,17 +35,14 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator {
         self.providerData = providerData
         
         // Select ServerUrl
-        if #available(iOSApplicationExtension 11.0, *) {
-
-            if (enumeratedItemIdentifier == .rootContainer) {
-                serverUrl = providerData.homeServerUrl
-            } else {
+        if (enumeratedItemIdentifier == .rootContainer) {
+            serverUrl = providerData.homeServerUrl
+        } else {
                 
-                let metadata = providerData.getTableMetadataFromItemIdentifier(enumeratedItemIdentifier)
-                if metadata != nil  {
-                    if let directorySource = NCManageDatabase.sharedInstance.getTableDirectory(predicate: NSPredicate(format: "directoryID == %@", metadata!.directoryID))  {
-                        serverUrl = directorySource.serverUrl + "/" + metadata!.fileName
-                    }
+            let metadata = providerData.getTableMetadataFromItemIdentifier(enumeratedItemIdentifier)
+            if metadata != nil  {
+                if let directorySource = NCManageDatabase.sharedInstance.getTableDirectory(predicate: NSPredicate(format: "directoryID == %@", metadata!.directoryID))  {
+                    serverUrl = directorySource.serverUrl + "/" + metadata!.fileName
                 }
             }
         }
@@ -62,12 +59,6 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator {
         
         var items: [NSFileProviderItemProtocol] = []
         var metadatasFromDB: [tableMetadata]?
-
-        /* ONLY iOS 11*/
-        guard #available(iOS 11, *) else {
-            observer.finishEnumerating(upTo: nil)
-            return
-        }
         
         /*** WorkingSet ***/
         if enumeratedItemIdentifier == .workingSet {
@@ -202,9 +193,7 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator {
     }
     
     func enumerateChanges(for observer: NSFileProviderChangeObserver, from anchor: NSFileProviderSyncAnchor) {
-        
-        guard #available(iOS 11, *) else { return }
-    
+            
         var itemsDelete = [NSFileProviderItemIdentifier]()
         var itemsUpdate = [FileProviderItem]()
         

+ 1 - 25
File Provider Extension/FileProviderExtension+Actions.swift

@@ -27,9 +27,6 @@ extension FileProviderExtension {
 
     override func createDirectory(withName directoryName: String, inParentItemIdentifier parentItemIdentifier: NSFileProviderItemIdentifier, completionHandler: @escaping (NSFileProviderItem?, Error?) -> Void) {
         
-        /* ONLY iOS 11*/
-        guard #available(iOS 11, *) else { return }
-        
         // Check account
         if providerData.setupActiveAccount() == false {
             completionHandler(nil, NSFileProviderError(.notAuthenticated))
@@ -93,9 +90,6 @@ extension FileProviderExtension {
     
     override func deleteItem(withIdentifier itemIdentifier: NSFileProviderItemIdentifier, completionHandler: @escaping (Error?) -> Void) {
         
-        /* ONLY iOS 11*/
-        guard #available(iOS 11, *) else { return }
-        
         // Check account
         if providerData.setupActiveAccount() == false {
             completionHandler(NSFileProviderError(.notAuthenticated))
@@ -131,9 +125,6 @@ extension FileProviderExtension {
     
     override func reparentItem(withIdentifier itemIdentifier: NSFileProviderItemIdentifier, toParentItemWithIdentifier parentItemIdentifier: NSFileProviderItemIdentifier, newName: String?, completionHandler: @escaping (NSFileProviderItem?, Error?) -> Void) {
         
-        /* ONLY iOS 11*/
-        guard #available(iOS 11, *) else { return }
-        
         // Check account
         if providerData.setupActiveAccount() == false {
             completionHandler(nil, NSFileProviderError(.notAuthenticated))
@@ -203,9 +194,6 @@ extension FileProviderExtension {
     
     override func renameItem(withIdentifier itemIdentifier: NSFileProviderItemIdentifier, toName itemName: String, completionHandler: @escaping (NSFileProviderItem?, Error?) -> Void) {
         
-        /* ONLY iOS 11*/
-        guard #available(iOS 11, *) else { return }
-        
         // Check account
         if providerData.setupActiveAccount() == false {
             completionHandler(nil, NSFileProviderError(.notAuthenticated))
@@ -278,9 +266,6 @@ extension FileProviderExtension {
     
     override func setFavoriteRank(_ favoriteRank: NSNumber?, forItemIdentifier itemIdentifier: NSFileProviderItemIdentifier, completionHandler: @escaping (NSFileProviderItem?, Error?) -> Void) {
         
-        /* ONLY iOS 11*/
-        guard #available(iOS 11, *) else { return }
-        
         // Check account
         if providerData.setupActiveAccount() == false {
             completionHandler(nil, NSFileProviderError(.notAuthenticated))
@@ -326,9 +311,6 @@ extension FileProviderExtension {
     
     override func setTagData(_ tagData: Data?, forItemIdentifier itemIdentifier: NSFileProviderItemIdentifier, completionHandler: @escaping (NSFileProviderItem?, Error?) -> Void) {
         
-        /* ONLY iOS 11*/
-        guard #available(iOS 11, *) else { return }
-        
         guard let metadata = providerData.getTableMetadataFromItemIdentifier(itemIdentifier) else {
             completionHandler(nil, NSFileProviderError(.noSuchItem))
             return
@@ -356,9 +338,6 @@ extension FileProviderExtension {
     
     override func setLastUsedDate(_ lastUsedDate: Date?, forItemIdentifier itemIdentifier: NSFileProviderItemIdentifier, completionHandler: @escaping (NSFileProviderItem?, Error?) -> Void) {
         
-        /* ONLY iOS 11*/
-        guard #available(iOS 11, *) else { return }
-        
         guard let metadata = providerData.getTableMetadataFromItemIdentifier(itemIdentifier) else {
             completionHandler(nil, NSFileProviderError(.noSuchItem))
             return
@@ -376,10 +355,7 @@ extension FileProviderExtension {
     }
     
     override func importDocument(at fileURL: URL, toParentItemIdentifier parentItemIdentifier: NSFileProviderItemIdentifier, completionHandler: @escaping (NSFileProviderItem?, Error?) -> Void) {
-        
-        /* ONLY iOS 11*/
-        guard #available(iOS 11, *) else { return }
-        
+                
         DispatchQueue.main.async {
             
             autoreleasepool {

+ 1 - 16
File Provider Extension/FileProviderExtension+Network.swift

@@ -31,9 +31,6 @@ extension FileProviderExtension {
     
     func readFolder(enumeratedItemIdentifier: NSFileProviderItemIdentifier) {
         
-        /* ONLY iOS 11*/
-        guard #available(iOS 11, *) else { return }
-        
         var serverUrl: String?
         var counter = 0
         
@@ -88,9 +85,6 @@ extension FileProviderExtension {
     
     func deleteFile(withIdentifier itemIdentifier: NSFileProviderItemIdentifier, parentItemIdentifier: NSFileProviderItemIdentifier, metadata: tableMetadata, serverUrl: String) {
         
-        /* ONLY iOS 11*/
-        guard #available(iOS 11, *) else { return }
-        
         let ocNetworking = OCnetworking.init(delegate: nil, metadataNet: nil, withUser: providerData.accountUser, withUserID: providerData.accountUserID, withPassword: providerData.accountPassword, withUrl: providerData.accountUrl)
         ocNetworking?.deleteFileOrFolder(metadata.fileName, serverUrl: serverUrl, success: {
             
@@ -137,9 +131,6 @@ extension FileProviderExtension {
     // --------------------------------------------------------------------------------------------
     
     func settingFavorite(_ favorite: Bool, withIdentifier itemIdentifier: NSFileProviderItemIdentifier, parentItemIdentifier: NSFileProviderItemIdentifier, metadata: tableMetadata) {
-
-        /* ONLY iOS 11*/
-        guard #available(iOS 11, *) else { return }
         
         guard let serverUrl = NCManageDatabase.sharedInstance.getServerUrl(metadata.directoryID) else {
             return
@@ -176,9 +167,6 @@ extension FileProviderExtension {
     
     func uploadStart(_ fileID: String!, account: String!, task: URLSessionUploadTask!, serverUrl: String!) {
         
-        /* ONLY iOS 11*/
-        guard #available(iOS 11, *) else { return }
-
         guard let metadataUpload = NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "fileID == %@", fileID)) else {
             return
         }
@@ -206,10 +194,7 @@ extension FileProviderExtension {
     }
     
     func uploadFileSuccessFailure(_ fileName: String!, fileID: String!, assetLocalIdentifier: String!, serverUrl: String!, selector: String!, selectorPost: String!, errorMessage: String!, errorCode: Int) {
-        
-        /* ONLY iOS 11*/
-        guard #available(iOS 11, *) else { return }
-        
+                
         guard let metadata = NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "fileID == %@", fileID)) else {
             return
         }

+ 1 - 4
File Provider Extension/FileProviderExtension+Thumbnail.swift

@@ -11,10 +11,7 @@ import FileProvider
 extension FileProviderExtension {
 
     override func fetchThumbnails(for itemIdentifiers: [NSFileProviderItemIdentifier], requestedSize size: CGSize, perThumbnailCompletionHandler: @escaping (NSFileProviderItemIdentifier, Data?, Error?) -> Void, completionHandler: @escaping (Error?) -> Void) -> Progress {
-        
-        /* ONLY iOS 11*/
-        guard #available(iOS 11, *) else { return Progress(totalUnitCount:0) }
-        
+                
         let progress = Progress(totalUnitCount: Int64(itemIdentifiers.count))
         var counterProgress: Int64 = 0
         

+ 81 - 198
File Provider Extension/FileProviderExtension.swift

@@ -56,13 +56,9 @@ class FileProviderExtension: NSFileProviderExtension, CCNetworkingDelegate {
     
     lazy var fileCoordinator: NSFileCoordinator = {
         
-        if #available(iOSApplicationExtension 11.0, *) {
-            let fileCoordinator = NSFileCoordinator()
-            fileCoordinator.purposeIdentifier = NSFileProviderManager.default.providerIdentifier
-            return fileCoordinator
-        } else {
-            return NSFileCoordinator()
-        }
+        let fileCoordinator = NSFileCoordinator()
+        fileCoordinator.purposeIdentifier = NSFileProviderManager.default.providerIdentifier
+        return fileCoordinator
     }()
     
     override init() {
@@ -75,29 +71,14 @@ class FileProviderExtension: NSFileProviderExtension, CCNetworkingDelegate {
         // Setup account
         _ = providerData.setupActiveAccount()
         
-        if #available(iOSApplicationExtension 11.0, *) {
-            
-            self.uploadFileImportDocument()
-            
-        } else {
-            
-            NSFileCoordinator().coordinate(writingItemAt: self.documentStorageURL, options: [], error: nil, byAccessor: { newURL in
-                do {
-                    try providerData.fileManager.createDirectory(at: newURL, withIntermediateDirectories: true, attributes: nil)
-                } catch let error {
-                    print("error: \(error)")
-                }
-            })
-        }
+        // Upload Imnport Document
+        self.uploadFileImportDocument()
     }
     
     // MARK: - Enumeration
     
     override func enumerator(for containerItemIdentifier: NSFileProviderItemIdentifier) throws -> NSFileProviderEnumerator {
         
-        /* ONLY iOS 11*/
-        guard #available(iOS 11, *) else { throw NSError(domain: NSCocoaErrorDomain, code: NSFileNoSuchFileError, userInfo:[:]) }
-        
         var maybeEnumerator: NSFileProviderEnumerator? = nil
         
         // Check account
@@ -135,9 +116,6 @@ class FileProviderExtension: NSFileProviderExtension, CCNetworkingDelegate {
 
     override func item(for identifier: NSFileProviderItemIdentifier) throws -> NSFileProviderItem {
         
-        /* ONLY iOS 11*/
-        guard #available(iOS 11, *) else { throw NSError(domain: NSCocoaErrorDomain, code: NSFileNoSuchFileError, userInfo:[:]) }
-        
         if identifier == .rootContainer {
             
             if let directory = NCManageDatabase.sharedInstance.getTableDirectory(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@", providerData.account, providerData.homeServerUrl)) {
@@ -174,9 +152,6 @@ class FileProviderExtension: NSFileProviderExtension, CCNetworkingDelegate {
     
     override func urlForItem(withPersistentIdentifier identifier: NSFileProviderItemIdentifier) -> URL? {
         
-        /* ONLY iOS 11*/
-        guard #available(iOS 11, *) else { return nil }
-            
         // resolve the given identifier to a file on disk
         guard let item = try? item(for: identifier) else {
             return nil
@@ -212,206 +187,114 @@ class FileProviderExtension: NSFileProviderExtension, CCNetworkingDelegate {
     // MARK: -
     
     override func providePlaceholder(at url: URL, completionHandler: @escaping (Error?) -> Void) {
-        
-        if #available(iOSApplicationExtension 11.0, *) {
 
-            guard let identifier = persistentIdentifierForItem(at: url) else {
-                completionHandler(NSFileProviderError(.noSuchItem))
-                return
-            }
+        guard let identifier = persistentIdentifierForItem(at: url) else {
+            completionHandler(NSFileProviderError(.noSuchItem))
+            return
+        }
 
-            do {
-                let fileProviderItem = try item(for: identifier)
-                let placeholderURL = NSFileProviderManager.placeholderURL(for: url)
-                try NSFileProviderManager.writePlaceholder(at: placeholderURL,withMetadata: fileProviderItem)
-                completionHandler(nil)
-            } catch let error {
-                print("error: \(error)")
-                completionHandler(error)
-            }
-            
-        } else {
-            
-            let fileName = url.lastPathComponent
-            let placeholderURL = NSFileProviderExtension.placeholderURL(for: self.documentStorageURL.appendingPathComponent(fileName))
-            let fileSize = 0
-            let metadata = [AnyHashable(URLResourceKey.fileSizeKey): fileSize]
-            do {
-                try NSFileProviderExtension.writePlaceholder(at: placeholderURL, withMetadata: metadata as! [URLResourceKey : Any])
-            } catch let error {
-                print("error: \(error)")
-            }
+        do {
+            let fileProviderItem = try item(for: identifier)
+            let placeholderURL = NSFileProviderManager.placeholderURL(for: url)
+            try NSFileProviderManager.writePlaceholder(at: placeholderURL,withMetadata: fileProviderItem)
             completionHandler(nil)
+        } catch let error {
+            print("error: \(error)")
+            completionHandler(error)
         }
     }
 
     override func startProvidingItem(at url: URL, completionHandler: @escaping ((_ error: Error?) -> Void)) {
         
-        if #available(iOSApplicationExtension 11.0, *) {
-
-            let pathComponents = url.pathComponents
-            let identifier = NSFileProviderItemIdentifier(pathComponents[pathComponents.count - 2])
+        let pathComponents = url.pathComponents
+        let identifier = NSFileProviderItemIdentifier(pathComponents[pathComponents.count - 2])
             
-            // Check account
-            if providerData.setupActiveAccount() == false {
-                completionHandler(NSFileProviderError(.notAuthenticated))
-                return
-            }
+        // Check account
+        if providerData.setupActiveAccount() == false {
+            completionHandler(NSFileProviderError(.notAuthenticated))
+            return
+        }
             
-            guard let metadata = providerData.getTableMetadataFromItemIdentifier(identifier) else {
-                completionHandler(NSFileProviderError(.noSuchItem))
-                return
-            }
+        guard let metadata = providerData.getTableMetadataFromItemIdentifier(identifier) else {
+            completionHandler(NSFileProviderError(.noSuchItem))
+            return
+        }
             
-            // Error ? reUpload when touch
-            if metadata.status == k_metadataStatusUploadError && metadata.session == k_upload_session_extension {
-                
-                if metadata.sessionSelectorPost == providerData.selectorPostImportDocument ||  metadata.sessionSelectorPost == providerData.selectorPostItemChanged {
-                    self.reUpload(metadata)
-                }
-                
-                completionHandler(nil)
-                return
-            }
+        // Error ? reUpload when touch
+        if metadata.status == k_metadataStatusUploadError && metadata.session == k_upload_session_extension {
             
-            // is Upload [Office 365 !!!]
-            if metadata.fileID.contains(metadata.directoryID + metadata.fileName) {
-                completionHandler(nil)
-                return
+            if metadata.sessionSelectorPost == providerData.selectorPostImportDocument ||  metadata.sessionSelectorPost == providerData.selectorPostItemChanged {
+                self.reUpload(metadata)
             }
+                
+            completionHandler(nil)
+            return
+        }
             
-            let tableLocalFile = NCManageDatabase.sharedInstance.getTableLocalFile(predicate: NSPredicate(format: "fileID == %@", metadata.fileID))
-            if tableLocalFile != nil && CCUtility.fileProviderStorageExists(metadata.fileID, fileNameView: metadata.fileNameView) {
-                completionHandler(nil)
-                return
-            }
+        // is Upload [Office 365 !!!]
+        if metadata.fileID.contains(metadata.directoryID + metadata.fileName) {
+            completionHandler(nil)
+            return
+        }
             
-            guard let serverUrl = NCManageDatabase.sharedInstance.getServerUrl(metadata.directoryID) else {
-                completionHandler(NSFileProviderError(.noSuchItem))
-                return
-            }
+        let tableLocalFile = NCManageDatabase.sharedInstance.getTableLocalFile(predicate: NSPredicate(format: "fileID == %@", metadata.fileID))
+        if tableLocalFile != nil && CCUtility.fileProviderStorageExists(metadata.fileID, fileNameView: metadata.fileNameView) {
+            completionHandler(nil)
+            return
+        }
+            
+        guard let serverUrl = NCManageDatabase.sharedInstance.getServerUrl(metadata.directoryID) else {
+            completionHandler(NSFileProviderError(.noSuchItem))
+            return
+        }
                         
-            let ocNetworking = OCnetworking.init(delegate: nil, metadataNet: nil, withUser: providerData.accountUser, withUserID: providerData.accountUserID, withPassword: providerData.accountPassword, withUrl: providerData.accountUrl)
-            let task = ocNetworking?.downloadFileNameServerUrl(serverUrl + "/" + metadata.fileName, fileNameLocalPath: url.path, communication: CCNetworking.shared().sharedOCCommunicationExtensionDownload(), success: { (lenght, etag, date) in
+        let ocNetworking = OCnetworking.init(delegate: nil, metadataNet: nil, withUser: providerData.accountUser, withUserID: providerData.accountUserID, withPassword: providerData.accountPassword, withUrl: providerData.accountUrl)
+        let task = ocNetworking?.downloadFileNameServerUrl(serverUrl + "/" + metadata.fileName, fileNameLocalPath: url.path, communication: CCNetworking.shared().sharedOCCommunicationExtensionDownload(), success: { (lenght, etag, date) in
                 
-                // remove Task
-                self.outstandingDownloadTasks.removeValue(forKey: url)
+            // remove Task
+            self.outstandingDownloadTasks.removeValue(forKey: url)
             
-                // update DB Local
-                metadata.date = date! as NSDate
-                metadata.etag = etag!
-                NCManageDatabase.sharedInstance.addLocalFile(metadata: metadata)
-                NCManageDatabase.sharedInstance.setLocalFile(fileID: metadata.fileID, date: date! as NSDate, exifDate: nil, exifLatitude: nil, exifLongitude: nil, fileName: nil, etag: etag)
-                
-                // Update DB Metadata
-                _ = NCManageDatabase.sharedInstance.addMetadata(metadata)
+            // update DB Local
+            metadata.date = date! as NSDate
+            metadata.etag = etag!
+            NCManageDatabase.sharedInstance.addLocalFile(metadata: metadata)
+            NCManageDatabase.sharedInstance.setLocalFile(fileID: metadata.fileID, date: date! as NSDate, exifDate: nil, exifLatitude: nil, exifLongitude: nil, fileName: nil, etag: etag)
+            
+            // Update DB Metadata
+            _ = NCManageDatabase.sharedInstance.addMetadata(metadata)
 
-                completionHandler(nil)
-                return
+            completionHandler(nil)
+            return
                     
-            }, failure: { (errorMessage, errorCode) in
+        }, failure: { (errorMessage, errorCode) in
                 
-                // remove task
-                self.outstandingDownloadTasks.removeValue(forKey: url)
-                
-                if errorCode == Int(CFNetworkErrors.cfurlErrorCancelled.rawValue) {
-                    completionHandler(NSFileProviderError(.noSuchItem))
-                } else {
-                    completionHandler(NSFileProviderError(.serverUnreachable))
-                }
-                return
-            })
+            // remove task
+            self.outstandingDownloadTasks.removeValue(forKey: url)
             
-            // Add and register task
-            if task != nil {
-                outstandingDownloadTasks[url] = task
-                NSFileProviderManager.default.register(task!, forItemWithIdentifier: NSFileProviderItemIdentifier(identifier.rawValue)) { (error) in }
+            if errorCode == Int(CFNetworkErrors.cfurlErrorCancelled.rawValue) {
+                completionHandler(NSFileProviderError(.noSuchItem))
+            } else {
+                completionHandler(NSFileProviderError(.serverUnreachable))
             }
-                
-        } else {
+            return
+        })
             
-            guard let fileData = try? Data(contentsOf: url) else {
-                completionHandler(nil)
-                return
-            }
-            do {
-                _ = try fileData.write(to: url, options: NSData.WritingOptions())
-                completionHandler(nil)
-            } catch let error {
-                print("error: \(error)")
-                completionHandler(error)
-            }
+        // Add and register task
+        if task != nil {
+            outstandingDownloadTasks[url] = task
+            NSFileProviderManager.default.register(task!, forItemWithIdentifier: NSFileProviderItemIdentifier(identifier.rawValue)) { (error) in }
         }
     }
     
     override func itemChanged(at url: URL) {
         
-        if #available(iOSApplicationExtension 11.0, *) {
-            
-            let pathComponents = url.pathComponents
+        let pathComponents = url.pathComponents
 
-            assert(pathComponents.count > 2)
+        assert(pathComponents.count > 2)
 
-            let itemIdentifier = NSFileProviderItemIdentifier(pathComponents[pathComponents.count - 2])
-            
-            uploadFileItemChanged(for: itemIdentifier, url: url)
-            
-        } else {
-            
-            let fileSize = (try! providerData.fileManager.attributesOfItem(atPath: url.path)[FileAttributeKey.size] as! NSNumber).uint64Value
-            NSLog("[LOG] Item changed at URL %@ %lu", url as NSURL, fileSize)
-            
-            guard let account = NCManageDatabase.sharedInstance.getAccountActive() else {
-                self.stopProvidingItem(at: url)
-                return
-            }
-            guard let fileName = CCUtility.getFileNameExt() else {
-                self.stopProvidingItem(at: url)
-                return
-            }
-            // -------> Fix : Clear FileName for twice Office 365
-            CCUtility.setFileNameExt("")
-            // --------------------------------------------------
-            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)
-                return
-            }
+        let itemIdentifier = NSFileProviderItemIdentifier(pathComponents[pathComponents.count - 2])
             
-            let metadata = NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "fileName == %@ AND directoryID == %@", fileName, directoryID))
-            if metadata != nil {
-                
-                // Update
-                let directoryUser = CCUtility.getDirectoryActiveUser(account.user, activeUrl: account.url)
-                let destinationDirectoryUser = "\(directoryUser!)/\(metadata!.fileName)"
-                
-                // copy sourceURL on directoryUser
-                _ = providerData.copyFile(url.path, toPath: destinationDirectoryUser)
-                
-                // Prepare for send Metadata
-                metadata!.session = k_upload_session
-                _ = NCManageDatabase.sharedInstance.updateMetadata(metadata!)
-                
-            } else {
-                
-                // New
-                let directoryUser = CCUtility.getDirectoryActiveUser(account.user, activeUrl: account.url)
-                let destinationDirectoryUser = "\(directoryUser!)/\(fileName)"
-                
-                _ = providerData.copyFile(url.path, toPath: destinationDirectoryUser)
-
-                CCNetworking.shared().uploadFile(metadata!, taskStatus: Int(k_taskStatusResume), delegate: self)
-            }
-
-            self.stopProvidingItem(at: url)
-        }
+        uploadFileItemChanged(for: itemIdentifier, url: url)
     }
     
     override func stopProvidingItem(at url: URL) {

+ 5 - 7
File Provider Extension/FileProviderItem.swift

@@ -128,13 +128,11 @@ class FileProviderItem: NSObject, NSFileProviderItem {
         } else {
             
             // Favorite directory
-            if #available(iOSApplicationExtension 11.0, *) {
-                let rank = providerData.listFavoriteIdentifierRank[metadata.fileID]
-                if (rank == nil) {
-                    favoriteRank = nil
-                } else {
-                    favoriteRank = providerData.listFavoriteIdentifierRank[metadata.fileID]
-                }
+            let rank = providerData.listFavoriteIdentifierRank[metadata.fileID]
+            if (rank == nil) {
+                favoriteRank = nil
+            } else {
+                favoriteRank = providerData.listFavoriteIdentifierRank[metadata.fileID]
             }
         }
         

+ 4 - 0
Nextcloud.xcodeproj/project.pbxproj

@@ -213,6 +213,8 @@
 		F7434B5E20E241EC00417916 /* CCGraphics.m in Sources */ = {isa = PBXBuildFile; fileRef = F76C3B841C6388BC00DC4301 /* CCGraphics.m */; };
 		F7434B6020E2445200417916 /* CCExifGeo.m in Sources */ = {isa = PBXBuildFile; fileRef = F7A54C351C6267B500E2C8BF /* CCExifGeo.m */; };
 		F7434B6120E2445C00417916 /* CCCertificate.m in Sources */ = {isa = PBXBuildFile; fileRef = F7F801011D98205A007537BC /* CCCertificate.m */; };
+		F7434B6220E249F700417916 /* NSNotificationCenter+MainThread.m in Sources */ = {isa = PBXBuildFile; fileRef = F78071081EDAB65800EAFFF6 /* NSNotificationCenter+MainThread.m */; };
+		F7434B6320E249FB00417916 /* NSString+TruncateToWidth.m in Sources */ = {isa = PBXBuildFile; fileRef = F73049B91CB567F000C7C320 /* NSString+TruncateToWidth.m */; };
 		F749E4E91DC1FB38009BA2FD /* Share.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = F7CE8AFB1DC1F8D8009CAE48 /* Share.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
 		F74E432620B5547700C2E54C /* NCNetworkingEndToEnd.m in Sources */ = {isa = PBXBuildFile; fileRef = F74E432520B5547700C2E54C /* NCNetworkingEndToEnd.m */; };
 		F74E432720B5547700C2E54C /* NCNetworkingEndToEnd.m in Sources */ = {isa = PBXBuildFile; fileRef = F74E432520B5547700C2E54C /* NCNetworkingEndToEnd.m */; };
@@ -3553,6 +3555,7 @@
 				F7434B5120E2409500417916 /* OCXMLServerErrorsParser.m in Sources */,
 				F7434B5720E2416800417916 /* UICKeyChainStore.m in Sources */,
 				F7434B3A20E2403500417916 /* OCActivity.m in Sources */,
+				F7434B6220E249F700417916 /* NSNotificationCenter+MainThread.m in Sources */,
 				F7434B4A20E2407600417916 /* AFURLSessionManager.m in Sources */,
 				F7434B3B20E2403900417916 /* OCCapabilities.m in Sources */,
 				F7434B4B20E2408000417916 /* NSDate+ISO8601.m in Sources */,
@@ -3571,6 +3574,7 @@
 				F7434B3920E2401C00417916 /* CCGlobal.m in Sources */,
 				F7434B3820E2400600417916 /* NCBrand.swift in Sources */,
 				F7434B4620E2406900417916 /* AFNetworkReachabilityManager.m in Sources */,
+				F7434B6320E249FB00417916 /* NSString+TruncateToWidth.m in Sources */,
 				F7434B5620E2412900417916 /* CCError.m in Sources */,
 				F7434B5C20E241D500417916 /* NCEndToEndEncryption.m in Sources */,
 				F7434B3E20E2404700417916 /* OCFileDto.m in Sources */,