private(set) var email = EmailCapabilities(dict: [:])
private(set) var publicLink = PublicLinkCapabilities(dict: [:])
+
+ init() {
+ Logger.shareCapabilities.warning("Providing defaulted share capabilities!")
+ }
+
init(json: Data) {
guard let anyJson = try? JSONSerialization.jsonObject(with: json, options: []),
let jsonDict = anyJson as? [String : Any],
if let publicLinkCapabilities = sharingCapabilities["public"] as? [String : Any] {
publicLink = PublicLinkCapabilities(dict: publicLinkCapabilities)
}
+
+ Logger.shareCapabilities.debug("Parses share capabilities.")
}
}
)
}
}
+ private var shareCapabilities = ShareCapabilities()
func loadItem(url: URL) {
itemServerRelativePath = nil
itemServerRelativePath = serverPath as String
account = convertedAccount
await sharesTableView?.deselectAll(self)
+ shareCapabilities = await fetchCapabilities()
shares = await fetch(
itemIdentifier: itemIdentifier, itemRelativePath: serverPath as String
)
}
}
+ private func fetchCapabilities() async -> ShareCapabilities {
+ return await withCheckedContinuation { continuation in
+ kit?.getCapabilities { account, capabilitiesJson, error in
+ guard error == .success, let capabilitiesJson = capabilitiesJson else {
+ let errorString = "Error getting server capabilities: \(error.errorDescription)"
+ Logger.sharesDataSource.error("\(errorString)")
+ Task { @MainActor in self.uiDelegate?.showError(errorString) }
+ continuation.resume(returning: ShareCapabilities())
+ return
+ }
+ Logger.sharesDataSource.info("Successfully retrieved server share capabilities")
+ continuation.resume(returning: ShareCapabilities(json: capabilitiesJson))
+ }
+ }
+ }
+
// MARK: - NSTableViewDataSource protocol methods
@objc func numberOfRows(in tableView: NSTableView) -> Int {