marinofaggiana 5 years ago
parent
commit
7170fa624d

+ 49 - 14
File Provider Extension/FileProviderExtension+Actions.swift

@@ -90,13 +90,31 @@ extension FileProviderExtension {
             return
         }
         
-        deleteFile(withIdentifier: itemIdentifier, parentItemIdentifier: parentItemIdentifier, metadata: metadata)
-       
-        // return immediately
-        fileProviderData.sharedInstance.fileProviderSignalDeleteItemIdentifier[itemIdentifier] = itemIdentifier
-        fileProviderData.sharedInstance.signalEnumerator(for: [parentItemIdentifier, .workingSet])
-
-        completionHandler(nil)
+        OCNetworking.sharedManager().deleteFileOrFolder(withAccount: fileProviderData.sharedInstance.account, path: metadata.serverUrl + "/" + metadata.fileName, completion: { (account, message, errorCode) in
+            if errorCode == 0 || errorCode == kOCErrorServerPathNotFound {
+                let fileNamePath = CCUtility.getDirectoryProviderStorageOcId(itemIdentifier.rawValue)!
+                do {
+                    try fileProviderUtility.sharedInstance.fileManager.removeItem(atPath: fileNamePath)
+                } catch let error {
+                    print("error: \(error)")
+                }
+                
+                if metadata.directory {
+                    let dirForDelete = CCUtility.stringAppendServerUrl(metadata.serverUrl, addFileName: metadata.fileName)
+                    NCManageDatabase.sharedInstance.deleteDirectoryAndSubDirectory(serverUrl: dirForDelete!, account: fileProviderData.sharedInstance.account)
+                }
+                
+                NCManageDatabase.sharedInstance.deleteMetadata(predicate: NSPredicate(format: "ocId == %@", metadata.ocId))
+                NCManageDatabase.sharedInstance.deleteLocalFile(predicate: NSPredicate(format: "ocId == %@", metadata.ocId))
+                
+                fileProviderData.sharedInstance.fileProviderSignalDeleteItemIdentifier[itemIdentifier] = itemIdentifier
+                fileProviderData.sharedInstance.signalEnumerator(for: [parentItemIdentifier, .workingSet])
+                completionHandler(nil)
+                
+            } else {
+                completionHandler( NSFileProviderError(.serverUnreachable))
+            }
+        })
     }
     
     override func reparentItem(withIdentifier itemIdentifier: NSFileProviderItemIdentifier, toParentItemWithIdentifier parentItemIdentifier: NSFileProviderItemIdentifier, newName: String?, completionHandler: @escaping (NSFileProviderItem?, Error?) -> Void) {
@@ -230,14 +248,31 @@ extension FileProviderExtension {
             favorite = true
         }
         
-        let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier)
-        fileProviderData.sharedInstance.fileProviderSignalUpdateItem[item.itemIdentifier] = item
-        fileProviderData.sharedInstance.signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
-
-        completionHandler(item, nil)
-        
         if (favorite == true && metadata.favorite == false) || (favorite == false && metadata.favorite == true) {
-            settingFavorite(favorite, withIdentifier: itemIdentifier, parentItemIdentifier: parentItemIdentifier, metadata: metadata)
+            let fileNamePath = CCUtility.returnFileNamePath(fromFileName: metadata.fileName, serverUrl: metadata.serverUrl, activeUrl: fileProviderData.sharedInstance.accountUrl)
+            
+            OCNetworking.sharedManager().settingFavorite(withAccount: metadata.account, fileName: fileNamePath, favorite: favorite, completion: { (account, message, errorCode) in
+                if errorCode == 0 && account == metadata.account {
+                    // Change DB
+                    metadata.favorite = favorite
+                    _ = NCManageDatabase.sharedInstance.addMetadata(metadata)
+                    
+                    let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier)
+                    fileProviderData.sharedInstance.fileProviderSignalUpdateItem[item.itemIdentifier] = item
+                    fileProviderData.sharedInstance.signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
+                    
+                    completionHandler(item, nil)
+                } else {
+                    // Errore, remove from listFavoriteIdentifierRank
+                    fileProviderData.sharedInstance.listFavoriteIdentifierRank.removeValue(forKey: itemIdentifier.rawValue)
+                    
+                    let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier)
+                    fileProviderData.sharedInstance.fileProviderSignalUpdateItem[item.itemIdentifier] = item
+                    fileProviderData.sharedInstance.signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
+                    
+                    completionHandler(nil, NSFileProviderError(.serverUnreachable))
+                }
+            })
         }
     }
     

+ 0 - 180
File Provider Extension/FileProviderExtension+Network.swift

