File: FileProviderCommunication.swift

package info (click to toggle)
nextcloud-desktop 4.0.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 40,404 kB
  • sloc: cpp: 118,401; objc: 752; python: 606; sh: 395; ansic: 391; ruby: 174; makefile: 44; javascript: 32; xml: 6
file content (32 lines) | stat: -rw-r--r-- 1,093 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//
//  FileProviderCommunication.swift
//  FileProviderUIExt
//
//  SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
//  SPDX-License-Identifier: GPL-2.0-or-later
//

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
}