From 66afef1784dabf25d2bbc1938bbc579f8b242be4 Mon Sep 17 00:00:00 2001 From: Claudio Cambra Date: Mon, 18 Mar 2024 19:16:29 +0800 Subject: [PATCH] Setup the fields in share options view when creating a new form according to capabilities Signed-off-by: Claudio Cambra --- .../FileProviderUIExt/ShareOptionsView.swift | 43 ++++++++++++++++++- .../ShareTableViewDataSource.swift | 2 +- 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareOptionsView.swift b/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareOptionsView.swift index 5b2e85b6c..41c9688dd 100644 --- a/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareOptionsView.swift +++ b/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareOptionsView.swift @@ -68,7 +68,7 @@ class ShareOptionsView: NSView { cancellable = nil controller = nil reset() - setAllFields(enabled: true) + setupCreateForm() } } private var cancellable: AnyCancellable? @@ -120,6 +120,45 @@ class ShareOptionsView: NSView { noteTextField.stringValue = "" } + private func setupCreateForm() { + guard createMode else { return } + + setAllFields(enabled: true) + + let type = pickedShareType() + shareRecipientTextField.isHidden = type != .publicLink + + if let caps = dataSource?.shareCapabilities { + uploadEditPermissionCheckbox.state = + caps.defaultPermissions & NKShare.PermissionValues.updateShare.rawValue != 0 + ? .on : .off + + switch type { + case .publicLink: + passwordProtectCheckbox.isHidden = false + passwordProtectCheckbox.state = caps.publicLink.enforcePassword ? .on : .off + passwordProtectCheckbox.isEnabled = !caps.publicLink.enforceExpireDate + expirationDateCheckbox.state = caps.publicLink.enforceExpireDate ? .on : .off + expirationDateCheckbox.isEnabled = !caps.publicLink.enforceExpireDate + expirationDatePicker.dateValue = Date( + timeIntervalSinceNow: + TimeInterval(caps.publicLink.expireDateDays * 24 * 60 * 60) + ) + if caps.publicLink.enforceExpireDate { + expirationDatePicker.maxDate = expirationDatePicker.dateValue + } + case .email: + passwordProtectCheckbox.isHidden = !caps.email.passwordEnabled + passwordProtectCheckbox.state = caps.email.passwordEnforced ? .on : .off + default: + break + } + } + + passwordSecureField.isHidden = passwordProtectCheckbox.state == .off + expirationDatePicker.isHidden = expirationDateCheckbox.state == .off + } + func setAllFields(enabled: Bool) { shareTypePicker.isEnabled = enabled shareRecipientTextField.isEnabled = enabled @@ -136,7 +175,7 @@ class ShareOptionsView: NSView { deleteButton.isEnabled = enabled } - func pickedShareType() -> NKShare.ShareType { + private func pickedShareType() -> NKShare.ShareType { let selectedShareTypeItem = shareTypePicker.selectedItem var selectedShareType = NKShare.ShareType.publicLink if selectedShareTypeItem == publicLinkShareMenuItem { diff --git a/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareTableViewDataSource.swift b/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareTableViewDataSource.swift index 548f3aa94..e5f54996d 100644 --- a/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareTableViewDataSource.swift +++ b/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareTableViewDataSource.swift @@ -24,6 +24,7 @@ class ShareTableViewDataSource: NSObject, NSTableViewDataSource, NSTableViewDele sharesTableView?.reloadData() } } + var shareCapabilities = ShareCapabilities() private(set) var kit: NextcloudKit? private(set) var itemURL: URL? @@ -43,7 +44,6 @@ class ShareTableViewDataSource: NSObject, NSTableViewDataSource, NSTableViewDele ) } } - private var shareCapabilities = ShareCapabilities() func loadItem(url: URL) { itemServerRelativePath = nil -- 2.39.5