Marino Faggiana 6 سال پیش
والد
کامیت
ca3958429a

+ 4 - 0
Nextcloud.xcodeproj/project.pbxproj

@@ -94,6 +94,7 @@
 		F70022FE1EC4C9100080073F /* UtilsFramework.m in Sources */ = {isa = PBXBuildFile; fileRef = F70022A01EC4C9100080073F /* UtilsFramework.m */; };
 		F70022FF1EC4C9100080073F /* UtilsFramework.m in Sources */ = {isa = PBXBuildFile; fileRef = F70022A01EC4C9100080073F /* UtilsFramework.m */; };
 		F70023001EC4C9100080073F /* UtilsFramework.m in Sources */ = {isa = PBXBuildFile; fileRef = F70022A01EC4C9100080073F /* UtilsFramework.m */; };
+		F701E04320BC5B41004629E1 /* FileProviderExtension+Network.swift in Sources */ = {isa = PBXBuildFile; fileRef = F701E04220BC5B41004629E1 /* FileProviderExtension+Network.swift */; };
 		F70944BD1F86364000AE4541 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F70944BC1F86364000AE4541 /* MainInterface.storyboard */; };
 		F70A630B1D5B3467004E2AA5 /* libcrypto.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F70A63061D5B3467004E2AA5 /* libcrypto.a */; };
 		F70A630F1D5B3467004E2AA5 /* libssl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F70A63071D5B3467004E2AA5 /* libssl.a */; };
@@ -742,6 +743,7 @@
 		F700229E1EC4C9100080073F /* OCConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCConstants.h; sourceTree = "<group>"; };
 		F700229F1EC4C9100080073F /* UtilsFramework.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UtilsFramework.h; sourceTree = "<group>"; };
 		F70022A01EC4C9100080073F /* UtilsFramework.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UtilsFramework.m; sourceTree = "<group>"; };
+		F701E04220BC5B41004629E1 /* FileProviderExtension+Network.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "FileProviderExtension+Network.swift"; sourceTree = "<group>"; };
 		F70211F51BAC56E9003FC03E /* CCCellMain.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CCCellMain.m; sourceTree = "<group>"; };
 		F70211F61BAC56E9003FC03E /* CCCellMain.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CCCellMain.xib; sourceTree = "<group>"; };
 		F70211F71BAC56E9003FC03E /* CCCellMainTransfer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CCCellMainTransfer.h; sourceTree = "<group>"; };
@@ -2165,6 +2167,7 @@
 			isa = PBXGroup;
 			children = (
 				F74F9F5120BC3681009FB1AF /* FileProviderExtension.swift */,
+				F701E04220BC5B41004629E1 /* FileProviderExtension+Network.swift */,
 				F74F9F5320BC3D7E009FB1AF /* FileProviderExtension+Actions.swift */,
 				F74F9F5520BC3E52009FB1AF /* FileProviderExtension+Thumbnail.swift */,
 				F74F9F4F20BC3678009FB1AF /* FileProviderData.swift */,
@@ -3784,6 +3787,7 @@
 				F7496B7E208F548E004B299C /* FileProviderItem.swift in Sources */,
 				F7BB50D01F22388600C47094 /* OCRichObjectStrings.m in Sources */,
 				F7BB50C91F22386400C47094 /* OCActivity.m in Sources */,
+				F701E04320BC5B41004629E1 /* FileProviderExtension+Network.swift in Sources */,
 				F7BB50AF1F22370300C47094 /* NCManageDatabase.swift in Sources */,
 				F7BB50FA1F2239CB00C47094 /* BKTouchIDManager.m in Sources */,
 				F7BB50BB1F22374E00C47094 /* OCNetworking.m in Sources */,

+ 15 - 58
PickerFileProvider/FileProviderExtension+Actions.swift

@@ -91,65 +91,23 @@ extension FileProviderExtension {
             return
         }
         
