Process target item on init of lock view controller
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Tue, 30 Jul 2024 10:51:48 +0000 (18:51 +0800)
committerMatthieu Gallien <matthieu_gallien@yahoo.fr>
Thu, 12 Sep 2024 08:15:58 +0000 (10:15 +0200)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/Locking/LockViewController.swift

index 369ac0256212164d9e0d6c3ce3017f51b6459eec..4116ff7bc7b38fe2678fb505c4a0dbeba0379139 100644 (file)
@@ -29,6 +29,16 @@ class LockViewController: NSViewController {
         self.itemIdentifiers = itemIdentifiers
         self.locking = locking
         super.init(nibName: nil, bundle: nil)
+
+        guard let firstItem = itemIdentifiers.first else {
+            Logger.shareViewController.error("called without items")
+            closeAction(self)
+            return
+        }
+
+        Task {
+            await processItemIdentifier(firstItem)
+        }
     }
 
     required init?(coder: NSCoder) {
@@ -44,6 +54,27 @@ class LockViewController: NSViewController {
         descriptionLabel.stringValue = "Error: \(error)"
     }
 
+    private func processItemIdentifier(_ itemIdentifier: NSFileProviderItemIdentifier) async {
+        guard let manager = NSFileProviderManager(for: actionViewController.domain) else {
+            fatalError("NSFileProviderManager isn't expected to fail")
+        }
+
+        do {
+            let itemUrl = try await manager.getUserVisibleURL(for: itemIdentifier)
+            guard itemUrl.startAccessingSecurityScopedResource() else {
+                Logger.lockViewController.error("Could not access scoped resource for item url!")
+                return
+            }
+            await updateFileDetailsDisplay(itemUrl: itemUrl)
+            itemUrl.stopAccessingSecurityScopedResource()
+        } catch let error {
+            let errorString = "Error processing item: \(error)"
+            Logger.lockViewController.error("\(errorString, privacy: .public)")
+            fileNameLabel.stringValue = "Could not lock unknown item…"
+            descriptionLabel.stringValue = errorString
+        }
+    }
+
     private func updateFileDetailsDisplay(itemUrl: URL) async {
         let lockAction = locking ? "Locking" : "Unlocking"
         fileNameLabel.stringValue = "\(lockAction) file \(itemUrl.lastPathComponent)…"