From 65db197a6281992b80765f2ea99fc4740fbd9de1 Mon Sep 17 00:00:00 2001 From: Claudio Cambra Date: Tue, 19 Mar 2024 18:57:52 +0800 Subject: [PATCH] Check if the given item is shareable before fetching shares Signed-off-by: Claudio Cambra --- .../ShareTableViewDataSource.swift | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareTableViewDataSource.swift b/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareTableViewDataSource.swift index 7c03ef60f3..cab0f43a42 100644 --- a/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareTableViewDataSource.swift +++ b/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareTableViewDataSource.swift @@ -25,6 +25,7 @@ class ShareTableViewDataSource: NSObject, NSTableViewDataSource, NSTableViewDele } } var shareCapabilities = ShareCapabilities() + var itemMetadata: NKFile? private(set) var kit: NextcloudKit? private(set) var itemURL: URL? @@ -79,7 +80,8 @@ class ShareTableViewDataSource: NSObject, NSTableViewDataSource, NSTableViewDele Logger.sharesDataSource.error("Failed to get details from FileProviderExt") return } - itemServerRelativePath = serverPath as String + let serverPathString = serverPath as String + itemServerRelativePath = serverPathString account = convertedAccount await sharesTableView?.deselectAll(self) shareCapabilities = await fetchCapabilities() @@ -89,8 +91,15 @@ class ShareTableViewDataSource: NSObject, NSTableViewDataSource, NSTableViewDele uiDelegate?.showError(errorMsg) return } + itemMetadata = await fetchItemMetadata(itemRelativePath: serverPathString) + guard itemMetadata?.permissions.contains("S") == true else { + let errorMsg = "This file cannot be shared." + Logger.sharesDataSource.warning("\(errorMsg)") + uiDelegate?.showError(errorMsg) + return + } shares = await fetch( - itemIdentifier: itemIdentifier, itemRelativePath: serverPath as String + itemIdentifier: itemIdentifier, itemRelativePath: serverPathString ) } catch let error { Logger.sharesDataSource.error("Could not reload data: \(error, privacy: .public)")