Fix path handling for file provider database setup
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Thu, 26 Jan 2023 22:10:43 +0000 (23:10 +0100)
committerClaudio Cambra <claudio.cambra@nextcloud.com>
Fri, 12 May 2023 05:21:15 +0000 (13:21 +0800)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/NextcloudFilesDatabaseManager.swift

index 4388470508b332dd2aed56da5bfd5967c9431ff9..e79bb7c39950b3d701a6c75d12b7d102a8654f35 100644 (file)
@@ -22,8 +22,8 @@ class NextcloudFilesDatabaseManager : NSObject {
         return NextcloudFilesDatabaseManager();
     }()
 
-    let relativeDatabaseFolderPath: String = "Database/"
-    let databaseFilename: String = "fileproviderextdatabase.realm"
+    let relativeDatabaseFolderPath = "Database/"
+    let databaseFilename = "fileproviderextdatabase.realm"
     let relativeDatabaseFilePath: String
     var databasePath: URL?
 
@@ -37,16 +37,18 @@ class NextcloudFilesDatabaseManager : NSObject {
             return
         }
 
-        self.databasePath = fileProviderDataDirUrl.appendingPathExtension(self.relativeDatabaseFilePath)
+        self.databasePath = fileProviderDataDirUrl.appendingPathComponent(self.relativeDatabaseFilePath)
 
         // Disable file protection for directory DB
         // https://docs.mongodb.com/realm/sdk/ios/examples/configure-and-open-a-realm/#std-label-ios-open-a-local-realm
-        let folderPath = fileProviderDataDirUrl.appendingPathComponent(self.relativeDatabaseFolderPath).path
+        let dbFolder = fileProviderDataDirUrl.appendingPathComponent(self.relativeDatabaseFolderPath)
+        let dbFolderPath = dbFolder.path
         do {
-            try FileManager.default.setAttributes([FileAttributeKey.protectionKey: FileProtectionType.completeUntilFirstUserAuthentication], ofItemAtPath: folderPath)
-        } catch {
-            NSLog("Could not set permission level for File Provider database folder")
-        }
+            try FileManager.default.createDirectory(at: dbFolder, withIntermediateDirectories: true)
+                try FileManager.default.setAttributes([FileAttributeKey.protectionKey: FileProtectionType.completeUntilFirstUserAuthentication], ofItemAtPath: dbFolderPath)
+            } catch let error {
+                NSLog("Could not set permission level for File Provider database folder, received error: %@", error.localizedDescription)
+            }
 
         let config = Realm.Configuration(
             fileURL: self.databasePath,