mirror of
https://github.com/nextcloud/desktop.git
synced 2025-10-26 11:17:43 +00:00
Get services using better non-url based method if available (macOS 13.0+)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
This commit is contained in:
parent
798f77fa2b
commit
58dc42a521
@ -33,8 +33,7 @@ void FileProviderXPC::connectToExtensions()
|
||||
{
|
||||
qCInfo(lcFileProviderXPC) << "Starting file provider XPC";
|
||||
const auto managers = FileProviderXPCUtils::getDomainManagers();
|
||||
const auto domainUrls = FileProviderXPCUtils::getDomainUrlsForManagers(managers);
|
||||
const auto fpServices = FileProviderXPCUtils::getFileProviderServicesAtUrls(domainUrls);
|
||||
const auto fpServices = FileProviderXPCUtils::getFileProviderServices(managers);
|
||||
const auto connections = FileProviderXPCUtils::connectToFileProviderServices(fpServices);
|
||||
_clientCommServices = FileProviderXPCUtils::processClientCommunicationConnections(connections);
|
||||
}
|
||||
|
||||
@ -23,6 +23,7 @@ namespace OCC::Mac::FileProviderXPCUtils {
|
||||
|
||||
NSArray<NSFileProviderManager *> *getDomainManagers();
|
||||
NSArray<NSURL *> *getDomainUrlsForManagers(NSArray<NSFileProviderManager *> *managers);
|
||||
NSArray<NSDictionary<NSFileProviderServiceName, NSFileProviderService *> *> *getFileProviderServices(NSArray<NSFileProviderManager *> *managers);
|
||||
NSArray<NSDictionary<NSFileProviderServiceName, NSFileProviderService *> *> *getFileProviderServicesAtUrls(NSArray<NSURL *> *urls);
|
||||
NSArray<NSXPCConnection *> *connectToFileProviderServices(NSArray<NSDictionary<NSFileProviderServiceName, NSFileProviderService *> *> *fpServices);
|
||||
void configureFileProviderConnection(NSXPCConnection *connection);
|
||||
|
||||
@ -60,6 +60,42 @@ NSArray<NSFileProviderManager *> *getDomainManagers()
|
||||
return managers.copy;
|
||||
}
|
||||
|
||||
// TODO: This should work for all service names, not just the communication service!
|
||||
NSArray<NSDictionary<NSFileProviderServiceName, NSFileProviderService *> *> *getFileProviderServices(NSArray<NSFileProviderManager *> *managers)
|
||||
{
|
||||
if (@available(macOS 13.0, *)) {
|
||||
NSMutableArray<NSDictionary<NSFileProviderServiceName, NSFileProviderService *> *> *const fpServices = NSMutableArray.array;
|
||||
dispatch_group_t group = dispatch_group_create();
|
||||
|
||||
for (NSFileProviderManager *const manager in managers) {
|
||||
__block NSFileProviderService *acquiredService;
|
||||
dispatch_group_enter(group);
|
||||
[manager getServiceWithName:nsClientCommunicationServiceName
|
||||
itemIdentifier:NSFileProviderRootContainerItemIdentifier
|
||||
completionHandler:^(NSFileProviderService *const service, NSError *const error) {
|
||||
if (error != nil) {
|
||||
qCWarning(lcFileProviderXPCUtils) << "Error getting file provider service" << error;
|
||||
dispatch_group_leave(group);
|
||||
return;
|
||||
} else if (service == nil) {
|
||||
qCWarning(lcFileProviderXPCUtils) << "Service is nil";
|
||||
dispatch_group_leave(group);
|
||||
return;
|
||||
}
|
||||
|
||||
[service retain];
|
||||
[fpServices addObject:@{acquiredService.name: acquiredService}];
|
||||
dispatch_group_leave(group);
|
||||
}];
|
||||
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
|
||||
}
|
||||
return fpServices.copy;
|
||||
} else {
|
||||
const auto domainUrls = FileProviderXPCUtils::getDomainUrlsForManagers(managers);
|
||||
return FileProviderXPCUtils::getFileProviderServicesAtUrls(domainUrls);
|
||||
}
|
||||
}
|
||||
|
||||
NSArray<NSURL *> *getDomainUrlsForManagers(NSArray<NSFileProviderManager *> *managers)
|
||||
{
|
||||
dispatch_group_t group = dispatch_group_create();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user