Add updateDirectoryMetadatasFromItemMetadatas to NextcloudFilesDatabaseManager
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Thu, 26 Jan 2023 15:07:46 +0000 (16:07 +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 17b4db70075073f13c1864ba75c041ba7feebc72..729ac9df5f6cc97a3d7a3396fa000330382ab01a 100644 (file)
@@ -176,10 +176,43 @@ class NextcloudFilesDatabaseManager : NSObject {
         return ncDatabase().objects(NextcloudDirectoryMetadataTable.self).filter("account == %@ AND serverUrl == %@", account, serverUrl).first
     }
 
+    func directoryMetadata(ocId: String) -> NextcloudDirectoryMetadataTable? {
+        return ncDatabase().objects(NextcloudDirectoryMetadataTable.self).filter("ocId == %@", ocId).first
+    }
+
     func parentDirectoryMetadataForItem(_ itemMetadata: NextcloudItemMetadataTable) -> NextcloudDirectoryMetadataTable? {
         return directoryMetadata(account: itemMetadata.account, serverUrl: itemMetadata.serverUrl)
     }
 
+    func updateDirectoryMetadatasFromItemMetadatas(_ directoryItemMetadatas: [NextcloudItemMetadataTable]) {
+        let database = ncDatabase()
+        do {
+            try database.write {
+                for directoryItemMetadata in directoryItemMetadatas {
+                    var newDirectoryMetadata = NextcloudDirectoryMetadataTable()
+                    let directoryOcId = directoryItemMetadata.ocId
+
+                    if let existingDirectoryMetadata = directoryMetadata(ocId: directoryOcId) {
+                        newDirectoryMetadata = existingDirectoryMetadata
+                    }
+
+                    newDirectoryMetadata.ocId = directoryOcId
+                    newDirectoryMetadata.fileId = directoryItemMetadata.fileId
+                    newDirectoryMetadata.etag = directoryItemMetadata.etag
+                    newDirectoryMetadata.serverUrl = directoryItemMetadata.serverUrl + "/" + directoryItemMetadata.fileNameView
+                    newDirectoryMetadata.account = directoryItemMetadata.account
+                    newDirectoryMetadata.e2eEncrypted = directoryItemMetadata.e2eEncrypted
+                    newDirectoryMetadata.favorite = directoryItemMetadata.favorite
+                    newDirectoryMetadata.permissions = directoryItemMetadata.permissions
+
+                    database.add(newDirectoryMetadata, update: .all)
+                }
+            }
+        } catch let error {
+            print("Could not update directory metadatas in database, received error: %@", error)
+        }
+    }
+
     func localFileMetadataFromOcId(_ ocId: String) -> NextcloudLocalFileMetadataTable? {
         return ncDatabase().objects(NextcloudLocalFileMetadataTable.self).filter("ocId == %@", ocId).first
     }