From 8039fcd951662fe1fdb7033dc1db5fa313dd0eee 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 c05677bbf9..54e3e599a1 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 6adceb0a6a..62252a6605 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) + } + } }