@@ -490,18 +490,24 @@ CNAuthorizationStatus AuthStatus() {
490490Napi::Array GetAllContacts (const Napi::CallbackInfo &info) {
491491 Napi::Env env = info.Env ();
492492
493- Napi::Array contacts = Napi::Array::New (env);
493+ if (AuthStatus () != CNAuthorizationStatusAuthorized)
494+ return Napi::Array::New (env);
495+
494496 CNContactStore *addressBook = [[CNContactStore alloc ] init ];
495497 Napi::Array extra_keys = info[0 ].As <Napi::Array>();
496498
499+ NSError *error = nil ;
500+ NSArray *containers = [addressBook containersMatchingPredicate: nil
501+ error: &error];
502+ if (error != nil ) {
503+ std::string err_msg = std::string ([error.localizedDescription UTF8String ]);
504+ Napi::Error::New (env, " Failed to fetch address book container: " + err_msg)
505+ .ThrowAsJavaScriptException ();
506+ return Napi::Array::New (env);
507+ }
508+
497509 // This is a set so that contacts in multiple containers aren't duplicated.
498510 NSMutableSet *unordered_contacts = [[NSMutableSet alloc ] init ];
499-
500- if (AuthStatus () != CNAuthorizationStatusAuthorized)
501- return contacts;
502-
503- NSArray *containers = [addressBook containersMatchingPredicate: nil error: nil ];
504-
505511 int num_containers = [containers count ];
506512 for (int idx = 0 ; idx < num_containers; idx++) {
507513 CNContainer *container = [containers objectAtIndex: idx];
@@ -510,11 +516,19 @@ CNAuthorizationStatus AuthStatus() {
510516 NSArray *container_contacts =
511517 [addressBook unifiedContactsMatchingPredicate: predicate
512518 keysToFetch: GetContactKeys (extra_keys)
513- error: nil ];
519+ error: &error];
520+ if (error != nil ) {
521+ std::string err_msg =
522+ std::string ([error.localizedDescription UTF8String ]);
523+ Napi::Error::New (env, " Failed to fetch contacts: " + err_msg)
524+ .ThrowAsJavaScriptException ();
525+ return Napi::Array::New (env);
526+ }
514527
515528 [unordered_contacts addObjectsFromArray: container_contacts];
516529 }
517530
531+ Napi::Array contacts = Napi::Array::New (env);
518532 NSArray *cncontacts = [unordered_contacts allObjects ];
519533 int num_contacts = [cncontacts count ];
520534 for (int i = 0 ; i < num_contacts; i++) {
0 commit comments