Marino Faggiana 7 жил өмнө
parent
commit
12e3275440

+ 56 - 19
PickerFileProvider/FileProvider.swift

@@ -145,14 +145,16 @@ class FileProvider: NSFileProviderExtension, CCNetworkingDelegate {
                 metadata.fileNameView = NCBrandOptions.sharedInstance.brand
                 metadata.typeFile = k_metadataTypeFile_directory
                     
-                return FileProviderItem(metadata: metadata, serverUrl: homeServerUrl)
+                return FileProviderItem(metadata: metadata, parentItemIdentifier: NSFileProviderItemIdentifier(NSFileProviderItemIdentifier.rootContainer.rawValue))
             }
             
         } else {
         
             if let metadata = NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "account = %@ AND fileID = %@", account, identifier.rawValue))  {
-                if let directory = NCManageDatabase.sharedInstance.getTableDirectory(predicate: NSPredicate(format: "account = %@ AND directoryID = %@", account, metadata.directoryID)) {
-                    return FileProviderItem(metadata: metadata, serverUrl: directory.serverUrl)
+                let parentItemIdentifier = getDirectoryParent(metadataDirectoryID: metadata.directoryID)
+                if parentItemIdentifier != nil {
+                    let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier!)
+                    return item
                 }
             }
         }
@@ -567,8 +569,13 @@ class FileProvider: NSFileProviderExtension, CCNetworkingDelegate {
                 return
             }
             
-            let item = FileProviderItem(metadata: metadataDB, serverUrl: serverUrl)
-            completionHandler(item, nil)
+            let parentItemIdentifier = getDirectoryParent(metadataDirectoryID: metadataDB.directoryID)
+            if parentItemIdentifier != nil {
+                let item = FileProviderItem(metadata: metadataDB, parentItemIdentifier: parentItemIdentifier!)
+                completionHandler(item, nil)
+            } else {
+                completionHandler(nil, NSFileProviderError(.noSuchItem))
+            }
             
         }, failure: { (errorMessage, errorCode) in
             completionHandler(nil, NSFileProviderError(.serverUnreachable))
@@ -689,8 +696,13 @@ class FileProvider: NSFileProviderExtension, CCNetworkingDelegate {
                 return
             }
             
-            let item = FileProviderItem(metadata: metadata, serverUrl: serverUrlTo)
-            completionHandler(item, nil)
+            let parentItemIdentifier = getDirectoryParent(metadataDirectoryID: metadata.directoryID)
+            if parentItemIdentifier != nil {
+                let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier!)
+                completionHandler(item, nil)
+            } else {
+                completionHandler(nil, NSFileProviderError(.noSuchItem))
+            }
             
         }, failure: { (errorMessage, errorCode) in
             completionHandler(nil, NSFileProviderError(.serverUnreachable))
@@ -745,8 +757,13 @@ class FileProvider: NSFileProviderExtension, CCNetworkingDelegate {
                 } catch { }
             }
             
-            let item = FileProviderItem(metadata: metadata, serverUrl: serverUrl)
-            completionHandler(item, nil)
+            let parentItemIdentifier = getDirectoryParent(metadataDirectoryID: metadata.directoryID)
+            if parentItemIdentifier != nil {
+                let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier!)
+                completionHandler(item, nil)
+            } else {
+                completionHandler(nil, NSFileProviderError(.noSuchItem))
+            }
             
         }, failure: { (errorMessage, errorCode) in
             completionHandler(nil, NSFileProviderError(.serverUnreachable))
@@ -834,14 +851,14 @@ class FileProvider: NSFileProviderExtension, CCNetworkingDelegate {
             return
         }
         
-        guard let serverUrl = NCManageDatabase.sharedInstance.getServerUrl(metadata.directoryID) else {
+        let parentItemIdentifier = getDirectoryParent(metadataDirectoryID: metadata.directoryID)
+        if parentItemIdentifier != nil {
+            let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier!)
+            completionHandler(item, nil)
+        } else {
             completionHandler(nil, NSFileProviderError(.noSuchItem))
-            return
         }
         
-        let item = FileProviderItem(metadata: metadata, serverUrl: serverUrl)
-        completionHandler(item, nil)
-
         self.refreshEnumerator(identifier: itemIdentifier, serverUrl: "WorkingSet")        
     }
     
