|
77 | 77 | return contact; |
78 | 78 | } |
79 | 79 |
|
| 80 | +NSArray* ParsePhoneNumbers(Napi::Array phone_number_data) { |
| 81 | + NSMutableArray *phone_numbers = [[NSMutableArray alloc] init]; |
| 82 | + |
| 83 | + int data_length = static_cast<int>(phone_number_data.Length()); |
| 84 | + for (int i = 0; i < data_length; i++) { |
| 85 | + std::string number_str = phone_number_data.Get(i).As<Napi::String>().Utf8Value(); |
| 86 | + NSString *number = [NSString stringWithUTF8String:number_str.c_str()]; |
| 87 | + CNPhoneNumber *phone_number = [CNPhoneNumber phoneNumberWithStringValue:number]; |
| 88 | + CNLabeledValue *labeled_value = [CNLabeledValue labeledValueWithLabel:@"Home" value:phone_number]; |
| 89 | + [phone_numbers addObject:labeled_value]; |
| 90 | + } |
| 91 | + |
| 92 | + return phone_numbers; |
| 93 | +} |
| 94 | + |
| 95 | +NSArray* ParseEmailAddresses(Napi::Array email_address_data) { |
| 96 | + NSMutableArray *email_addresses = [[NSMutableArray alloc] init]; |
| 97 | + |
| 98 | + int data_length = static_cast<int>(email_address_data.Length()); |
| 99 | + for (int i = 0; i < data_length; i++) { |
| 100 | + std::string email_str = email_address_data.Get(i).As<Napi::String>().Utf8Value(); |
| 101 | + NSString *email = [NSString stringWithUTF8String:email_str.c_str()]; |
| 102 | + CNLabeledValue *labeled_value = [CNLabeledValue labeledValueWithLabel:@"Home" value:email]; |
| 103 | + [email_addresses addObject:labeled_value]; |
| 104 | + } |
| 105 | + |
| 106 | + return email_addresses; |
| 107 | +} |
| 108 | + |
| 109 | +NSDateComponents* ParseBirthday(std::string birth_day) { |
| 110 | + NSString *bday = [NSString stringWithUTF8String:birth_day.c_str()]; |
| 111 | + NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; |
| 112 | + [formatter setDateFormat:@"yyyy-MM-dd"]; |
| 113 | + |
| 114 | + NSDate *bday_date = [formatter dateFromString:bday]; |
| 115 | + |
| 116 | + NSCalendar *cal = [NSCalendar currentCalendar]; |
| 117 | + unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit; |
| 118 | + NSDateComponents *birthday_components = [cal components:unitFlags fromDate:bday_date]; |
| 119 | + |
| 120 | + return birthday_components; |
| 121 | +} |
| 122 | + |
80 | 123 | CNAuthorizationStatus AuthStatus() { |
81 | 124 | CNEntityType entityType = CNEntityTypeContacts; |
82 | 125 | return [CNContactStore authorizationStatusForEntityType:entityType]; |
@@ -172,36 +215,40 @@ CNAuthorizationStatus AuthStatus() { |
172 | 215 | if (AuthStatus() != CNAuthorizationStatusAuthorized) |
173 | 216 | return Napi::Boolean::New(env, false); |
174 | 217 |
|
175 | | - // Parse Contact object data |
176 | 218 | CNMutableContact *contact = [[CNMutableContact alloc] init]; |
177 | 219 | Napi::Object contact_data = info[0].As<Napi::Object>(); |
178 | | - if(contact_data.Has("firstName")) { |
| 220 | + |
| 221 | + if (contact_data.Has("firstName")) { |
179 | 222 | std::string first_name = contact_data.Get("firstName").As<Napi::String>().Utf8Value(); |
180 | 223 | [contact setGivenName:[NSString stringWithUTF8String:first_name.c_str()]]; |
181 | 224 | } |
182 | 225 |
|
183 | | - if(contact_data.Has("lastName")) { |
| 226 | + if (contact_data.Has("lastName")) { |
184 | 227 | std::string last_name = contact_data.Get("lastName").As<Napi::String>().Utf8Value(); |
185 | 228 | [contact setFamilyName:[NSString stringWithUTF8String:last_name.c_str()]]; |
186 | 229 | } |
187 | 230 |
|
188 | | - if(contact_data.Has("nickname")) { |
| 231 | + if (contact_data.Has("nickname")) { |
189 | 232 | std::string nick_name = contact_data.Get("nickname").As<Napi::String>().Utf8Value(); |
190 | 233 | [contact setFamilyName:[NSString stringWithUTF8String:nick_name.c_str()]]; |
191 | 234 | } |
192 | 235 |
|
193 | | - if(contact_data.Has("birthday")) { |
| 236 | + if (contact_data.Has("birthday")) { |
194 | 237 | std::string birth_day = contact_data.Get("birthday").As<Napi::String>().Utf8Value(); |
195 | | - NSString *bday = [NSString stringWithUTF8String:birth_day.c_str()]; |
196 | | - NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; |
197 | | - [formatter setDateFormat:@"yyyy-MM-dd"]; |
| 238 | + NSDateComponents *birthday_components = ParseBirthday(birth_day); |
| 239 | + [contact setBirthday:birthday_components]; |
| 240 | + } |
198 | 241 |
|
199 | | - NSDate *bday_date = [formatter dateFromString:bday]; |
| 242 | + if (contact_data.Has("phoneNumbers")) { |
| 243 | + Napi::Array phone_number_data = contact_data.Get("phoneNumbers").As<Napi::Array>(); |
| 244 | + NSArray *phone_numbers = ParsePhoneNumbers(phone_number_data); |
| 245 | + [contact setPhoneNumbers:[NSArray arrayWithArray:phone_numbers]]; |
| 246 | + } |
200 | 247 |
|
201 | | - NSCalendar *cal = [NSCalendar currentCalendar]; |
202 | | - unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit; |
203 | | - NSDateComponents *birthday_components = [cal components:unitFlags fromDate:bday_date]; |
204 | | - [contact setBirthday:birthday_components]; |
| 248 | + if (contact_data.Has("emailAddresses")) { |
| 249 | + Napi::Array email_address_data = contact_data.Get("emailAddresses").As<Napi::Array>(); |
| 250 | + NSArray *email_addresses = ParseEmailAddresses(email_address_data); |
| 251 | + [contact setEmailAddresses:[NSArray arrayWithArray:email_addresses]]; |
205 | 252 | } |
206 | 253 |
|
207 | 254 | CNSaveRequest *request = [[CNSaveRequest alloc] init]; |
|
0 commit comments