Add NKFile to NextcloudItemMetadataTable converter methods to NextcloudFilesDatabaseM...
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Fri, 13 Jan 2023 13:53:40 +0000 (14:53 +0100)
committerClaudio Cambra <claudio.cambra@nextcloud.com>
Fri, 12 May 2023 05:21:13 +0000 (13:21 +0800)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/NextcloudFilesDatabaseManager.swift

index 1c5569635ce7ddda7d035dcc9784f0c3edd97c67..802d86865a160ebb02e6ec4cc673c2e90b4196cf 100644 (file)
@@ -15,6 +15,7 @@
 import Foundation
 import RealmSwift
 import FileProvider
+import NextcloudKit
 
 class NextcloudFilesDatabaseManager : NSObject {
     static let shared = {
@@ -97,4 +98,100 @@ class NextcloudFilesDatabaseManager : NSObject {
     func localFileMetadataFromOcId(_ ocId: String) -> NextcloudLocalFileMetadataTable? {
         return ncDatabase().objects(NextcloudLocalFileMetadataTable.self).filter("ocId == %@", ocId).first
     }
+
+    @objc func convertNKFileToItemMetadata(_ file: NKFile, account: String) -> NextcloudItemMetadataTable {
+
+        let metadata = NextcloudItemMetadataTable()
+
+        metadata.account = account
+        metadata.checksums = file.checksums
+        metadata.commentsUnread = file.commentsUnread
+        metadata.contentType = file.contentType
+        if let date = file.creationDate {
+            metadata.creationDate = date
+        } else {
+            metadata.creationDate = file.date
+        }
+        metadata.dataFingerprint = file.dataFingerprint
+        metadata.date = file.date
+        metadata.directory = file.directory
+        metadata.downloadURL = file.downloadURL
+        metadata.e2eEncrypted = file.e2eEncrypted
+        metadata.etag = file.etag
+        metadata.favorite = file.favorite
+        metadata.fileId = file.fileId
+        metadata.fileName = file.fileName
+        metadata.fileNameView = file.fileName
+        metadata.hasPreview = file.hasPreview
+        metadata.iconName = file.iconName
+        metadata.mountType = file.mountType
+        metadata.name = file.name
+        metadata.note = file.note
+        metadata.ocId = file.ocId
+        metadata.ownerId = file.ownerId
+        metadata.ownerDisplayName = file.ownerDisplayName
+        metadata.lock = file.lock
+        metadata.lockOwner = file.lockOwner
+        metadata.lockOwnerEditor = file.lockOwnerEditor
+        metadata.lockOwnerType = file.lockOwnerType
+        metadata.lockOwnerDisplayName = file.lockOwnerDisplayName
+        metadata.lockTime = file.lockTime
+        metadata.lockTimeOut = file.lockTimeOut
+        metadata.path = file.path
+        metadata.permissions = file.permissions
+        metadata.quotaUsedBytes = file.quotaUsedBytes
+        metadata.quotaAvailableBytes = file.quotaAvailableBytes
+        metadata.richWorkspace = file.richWorkspace
+        metadata.resourceType = file.resourceType
+        metadata.serverUrl = file.serverUrl
+        metadata.sharePermissionsCollaborationServices = file.sharePermissionsCollaborationServices
+        for element in file.sharePermissionsCloudMesh {
+            metadata.sharePermissionsCloudMesh.append(element)
+        }
+        for element in file.shareType {
+            metadata.shareType.append(element)
+        }
+        metadata.size = file.size
+        metadata.classFile = file.classFile
+        //FIXME: iOS 12.0,* don't detect UTI text/markdown, text/x-markdown
+        if (metadata.contentType == "text/markdown" || metadata.contentType == "text/x-markdown") && metadata.classFile == NKCommon.typeClassFile.unknow.rawValue {
+            metadata.classFile = NKCommon.typeClassFile.document.rawValue
+        }
+        if let date = file.uploadDate {
+            metadata.uploadDate = date
+        } else {
+            metadata.uploadDate = file.date
+        }
+        metadata.urlBase = file.urlBase
+        metadata.user = file.user
+        metadata.userId = file.userId
+
+        // Support for finding the correct filename for e2ee files should go here
+
+        return metadata
+    }
+
+    func convertNKFilesToItemMetadatas(_ files: [NKFile], account: String, completionHandler: @escaping (_ directoryMetadata: NextcloudItemMetadataTable, _ childDirectoriesMetadatas: [NextcloudItemMetadataTable], _ metadatas: [NextcloudItemMetadataTable]) -> Void) {
+
+        var directoryMetadataSet = false
+        var directoryMetadata = NextcloudItemMetadataTable()
+        var childDirectoriesMetadatas: [NextcloudItemMetadataTable] = []
+        var metadatas: [NextcloudItemMetadataTable] = []
+
+        for file in files {
+            let metadata = convertNKFileToItemMetadata(file, account: account)
+
+            if metadatas.isEmpty && !directoryMetadataSet {
+                directoryMetadata = metadata;
+                directoryMetadataSet = true;
+            } else {
+                metadatas.append(metadata)
+                if metadata.directory {
+                    childDirectoriesMetadatas.append(metadata)
+                }
+            }
+        }
+
+        completionHandler(directoryMetadata, childDirectoriesMetadatas, metadatas)
+    }
 }