From: Claudio Cambra Date: Wed, 6 Mar 2024 12:09:54 +0000 (+0800) Subject: Make share options view capable of creating or updating view upon clicking "save... X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~12^2~7^2~46^2~55 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=d87de055569c1c36658c25b587888998e1e83e58;p=nextcloud-desktop.git Make share options view capable of creating or updating view upon clicking "save" depending on create status Signed-off-by: Claudio Cambra --- diff --git a/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/Extensions/Logger+Extensions.swift b/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/Extensions/Logger+Extensions.swift index c668e3a8d..c05677bbf 100644 --- a/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/Extensions/Logger+Extensions.swift +++ b/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/Extensions/Logger+Extensions.swift @@ -13,6 +13,7 @@ extension Logger { static let actionViewController = Logger(subsystem: subsystem, category: "actionViewController") static let shareController = Logger(subsystem: subsystem, category: "shareController") static let sharesDataSource = Logger(subsystem: subsystem, category: "sharesDataSource") + static let shareOptionsView = Logger(subsystem: subsystem, category: "shareOptionsView") static let shareViewController = Logger(subsystem: subsystem, category: "shareViewController") } diff --git a/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareOptionsView.swift b/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareOptionsView.swift index 94018ee51..27920509e 100644 --- a/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareOptionsView.swift +++ b/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareOptionsView.swift @@ -8,6 +8,7 @@ import AppKit import Combine import NextcloudKit +import OSLog class ShareOptionsView: NSView { @IBOutlet private weak var labelTextField: NSTextField! @@ -112,8 +113,6 @@ class ShareOptionsView: NSView { @IBAction func save(_ sender: Any) { Task { @MainActor in - guard let controller = controller else { return } - let share = controller.share let password = passwordProtectCheckbox.state == .on ? passwordSecureField.stringValue : "" @@ -126,6 +125,75 @@ class ShareOptionsView: NSView { let label = labelTextField.stringValue let hideDownload = hideDownloadCheckbox.state == .on let uploadAndEdit = uploadEditPermissionCheckbox.state == .on + + guard !createMode else { + Logger.shareOptionsView.info("Creating new share!") + + guard let dataSource = dataSource, + let kit = dataSource.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( + "path: \(self.dataSource?.itemServerRelativePath ?? "")" + ) + return + } + + let selectedShareTypeItem = shareTypePicker.selectedItem + var selectedShareType = NKShare.ShareType.publicLink + if selectedShareTypeItem == publicLinkShareMenuItem { + selectedShareType = .publicLink + } else if selectedShareTypeItem == userShareMenuItem { + selectedShareType = .user + } else if selectedShareTypeItem == groupShareMenuItem { + selectedShareType = .group + } else if selectedShareTypeItem == emailShareMenuItem { + selectedShareType = .email + } else if selectedShareTypeItem == federatedCloudShareMenuItem { + selectedShareType = .federatedCloud + } else if selectedShareTypeItem == circleShare { + selectedShareType = .circle + } else if selectedShareTypeItem == talkConversationShare { + selectedShareType = .talkConversation + } + + var permissions = NKShare.PermissionValues.all.rawValue + permissions = uploadAndEdit + ? permissions | NKShare.PermissionValues.updateShare.rawValue + : permissions & ~NKShare.PermissionValues.updateShare.rawValue + + setAllFields(enabled: false) + deleteButton.isEnabled = false + saveButton.isEnabled = false + let error = await ShareController.create( + kit: kit, + shareType: selectedShareType, + itemServerRelativePath: itemServerRelativePath, + shareWith: "", + password: password, + expireDate: expireDate, + permissions: permissions, + note: note, + label: label, + hideDownload: hideDownload + ) + if let error = error, error != .success { + dataSource.uiDelegate?.showError("Error creating: \(error.errorDescription)") + } + await dataSource.reload() + return + } + + Logger.shareOptionsView.info("Editing existing share!") + + guard let controller = controller else { + Logger.shareOptionsView.error("No valid share controller, cannot edit share.") + return + } + let share = controller.share let permissions = uploadAndEdit ? share.permissions | NKShare.PermissionValues.updateShare.rawValue : share.permissions & ~NKShare.PermissionValues.updateShare.rawValue @@ -143,8 +211,11 @@ class ShareOptionsView: NSView { ) if let error = error, error != .success { dataSource?.uiDelegate?.showError("Error updating share: \(error.errorDescription)") + setAllFields(enabled: true) + } else { + dataSource?.uiDelegate?.hideOptions() + await dataSource?.reload() } - await dataSource?.reload() } }