import Foundation
import RealmSwift
import FileProvider
+import NextcloudKit
class NextcloudFilesDatabaseManager : NSObject {
static let shared = {
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)
+ }
}