6#include <EventKit/EventKit.h>
8@interface QDarwinCalendarPermissionHandler ()
9@property (nonatomic, retain) EKEventStore *eventStore;
12@implementation QDarwinCalendarPermissionHandler
13- (Qt::PermissionStatus)checkPermission:(QPermission)permission
15 auto accessMode = permission.value<QCalendarPermission>()->accessMode();
16 auto status = [EKEventStore authorizationStatusForEntityType:EKEntityTypeEvent];
18 case EKAuthorizationStatusNotDetermined:
19 return Qt::PermissionStatus::Undetermined;
20 case EKAuthorizationStatusRestricted:
21 case EKAuthorizationStatusDenied:
22 return Qt::PermissionStatus::Denied;
23 case EKAuthorizationStatusFullAccess:
24 return Qt::PermissionStatus::Granted;
25 case EKAuthorizationStatusWriteOnly:
26 return accessMode == QCalendarPermission::WriteOnly
27 ? Qt::PermissionStatus::Granted
28 : Qt::PermissionStatus::Denied;
31 qCWarning(lcPermissions) <<
"Unknown permission status" << status <<
"detected in" << self;
32 return Qt::PermissionStatus::Denied;
35- (
QStringList)usageDescriptionsFor:(QPermission)permission
38 return {
"NSCalendarsUsageDescription" };
41- (
void)requestPermission:(QPermission)permission withCallback:(PermissionCallback)callback
43 if (!self.eventStore) {
47 self.eventStore = [[EKEventStore
new] autorelease];
50 auto accessMode = permission.value<QCalendarPermission>()->accessMode();
51 auto completionHandler = ^(BOOL granted, NSError *
_Nullable error) {
57 callback([self checkPermission:permission]);
60 if (accessMode == QCalendarPermission::WriteOnly)
61 [self.eventStore requestWriteOnlyAccessToEventsWithCompletion:completionHandler];
63 [self.eventStore requestFullAccessToEventsWithCompletion:completionHandler];
68#include "moc_qdarwinpermissionplugin_p_p.cpp"
QList< QString > QStringList
Constructs a string list that contains the given string, str.