1 /*
2 * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "contacts_build.h"
17
18 #include "result_convert.h"
19
20 namespace OHOS {
21 namespace ContactsApi {
ContactsBuild(void)22 ContactsBuild::ContactsBuild(void)
23 {
24 }
25
~ContactsBuild()26 ContactsBuild::~ContactsBuild()
27 {
28 }
29
GetContactDataByObject(napi_env env,napi_value object,Contacts & contact)30 void ContactsBuild::GetContactDataByObject(napi_env env, napi_value object, Contacts &contact)
31 {
32 contact.id = GetIntValueByKey(env, object, "id");
33 contact.key = GetStringValueByKey(env, object, "key");
34 contact.emails = GetEmails(env, object);
35 contact.events = GetEvent(env, object);
36 contact.groups = GetGroup(env, object);
37 contact.imAddresses = GetImAddress(env, object);
38 contact.phoneNumbers = GetPhoneNumbers(env, object);
39 contact.portrait = GetUri(env, object);
40 contact.relations = GetRelation(env, object);
41 contact.sipAddresses = GetSipAddress(env, object);
42 contact.websites = GetWebsite(env, object);
43 contact.name = GetName(env, object);
44 contact.nickName = GetNickName(env, object);
45 contact.note = GetNote(env, object);
46 contact.organization = GetOrganization(env, object);
47 contact.postalAddresses = GetPostalAddress(env, object);
48 }
49
GetContactData(napi_env env,napi_value object,std::vector<DataShare::DataShareValuesBucket> & valueContact,std::vector<DataShare::DataShareValuesBucket> & valueContactData)50 void ContactsBuild::GetContactData(napi_env env, napi_value object,
51 std::vector<DataShare::DataShareValuesBucket> &valueContact,
52 std::vector<DataShare::DataShareValuesBucket> &valueContactData)
53 {
54 Contacts contact;
55 GetContactDataByObject(env, object, contact);
56 BuildValueContact(contact, valueContact);
57 BuildValueContactData(contact, valueContactData);
58 }
59
BuildValueContact(Contacts & contact,std::vector<DataShare::DataShareValuesBucket> & valueContact)60 void ContactsBuild::BuildValueContact(Contacts &contact, std::vector<DataShare::DataShareValuesBucket> &valueContact)
61 {
62 DataShare::DataShareValuesBucket valuesBucketContact;
63 if (!contact.name.fullName.empty() || contact.name.fullName != "") {
64 valuesBucketContact.Put("display_name", contact.name.fullName);
65 }
66 if (!contact.organization.name.empty() || contact.organization.name != "") {
67 valuesBucketContact.Put("company", contact.organization.name);
68 }
69 if (!contact.organization.title.empty() || contact.organization.title != "") {
70 valuesBucketContact.Put("position", contact.organization.title);
71 }
72 valueContact.push_back(valuesBucketContact);
73 }
74
BuildValueContactData(Contacts & contact,std::vector<DataShare::DataShareValuesBucket> & valueContactData)75 void ContactsBuild::BuildValueContactData(Contacts &contact,
76 std::vector<DataShare::DataShareValuesBucket> &valueContactData)
77 {
78 GetValuesBucketEmail(contact, valueContactData);
79 GetValuesBucketEvent(contact, valueContactData);
80 GetValuesBucketGroup(contact, valueContactData);
81 GetValuesBucketImAddress(contact, valueContactData);
82 GetValuesBucketPortrait(contact, valueContactData);
83 GetValuesBucketPhoneNumber(contact, valueContactData);
84 GetValuesBucketPostalAddress(contact, valueContactData);
85 GetValuesBucketRelation(contact, valueContactData);
86 GetValuesBucketSipAddress(contact, valueContactData);
87 GetValuesBucketWebsite(contact, valueContactData);
88 GetValuesBucketName(contact, valueContactData);
89 GetValuesBucketNickName(contact, valueContactData);
90 GetValuesBucketNote(contact, valueContactData);
91 GetValuesBucketOrganization(contact, valueContactData);
92 }
93
BuildValueContactDataByType(Contacts & contact,int typeId,std::vector<DataShare::DataShareValuesBucket> & valueContactData)94 void ContactsBuild::BuildValueContactDataByType(
95 Contacts &contact, int typeId, std::vector<DataShare::DataShareValuesBucket> &valueContactData)
96 {
97 switch (typeId) {
98 case EMAIL:
99 GetValuesBucketEmail(contact, valueContactData);
100 break;
101 case IM:
102 GetValuesBucketImAddress(contact, valueContactData);
103 break;
104 case NICKNAME:
105 GetValuesBucketNickName(contact, valueContactData);
106 break;
107 case ORGANIZATION:
108 GetValuesBucketOrganization(contact, valueContactData);
109 break;
110 case PHONE:
111 GetValuesBucketPhoneNumber(contact, valueContactData);
112 break;
113 case NAME:
114 GetValuesBucketName(contact, valueContactData);
115 break;
116 case POSTAL_ADDRESS:
117 GetValuesBucketPostalAddress(contact, valueContactData);
118 break;
119 default:
120 TypeSwitchSplit(typeId, contact, valueContactData);
121 break;
122 }
123 }
124
TypeSwitchSplit(int typeId,Contacts & contact,std::vector<DataShare::DataShareValuesBucket> & valueContactData)125 void ContactsBuild::TypeSwitchSplit(
126 int typeId, Contacts &contact, std::vector<DataShare::DataShareValuesBucket> &valueContactData)
127 {
128 switch (typeId) {
129 case PHOTO:
130 GetValuesBucketPortrait(contact, valueContactData);
131 break;
132 case GROUP_MEMBERSHIP:
133 GetValuesBucketGroup(contact, valueContactData);
134 break;
135 case NOTE:
136 GetValuesBucketNote(contact, valueContactData);
137 break;
138 case CONTACT_EVENT:
139 GetValuesBucketEvent(contact, valueContactData);
140 break;
141 case WEBSITE:
142 GetValuesBucketWebsite(contact, valueContactData);
143 break;
144 case RELATION:
145 GetValuesBucketRelation(contact, valueContactData);
146 break;
147 case CONTACT_MISC:
148 HILOG_INFO("TypeSwitchSplit is CONTACT_MISC ");
149 break;
150 case HICALL_DEVICE:
151 HILOG_INFO("TypeSwitchSplit is HICALL_DEVICE ");
152 break;
153 case CAMCARD:
154 case SIP_ADDRESS:
155 GetValuesBucketSipAddress(contact, valueContactData);
156 break;
157 default:
158 HILOG_ERROR("TypeSwitchSplit type is error ");
159 break;
160 }
161 }
162
163 /**
164 * @brief Establish ValuesBucket condition in EMAIL case
165 *
166 * @param contact Conditions for establish ValuesBucket operation
167 * @param valueContactData Conditions for establish ValuesBucket operation
168 */
GetValuesBucketEmail(Contacts & contact,std::vector<DataShare::DataShareValuesBucket> & valueContactData)169 void ContactsBuild::GetValuesBucketEmail(Contacts &contact,
170 std::vector<DataShare::DataShareValuesBucket> &valueContactData)
171 {
172 unsigned int emailsSize = contact.emails.size();
173 for (unsigned int i = 0; i < emailsSize; i++) {
174 DataShare::DataShareValuesBucket valuesBucketEmail;
175 valuesBucketEmail.Put("detail_info", contact.emails[i].email);
176 if (contact.emails[i].labelId != ERROR) {
177 valuesBucketEmail.Put("extend7", std::to_string(contact.emails[i].labelId));
178 }
179 if (!contact.emails[i].labelName.empty()) {
180 valuesBucketEmail.Put("custom_data", contact.emails[i].labelName);
181 valuesBucketEmail.Put("extend7", std::to_string(Email::CUSTOM_LABEL));
182 }
183 if (!contact.emails[i].displayName.empty()) {
184 valuesBucketEmail.Put("alias_detail_info", contact.emails[i].displayName);
185 }
186 valuesBucketEmail.Put("content_type", "email");
187 valueContactData.push_back(valuesBucketEmail);
188 }
189 }
190
191 /**
192 * @brief Establish ValuesBucket condition in CONTACT_EVENT case
193 *
194 * @param contact Conditions for establish ValuesBucket operation
195 * @param valueContactData Conditions for establish ValuesBucket operation
196 */
GetValuesBucketEvent(Contacts & contact,std::vector<DataShare::DataShareValuesBucket> & valueContactData)197 void ContactsBuild::GetValuesBucketEvent(Contacts &contact,
198 std::vector<DataShare::DataShareValuesBucket> &valueContactData)
199 {
200 unsigned int eventsSize = contact.events.size();
201 for (unsigned int i = 0; i < eventsSize; i++) {
202 DataShare::DataShareValuesBucket valuesBucketEvent;
203 valuesBucketEvent.Put("detail_info", contact.events[i].eventDate);
204 if (contact.events[i].labelId != ERROR) {
205 valuesBucketEvent.Put("extend7", std::to_string(contact.events[i].labelId));
206 }
207 if (!contact.events[i].labelName.empty()) {
208 valuesBucketEvent.Put("custom_data", contact.events[i].labelName);
209 valuesBucketEvent.Put("extend7", std::to_string(Event::CUSTOM_LABEL));
210 }
211 valuesBucketEvent.Put("content_type", "contact_event");
212 valueContactData.push_back(valuesBucketEvent);
213 }
214 }
215
216 /**
217 * @brief Establish ValuesBucket condition in GROUP_MEMBERSHIP case
218 *
219 * @param contact Conditions for establish ValuesBucket operation
220 * @param valueContactData Conditions for establish ValuesBucket operation
221 */
GetValuesBucketGroup(Contacts & contact,std::vector<DataShare::DataShareValuesBucket> & valueContactData)222 void ContactsBuild::GetValuesBucketGroup(Contacts &contact,
223 std::vector<DataShare::DataShareValuesBucket> &valueContactData)
224 {
225 unsigned int groupsSize = contact.groups.size();
226 for (unsigned int i = 0; i < groupsSize; i++) {
227 DataShare::DataShareValuesBucket valuesBucketGroup;
228 if (contact.groups[i].groupId != ERROR) {
229 valuesBucketGroup.Put("detail_info", std::to_string(contact.groups[i].groupId));
230 }
231 valuesBucketGroup.Put("alias_detail_info", contact.groups[i].title);
232 valuesBucketGroup.Put("content_type", "group_membership");
233 valueContactData.push_back(valuesBucketGroup);
234 }
235 }
236
237 /**
238 * @brief Establish ValuesBucket condition in Im case
239 *
240 * @param contact Conditions for establish ValuesBucket operation
241 * @param valueContactData Conditions for establish ValuesBucket operation
242 */
GetValuesBucketImAddress(Contacts & contact,std::vector<DataShare::DataShareValuesBucket> & valueContactData)243 void ContactsBuild::GetValuesBucketImAddress(Contacts &contact,
244 std::vector<DataShare::DataShareValuesBucket> &valueContactData)
245 {
246 unsigned int imAddressSize = contact.imAddresses.size();
247 for (unsigned int i = 0; i < imAddressSize; i++) {
248 DataShare::DataShareValuesBucket valuesBucketImAddress;
249 valuesBucketImAddress.Put("detail_info", contact.imAddresses[i].imAddress);
250 if (contact.imAddresses[i].labelId != ERROR) {
251 valuesBucketImAddress.Put("extend7", std::to_string(contact.imAddresses[i].labelId));
252 }
253 if (!contact.imAddresses[i].labelName.empty()) {
254 valuesBucketImAddress.Put("custom_data", contact.imAddresses[i].labelName);
255 valuesBucketImAddress.Put("extend7", std::to_string(ImAddress::CUSTOM_LABEL));
256 }
257 valuesBucketImAddress.Put("content_type", "im");
258 valueContactData.push_back(valuesBucketImAddress);
259 }
260 }
261
262 /**
263 * @brief Establish ValuesBucket condition in PHOTO case
264 *
265 * @param contact Conditions for establish ValuesBucket operation
266 * @param valueContactData Conditions for establish ValuesBucket operation
267 */
GetValuesBucketPortrait(Contacts & contact,std::vector<DataShare::DataShareValuesBucket> & valueContactData)268 void ContactsBuild::GetValuesBucketPortrait(Contacts &contact,
269 std::vector<DataShare::DataShareValuesBucket> &valueContactData)
270 {
271 if (!contact.portrait.uri.empty() || contact.portrait.uri != "") {
272 DataShare::DataShareValuesBucket valuesBucketPortrait;
273 valuesBucketPortrait.Put("detail_info", contact.portrait.uri);
274 valuesBucketPortrait.Put("content_type", "photo");
275 valueContactData.push_back(valuesBucketPortrait);
276 }
277 }
278
279 /**
280 * @brief Establish ValuesBucket condition in PHONE case
281 *
282 * @param contact Conditions for establish ValuesBucket operation
283 * @param valueContactData Conditions for establish ValuesBucket operation
284 */
GetValuesBucketPhoneNumber(Contacts & contact,std::vector<DataShare::DataShareValuesBucket> & valueContactData)285 void ContactsBuild::GetValuesBucketPhoneNumber(
286 Contacts &contact, std::vector<DataShare::DataShareValuesBucket> &valueContactData)
287 {
288 unsigned int phoneNumbersSize = contact.phoneNumbers.size();
289 for (unsigned int i = 0; i < phoneNumbersSize; i++) {
290 DataShare::DataShareValuesBucket valuesBucketPhoneNumber;
291 valuesBucketPhoneNumber.Put("detail_info", contact.phoneNumbers[i].phoneNumber);
292 if (contact.phoneNumbers[i].labelId != ERROR) {
293 valuesBucketPhoneNumber.Put("extend7", std::to_string(contact.phoneNumbers[i].labelId));
294 }
295 if (!contact.phoneNumbers[i].labelName.empty()) {
296 valuesBucketPhoneNumber.Put("custom_data", contact.phoneNumbers[i].labelName);
297 valuesBucketPhoneNumber.Put("extend7", std::to_string(PhoneNumber::CUSTOM_LABEL));
298 }
299 valuesBucketPhoneNumber.Put("content_type", "phone");
300 valueContactData.push_back(valuesBucketPhoneNumber);
301 }
302 }
303
304 /**
305 * @brief Establish ValuesBucket condition in POSTAL_ADDRESS case
306 *
307 * @param contact Conditions for establish ValuesBucket operation
308 * @param valueContactData Conditions for establish ValuesBucket operation
309 */
GetValuesBucketPostalAddress(Contacts & contact,std::vector<DataShare::DataShareValuesBucket> & valueContactData)310 void ContactsBuild::GetValuesBucketPostalAddress(
311 Contacts &contact, std::vector<DataShare::DataShareValuesBucket> &valueContactData)
312 {
313 unsigned int postalAddressesSize = contact.postalAddresses.size();
314 for (unsigned int i = 0; i < postalAddressesSize; i++) {
315 DataShare::DataShareValuesBucket valuesBucketPostalAddress;
316 valuesBucketPostalAddress.Put("detail_info", contact.postalAddresses[i].postalAddress);
317 if (contact.postalAddresses[i].labelId != ERROR) {
318 valuesBucketPostalAddress.Put("extend7", std::to_string(contact.postalAddresses[i].labelId));
319 }
320 if (!contact.postalAddresses[i].labelName.empty()) {
321 valuesBucketPostalAddress.Put("custom_data", contact.postalAddresses[i].labelName);
322 valuesBucketPostalAddress.Put("extend7", std::to_string(PostalAddress::CUSTOM_LABEL));
323 }
324 if (!contact.postalAddresses[i].neighborhood.empty()) {
325 valuesBucketPostalAddress.Put("neighborhood", contact.postalAddresses[i].neighborhood);
326 }
327 if (!contact.postalAddresses[i].pobox.empty()) {
328 valuesBucketPostalAddress.Put("pobox", contact.postalAddresses[i].pobox);
329 }
330 if (!contact.postalAddresses[i].postcode.empty()) {
331 valuesBucketPostalAddress.Put("postcode", contact.postalAddresses[i].postcode);
332 }
333 if (!contact.postalAddresses[i].region.empty()) {
334 valuesBucketPostalAddress.Put("region", contact.postalAddresses[i].region);
335 }
336 if (!contact.postalAddresses[i].street.empty()) {
337 valuesBucketPostalAddress.Put("street", contact.postalAddresses[i].street);
338 }
339 if (!contact.postalAddresses[i].city.empty()) {
340 valuesBucketPostalAddress.Put("city", contact.postalAddresses[i].city);
341 }
342 if (!contact.postalAddresses[i].country.empty()) {
343 valuesBucketPostalAddress.Put("country", contact.postalAddresses[i].country);
344 }
345 valuesBucketPostalAddress.Put("content_type", "postal_address");
346 valueContactData.push_back(valuesBucketPostalAddress);
347 }
348 }
349
350 /**
351 * @brief Establish ValuesBucket condition in RELATION case
352 *
353 * @param contact Conditions for establish ValuesBucket operation
354 * @param valueContactData Conditions for establish ValuesBucket operation
355 */
GetValuesBucketRelation(Contacts & contact,std::vector<DataShare::DataShareValuesBucket> & valueContactData)356 void ContactsBuild::GetValuesBucketRelation(Contacts &contact,
357 std::vector<DataShare::DataShareValuesBucket> &valueContactData)
358 {
359 unsigned int relationsSize = contact.relations.size();
360 for (unsigned int i = 0; i < relationsSize; i++) {
361 DataShare::DataShareValuesBucket valuesBucketRelation;
362 valuesBucketRelation.Put("detail_info", contact.relations[i].relationName);
363 if (contact.relations[i].labelId != ERROR) {
364 valuesBucketRelation.Put("extend7", std::to_string(contact.relations[i].labelId));
365 }
366 if (!contact.relations[i].labelName.empty()) {
367 valuesBucketRelation.Put("custom_data", contact.relations[i].labelName);
368 valuesBucketRelation.Put("extend7", std::to_string(Relation::CUSTOM_LABEL));
369 }
370 valuesBucketRelation.Put("content_type", "relation");
371 valueContactData.push_back(valuesBucketRelation);
372 }
373 }
374
375 /**
376 * @brief Establish ValuesBucket condition in SIP_ADDRESS case
377 *
378 * @param contact Conditions for establish ValuesBucket operation
379 * @param valueContactData Conditions for establish ValuesBucket operation
380 */
GetValuesBucketSipAddress(Contacts & contact,std::vector<DataShare::DataShareValuesBucket> & valueContactData)381 void ContactsBuild::GetValuesBucketSipAddress(Contacts &contact,
382 std::vector<DataShare::DataShareValuesBucket> &valueContactData)
383 {
384 unsigned int sipAddressesSize = contact.sipAddresses.size();
385 for (unsigned int i = 0; i < sipAddressesSize; i++) {
386 DataShare::DataShareValuesBucket valuesBucketSipAddress;
387 valuesBucketSipAddress.Put("detail_info", contact.sipAddresses[i].sipAddress);
388 if (contact.sipAddresses[i].labelId != ERROR) {
389 valuesBucketSipAddress.Put("extend7", std::to_string(contact.sipAddresses[i].labelId));
390 }
391 if (!contact.sipAddresses[i].labelName.empty()) {
392 valuesBucketSipAddress.Put("custom_data", contact.sipAddresses[i].labelName);
393 valuesBucketSipAddress.Put("extend7", std::to_string(SipAddress::CUSTOM_LABEL));
394 }
395 valuesBucketSipAddress.Put("content_type", "sip_address");
396 valueContactData.push_back(valuesBucketSipAddress);
397 }
398 }
399
400 /**
401 * @brief Establish ValuesBucket condition in WEBSITE case
402 *
403 * @param contact Conditions for establish ValuesBucket operation
404 * @param valueContactData Conditions for establish ValuesBucket operation
405 */
GetValuesBucketWebsite(Contacts & contact,std::vector<DataShare::DataShareValuesBucket> & valueContactData)406 void ContactsBuild::GetValuesBucketWebsite(Contacts &contact,
407 std::vector<DataShare::DataShareValuesBucket> &valueContactData)
408 {
409 unsigned int websitesSize = contact.websites.size();
410 for (unsigned int i = 0; i < websitesSize; i++) {
411 DataShare::DataShareValuesBucket valuesBucketWebsite;
412 valuesBucketWebsite.Put("detail_info", contact.websites[i].website);
413 valuesBucketWebsite.Put("content_type", "website");
414 valueContactData.push_back(valuesBucketWebsite);
415 }
416 }
417
418 /**
419 * @brief Establish ValuesBucket condition in NAME case
420 *
421 * @param contact Conditions for establish ValuesBucket operation
422 * @param valueContactData Conditions for establish ValuesBucket operation
423 */
GetValuesBucketName(Contacts & contact,std::vector<DataShare::DataShareValuesBucket> & valueContactData)424 void ContactsBuild::GetValuesBucketName(Contacts &contact,
425 std::vector<DataShare::DataShareValuesBucket> &valueContactData)
426 {
427 if (!contact.name.fullName.empty() || contact.name.fullName != "") {
428 DataShare::DataShareValuesBucket valuesBucketName;
429 valuesBucketName.Put("detail_info", contact.name.fullName);
430 if (!contact.name.namePrefix.empty()) {
431 valuesBucketName.Put("alpha_name", contact.name.namePrefix);
432 }
433 if (!contact.name.middleName.empty()) {
434 valuesBucketName.Put("other_lan_last_name", contact.name.middleName);
435 }
436 if (!contact.name.nameSuffix.empty()) {
437 valuesBucketName.Put("other_lan_first_name", contact.name.nameSuffix);
438 }
439 if (!contact.name.familyName.empty()) {
440 valuesBucketName.Put("family_name", contact.name.familyName);
441 }
442 if (!contact.name.middleNamePhonetic.empty()) {
443 valuesBucketName.Put("middle_name_phonetic", contact.name.middleNamePhonetic);
444 }
445 if (!contact.name.givenName.empty()) {
446 valuesBucketName.Put("given_name", contact.name.givenName);
447 }
448 if (!contact.name.givenNamePhonetic.empty()) {
449 valuesBucketName.Put("given_name_phonetic", contact.name.givenNamePhonetic);
450 }
451 if (!contact.name.familyNamePhonetic.empty()) {
452 valuesBucketName.Put("phonetic_name", contact.name.familyNamePhonetic);
453 }
454 valuesBucketName.Put("content_type", "name");
455 valueContactData.push_back(valuesBucketName);
456 }
457 }
458
459 /**
460 * @brief Establish ValuesBucket condition in NICKNAME case
461 *
462 * @param contact Conditions for establish ValuesBucket operation
463 * @param valueContactData Conditions for establish ValuesBucket operation
464 */
GetValuesBucketNickName(Contacts & contact,std::vector<DataShare::DataShareValuesBucket> & valueContactData)465 void ContactsBuild::GetValuesBucketNickName(Contacts &contact,
466 std::vector<DataShare::DataShareValuesBucket> &valueContactData)
467 {
468 if (!contact.nickName.nickName.empty() || contact.nickName.nickName != "") {
469 DataShare::DataShareValuesBucket valuesBucketNickName;
470 valuesBucketNickName.Put("detail_info", contact.nickName.nickName);
471 valuesBucketNickName.Put("content_type", "nickname");
472 valueContactData.push_back(valuesBucketNickName);
473 }
474 }
475
476 /**
477 * @brief Establish ValuesBucket condition in NOTE case
478 *
479 * @param contact Conditions for establish ValuesBucket operation
480 * @param valueContactData Conditions for establish ValuesBucket operation
481 */
GetValuesBucketNote(Contacts & contact,std::vector<DataShare::DataShareValuesBucket> & valueContactData)482 void ContactsBuild::GetValuesBucketNote(Contacts &contact,
483 std::vector<DataShare::DataShareValuesBucket> &valueContactData)
484 {
485 if (!contact.note.noteContent.empty() || contact.note.noteContent != "") {
486 DataShare::DataShareValuesBucket valuesBucketNote;
487 valuesBucketNote.Put("detail_info", contact.note.noteContent);
488 valuesBucketNote.Put("content_type", "note");
489 valueContactData.push_back(valuesBucketNote);
490 }
491 }
492
493 /**
494 * @brief Establish ValuesBucket condition in ORGANIZATION case
495 *
496 * @param contact Conditions for establish ValuesBucket operation
497 * @param valueContactData Conditions for establish ValuesBucket operation
498 */
GetValuesBucketOrganization(Contacts & contact,std::vector<DataShare::DataShareValuesBucket> & valueContactData)499 void ContactsBuild::GetValuesBucketOrganization(
500 Contacts &contact, std::vector<DataShare::DataShareValuesBucket> &valueContactData)
501 {
502 if (!contact.organization.name.empty()) {
503 DataShare::DataShareValuesBucket valuesBucketData;
504 valuesBucketData.Put("detail_info", contact.organization.name);
505 if (!contact.organization.title.empty()) {
506 valuesBucketData.Put("position", contact.organization.title);
507 }
508 valuesBucketData.Put("content_type", "organization");
509 valueContactData.push_back(valuesBucketData);
510 }
511 }
512
GetObjectByKey(napi_env env,napi_value object,std::string key)513 napi_value ContactsBuild::GetObjectByKey(napi_env env, napi_value object, std::string key)
514 {
515 ResultConvert resultConvert;
516 return resultConvert.GetNapiValue(env, key.c_str(), object);
517 }
518
GetArrayByKey(napi_env env,napi_value valueObject,std::string key)519 napi_value ContactsBuild::GetArrayByKey(napi_env env, napi_value valueObject, std::string key)
520 {
521 ResultConvert resultConvert;
522 napi_value array = resultConvert.GetNapiValue(env, key.c_str(), valueObject);
523 bool isArray = false;
524 napi_is_array(env, array, &isArray);
525 if (!isArray) {
526 HILOG_INFO("ContactsBuild GetArrayByKey value is not array");
527 return nullptr;
528 }
529 return array;
530 }
531
GetStringValueByKey(napi_env env,napi_value valueObject,std::string key)532 std::string ContactsBuild::GetStringValueByKey(napi_env env, napi_value valueObject, std::string key)
533 {
534 ResultConvert resultConvert;
535 napi_value value = resultConvert.GetNapiValue(env, key.c_str(), valueObject);
536 std::string result = NapiGetValueString(env, value);
537 return result;
538 }
539
GetIntValueByKey(napi_env env,napi_value valueObject,std::string key)540 int ContactsBuild::GetIntValueByKey(napi_env env, napi_value valueObject, std::string key)
541 {
542 ResultConvert resultConvert;
543 napi_value value = resultConvert.GetNapiValue(env, key.c_str(), valueObject);
544 if (value == nullptr) {
545 return ERROR;
546 }
547 int64_t result;
548 napi_get_value_int64(env, value, &result);
549 int code = result;
550 return code;
551 }
552
GetName(napi_env env,napi_value object)553 Name ContactsBuild::GetName(napi_env env, napi_value object)
554 {
555 HILOG_INFO("ContactsBuild into GetName");
556 Name name;
557 if (object == nullptr) {
558 HILOG_ERROR("ContactsBuild GetName nameKey is null ");
559 return name;
560 }
561 napi_value nameObj = GetObjectByKey(env, object, "name");
562 napi_valuetype valueType;
563 napi_typeof(env, nameObj, &valueType);
564 if (nameObj == nullptr || valueType != napi_object) {
565 HILOG_ERROR("ContactsBuild GetName nameObj is null or object type is not object");
566 return name;
567 }
568 name.familyName = GetStringValueByKey(env, nameObj, "familyName");
569 name.middleNamePhonetic = GetStringValueByKey(env, nameObj, "middleNamePhonetic");
570 name.givenName = GetStringValueByKey(env, nameObj, "givenName");
571 name.givenNamePhonetic = GetStringValueByKey(env, nameObj, "givenNamePhonetic");
572 name.familyNamePhonetic = GetStringValueByKey(env, nameObj, "familyNamePhonetic");
573 name.fullName = GetStringValueByKey(env, nameObj, "fullName");
574 name.middleName = GetStringValueByKey(env, nameObj, "middleName");
575 name.namePrefix = GetStringValueByKey(env, nameObj, "namePrefix");
576 name.nameSuffix = GetStringValueByKey(env, nameObj, "nameSuffix");
577 return name;
578 }
579
GetUri(napi_env env,napi_value object)580 Portrait ContactsBuild::GetUri(napi_env env, napi_value object)
581 {
582 Portrait portrait;
583 napi_value portraitObj = GetObjectByKey(env, object, "portrait");
584 napi_valuetype valueType;
585 napi_typeof(env, portraitObj, &valueType);
586 if (portraitObj == nullptr || valueType != napi_object) {
587 HILOG_ERROR("ContactsBuild GetUri portraitObj is null or object type is not object");
588 return portrait;
589 }
590 portrait.uri = GetStringValueByKey(env, portraitObj, "uri");
591 return portrait;
592 }
593
GetEmails(napi_env env,napi_value object)594 std::vector<Email> ContactsBuild::GetEmails(napi_env env, napi_value object)
595 {
596 std::vector<Email> emailVec;
597 napi_value EmailArray = GetArrayByKey(env, object, "emails");
598 if (EmailArray == nullptr) {
599 HILOG_ERROR("ContactsBuild GetEmail napiValueEmail is null ");
600 return emailVec;
601 }
602 uint32_t size = 0;
603 napi_get_array_length(env, EmailArray, &size);
604 for (uint32_t i = 0; i < size; i++) {
605 Email email;
606 napi_value object;
607 napi_get_element(env, EmailArray, i, &object);
608 email.email = GetStringValueByKey(env, object, "email");
609 email.labelName = GetStringValueByKey(env, object, "labelName");
610 email.displayName = GetStringValueByKey(env, object, "displayName");
611 email.labelId = GetIntValueByKey(env, object, "labelId");
612 emailVec.push_back(email);
613 }
614 return emailVec;
615 }
616
GetEvent(napi_env env,napi_value object)617 std::vector<Event> ContactsBuild::GetEvent(napi_env env, napi_value object)
618 {
619 napi_value eventArray = GetArrayByKey(env, object, "events");
620 if (eventArray == nullptr) {
621 HILOG_ERROR("ContactsBuild GetEvent arrKey is null ");
622 return std::vector<Event>();
623 }
624 uint32_t size = 0;
625 napi_get_array_length(env, eventArray, &size);
626 std::vector<Event> resultVec;
627 for (uint32_t i = 0; i < size; i++) {
628 napi_value obj;
629 napi_get_element(env, eventArray, i, &obj);
630 Event eventObj;
631 eventObj.eventDate = GetStringValueByKey(env, obj, "eventDate");
632 eventObj.labelName = GetStringValueByKey(env, obj, "labelName");
633 eventObj.labelId = GetIntValueByKey(env, obj, "labelId");
634 resultVec.push_back(eventObj);
635 }
636 return resultVec;
637 }
638
GetGroup(napi_env env,napi_value object)639 std::vector<Group> ContactsBuild::GetGroup(napi_env env, napi_value object)
640 {
641 napi_value groupArray = GetArrayByKey(env, object, "groups");
642 std::vector<Group> resultVec;
643 if (groupArray == nullptr) {
644 HILOG_ERROR("ContactsBuild GetGroup arrKey is null ");
645 return resultVec;
646 }
647 uint32_t size = 0;
648 napi_get_array_length(env, groupArray, &size);
649 for (uint32_t i = 0; i < size; i++) {
650 napi_value obj;
651 napi_get_element(env, groupArray, i, &obj);
652 Group groupObj;
653 groupObj.groupId = GetIntValueByKey(env, obj, "groupId");
654 groupObj.title = GetStringValueByKey(env, obj, "title");
655 resultVec.push_back(groupObj);
656 }
657 return resultVec;
658 }
659
GetImAddress(napi_env env,napi_value object)660 std::vector<ImAddress> ContactsBuild::GetImAddress(napi_env env, napi_value object)
661 {
662 napi_value imAddressArray = GetArrayByKey(env, object, "imAddresses");
663 std::vector<ImAddress> resultVec;
664 if (imAddressArray == nullptr) {
665 HILOG_ERROR("ContactsBuild GetImAddress arrKey is null ");
666 return resultVec;
667 }
668 uint32_t size = 0;
669 napi_get_array_length(env, imAddressArray, &size);
670 for (uint32_t i = 0; i < size; i++) {
671 napi_value obj;
672 napi_get_element(env, imAddressArray, i, &obj);
673 ImAddress targetObj;
674 targetObj.imAddress = GetStringValueByKey(env, obj, "imAddress");
675 targetObj.labelName = GetStringValueByKey(env, obj, "labelName");
676 targetObj.labelId = GetIntValueByKey(env, obj, "labelId");
677 resultVec.push_back(targetObj);
678 }
679 return resultVec;
680 }
681
GetPhoneNumbers(napi_env env,napi_value object)682 std::vector<PhoneNumber> ContactsBuild::GetPhoneNumbers(napi_env env, napi_value object)
683 {
684 std::vector<PhoneNumber> resultVec;
685 napi_value phoneNumberArray = GetArrayByKey(env, object, "phoneNumbers");
686 if (phoneNumberArray == nullptr) {
687 HILOG_ERROR("ContactsBuild GetPhoneNumber napiValuePhoneNumber is null ");
688 return resultVec;
689 }
690 uint32_t size = 0;
691 napi_get_array_length(env, phoneNumberArray, &size);
692 for (uint32_t i = 0; i < size; i++) {
693 PhoneNumber phones;
694 napi_value obj;
695 napi_get_element(env, phoneNumberArray, i, &obj);
696 phones.phoneNumber = GetStringValueByKey(env, obj, "phoneNumber");
697 phones.labelName = GetStringValueByKey(env, obj, "labelName");
698 phones.labelId = GetIntValueByKey(env, obj, "labelId");
699 resultVec.push_back(phones);
700 }
701 return resultVec;
702 }
703
GetPostalAddress(napi_env env,napi_value object)704 std::vector<PostalAddress> ContactsBuild::GetPostalAddress(napi_env env, napi_value object)
705 {
706 napi_value postalAddressArray = GetArrayByKey(env, object, "postalAddresses");
707 std::vector<PostalAddress> resultVec;
708 if (postalAddressArray == nullptr) {
709 HILOG_ERROR("GetPostalAddress arrKey is null ");
710 return resultVec;
711 }
712 uint32_t size = 0;
713 napi_get_array_length(env, postalAddressArray, &size);
714 for (uint32_t i = 0; i < size; i++) {
715 napi_value obj;
716 napi_get_element(env, postalAddressArray, i, &obj);
717 PostalAddress targetObj;
718 targetObj.city = GetStringValueByKey(env, obj, "city");
719 targetObj.country = GetStringValueByKey(env, obj, "country");
720 targetObj.labelName = GetStringValueByKey(env, obj, "labelName");
721 targetObj.neighborhood = GetStringValueByKey(env, obj, "neighborhood");
722 targetObj.pobox = GetStringValueByKey(env, obj, "pobox");
723 targetObj.postalAddress = GetStringValueByKey(env, obj, "postalAddress");
724 targetObj.postcode = GetStringValueByKey(env, obj, "postcode");
725 targetObj.region = GetStringValueByKey(env, obj, "region");
726 targetObj.street = GetStringValueByKey(env, obj, "street");
727 resultVec.push_back(targetObj);
728 }
729 return resultVec;
730 }
731
GetRelation(napi_env env,napi_value object)732 std::vector<Relation> ContactsBuild::GetRelation(napi_env env, napi_value object)
733 {
734 napi_value relationArray = GetArrayByKey(env, object, "relations");
735 std::vector<Relation> resultVec;
736 if (relationArray == nullptr) {
737 HILOG_ERROR("GetRelation arrKey is null ");
738 return resultVec;
739 }
740 uint32_t size = 0;
741 napi_get_array_length(env, relationArray, &size);
742 for (uint32_t i = 0; i < size; i++) {
743 napi_value obj;
744 napi_get_element(env, relationArray, i, &obj);
745 Relation targetObj;
746 targetObj.relationName = GetStringValueByKey(env, obj, "relationName");
747 targetObj.labelName = GetStringValueByKey(env, obj, "labelName");
748 targetObj.labelId = GetIntValueByKey(env, obj, "labelId");
749 resultVec.push_back(targetObj);
750 }
751 return resultVec;
752 }
753
GetSipAddress(napi_env env,napi_value object)754 std::vector<SipAddress> ContactsBuild::GetSipAddress(napi_env env, napi_value object)
755 {
756 napi_value sipAddressArray = GetArrayByKey(env, object, "sipAddresses");
757 std::vector<SipAddress> resultVec;
758 if (sipAddressArray == nullptr) {
759 HILOG_ERROR("GetSipAddress arrKey is null ");
760 return resultVec;
761 }
762 uint32_t size = 0;
763 napi_get_array_length(env, sipAddressArray, &size);
764 for (uint32_t i = 0; i < size; i++) {
765 napi_value obj;
766 napi_get_element(env, sipAddressArray, i, &obj);
767 SipAddress targetObj;
768 targetObj.sipAddress = GetStringValueByKey(env, obj, "sipAddress");
769 targetObj.labelName = GetStringValueByKey(env, obj, "labelName");
770 targetObj.labelId = GetIntValueByKey(env, obj, "labelId");
771 resultVec.push_back(targetObj);
772 }
773 return resultVec;
774 }
775
GetWebsite(napi_env env,napi_value object)776 std::vector<Website> ContactsBuild::GetWebsite(napi_env env, napi_value object)
777 {
778 napi_value websiteArray = GetArrayByKey(env, object, "websites");
779 std::vector<Website> resultVec;
780 if (websiteArray == nullptr) {
781 HILOG_ERROR("ContactsBuild GetWebsite arrKey is null ");
782 return resultVec;
783 }
784 uint32_t size = 0;
785 napi_get_array_length(env, websiteArray, &size);
786 for (uint32_t i = 0; i < size; i++) {
787 napi_value obj;
788 napi_get_element(env, websiteArray, i, &obj);
789 Website targetObj;
790 targetObj.website = GetStringValueByKey(env, obj, "website");
791 resultVec.push_back(targetObj);
792 }
793 return resultVec;
794 }
795
GetNickName(napi_env env,napi_value object)796 NickName ContactsBuild::GetNickName(napi_env env, napi_value object)
797 {
798 HILOG_INFO("ContactsBuild into GetNickName");
799 napi_value nickNameObj = GetObjectByKey(env, object, "nickName");
800 NickName resultObj;
801 if (nickNameObj == nullptr) {
802 HILOG_ERROR("ContactsBuild GetNickName nickNameKey is null ");
803 return resultObj;
804 }
805 resultObj.nickName = GetStringValueByKey(env, nickNameObj, "nickName");
806 return resultObj;
807 }
808
GetNote(napi_env env,napi_value object)809 Note ContactsBuild::GetNote(napi_env env, napi_value object)
810 {
811 Note resultObj;
812 napi_value noteObj = GetObjectByKey(env, object, "note");
813 if (noteObj == nullptr) {
814 HILOG_ERROR("GetNote noteKey is null ");
815 return resultObj;
816 }
817 resultObj.noteContent = GetStringValueByKey(env, noteObj, "noteContent");
818 return resultObj;
819 }
820
GetOrganization(napi_env env,napi_value object)821 Organization ContactsBuild::GetOrganization(napi_env env, napi_value object)
822 {
823 napi_value organizationObject = GetObjectByKey(env, object, "organization");
824 Organization resultObj;
825 if (organizationObject == nullptr) {
826 HILOG_ERROR("GetOrganization organizationKey is null ");
827 return resultObj;
828 }
829 resultObj.name = GetStringValueByKey(env, organizationObject, "name");
830 resultObj.title = GetStringValueByKey(env, organizationObject, "title");
831 return resultObj;
832 }
833
GetInt(napi_env env,napi_value id)834 int ContactsBuild::GetInt(napi_env env, napi_value id)
835 {
836 int64_t value = 0;
837 if (id == nullptr) {
838 HILOG_ERROR("GetInt id is 0");
839 return value;
840 }
841 napi_get_value_int64(env, id, &value);
842 return value;
843 }
844
GetHolder(napi_env env,napi_value object)845 Holder ContactsBuild::GetHolder(napi_env env, napi_value object)
846 {
847 Holder holder;
848 if (object == nullptr) {
849 HILOG_ERROR("GetHolder Holder is null ");
850 return holder;
851 }
852 holder.bundleName = GetStringValueByKey(env, object, "bundleName");
853 holder.displayName = GetStringValueByKey(env, object, "displayName");
854 holder.holderId = GetIntValueByKey(env, object, "holderId");
855 HILOG_INFO(" ContactsBuild::GetHolder int id = %{public}d", holder.holderId);
856 return holder;
857 }
858
GetContactAttributes(napi_env env,napi_value object)859 ContactAttributes ContactsBuild::GetContactAttributes(napi_env env, napi_value object)
860 {
861 ContactAttributes contactAttributes;
862 if (object == nullptr) {
863 HILOG_ERROR("GetContactAttributes object is null ");
864 return contactAttributes;
865 }
866 napi_value napiValueAttr = GetArrayByKey(env, object, "attributes");
867 std::vector<int> attrVector;
868 uint32_t size = 0;
869 napi_get_array_length(env, napiValueAttr, &size);
870 for (uint32_t i = 0; i < size; i++) {
871 napi_value intValue;
872 napi_get_element(env, napiValueAttr, i, &intValue);
873 int64_t intNapiValue;
874 napi_get_value_int64(env, intValue, &intNapiValue);
875 if (intNapiValue != 0) {
876 attrVector.push_back(intNapiValue);
877 }
878 }
879 contactAttributes.attributes = attrVector;
880 return contactAttributes;
881 }
882
NapiGetValueString(napi_env env,napi_value value)883 std::string ContactsBuild::NapiGetValueString(napi_env env, napi_value value)
884 {
885 if (value == nullptr) {
886 return "";
887 }
888 char valueString[NAPI_GET_STRING_SIZE];
889 size_t valueSize = NAPI_GET_STRING_SIZE;
890 size_t resultSize = 0;
891 napi_get_value_string_utf8(env, value, valueString, valueSize, &resultSize);
892 std::string resultValue = valueString;
893 if (resultValue == "") {
894 HILOG_ERROR("ContactsBuild NapiGetValueString Data error");
895 return "";
896 }
897 return resultValue;
898 }
899 } // namespace ContactsApi
900 } // namespace OHOS