Add init for ShareCapabilities
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Mon, 18 Mar 2024 09:51:10 +0000 (17:51 +0800)
committerClaudio Cambra <claudio.cambra@nextcloud.com>
Wed, 17 Apr 2024 08:39:00 +0000 (16:39 +0800)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/Extensions/Logger+Extensions.swift
shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareCapabilities.swift

index c05677bbf9bbeccacf570a6fbff4b189331946d4..54e3e599a1e901e045287b485c7a42be92728028 100644 (file)
@@ -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")
index 6adceb0a6aa4502c4f7b7f0815f2f19826451570..62252a66056f440ad72c599d9acb320efb49433f 100644 (file)
@@ -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)
+        }
+    }
 }