From: Claudio Cambra Date: Fri, 13 Jan 2023 13:53:40 +0000 (+0100) Subject: Add NKFile to NextcloudItemMetadataTable converter methods to NextcloudFilesDatabaseM... X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~12^2~10^2~55^2~272 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=06a5e4df85242141b3a26bfb0bbfdbf5960998ec;p=nextcloud-desktop.git Add NKFile to NextcloudItemMetadataTable converter methods to NextcloudFilesDatabaseManager Signed-off-by: Claudio Cambra --- diff --git a/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/NextcloudFilesDatabaseManager.swift b/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/NextcloudFilesDatabaseManager.swift index 1c5569635..802d86865 100644 --- a/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/NextcloudFilesDatabaseManager.swift +++ b/shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/NextcloudFilesDatabaseManager.swift @@ -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) + } }