@@ -943,7 +960,7 @@ class FileProvider: NSFileProviderExtension, CCNetworkingDelegate {
             return
         }
         
-        let item = FileProviderItem(metadata: metadataDB, serverUrl: serverUrl)
+        let item = FileProviderItem(metadata: metadataDB, parentItemIdentifier: parentItemIdentifier)
         completionHandler(item, nil)
     }
     
@@ -968,8 +985,11 @@ class FileProvider: NSFileProviderExtension, CCNetworkingDelegate {
                 
                 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)
+                let parentItemIdentifier = getDirectoryParent(metadataDirectoryID: metadata.directoryID)
+                if parentItemIdentifier != nil {
+                    let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier!)
+                    self.refreshEnumerator(identifier: item.itemIdentifier, serverUrl: serverUrl)
+                } 
             }
             
         } else {
@@ -1149,7 +1169,7 @@ class FileProvider: NSFileProviderExtension, CCNetworkingDelegate {
 }
 
 // --------------------------------------------------------------------------------------------
-//  MARK: - Setup Active Accont
+//  MARK: -
 // --------------------------------------------------------------------------------------------
 
 func setupActiveAccount() {
@@ -1179,7 +1199,7 @@ func setupActiveAccount() {
     }
 }
 
-func createFileIdentifier(itemIdentifier: String, fileName: String) {
+func createFileIdentifierOnFileSystem(itemIdentifier: String, fileName: String) {
     
     let identifierPath = fileProviderStorageURL!.path + "/" + itemIdentifier
     let fileIdentifier = identifierPath + "/" + fileName
@@ -1193,3 +1213,20 @@ func createFileIdentifier(itemIdentifier: String, fileName: String) {
         FileManager.default.createFile(atPath: fileIdentifier, contents: nil, attributes: nil)
     }
 }
+
+func getDirectoryParent(metadataDirectoryID: String) -> NSFileProviderItemIdentifier? {
+    
+    if #available(iOSApplicationExtension 11.0, *) {
+        if let directoryParent = NCManageDatabase.sharedInstance.getTableDirectory(predicate: NSPredicate(format: "account = %@ AND directoryID = %@", account, metadataDirectoryID))  {
+            if directoryParent.serverUrl == homeServerUrl {
+                return NSFileProviderItemIdentifier(NSFileProviderItemIdentifier.rootContainer.rawValue)
+            } else {
+                if let metadataParent = NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "account = %@ AND fileID = %@", account, directoryParent.fileID))  {
+                    return NSFileProviderItemIdentifier(metadataParent.fileID)
+                }
+            }
+        }
+    }
+    
+    return nil
+}

+ 7 - 4
PickerFileProvider/FileProviderEnumerator.swift

@@ -162,10 +162,13 @@ 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)
+                
+                createFileIdentifierOnFileSystem(itemIdentifier: metadata.fileID, fileName: metadata.fileNameView)
+                let parentItemIdentifier = getDirectoryParent(metadataDirectoryID: metadata.directoryID)
+                if parentItemIdentifier != nil {
+                    let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier!)
+                    items.append(item)
+                }
             }
         }
         

+ 5 - 8
PickerFileProvider/FileProviderEnumeratorFile.swift

@@ -44,16 +44,13 @@ class FileProviderEnumeratorFile: NSObject, NSFileProviderEnumerator {
             return
         }
         
-        guard let serverUrl = NCManageDatabase.sharedInstance.getServerUrl(metadata.directoryID) else {
-            observer.finishEnumerating(upTo: nil)
-            return
+        createFileIdentifierOnFileSystem(itemIdentifier: metadata.fileID, fileName: metadata.fileNameView)        
+        let parentItemIdentifier = getDirectoryParent(metadataDirectoryID: metadata.directoryID)
+        if parentItemIdentifier != nil {
+            let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier!)
+            items.append(item)
         }
         
-        // Create FS
-        createFileIdentifier(itemIdentifier: metadata.fileID, fileName: metadata.fileNameView)
-        let item = FileProviderItem(metadata: metadata, serverUrl: serverUrl)
-        items.append(item)
-        
         observer.didEnumerate(items)
         observer.finishEnumerating(upTo: nil)
     }