@@ -1,180 +0,0 @@
-//
-//  FileProviderExtension+Network.swift
-//  PickerFileProvider
-//
-//  Created by Marino Faggiana on 28/05/18.
-//  Copyright © 2018 Marino Faggiana. All rights reserved.
-//
-//  Author Marino Faggiana <marino.faggiana@nextcloud.com>
-//
-//  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) {
-        
-        let path = metadata.serverUrl + "/" + metadata.fileName
-
-        OCNetworking.sharedManager().deleteFileOrFolder(withAccount: fileProviderData.sharedInstance.account, path: path, completion: { (account, message, errorCode) in
-            if errorCode == 0 || errorCode == kOCErrorServerPathNotFound {
-                self.deleteFileSystem(for: metadata, serverUrl: metadata.serverUrl, itemIdentifier: itemIdentifier)
-            }
-        })
-    }
-    
-    func deleteFileSystem(for metadata: tableMetadata, serverUrl: String, itemIdentifier: NSFileProviderItemIdentifier) {
-        
-        let fileNamePath = CCUtility.getDirectoryProviderStorageOcId(itemIdentifier.rawValue)!
-        do {
-            try fileProviderUtility.sharedInstance.fileManager.removeItem(atPath: fileNamePath)
-        } catch let error {
-            print("error: \(error)")
-        }
-        
-        if metadata.directory {
-            let dirForDelete = CCUtility.stringAppendServerUrl(serverUrl, addFileName: metadata.fileName)
-            NCManageDatabase.sharedInstance.deleteDirectoryAndSubDirectory(serverUrl: dirForDelete!, account: fileProviderData.sharedInstance.account)
-        }
-        
-        NCManageDatabase.sharedInstance.deleteMetadata(predicate: NSPredicate(format: "ocId == %@", metadata.ocId))
-        NCManageDatabase.sharedInstance.deleteLocalFile(predicate: NSPredicate(format: "ocId == %@", metadata.ocId))
-    }
-    
-    // --------------------------------------------------------------------------------------------
-    //  MARK: - Favorite
-    // --------------------------------------------------------------------------------------------
-    
-    func settingFavorite(_ favorite: Bool, withIdentifier itemIdentifier: NSFileProviderItemIdentifier, parentItemIdentifier: NSFileProviderItemIdentifier, metadata: tableMetadata) {
-        
-        let fileNamePath = CCUtility.returnFileNamePath(fromFileName: metadata.fileName, serverUrl: metadata.serverUrl, activeUrl: fileProviderData.sharedInstance.accountUrl)
-
-        OCNetworking.sharedManager().settingFavorite(withAccount: metadata.account, fileName: fileNamePath, favorite: favorite, completion: { (account, message, errorCode) in
-            if errorCode == 0 && account == metadata.account {
-                // Change DB
-                metadata.favorite = favorite
-                _ = NCManageDatabase.sharedInstance.addMetadata(metadata)
-            } else {
-                // Errore, remove from listFavoriteIdentifierRank
-                fileProviderData.sharedInstance.listFavoriteIdentifierRank.removeValue(forKey: itemIdentifier.rawValue)
-                
-                let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier)
-                fileProviderData.sharedInstance.fileProviderSignalUpdateItem[item.itemIdentifier] = item
-                fileProviderData.sharedInstance.signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
-            }
-        })
-    }
-    
-    // --------------------------------------------------------------------------------------------
-    //  MARK: - Upload
-    // --------------------------------------------------------------------------------------------
-    
-    func uploadStart(_ ocId: String!, account: String!, task: URLSessionUploadTask!, serverUrl: String!) {
-        
-        guard let metadataUpload = NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "ocId == %@", ocId)) else {
-            return
-        }
-        
-        metadataUpload.status = Int(k_metadataStatusUploading)
-        guard let metadata = NCManageDatabase.sharedInstance.addMetadata(metadataUpload) else {
-            return
-        }
-        
-        guard let parentItemIdentifier = fileProviderUtility.sharedInstance.getParentItemIdentifier(metadata: metadata, homeServerUrl: fileProviderData.sharedInstance.homeServerUrl) else {
-            return
-        }
-        
-        let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier)
-
-        // Register for bytesSent
-        NSFileProviderManager.default.register(task, forItemWithIdentifier: NSFileProviderItemIdentifier(item.itemIdentifier.rawValue)) { (error) in }
-        
-        fileProviderData.sharedInstance.fileProviderSignalUpdateItem[item.itemIdentifier] = item
-        fileProviderData.sharedInstance.signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
-    }
-    
-    func uploadFileSuccessFailure(_ fileName: String!, ocId: String!, assetLocalIdentifier: String!, serverUrl: String!, selector: String!, errorMessage: String!, errorCode: Int) {
-                
-        guard let metadata = NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "ocId == %@", ocId)) else {
-            return
-        }
-        
-        guard let parentItemIdentifier = fileProviderUtility.sharedInstance.getParentItemIdentifier(metadata: metadata, homeServerUrl: fileProviderData.sharedInstance.homeServerUrl) else {
-            return
-        }
-        
-        // OK
-        if errorCode == 0 {
-            
-            // Remove temp ocId
-            let itemIdentifier = NSFileProviderItemIdentifier(CCUtility.createMetadataID(fromAccount: metadata.account, serverUrl: metadata.serverUrl, fileNameView: metadata.fileNameView, directory: false))
-            fileProviderData.sharedInstance.fileProviderSignalDeleteItemIdentifier[itemIdentifier] = itemIdentifier
-            
-            // Recreate ico
-            CCGraphics.createNewImage(from: fileName, ocId: ocId, extension: NSString(string: fileName).pathExtension, filterGrayScale: false, typeFile: metadata.typeFile, writeImage: true)
-            
-            // remove session data
-            metadata.session = ""
-            metadata.sessionSelector = ""
-            let metadata = NCManageDatabase.sharedInstance.addMetadata(metadata)
-            
-            let item = FileProviderItem(metadata: metadata!, parentItemIdentifier: parentItemIdentifier)
-            fileProviderData.sharedInstance.fileProviderSignalUpdateItem[item.itemIdentifier] = item
-            
-            uploadFileImportDocument()
-            
-        } else {
-        
-            // Error
-            
-            metadata.status = Int(k_metadataStatusUploadError)
-            let metadata = NCManageDatabase.sharedInstance.addMetadata(metadata)
-            
-            let item = FileProviderItem(metadata: metadata!, parentItemIdentifier: parentItemIdentifier)
-            fileProviderData.sharedInstance.fileProviderSignalUpdateItem[item.itemIdentifier] = item
-        }
-        
-        fileProviderData.sharedInstance.signalEnumerator(for: [parentItemIdentifier, .workingSet])
-    }
-    
-    func uploadFileImportDocument() {
-        
-        let tableMetadatas = NCManageDatabase.sharedInstance.getMetadatas(predicate: NSPredicate(format: "account == %@ AND session == %@ AND (status == %d OR status == %d)", fileProviderData.sharedInstance.account, k_upload_session_extension, k_metadataStatusInUpload, k_metadataStatusUploading), sorted: "fileName", ascending: true)
-        
-        if (tableMetadatas == nil || (tableMetadatas!.count < Int(k_maxConcurrentOperation))) {
-            
-            guard let metadataForUpload = NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "account == %@ AND session == %@ AND status == %d", fileProviderData.sharedInstance.account, k_upload_session_extension, k_metadataStatusWaitUpload)) else {
-                return
-            }
-            
-            CCNetworking.shared().delegate = self
-            CCNetworking.shared().uploadFile(metadataForUpload, taskStatus: Int(k_taskStatusResume))
-        }
-    }
-    
-    func reUpload(_ metadata: tableMetadata) {
-        
-        metadata.status = Int(k_metadataStatusWaitUpload)
-        let metadataForUpload = NCManageDatabase.sharedInstance.addMetadata(metadata)
-        
-        CCNetworking.shared().delegate = self
-        CCNetworking.shared().uploadFile(metadataForUpload, taskStatus: Int(k_taskStatusResume))
-    }
-}

