nextcloud-desktop/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/FileProviderCommunication.swift
Claudio Cambra 9ccbf3f2c5 Move service connection fetcher method into a utils file
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
2024-09-12 10:15:58 +02:00

31 lines
1,014 B
Swift

//
// FileProviderCommunication.swift
// FileProviderUIExt
//
// Created by Claudio Cambra on 30/7/24.
//
import FileProvider
enum FileProviderCommunicationError: Error {
case serviceNotFound
case remoteProxyObjectInvalid
}
func serviceConnection(
url: URL, interruptionHandler: @escaping () -> Void
) async throws -> FPUIExtensionService {
let services = try await FileManager().fileProviderServicesForItem(at: url)
guard let service = services[fpUiExtensionServiceName] else {
throw FileProviderCommunicationError.serviceNotFound
}
let connection: NSXPCConnection
connection = try await service.fileProviderConnection()
connection.remoteObjectInterface = NSXPCInterface(with: FPUIExtensionService.self)
connection.interruptionHandler = interruptionHandler
connection.resume()
guard let proxy = connection.remoteObjectProxy as? FPUIExtensionService else {
throw FileProviderCommunicationError.remoteProxyObjectInvalid
}
return proxy
}