From db20e44850cf13288f8dcc4f658db460df435101 Mon Sep 17 00:00:00 2001 From: Claudio Cambra Date: Wed, 3 Apr 2024 20:46:01 +0800 Subject: [PATCH] Use suggestions window controller in share options view Signed-off-by: Claudio Cambra --- .../FileProviderUIExt/ShareOptionsView.swift | 24 ++++++++++++++++--- .../ShareViewController.swift | 4 +++- .../ShareeSuggestionsDataSource.swift | 3 +-- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareOptionsView.swift b/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareOptionsView.swift index 1a9d51fa8..893d6bb3c 100644 --- a/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareOptionsView.swift +++ b/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareOptionsView.swift @@ -35,6 +35,22 @@ class ShareOptionsView: NSView { @IBOutlet private weak var circleShare: NSMenuItem! @IBOutlet private weak var talkConversationShare: NSMenuItem! + var kit: NextcloudKit? { + didSet { + Logger.shareOptionsView.info("Setting up the kit.") + guard let kit = kit else { + Logger.shareOptionsView.error("Could not configure suggestions data source.") + return + } + suggestionsWindowController.dataSource = ShareeSuggestionsDataSource(kit: kit) + suggestionsWindowController.parentTextField = shareRecipientTextField + + suggestionsTextFieldDelegate.suggestionsWindowController = suggestionsWindowController + shareRecipientTextField.delegate = suggestionsTextFieldDelegate + + suggestionsWindowController.begin(for: shareRecipientTextField) + } + } var dataSource: ShareTableViewDataSource? var controller: ShareController? { didSet { @@ -72,6 +88,8 @@ class ShareOptionsView: NSView { } } private var cancellable: AnyCancellable? + private var suggestionsWindowController = SuggestionsWindowController() + private var suggestionsTextFieldDelegate = SuggestionsTextFieldDelegate() private func update() { guard let share = controller?.share else { @@ -161,7 +179,7 @@ class ShareOptionsView: NSView { expirationDatePicker.isHidden = expirationDateCheckbox.state == .off } - func setAllFields(enabled: Bool) { + private func setAllFields(enabled: Bool) { shareTypePicker.isEnabled = enabled shareRecipientTextField.isEnabled = enabled labelTextField.isEnabled = enabled @@ -235,12 +253,12 @@ class ShareOptionsView: NSView { Logger.shareOptionsView.info("Creating new share!") guard let dataSource = dataSource, - let kit = dataSource.kit, + let kit = kit, let itemServerRelativePath = dataSource.itemServerRelativePath else { Logger.shareOptionsView.error("Cannot create new share due to missing data.") Logger.shareOptionsView.error("dataSource: \(self.dataSource)") - Logger.shareOptionsView.error("kit: \(self.dataSource?.kit)") + Logger.shareOptionsView.error("kit: \(self.kit)") Logger.shareOptionsView.error( "path: \(self.dataSource?.itemServerRelativePath ?? "")" ) diff --git a/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareViewController.swift b/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareViewController.swift index d104e3360..329332831 100644 --- a/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareViewController.swift +++ b/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareViewController.swift @@ -111,6 +111,8 @@ class ShareViewController: NSViewController, ShareViewDataSourceUIDelegate { } @IBAction func createShare(_ sender: Any) { + guard let kit = shareDataSource.kit else { return } + optionsView.kit = kit optionsView.createMode = true tableView.deselectAll(self) if !splitView.arrangedSubviews.contains(optionsView) { @@ -137,11 +139,11 @@ class ShareViewController: NSViewController, ShareViewDataSourceUIDelegate { } splitView.removeArrangedSubview(optionsView) optionsView.isHidden = true - } func showOptions(share: NKShare) { guard let kit = shareDataSource.kit else { return } + optionsView.kit = kit optionsView.controller = ShareController(share: share, kit: kit) if !splitView.arrangedSubviews.contains(optionsView) { splitView.addArrangedSubview(optionsView) diff --git a/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareeSuggestionsDataSource.swift b/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareeSuggestionsDataSource.swift index a8b247e9c..66c637ab4 100644 --- a/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareeSuggestionsDataSource.swift +++ b/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareeSuggestionsDataSource.swift @@ -8,11 +8,10 @@ import Foundation import NextcloudKit import OSLog -import SuggestionsTextFieldKit class ShareeSuggestionsDataSource: SuggestionsDataSource { let kit: NextcloudKit - var suggestions: [SuggestionsTextFieldKit.Suggestion] = [] + var suggestions: [Suggestion] = [] var inputString: String = "" { didSet { Task { await updateSuggestions() } } }