+ 3 - 16
File Provider Extension/FileProviderExtension.swift

@@ -64,9 +64,6 @@ class FileProviderExtension: NSFileProviderExtension, CCNetworkingDelegate {
         
         // Create directory File Provider Storage
         CCUtility.getDirectoryProviderStorage()
-        
-        // Upload Imnport Document
-        self.uploadFileImportDocument()
     }
     
     // MARK: - Enumeration
@@ -219,7 +216,7 @@ class FileProviderExtension: NSFileProviderExtension, CCNetworkingDelegate {
         if metadata.status == k_metadataStatusUploadError && metadata.session == k_upload_session_extension {
             
             if metadata.session == k_upload_session_extension {
-                self.reUpload(metadata)
+                //self.reUpload(metadata)
             }
             
             completionHandler(nil)
@@ -285,19 +282,9 @@ class FileProviderExtension: NSFileProviderExtension, CCNetworkingDelegate {
         assert(pathComponents.count > 2)
 
         let itemIdentifier = NSFileProviderItemIdentifier(pathComponents[pathComponents.count - 2])
+        let fileName = pathComponents[pathComponents.count - 1]
         
-        guard let metadata = NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "account == %@ AND (ocId == %@ || fileId == %@)", fileProviderData.sharedInstance.account, itemIdentifier.rawValue, itemIdentifier.rawValue)) else { return }
-        
-        metadata.session = k_upload_session_extension
-        metadata.sessionSelector = selectorUploadFile
-        metadata.status = Int(k_metadataStatusWaitUpload)
-        
-        guard let metadataForUpload = NCManageDatabase.sharedInstance.addMetadata(metadata) else {
-            return
-        }
-        
-        CCNetworking.shared().delegate = self
-        CCNetworking.shared().uploadFile(metadataForUpload, taskStatus: Int(k_taskStatusResume))
+        //uploadFileItemChanged(for: itemIdentifier, fileName: fileName, url: url)
     }
     
     override func stopProvidingItem(at url: URL) {

+ 0 - 4
Nextcloud.xcodeproj/project.pbxproj

@@ -339,7 +339,6 @@
 		F771E3F320E239A600AFB62D /* FileProviderData.swift in Sources */ = {isa = PBXBuildFile; fileRef = F771E3F220E239A600AFB62D /* FileProviderData.swift */; };
 		F771E3F720E239B500AFB62D /* FileProviderExtension+Actions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F771E3F420E239B400AFB62D /* FileProviderExtension+Actions.swift */; };
 		F771E3F820E239B500AFB62D /* FileProviderExtension+Thumbnail.swift in Sources */ = {isa = PBXBuildFile; fileRef = F771E3F520E239B400AFB62D /* FileProviderExtension+Thumbnail.swift */; };