-        DispatchQueue.main.async {
-            
-            guard let metadata = self.providerData.getTableMetadataFromItemIdentifier(itemIdentifier) else {
-                completionHandler(NSFileProviderError(.noSuchItem))
-                return
-            }
-            
-            guard let serverUrl = NCManageDatabase.sharedInstance.getServerUrl(metadata.directoryID) else {
-                completionHandler( NSFileProviderError(.noSuchItem))
-                return
-            }
-            
-            guard let parentIdentifier = self.providerData.getParentItemIdentifier(metadata: metadata) else {
-                completionHandler( NSFileProviderError(.noSuchItem))
-                return
-            }
+        guard let metadata = self.providerData.getTableMetadataFromItemIdentifier(itemIdentifier) else {
+            completionHandler(NSFileProviderError(.noSuchItem))
+            return
+        }
             
-            ocNetworking?.deleteFileOrFolder(metadata.fileName, serverUrl: serverUrl, success: {
-                
-                let fileNamePath = self.providerData.directoryUser + "/" + metadata.fileID
-                do {
-                    try self.fileManager.removeItem(atPath: fileNamePath)
-                } catch let error {
-                    print("error: \(error)")
-                }
-                do {
-                    try self.fileManager.removeItem(atPath: fileNamePath + ".ico")
-                } catch let error {
-                    print("error: \(error)")
-                }
-                do {
-                    try self.fileManager.removeItem(atPath: self.providerData.fileProviderStorageURL!.path + "/" + itemIdentifier.rawValue)
-                } catch let error {
-                    print("error: \(error)")
-                }
-                
-                if metadata.directory {
-                    let dirForDelete = CCUtility.stringAppendServerUrl(serverUrl, addFileName: metadata.fileName)
-                    NCManageDatabase.sharedInstance.deleteDirectoryAndSubDirectory(serverUrl: dirForDelete!)
-                }
-                
-                NCManageDatabase.sharedInstance.deleteLocalFile(predicate: NSPredicate(format: "fileID == %@", metadata.fileID))
-                NCManageDatabase.sharedInstance.deleteMetadata(predicate: NSPredicate(format: "fileID == %@", metadata.fileID), clearDateReadDirectoryID: nil)
-                
-                fileProviderSignalDeleteItemIdentifier.removeAll()
-                fileProviderSignalDeleteItemIdentifier.append(itemIdentifier)
-                self.signalEnumerator(for: [parentIdentifier, .workingSet])
-                
-                completionHandler(nil)
-                
-            }, failure: { (errorMessage, errorCode) in
-                
-                if errorCode == 404 {
-                    completionHandler(nil)
-                } else {
-                    completionHandler(NSFileProviderError(.serverUnreachable))
-                }
-            })
+        guard let parentItemIdentifier = self.providerData.getParentItemIdentifier(metadata: metadata) else {
+            completionHandler( NSFileProviderError(.noSuchItem))
+            return
         }
+        
+        deleteFile(withIdentifier: itemIdentifier, parentItemIdentifier: parentItemIdentifier, metadata: metadata)
+
+        // return immediately
+        fileProviderSignalDeleteItemIdentifier.append(itemIdentifier)
+        self.signalEnumerator(for: [parentItemIdentifier, .workingSet])
+        
+        completionHandler(nil)
     }
     
     override func reparentItem(withIdentifier itemIdentifier: NSFileProviderItemIdentifier, toParentItemWithIdentifier parentItemIdentifier: NSFileProviderItemIdentifier, newName: String?, completionHandler: @escaping (NSFileProviderItem?, Error?) -> Void) {
@@ -363,7 +321,6 @@ extension FileProviderExtension {
             
             let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier!, providerData: providerData)
             
-            fileProviderSignalUpdateItem.removeAll()
             fileProviderSignalUpdateItem.append(item)
             signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
             

+ 158 - 0
PickerFileProvider/FileProviderExtension+Network.swift

@@ -0,0 +1,158 @@
+//
+//  FileProviderExtension+Network.swift
+//  PickerFileProvider
+//
+//  Created by Marino Faggiana on 28/05/18.
+//  Copyright © 2018 TWS. All rights reserved.
+//
+//  Author Marino Faggiana <m.faggiana@twsweb.it>
+//
+//  This program is free software: you can redistribute it and/or modify
+//  it under the terms of the GNU General Public License as published by
+//  the Free Software Foundation, either version 3 of the License, or
+//  (at your option) any later version.
+//
+//  This program is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//  GNU General Public License for more details.
+//
+//  You should have received a copy of the GNU General Public License
+//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+//
+
+import FileProvider
+
+extension FileProviderExtension {
+
+    // --------------------------------------------------------------------------------------------
+    //  MARK: - Delete
+    // --------------------------------------------------------------------------------------------
+    
+    func deleteFile(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
+        }
+        
+        ocNetworking?.deleteFileOrFolder(metadata.fileName, serverUrl: serverUrl, success: {
+            
+            let fileNamePath = self.providerData.directoryUser + "/" + metadata.fileID
+            do {
+                try self.fileManager.removeItem(atPath: fileNamePath)
+            } catch let error {
+                print("error: \(error)")
+            }
+            do {
+                try self.fileManager.removeItem(atPath: fileNamePath + ".ico")
+            } catch let error {
+                print("error: \(error)")
+            }
+            do {
+                try self.fileManager.removeItem(atPath: self.providerData.fileProviderStorageURL!.path + "/" + itemIdentifier.rawValue)
+            } catch let error {
+                print("error: \(error)")
+            }
+            
+            if metadata.directory {
+                let dirForDelete = CCUtility.stringAppendServerUrl(serverUrl, addFileName: metadata.fileName)
+                NCManageDatabase.sharedInstance.deleteDirectoryAndSubDirectory(serverUrl: dirForDelete!)
+            }
+            
+            NCManageDatabase.sharedInstance.deleteLocalFile(predicate: NSPredicate(format: "fileID == %@", metadata.fileID))
+            NCManageDatabase.sharedInstance.deleteMetadata(predicate: NSPredicate(format: "fileID == %@", metadata.fileID), clearDateReadDirectoryID: nil)
+            
+        }, failure: { (errorMessage, errorCode) in
+            
+            let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier, providerData: self.providerData)
+
+            fileProviderSignalUpdateItem.append(item)
+            self.signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
+        })
+    }
+    
+    // --------------------------------------------------------------------------------------------
+    //  MARK: - Upload
+    // --------------------------------------------------------------------------------------------
+    
+    func uploadFileSuccessFailure(_ fileName: String!, fileID: String!, identifier: String!, assetLocalIdentifier: String!, serverUrl: String!, selector: String!, selectorPost: String!, errorMessage: String!, errorCode: Int) {
+        
+        /* ONLY iOS 11*/
+        guard #available(iOS 11, *) else { return }
+        
+        if let metadata = NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "fileID = %@", assetLocalIdentifier)) {
+            let parentItemIdentifier = providerData.getParentItemIdentifier(metadata: metadata)
+            let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier!, providerData: providerData)
+            
+            fileProviderSignalDeleteItemIdentifier.append(item.itemIdentifier)
+            signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
+        }
+        
+        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 = %@", providerData.account, fileID)) {
+                
+                // Rename directory file
+                if fileManager.fileExists(atPath: providerData.fileProviderStorageURL!.path + "/" + assetLocalIdentifier) {
+                    let itemIdentifier = providerData.getItemIdentifier(metadata: metadata)
+                    _ = moveFile(providerData.fileProviderStorageURL!.path + "/" + assetLocalIdentifier, toPath: providerData.fileProviderStorageURL!.path + "/" + itemIdentifier.rawValue)
+                }
+                
+                NCManageDatabase.sharedInstance.setLocalFile(fileID: fileID, date: nil, exifDate: nil, exifLatitude: nil, exifLongitude: nil, fileName: nil, etag: metadata.etag, etagFPE: metadata.etag)
+                
+                let parentItemIdentifier = providerData.getParentItemIdentifier(metadata: metadata)
+                if parentItemIdentifier != nil {
+                    let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier!, providerData: providerData)
+                    
+                    fileProviderSignalUpdateItem.append(item)
+                    signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
+                }
+            }
+            
+        } else {
+            
+            NCManageDatabase.sharedInstance.unlockQueueUpload(assetLocalIdentifier: assetLocalIdentifier)
+        }
+        
+        uploadFile()
+    }
+    
+    func uploadFile() {
+        
+        let queueInLock = NCManageDatabase.sharedInstance.getQueueUploadInLock()
+        if queueInLock != nil && queueInLock!.count == 0 {
+            
+            let metadataNetQueue = NCManageDatabase.sharedInstance.lockQueueUpload(selector: selectorUploadFile, withPath: true)
+            if  metadataNetQueue != nil {
+                
+                if self.copyFile(metadataNetQueue!.path, toPath: providerData.directoryUser + "/" + metadataNetQueue!.fileName) == nil {
+                    
+                    CCNetworking.shared().uploadFile(metadataNetQueue!.fileName, serverUrl: metadataNetQueue!.serverUrl, identifier: metadataNetQueue!.identifier, assetLocalIdentifier: metadataNetQueue!.assetLocalIdentifier ,session: metadataNetQueue!.session, taskStatus: metadataNetQueue!.taskStatus, selector: metadataNetQueue!.selector, selectorPost: metadataNetQueue!.selectorPost, errorCode: 0, delegate: self)
+                    
+                } else {
+                    // file not present, delete record Upload Queue
+                    NCManageDatabase.sharedInstance.deleteQueueUpload(path: metadataNetQueue!.path)
+                }
+            }
+        }
+    }
+    
+    func verifyUploadQueueInLock() {
+        
+        let tasks = CCNetworking.shared().getUploadTasksExtensionSession()
+        if tasks!.count == 0 {
+            let records = NCManageDatabase.sharedInstance.getQueueUpload(predicate: NSPredicate(format: "account = %@ AND selector = %@ AND lock == true AND path != nil", providerData.account, selectorUploadFile))
+            if records != nil && records!.count > 0 {
+                NCManageDatabase.sharedInstance.unlockAllQueueUploadWithPath()
+            }
+        }
+    }
+
+}

