From 3e118f867e4844101e6bce9d481ef41135fbcdea Mon Sep 17 00:00:00 2001 From: Claudio Cambra Date: Mon, 18 Mar 2024 17:51:10 +0800 Subject: [PATCH] Add init for ShareCapabilities Signed-off-by: Claudio Cambra --- .../Extensions/Logger+Extensions.swift | 1 + .../FileProviderUIExt/ShareCapabilities.swift | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/Extensions/Logger+Extensions.swift b/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/Extensions/Logger+Extensions.swift index c05677bbf..54e3e599a 100644 --- a/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/Extensions/Logger+Extensions.swift +++ b/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/Extensions/Logger+Extensions.swift @@ -11,6 +11,7 @@ extension Logger { private static var subsystem = Bundle.main.bundleIdentifier! static let actionViewController = Logger(subsystem: subsystem, category: "actionViewController") + static let shareCapabilities = Logger(subsystem: subsystem, category: "shareCapabilities") static let shareController = Logger(subsystem: subsystem, category: "shareController") static let sharesDataSource = Logger(subsystem: subsystem, category: "sharesDataSource") static let shareOptionsView = Logger(subsystem: subsystem, category: "shareOptionsView") diff --git a/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareCapabilities.swift b/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareCapabilities.swift index 6adceb0a6..62252a660 100644 --- a/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareCapabilities.swift +++ b/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareCapabilities.swift @@ -68,4 +68,23 @@ struct ShareCapabilities { private(set) var defaultPermissions = 0 private(set) var email = EmailCapabilities(dict: [:]) private(set) var publicLink = PublicLinkCapabilities(dict: [:]) + + init(json: Data) { + guard let anyJson = try? JSONSerialization.jsonObject(with: json, options: []), + let jsonDict = anyJson as? [String : Any], + let sharingCapabilities = jsonDict["files_sharing"] as? [String : Any] + else { + Logger.shareCapabilities.error("Could not parse share capabilities!") + return + } + apiEnabled = sharingCapabilities["api_enabled"] as? Bool ?? false + + if let emailCapabilities = sharingCapabilities["sharebymail"] as? [String : Any] { + email = EmailCapabilities(dict: emailCapabilities) + } + + if let publicLinkCapabilities = sharingCapabilities["public"] as? [String : Any] { + publicLink = PublicLinkCapabilities(dict: publicLinkCapabilities) + } + } } -- 2.30.2