-		F771E3F920E239B500AFB62D /* FileProviderExtension+Network.swift in Sources */ = {isa = PBXBuildFile; fileRef = F771E3F620E239B400AFB62D /* FileProviderExtension+Network.swift */; };
 		F771E3FF20E23C3A00AFB62D /* libssl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F70A63071D5B3467004E2AA5 /* libssl.a */; };
 		F771E40020E23C3D00AFB62D /* libcrypto.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F70A63061D5B3467004E2AA5 /* libcrypto.a */; };
 		F774264122EB3F7300B23912 /* DropDown.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F774264022EB3F7300B23912 /* DropDown.framework */; };
@@ -1136,7 +1135,6 @@
 		F771E3F220E239A600AFB62D /* FileProviderData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FileProviderData.swift; sourceTree = "<group>"; };
 		F771E3F420E239B400AFB62D /* FileProviderExtension+Actions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "FileProviderExtension+Actions.swift"; sourceTree = "<group>"; };
 		F771E3F520E239B400AFB62D /* FileProviderExtension+Thumbnail.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "FileProviderExtension+Thumbnail.swift"; sourceTree = "<group>"; };
-		F771E3F620E239B400AFB62D /* FileProviderExtension+Network.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "FileProviderExtension+Network.swift"; sourceTree = "<group>"; };
 		F771E3FB20E23A8700AFB62D /* File_Provider_Extension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = File_Provider_Extension.entitlements; sourceTree = "<group>"; };
 		F771E3FC20E23A8800AFB62D /* File_Provider_Extension.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = File_Provider_Extension.plist; sourceTree = "<group>"; };
 		F774264022EB3F7300B23912 /* DropDown.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DropDown.framework; path = Carthage/Build/iOS/DropDown.framework; sourceTree = "<group>"; };
@@ -2312,7 +2310,6 @@
 				F771E3F220E239A600AFB62D /* FileProviderData.swift */,
 				F771E3D220E2392D00AFB62D /* FileProviderExtension.swift */,
 				F771E3F420E239B400AFB62D /* FileProviderExtension+Actions.swift */,
-				F771E3F620E239B400AFB62D /* FileProviderExtension+Network.swift */,
 				F771E3F520E239B400AFB62D /* FileProviderExtension+Thumbnail.swift */,
 				F771E3D420E2392D00AFB62D /* FileProviderItem.swift */,
 				F76673EF22C90433007ED366 /* FileProviderUtility.swift */,
@@ -3573,7 +3570,6 @@
 				F7434B4020E2404E00417916 /* OCNotificationsAction.m in Sources */,
 				F7434B5320E2409E00417916 /* OCXMLSharedParser.m in Sources */,
 				F7434B4320E2405900417916 /* OCShareUser.m in Sources */,
-				F771E3F920E239B500AFB62D /* FileProviderExtension+Network.swift in Sources */,
 				F7434B6120E2445C00417916 /* CCCertificate.m in Sources */,
 				F7434B5A20E241BB00417916 /* NCNetworkingEndToEnd.m in Sources */,
 				F76673EE22C901F6007ED366 /* FileProviderDomain.swift in Sources */,