+ 0 - 119
PickerFileProvider/FileProviderExtension.swift

@@ -519,129 +519,10 @@ class FileProviderExtension: NSFileProviderExtension, CCNetworkingDelegate {
         }
     }
     
-    // --------------------------------------------------------------------------------------------
-    //  MARK: - Upload
-    // --------------------------------------------------------------------------------------------
-    
-    func uploadFileSuccessFailure(_ fileName: String!, fileID: String!, identifier: String!, assetLocalIdentifier: String!, serverUrl: String!, selector: String!, selectorPost: String!, errorMessage: String!, errorCode: Int) {
-        
-        /* ONLY iOS 11*/
-        guard #available(iOS 11, *) else { return }
-        
-        if let metadata = NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "fileID = %@", assetLocalIdentifier)) {
-            let parentItemIdentifier = providerData.getParentItemIdentifier(metadata: metadata)
-            let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier!, providerData: providerData)
-            
-            fileProviderSignalDeleteItemIdentifier.removeAll()
-            fileProviderSignalDeleteItemIdentifier.append(item.itemIdentifier)
-            signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
-        }
-        
-        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 = %@", providerData.account, fileID)) {
-                
-                // Rename directory file
-                if fileManager.fileExists(atPath: providerData.fileProviderStorageURL!.path + "/" + assetLocalIdentifier) {
-                    let itemIdentifier = providerData.getItemIdentifier(metadata: metadata)
-                    _ = moveFile(providerData.fileProviderStorageURL!.path + "/" + assetLocalIdentifier, toPath: providerData.fileProviderStorageURL!.path + "/" + itemIdentifier.rawValue)
-                }
-                
-                NCManageDatabase.sharedInstance.setLocalFile(fileID: fileID, date: nil, exifDate: nil, exifLatitude: nil, exifLongitude: nil, fileName: nil, etag: metadata.etag, etagFPE: metadata.etag)
-                
-                let parentItemIdentifier = providerData.getParentItemIdentifier(metadata: metadata)
-                if parentItemIdentifier != nil {
-                    let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier!, providerData: providerData)
-                    
-                    fileProviderSignalUpdateItem.removeAll()
-                    fileProviderSignalUpdateItem.append(item)
-                    signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
-                } 
-            }
-            
-        } else {
-                
-            NCManageDatabase.sharedInstance.unlockQueueUpload(assetLocalIdentifier: assetLocalIdentifier)
-        }
-        
-        uploadFile()
-    }
-    
-    func uploadFile() {
-        
-        let queueInLock = NCManageDatabase.sharedInstance.getQueueUploadInLock()
-        if queueInLock != nil && queueInLock!.count == 0 {
-            
-            let metadataNetQueue = NCManageDatabase.sharedInstance.lockQueueUpload(selector: selectorUploadFile, withPath: true)
-            if  metadataNetQueue != nil {
-                
-                if self.copyFile(metadataNetQueue!.path, toPath: providerData.directoryUser + "/" + metadataNetQueue!.fileName) == nil {
-                    
-                    CCNetworking.shared().uploadFile(metadataNetQueue!.fileName, serverUrl: metadataNetQueue!.serverUrl, identifier: metadataNetQueue!.identifier, assetLocalIdentifier: metadataNetQueue!.assetLocalIdentifier ,session: metadataNetQueue!.session, taskStatus: metadataNetQueue!.taskStatus, selector: metadataNetQueue!.selector, selectorPost: metadataNetQueue!.selectorPost, errorCode: 0, delegate: self)
-                    
-                } else {
-                    // file not present, delete record Upload Queue
-                    NCManageDatabase.sharedInstance.deleteQueueUpload(path: metadataNetQueue!.path)
-                }
-            }
-        }
-    }
-    
-    func verifyUploadQueueInLock() {
-        
-        let tasks = CCNetworking.shared().getUploadTasksExtensionSession()
-        if tasks!.count == 0 {
-            let records = NCManageDatabase.sharedInstance.getQueueUpload(predicate: NSPredicate(format: "account = %@ AND selector = %@ AND lock == true AND path != nil", providerData.account, selectorUploadFile))
-            if records != nil && records!.count > 0 {
-                NCManageDatabase.sharedInstance.unlockAllQueueUploadWithPath()
-            }
-        }
-    }
-    
     // --------------------------------------------------------------------------------------------
     //  MARK: - User Function
     // --------------------------------------------------------------------------------------------
     