+ 5 - 7
PickerFileProvider/FileProviderEnumeratorWorkingSet.swift

@@ -45,14 +45,12 @@ class FileProviderEnumeratorWorkingSet: NSObject, NSFileProviderEnumerator {
             
             if let metadata = NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "account = %@ AND fileID = %@", account, tag.fileID))  {
                 
-                guard let serverUrl = NCManageDatabase.sharedInstance.getServerUrl(metadata.directoryID) else {
-                    continue
+                createFileIdentifierOnFileSystem(itemIdentifier: metadata.fileID, fileName: metadata.fileNameView)                
+                let parentItemIdentifier = getDirectoryParent(metadataDirectoryID: metadata.directoryID)
+                if parentItemIdentifier != nil {
+                    let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier!)
+                    items.append(item)
                 }
-                
-                // Create FS
-                createFileIdentifier(itemIdentifier: metadata.fileID, fileName: metadata.fileNameView)
-                let item = FileProviderItem(metadata: metadata, serverUrl: serverUrl)
-                items.append(item)
             }
         }
         

+ 6 - 42
PickerFileProvider/FileProviderItem.swift

@@ -70,44 +70,20 @@ class FileProviderItem: NSObject, NSFileProviderItem {
     
     var isDirectory = false
 
-    init(metadata: tableMetadata, serverUrl: String) {
+    init(metadata: tableMetadata, parentItemIdentifier: NSFileProviderItemIdentifier) {
+        
+        self.itemIdentifier = NSFileProviderItemIdentifier(metadata.fileID)
+        self.parentItemIdentifier = parentItemIdentifier
         
         self.contentModificationDate = metadata.date as Date
         self.creationDate = metadata.date as Date
         self.documentSize = NSNumber(value: metadata.size)
         self.filename = metadata.fileNameView
         self.isDirectory = metadata.directory
-
-        // parentItemIdentifier
-        if #available(iOSApplicationExtension 11.0, *) {
-            
-            self.parentItemIdentifier = NSFileProviderItemIdentifier(NSFileProviderItemIdentifier.rootContainer.rawValue)
-            
-            // NOT .rootContainer
-            if (serverUrl != homeServerUrl) {
-                if let directoryParent = NCManageDatabase.sharedInstance.getTableDirectory(predicate: NSPredicate(format: "account = %@ AND directoryID = %@", metadata.account, metadata.directoryID))  {
-                    if let metadataParent = NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "account = %@ AND fileID = %@", metadata.account, directoryParent.fileID))  {
-                        self.parentItemIdentifier = NSFileProviderItemIdentifier(metadataParent.fileID)
-                    }
-                }
-            }
-            
-            // itemIdentifier
-            self.itemIdentifier = NSFileProviderItemIdentifier(metadata.fileID)
-            
-        } else {
-            // < iOS 11
-            self.parentItemIdentifier = NSFileProviderItemIdentifier("")
-            self.itemIdentifier = NSFileProviderItemIdentifier("")
-        }
-
-        // typeIdentifier
-        if let fileType = CCUtility.insertTypeFileIconName(metadata.fileNameView, metadata: metadata) {
-            self.typeIdentifier = fileType 
-        }
+        self.typeIdentifier = CCUtility.insertTypeFileIconName(metadata.fileNameView, metadata: metadata)
         self.versionIdentifier = metadata.etag.data(using: .utf8)
         
-        // Verify file exists on cache
+        // This is a file
         if (!metadata.directory) {
             
             let fileIdentifier = fileProviderStorageURL!.path + "/" + metadata.fileID + "/" + metadata.fileNameView
@@ -130,18 +106,6 @@ class FileProviderItem: NSObject, NSFileProviderItem {
                 self.isMostRecentVersionDownloaded = true
             }
             
-            // Upload
-            /*
-            let queue = NCManageDatabase.sharedInstance.getQueueUpload(predicate: NSPredicate(format: "account = %@ AND (path = %@ || path = %@)", account, changeDocumentPath, importDocumentPath))
-            if queue?.count == 0 {
-                self.isUploading = false
-                self.isUploaded = true
-            } else {
-                self.isUploading = true
-                self.isUploaded = false
-            }
-            */
-            
         } else {
             
             /*