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) {
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)…"