-    /*
-    func refreshEnumerator(identifier: NSFileProviderItemIdentifier, serverUrl: String) {
-        
-        /* ONLY iOS 11*/
-        guard #available(iOS 11, *) else { return }
-        
-        let item = try? self.item(for: identifier)
-        if item != nil {
-            var found = false
-            for updateItem in providerData.listUpdateItems {
-                if updateItem.itemIdentifier.rawValue == identifier.rawValue {
-                    found = true
-                }
-            }
-            if !found {
-                providerData.listUpdateItems.append(item!)
-            }
-        }
-        
-        if serverUrl == providerData.homeServerUrl {
-            NSFileProviderManager.default.signalEnumerator(for: .rootContainer, completionHandler: { (error) in
-                print("send signal rootContainer")
-            })
-        } else {
-            if let directory = NCManageDatabase.sharedInstance.getTableDirectory(predicate: NSPredicate(format: "account = %@ AND serverUrl = %@", providerData.account, serverUrl)) {
-                if let metadata = NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "account = %@ AND fileID = %@", providerData.account, directory.fileID)) {
-                    let itemIdentifier = providerData.getItemIdentifier(metadata: metadata)
-                    NSFileProviderManager.default.signalEnumerator(for: itemIdentifier, completionHandler: { (error) in
-                        print("send signal")
-                    })
-                }
-            }
-        }
-    }
-    */
-    
     func copyFile(_ atPath: String, toPath: String) -> Error? {
         
         var errorResult: Error?