]> dgit.raspbian.org Git - nextcloud-desktop.git/commitdiff
Setup the fields in share options view when creating a new form according to capabilities
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Mon, 18 Mar 2024 11:16:29 +0000 (19:16 +0800)
committerClaudio Cambra <claudio.cambra@nextcloud.com>
Wed, 17 Apr 2024 08:39:01 +0000 (16:39 +0800)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareOptionsView.swift
shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareTableViewDataSource.swift

index 5b2e85b6c9c7c8ef02b4102b902f752b19e3d15c..41c9688dd061f73cc8240443997a8a410b525c27 100644 (file)
@@ -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 {
index 548f3aa94d19093b1cf8f6c6f95626e6ab0ef59e..e5f54996d3c92aebfac9fb703d629bf5a711c71f 100644 (file)
@@ -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