mirror of
https://github.com/nextcloud/desktop.git
synced 2024-11-28 19:58:56 +03:00
32 lines
1,014 B
Swift
32 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
|
||
|
}
|