mirror of
https://github.com/nextcloud/desktop.git
synced 2024-10-23 21:05:44 +03:00
Make share options view capable of creating or updating view upon clicking "save" depending on create status
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
This commit is contained in:
parent
4029458eff
commit
70cb2bd4c1
2 changed files with 75 additions and 3 deletions
|
@ -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")
|
||||
}
|
||||
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue