Skip to content

Commit ea3a34d

Browse files
committed
chore: add extra error handling in getAllContacts
1 parent 9c2b5ba commit ea3a34d

File tree

1 file changed

+22
-8
lines changed

1 file changed

+22
-8
lines changed

contacts.mm

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -490,18 +490,24 @@ CNAuthorizationStatus AuthStatus() {
490490
Napi::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

Comments
 (0)