1115cd2caSopenharmony_ci/* 2115cd2caSopenharmony_ci * Copyright (c) 2021-2023 Huawei Device Co., Ltd. 3115cd2caSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4115cd2caSopenharmony_ci * you may not use this file except in compliance with the License. 5115cd2caSopenharmony_ci * You may obtain a copy of the License at 6115cd2caSopenharmony_ci * 7115cd2caSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8115cd2caSopenharmony_ci * 9115cd2caSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10115cd2caSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11115cd2caSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12115cd2caSopenharmony_ci * See the License for the specific language governing permissions and 13115cd2caSopenharmony_ci * limitations under the License. 14115cd2caSopenharmony_ci */ 15115cd2caSopenharmony_ci 16115cd2caSopenharmony_ci#include "contacts_api.h" 17115cd2caSopenharmony_ci 18115cd2caSopenharmony_ci#include <mutex> 19115cd2caSopenharmony_ci 20115cd2caSopenharmony_ci#include "datashare_predicates.h" 21115cd2caSopenharmony_ci#include "rdb_errno.h" 22115cd2caSopenharmony_ci#include "rdb_helper.h" 23115cd2caSopenharmony_ci#include "rdb_open_callback.h" 24115cd2caSopenharmony_ci#include "rdb_predicates.h" 25115cd2caSopenharmony_ci#include "rdb_store.h" 26115cd2caSopenharmony_ci#include "result_set.h" 27115cd2caSopenharmony_ci#include "securec.h" 28115cd2caSopenharmony_ci 29115cd2caSopenharmony_ci#include "contacts_control.h" 30115cd2caSopenharmony_ci#include "contacts_napi_common.h" 31115cd2caSopenharmony_ci#include "contacts_napi_utils.h" 32115cd2caSopenharmony_ci#include "hilog_wrapper_api.h" 33115cd2caSopenharmony_ci#include "result_convert.h" 34115cd2caSopenharmony_ci#include "contacts_telephony_permission.h" 35115cd2caSopenharmony_ci 36115cd2caSopenharmony_cinamespace OHOS { 37115cd2caSopenharmony_cinamespace ContactsApi { 38115cd2caSopenharmony_cinamespace { 39115cd2caSopenharmony_cistd::mutex g_mutex; 40115cd2caSopenharmony_ci} 41115cd2caSopenharmony_ci/** 42115cd2caSopenharmony_ci * @brief Initialize NAPI object 43115cd2caSopenharmony_ci * 44115cd2caSopenharmony_ci * @param env Conditions for initialize operation 45115cd2caSopenharmony_ci * @param object Conditions for initialize operation 46115cd2caSopenharmony_ci * @param hold Attribute of object 47115cd2caSopenharmony_ci * @param attr Attribute of object 48115cd2caSopenharmony_ci * @param contact Attribute of object 49115cd2caSopenharmony_ci */ 50115cd2caSopenharmony_civoid ObjectInit(napi_env env, napi_value object, napi_value &hold, napi_value &attr, napi_value &contact) 51115cd2caSopenharmony_ci{ 52115cd2caSopenharmony_ci int type = GetType(env, object); 53115cd2caSopenharmony_ci switch (type) { 54115cd2caSopenharmony_ci case TYPE_HOLDER: 55115cd2caSopenharmony_ci hold = object; 56115cd2caSopenharmony_ci break; 57115cd2caSopenharmony_ci case TYPE_ATTR: 58115cd2caSopenharmony_ci attr = object; 59115cd2caSopenharmony_ci break; 60115cd2caSopenharmony_ci case TYPE_CONTACT: 61115cd2caSopenharmony_ci contact = object; 62115cd2caSopenharmony_ci break; 63115cd2caSopenharmony_ci default: 64115cd2caSopenharmony_ci break; 65115cd2caSopenharmony_ci } 66115cd2caSopenharmony_ci} 67115cd2caSopenharmony_ci 68115cd2caSopenharmony_ci/** 69115cd2caSopenharmony_ci * @brief Initialize NAPI number object 70115cd2caSopenharmony_ci * 71115cd2caSopenharmony_ci * @param env Conditions for initialize operation 72115cd2caSopenharmony_ci * @param object Conditions for initialize operation 73115cd2caSopenharmony_ci * @param id Number object 74115cd2caSopenharmony_ci */ 75115cd2caSopenharmony_civoid ObjectInitId(napi_env env, napi_value object, napi_value &id) 76115cd2caSopenharmony_ci{ 77115cd2caSopenharmony_ci int type = GetType(env, object); 78115cd2caSopenharmony_ci switch (type) { 79115cd2caSopenharmony_ci case TYPE_NAPI_NUMBER: 80115cd2caSopenharmony_ci id = object; 81115cd2caSopenharmony_ci break; 82115cd2caSopenharmony_ci default: 83115cd2caSopenharmony_ci break; 84115cd2caSopenharmony_ci } 85115cd2caSopenharmony_ci} 86115cd2caSopenharmony_ci 87115cd2caSopenharmony_ci/** 88115cd2caSopenharmony_ci * @brief Initialize NAPI string object 89115cd2caSopenharmony_ci * 90115cd2caSopenharmony_ci * @param env Conditions for initialize operation 91115cd2caSopenharmony_ci * @param object Conditions for initialize operation 92115cd2caSopenharmony_ci * @param key String object 93115cd2caSopenharmony_ci */ 94115cd2caSopenharmony_civoid ObjectInitString(napi_env env, napi_value object, napi_value &key) 95115cd2caSopenharmony_ci{ 96115cd2caSopenharmony_ci int type = GetType(env, object); 97115cd2caSopenharmony_ci switch (type) { 98115cd2caSopenharmony_ci case TYPE_NAPI_STRING: 99115cd2caSopenharmony_ci key = object; 100115cd2caSopenharmony_ci break; 101115cd2caSopenharmony_ci default: 102115cd2caSopenharmony_ci break; 103115cd2caSopenharmony_ci } 104115cd2caSopenharmony_ci} 105115cd2caSopenharmony_ci 106115cd2caSopenharmony_ci/** 107115cd2caSopenharmony_ci * @brief Get NAPI object type 108115cd2caSopenharmony_ci * 109115cd2caSopenharmony_ci * @param env Conditions for get type operation 110115cd2caSopenharmony_ci * @param value Conditions for get type operation 111115cd2caSopenharmony_ci * 112115cd2caSopenharmony_ci * @return The result returned by get type operation 113115cd2caSopenharmony_ci */ 114115cd2caSopenharmony_ciint GetType(napi_env env, napi_value value) 115115cd2caSopenharmony_ci{ 116115cd2caSopenharmony_ci napi_valuetype valueType; 117115cd2caSopenharmony_ci napi_typeof(env, value, &valueType); 118115cd2caSopenharmony_ci bool result = false; 119115cd2caSopenharmony_ci switch (valueType) { 120115cd2caSopenharmony_ci case napi_number: 121115cd2caSopenharmony_ci return TYPE_NAPI_NUMBER; 122115cd2caSopenharmony_ci break; 123115cd2caSopenharmony_ci case napi_string: 124115cd2caSopenharmony_ci return TYPE_NAPI_STRING; 125115cd2caSopenharmony_ci break; 126115cd2caSopenharmony_ci case napi_object: 127115cd2caSopenharmony_ci napi_value key; 128115cd2caSopenharmony_ci napi_create_string_utf8(env, "bundleName", NAPI_AUTO_LENGTH, &key); 129115cd2caSopenharmony_ci napi_has_property(env, value, key, &result); 130115cd2caSopenharmony_ci if (result) { 131115cd2caSopenharmony_ci return TYPE_HOLDER; 132115cd2caSopenharmony_ci } 133115cd2caSopenharmony_ci napi_create_string_utf8(env, "attributes", NAPI_AUTO_LENGTH, &key); 134115cd2caSopenharmony_ci napi_has_property(env, value, key, &result); 135115cd2caSopenharmony_ci if (result) { 136115cd2caSopenharmony_ci return TYPE_ATTR; 137115cd2caSopenharmony_ci } 138115cd2caSopenharmony_ci return TYPE_CONTACT; 139115cd2caSopenharmony_ci break; 140115cd2caSopenharmony_ci default: 141115cd2caSopenharmony_ci return TYPE_NAPI_ERROR; 142115cd2caSopenharmony_ci break; 143115cd2caSopenharmony_ci } 144115cd2caSopenharmony_ci} 145115cd2caSopenharmony_ci 146115cd2caSopenharmony_ci/** 147115cd2caSopenharmony_ci * @brief Get dataShareHelper 148115cd2caSopenharmony_ci * 149115cd2caSopenharmony_ci * @param env Conditions for get dataShareHelper operation 150115cd2caSopenharmony_ci * 151115cd2caSopenharmony_ci * @return The result returned by get dataShareHelper 152115cd2caSopenharmony_ci */ 153115cd2caSopenharmony_cibool GetDataShareHelper(napi_env env, napi_callback_info info, ExecuteHelper *executeHelper) 154115cd2caSopenharmony_ci{ 155115cd2caSopenharmony_ci napi_value global; 156115cd2caSopenharmony_ci bool isStageMode = false; 157115cd2caSopenharmony_ci napi_value abilityContext = nullptr; 158115cd2caSopenharmony_ci napi_status status = napi_get_global(env, &global); 159115cd2caSopenharmony_ci if (executeHelper->abilityContext != nullptr) { 160115cd2caSopenharmony_ci isStageMode = true; 161115cd2caSopenharmony_ci status = napi_ok; 162115cd2caSopenharmony_ci abilityContext = executeHelper->abilityContext; 163115cd2caSopenharmony_ci } else { 164115cd2caSopenharmony_ci if (status != napi_ok) { 165115cd2caSopenharmony_ci HILOG_ERROR("GetDataShareHelper napi_get_global != napi_ok"); 166115cd2caSopenharmony_ci } 167115cd2caSopenharmony_ci napi_value globalThis; 168115cd2caSopenharmony_ci status = napi_get_named_property(env, global, "globalThis", &globalThis); 169115cd2caSopenharmony_ci if (status != napi_ok) { 170115cd2caSopenharmony_ci HILOG_ERROR("GetDataShareHelper napi_get_globalThis != napi_ok"); 171115cd2caSopenharmony_ci } 172115cd2caSopenharmony_ci status = napi_get_named_property(env, globalThis, "abilityContext", &abilityContext); 173115cd2caSopenharmony_ci if (status != napi_ok) { 174115cd2caSopenharmony_ci HILOG_ERROR("GetDataShareHelper napi_get_abilityContext != napi_ok"); 175115cd2caSopenharmony_ci } 176115cd2caSopenharmony_ci status = OHOS::AbilityRuntime::IsStageContext(env, abilityContext, isStageMode); 177115cd2caSopenharmony_ci } 178115cd2caSopenharmony_ci 179115cd2caSopenharmony_ci std::shared_ptr<DataShare::DataShareHelper> dataShareHelper = nullptr; 180115cd2caSopenharmony_ci if (status != napi_ok || !isStageMode) { 181115cd2caSopenharmony_ci HILOG_INFO("GetFAModeContext"); 182115cd2caSopenharmony_ci auto ability = OHOS::AbilityRuntime::GetCurrentAbility(env); 183115cd2caSopenharmony_ci if (ability == nullptr) { 184115cd2caSopenharmony_ci HILOG_ERROR("Failed to get native ability instance"); 185115cd2caSopenharmony_ci return false; 186115cd2caSopenharmony_ci } 187115cd2caSopenharmony_ci auto context = ability->GetContext(); 188115cd2caSopenharmony_ci if (context == nullptr) { 189115cd2caSopenharmony_ci HILOG_ERROR("Failed to get native context instance"); 190115cd2caSopenharmony_ci return false; 191115cd2caSopenharmony_ci } 192115cd2caSopenharmony_ci executeHelper->dataShareHelper = DataShare::DataShareHelper::Creator(context->GetToken(), CONTACTS_DATA_URI); 193115cd2caSopenharmony_ci } else { 194115cd2caSopenharmony_ci HILOG_INFO("GetStageModeContext"); 195115cd2caSopenharmony_ci auto context = OHOS::AbilityRuntime::GetStageModeContext(env, abilityContext); 196115cd2caSopenharmony_ci if (context == nullptr) { 197115cd2caSopenharmony_ci HILOG_ERROR("Failed to get native stage context instance"); 198115cd2caSopenharmony_ci return false; 199115cd2caSopenharmony_ci } 200115cd2caSopenharmony_ci executeHelper->dataShareHelper = DataShare::DataShareHelper::Creator(context->GetToken(), CONTACTS_DATA_URI); 201115cd2caSopenharmony_ci } 202115cd2caSopenharmony_ci return false; 203115cd2caSopenharmony_ci} 204115cd2caSopenharmony_ci 205115cd2caSopenharmony_ci/** 206115cd2caSopenharmony_ci * @brief Establish predicates condition by holder object 207115cd2caSopenharmony_ci * 208115cd2caSopenharmony_ci * @param holder Conditions for establish predicates operation 209115cd2caSopenharmony_ci * @param predicates Conditions for establish predicates operation 210115cd2caSopenharmony_ci */ 211115cd2caSopenharmony_civoid HolderPredicates(Holder &holder, DataShare::DataSharePredicates &predicates) 212115cd2caSopenharmony_ci{ 213115cd2caSopenharmony_ci if (!holder.bundleName.empty()) { 214115cd2caSopenharmony_ci predicates.And(); 215115cd2caSopenharmony_ci predicates.EqualTo("account_type", holder.bundleName); 216115cd2caSopenharmony_ci } 217115cd2caSopenharmony_ci if (!holder.displayName.empty()) { 218115cd2caSopenharmony_ci predicates.And(); 219115cd2caSopenharmony_ci predicates.EqualTo("account_name", holder.displayName); 220115cd2caSopenharmony_ci } 221115cd2caSopenharmony_ci if (holder.holderId > 0) { 222115cd2caSopenharmony_ci predicates.And(); 223115cd2caSopenharmony_ci predicates.EqualTo("account_id", std::to_string(holder.holderId)); 224115cd2caSopenharmony_ci } 225115cd2caSopenharmony_ci} 226115cd2caSopenharmony_ci 227115cd2caSopenharmony_ci/** 228115cd2caSopenharmony_ci * @brief Establish predicates condition by attributes object 229115cd2caSopenharmony_ci * 230115cd2caSopenharmony_ci * @param attrs Conditions for establish predicates operation 231115cd2caSopenharmony_ci * @param predicates Conditions for establish predicates operation 232115cd2caSopenharmony_ci */ 233115cd2caSopenharmony_civoid AttributesPredicates(bool isBegin, ContactAttributes &attrs, DataShare::DataSharePredicates &predicates) 234115cd2caSopenharmony_ci{ 235115cd2caSopenharmony_ci unsigned int size = attrs.attributes.size(); 236115cd2caSopenharmony_ci if (size > 0) { 237115cd2caSopenharmony_ci if (!isBegin) { 238115cd2caSopenharmony_ci predicates.And(); 239115cd2caSopenharmony_ci } 240115cd2caSopenharmony_ci predicates.BeginWrap(); 241115cd2caSopenharmony_ci } 242115cd2caSopenharmony_ci for (unsigned int i = 0; i < size; ++i) { 243115cd2caSopenharmony_ci predicates.EqualTo("type_id", std::to_string(attrs.attributes[i])); 244115cd2caSopenharmony_ci if (i != size - 1) { 245115cd2caSopenharmony_ci predicates.Or(); 246115cd2caSopenharmony_ci } 247115cd2caSopenharmony_ci } 248115cd2caSopenharmony_ci if (size > 0) { 249115cd2caSopenharmony_ci predicates.EndWrap(); 250115cd2caSopenharmony_ci } 251115cd2caSopenharmony_ci} 252115cd2caSopenharmony_ci 253115cd2caSopenharmony_civoid CheckAttributes(ContactAttributes &attrs) 254115cd2caSopenharmony_ci{ 255115cd2caSopenharmony_ci unsigned int size = attrs.attributes.size(); 256115cd2caSopenharmony_ci if (size == 0) { 257115cd2caSopenharmony_ci HILOG_INFO("attributes not exist, it means all attribute"); 258115cd2caSopenharmony_ci attrs.attributes.push_back(EMAIL); 259115cd2caSopenharmony_ci attrs.attributes.push_back(IM); 260115cd2caSopenharmony_ci attrs.attributes.push_back(NICKNAME); 261115cd2caSopenharmony_ci attrs.attributes.push_back(ORGANIZATION); 262115cd2caSopenharmony_ci attrs.attributes.push_back(PHONE); 263115cd2caSopenharmony_ci attrs.attributes.push_back(NAME); 264115cd2caSopenharmony_ci attrs.attributes.push_back(POSTAL_ADDRESS); 265115cd2caSopenharmony_ci attrs.attributes.push_back(PHOTO); 266115cd2caSopenharmony_ci attrs.attributes.push_back(GROUP_MEMBERSHIP); 267115cd2caSopenharmony_ci attrs.attributes.push_back(NOTE); 268115cd2caSopenharmony_ci attrs.attributes.push_back(CONTACT_EVENT); 269115cd2caSopenharmony_ci attrs.attributes.push_back(WEBSITE); 270115cd2caSopenharmony_ci attrs.attributes.push_back(RELATION); 271115cd2caSopenharmony_ci attrs.attributes.push_back(SIP_ADDRESS); 272115cd2caSopenharmony_ci } 273115cd2caSopenharmony_ci} 274115cd2caSopenharmony_ci 275115cd2caSopenharmony_ci/** 276115cd2caSopenharmony_ci * @brief Resolve object interface in DELETE_CONTACT case 277115cd2caSopenharmony_ci * 278115cd2caSopenharmony_ci * @param env Conditions for resolve object interface operation 279115cd2caSopenharmony_ci * @param info Conditions for resolve object interface operation 280115cd2caSopenharmony_ci */ 281115cd2caSopenharmony_ciDataShare::DataSharePredicates BuildDeleteContactPredicates(napi_env env, ExecuteHelper *executeHelper) 282115cd2caSopenharmony_ci{ 283115cd2caSopenharmony_ci DataShare::DataSharePredicates predicates; 284115cd2caSopenharmony_ci ContactsBuild contactsBuild; 285115cd2caSopenharmony_ci std::string keyValue = contactsBuild.NapiGetValueString(env, executeHelper->argv[0]); 286115cd2caSopenharmony_ci if (!keyValue.empty()) { 287115cd2caSopenharmony_ci predicates.EqualTo("is_deleted", "0"); 288115cd2caSopenharmony_ci predicates.And(); 289115cd2caSopenharmony_ci predicates.EqualTo("quick_search_key", keyValue); 290115cd2caSopenharmony_ci } 291115cd2caSopenharmony_ci return predicates; 292115cd2caSopenharmony_ci} 293115cd2caSopenharmony_ci 294115cd2caSopenharmony_ci/** 295115cd2caSopenharmony_ci * @brief Resolve object interface in QUERY_CONTACT case 296115cd2caSopenharmony_ci * 297115cd2caSopenharmony_ci * @param env Conditions for resolve object interface operation 298115cd2caSopenharmony_ci * @param key Conditions for resolve object interface operation 299115cd2caSopenharmony_ci * @param hold Conditions for resolve object interface operation 300115cd2caSopenharmony_ci * @param attr Conditions for resolve object interface operation 301115cd2caSopenharmony_ci */ 302115cd2caSopenharmony_ciDataShare::DataSharePredicates BuildQueryContactPredicates( 303115cd2caSopenharmony_ci napi_env env, napi_value key, napi_value hold, napi_value attr) 304115cd2caSopenharmony_ci{ 305115cd2caSopenharmony_ci ContactsBuild contactsBuild; 306115cd2caSopenharmony_ci std::string keyValue = contactsBuild.NapiGetValueString(env, key); 307115cd2caSopenharmony_ci Holder holder = contactsBuild.GetHolder(env, hold); 308115cd2caSopenharmony_ci DataShare::DataSharePredicates predicates; 309115cd2caSopenharmony_ci if (!keyValue.empty()) { 310115cd2caSopenharmony_ci predicates.EqualTo("is_deleted", "0"); 311115cd2caSopenharmony_ci predicates.And(); 312115cd2caSopenharmony_ci predicates.EqualTo("quick_search_key", keyValue); 313115cd2caSopenharmony_ci HolderPredicates(holder, predicates); 314115cd2caSopenharmony_ci } 315115cd2caSopenharmony_ci return predicates; 316115cd2caSopenharmony_ci} 317115cd2caSopenharmony_ci 318115cd2caSopenharmony_civoid HoldersStructure(std::map<std::string, std::string> &holders, Holder &holder) 319115cd2caSopenharmony_ci{ 320115cd2caSopenharmony_ci if (!holder.bundleName.empty()) { 321115cd2caSopenharmony_ci holders["account_type"] = holder.bundleName; 322115cd2caSopenharmony_ci } 323115cd2caSopenharmony_ci if (!holder.displayName.empty()) { 324115cd2caSopenharmony_ci holders["account_name"] = holder.displayName; 325115cd2caSopenharmony_ci } 326115cd2caSopenharmony_ci if (holder.holderId > 0) { 327115cd2caSopenharmony_ci holders["account_id"] = std::to_string(holder.holderId); 328115cd2caSopenharmony_ci } 329115cd2caSopenharmony_ci} 330115cd2caSopenharmony_ci 331115cd2caSopenharmony_ci/** 332115cd2caSopenharmony_ci * @brief Resolve object interface in QUERY_CONTACTS case 333115cd2caSopenharmony_ci * 334115cd2caSopenharmony_ci * @param env Conditions for resolve object interface operation 335115cd2caSopenharmony_ci * @param hold Conditions for resolve object interface operation 336115cd2caSopenharmony_ci * @param attr Conditions for resolve object interface operation 337115cd2caSopenharmony_ci */ 338115cd2caSopenharmony_ciDataShare::DataSharePredicates BuildQueryContactsPredicates(napi_env env, napi_value hold, napi_value attr) 339115cd2caSopenharmony_ci{ 340115cd2caSopenharmony_ci ContactsBuild contactsBuild; 341115cd2caSopenharmony_ci Holder holder = contactsBuild.GetHolder(env, hold); 342115cd2caSopenharmony_ci ContactAttributes attrs = contactsBuild.GetContactAttributes(env, attr); 343115cd2caSopenharmony_ci DataShare::DataSharePredicates predicates; 344115cd2caSopenharmony_ci std::map<std::string, std::string> holders; 345115cd2caSopenharmony_ci HoldersStructure(holders, holder); 346115cd2caSopenharmony_ci unsigned int size = attrs.attributes.size(); 347115cd2caSopenharmony_ci unsigned int mapSize = holders.size(); 348115cd2caSopenharmony_ci std::map<std::string, std::string>::iterator it; 349115cd2caSopenharmony_ci for (it = holders.begin(); it != holders.end(); ++it) { 350115cd2caSopenharmony_ci predicates.EqualTo(it->first, it->second); 351115cd2caSopenharmony_ci if (it != --holders.end()) { 352115cd2caSopenharmony_ci predicates.And(); 353115cd2caSopenharmony_ci } 354115cd2caSopenharmony_ci } 355115cd2caSopenharmony_ci if (mapSize > 0) { 356115cd2caSopenharmony_ci predicates.And(); 357115cd2caSopenharmony_ci } 358115cd2caSopenharmony_ci if (size > 0) { 359115cd2caSopenharmony_ci predicates.BeginWrap(); 360115cd2caSopenharmony_ci } 361115cd2caSopenharmony_ci for (unsigned int i = 0; i < size; ++i) { 362115cd2caSopenharmony_ci predicates.EqualTo("type_id", std::to_string(attrs.attributes[i])); 363115cd2caSopenharmony_ci if (i != size - 1) { 364115cd2caSopenharmony_ci predicates.Or(); 365115cd2caSopenharmony_ci } 366115cd2caSopenharmony_ci } 367115cd2caSopenharmony_ci if (size > 0) { 368115cd2caSopenharmony_ci predicates.EndWrap(); 369115cd2caSopenharmony_ci } 370115cd2caSopenharmony_ci if (size > 0 || mapSize > 0) { 371115cd2caSopenharmony_ci predicates.And(); 372115cd2caSopenharmony_ci } 373115cd2caSopenharmony_ci predicates.EqualTo("is_deleted", "0"); 374115cd2caSopenharmony_ci return predicates; 375115cd2caSopenharmony_ci} 376115cd2caSopenharmony_ci 377115cd2caSopenharmony_ci/** 378115cd2caSopenharmony_ci * @brief Resolve object interface in QUERY_CONTACTS_BY_EMAIL case 379115cd2caSopenharmony_ci * 380115cd2caSopenharmony_ci * @param env Conditions for resolve object interface operation 381115cd2caSopenharmony_ci * @param emailobject Conditions for resolve object interface operation 382115cd2caSopenharmony_ci * @param hold Conditions for resolve object interface operation 383115cd2caSopenharmony_ci * @param attr Conditions for resolve object interface operation 384115cd2caSopenharmony_ci */ 385115cd2caSopenharmony_ciDataShare::DataSharePredicates BuildQueryContactsByEmailPredicates( 386115cd2caSopenharmony_ci napi_env env, napi_value emailobject, napi_value hold, napi_value attr) 387115cd2caSopenharmony_ci{ 388115cd2caSopenharmony_ci ContactsBuild contactsBuild; 389115cd2caSopenharmony_ci std::string email = contactsBuild.NapiGetValueString(env, emailobject); 390115cd2caSopenharmony_ci Holder holder = contactsBuild.GetHolder(env, hold); 391115cd2caSopenharmony_ci DataShare::DataSharePredicates predicates; 392115cd2caSopenharmony_ci if (!email.empty() || email != "") { 393115cd2caSopenharmony_ci predicates.EqualTo("is_deleted", "0"); 394115cd2caSopenharmony_ci predicates.And(); 395115cd2caSopenharmony_ci predicates.EqualTo("detail_info", email); 396115cd2caSopenharmony_ci predicates.And(); 397115cd2caSopenharmony_ci predicates.EqualTo("content_type", "email"); 398115cd2caSopenharmony_ci HolderPredicates(holder, predicates); 399115cd2caSopenharmony_ci } 400115cd2caSopenharmony_ci return predicates; 401115cd2caSopenharmony_ci} 402115cd2caSopenharmony_ci 403115cd2caSopenharmony_ci/** 404115cd2caSopenharmony_ci * @brief Resolve object interface in QUERY_CONTACTS_BY_PHONE_NUMBER case 405115cd2caSopenharmony_ci * 406115cd2caSopenharmony_ci * @param env Conditions for resolve object interface operation 407115cd2caSopenharmony_ci * @param number Conditions for resolve object interface operation 408115cd2caSopenharmony_ci * @param hold Conditions for resolve object interface operation 409115cd2caSopenharmony_ci * @param attr Conditions for resolve object interface operation 410115cd2caSopenharmony_ci */ 411115cd2caSopenharmony_ciDataShare::DataSharePredicates BuildQueryContactsByPhoneNumberPredicates( 412115cd2caSopenharmony_ci napi_env env, napi_value number, napi_value hold, napi_value attr) 413115cd2caSopenharmony_ci{ 414115cd2caSopenharmony_ci ContactsBuild contactsBuild; 415115cd2caSopenharmony_ci std::string phoneNumber = contactsBuild.NapiGetValueString(env, number); 416115cd2caSopenharmony_ci Holder holder = contactsBuild.GetHolder(env, hold); 417115cd2caSopenharmony_ci DataShare::DataSharePredicates predicates; 418115cd2caSopenharmony_ci if (!phoneNumber.empty() || phoneNumber != "") { 419115cd2caSopenharmony_ci predicates.EqualTo("is_deleted", "0"); 420115cd2caSopenharmony_ci predicates.And(); 421115cd2caSopenharmony_ci predicates.EqualTo("detail_info", phoneNumber); 422115cd2caSopenharmony_ci predicates.And(); 423115cd2caSopenharmony_ci predicates.EqualTo("content_type", "phone"); 424115cd2caSopenharmony_ci HolderPredicates(holder, predicates); 425115cd2caSopenharmony_ci } 426115cd2caSopenharmony_ci return predicates; 427115cd2caSopenharmony_ci} 428115cd2caSopenharmony_ci 429115cd2caSopenharmony_ci/** 430115cd2caSopenharmony_ci * @brief Resolve object interface in QUERY_GROUPS case 431115cd2caSopenharmony_ci * 432115cd2caSopenharmony_ci * @param env Conditions for resolve object interface operation 433115cd2caSopenharmony_ci * @param hold Conditions for resolve object interface operation 434115cd2caSopenharmony_ci */ 435115cd2caSopenharmony_ciDataShare::DataSharePredicates BuildQueryGroupsPredicates(napi_env env, napi_value hold) 436115cd2caSopenharmony_ci{ 437115cd2caSopenharmony_ci ContactsBuild contactsBuild; 438115cd2caSopenharmony_ci Holder holder = contactsBuild.GetHolder(env, hold); 439115cd2caSopenharmony_ci DataShare::DataSharePredicates predicates; 440115cd2caSopenharmony_ci std::map<std::string, std::string> holders; 441115cd2caSopenharmony_ci HoldersStructure(holders, holder); 442115cd2caSopenharmony_ci predicates.EqualTo("is_deleted", "0"); 443115cd2caSopenharmony_ci unsigned int size = holders.size(); 444115cd2caSopenharmony_ci if (size > 0) { 445115cd2caSopenharmony_ci predicates.And(); 446115cd2caSopenharmony_ci } 447115cd2caSopenharmony_ci std::map<std::string, std::string>::iterator it; 448115cd2caSopenharmony_ci for (it = holders.begin(); it != holders.end(); ++it) { 449115cd2caSopenharmony_ci predicates.EqualTo(it->first, it->second); 450115cd2caSopenharmony_ci if (it != --holders.end()) { 451115cd2caSopenharmony_ci predicates.And(); 452115cd2caSopenharmony_ci } 453115cd2caSopenharmony_ci } 454115cd2caSopenharmony_ci return predicates; 455115cd2caSopenharmony_ci} 456115cd2caSopenharmony_ci 457115cd2caSopenharmony_ci/** 458115cd2caSopenharmony_ci * @brief Resolve object interface in QUERY_KEY case 459115cd2caSopenharmony_ci * 460115cd2caSopenharmony_ci * @param env Conditions for resolve object interface operation 461115cd2caSopenharmony_ci * @param id Conditions for resolve object interface operation 462115cd2caSopenharmony_ci * @param hold Conditions for resolve object interface operation 463115cd2caSopenharmony_ci */ 464115cd2caSopenharmony_ciDataShare::DataSharePredicates BuildQueryKeyPredicates(napi_env env, napi_value id, napi_value hold) 465115cd2caSopenharmony_ci{ 466115cd2caSopenharmony_ci ContactsBuild contactsBuild; 467115cd2caSopenharmony_ci int value = contactsBuild.GetInt(env, id); 468115cd2caSopenharmony_ci Holder holder = contactsBuild.GetHolder(env, hold); 469115cd2caSopenharmony_ci DataShare::DataSharePredicates predicates; 470115cd2caSopenharmony_ci if (value != 0) { 471115cd2caSopenharmony_ci predicates.EqualTo("is_deleted", "0"); 472115cd2caSopenharmony_ci predicates.And(); 473115cd2caSopenharmony_ci predicates.EqualTo("contact_id", std::to_string(value)); 474115cd2caSopenharmony_ci HolderPredicates(holder, predicates); 475115cd2caSopenharmony_ci } 476115cd2caSopenharmony_ci return predicates; 477115cd2caSopenharmony_ci} 478115cd2caSopenharmony_ci 479115cd2caSopenharmony_ci/** 480115cd2caSopenharmony_ci * @brief Resolve object interface in QUERY_MY_CARD case 481115cd2caSopenharmony_ci * 482115cd2caSopenharmony_ci * @param env Conditions for resolve object interface operation 483115cd2caSopenharmony_ci * @param attr Conditions for resolve object interface operation 484115cd2caSopenharmony_ci */ 485115cd2caSopenharmony_ciDataShare::DataSharePredicates BuildQueryMyCardPredicates(napi_env env, napi_value attr) 486115cd2caSopenharmony_ci{ 487115cd2caSopenharmony_ci ContactsBuild contactsBuild; 488115cd2caSopenharmony_ci ContactAttributes attrs = contactsBuild.GetContactAttributes(env, attr); 489115cd2caSopenharmony_ci DataShare::DataSharePredicates predicates; 490115cd2caSopenharmony_ci unsigned int size = attrs.attributes.size(); 491115cd2caSopenharmony_ci predicates.EqualTo("is_deleted", "0"); 492115cd2caSopenharmony_ci if (size > 0) { 493115cd2caSopenharmony_ci predicates.And(); 494115cd2caSopenharmony_ci } 495115cd2caSopenharmony_ci for (unsigned int i = 0; i < size; ++i) { 496115cd2caSopenharmony_ci predicates.EqualTo("type_id", std::to_string(attrs.attributes[i])); 497115cd2caSopenharmony_ci if (i != size - 1) { 498115cd2caSopenharmony_ci predicates.Or(); 499115cd2caSopenharmony_ci } 500115cd2caSopenharmony_ci } 501115cd2caSopenharmony_ci return predicates; 502115cd2caSopenharmony_ci} 503115cd2caSopenharmony_ci 504115cd2caSopenharmony_ciDataShare::DataSharePredicates BuildQueryContactData(napi_env env, napi_value &contactObject, napi_value &attrObject, 505115cd2caSopenharmony_ci std::vector<DataShare::DataShareValuesBucket> &valueContactData) 506115cd2caSopenharmony_ci{ 507115cd2caSopenharmony_ci ContactsBuild contactsBuild; 508115cd2caSopenharmony_ci Contacts contact; 509115cd2caSopenharmony_ci contactsBuild.GetContactDataByObject(env, contactObject, contact); 510115cd2caSopenharmony_ci ContactAttributes attrs = contactsBuild.GetContactAttributes(env, attrObject); 511115cd2caSopenharmony_ci CheckAttributes(attrs); 512115cd2caSopenharmony_ci DataShare::DataSharePredicates predicates; 513115cd2caSopenharmony_ci std::vector<std::string> fields; 514115cd2caSopenharmony_ci fields.push_back("raw_contact_id"); 515115cd2caSopenharmony_ci if (contact.id != 0) { 516115cd2caSopenharmony_ci predicates.EqualTo("is_deleted", "0"); 517115cd2caSopenharmony_ci predicates.And(); 518115cd2caSopenharmony_ci predicates.EqualTo("contact_id", std::to_string(contact.id)); 519115cd2caSopenharmony_ci predicates.GroupBy(fields); 520115cd2caSopenharmony_ci } 521115cd2caSopenharmony_ci unsigned int size = attrs.attributes.size(); 522115cd2caSopenharmony_ci for (unsigned int i = 0; i < size; i++) { 523115cd2caSopenharmony_ci contactsBuild.BuildValueContactDataByType(contact, attrs.attributes[i], valueContactData); 524115cd2caSopenharmony_ci } 525115cd2caSopenharmony_ci return predicates; 526115cd2caSopenharmony_ci} 527115cd2caSopenharmony_ci 528115cd2caSopenharmony_cistd::vector<std::string> BuildUpdateContactColumns() 529115cd2caSopenharmony_ci{ 530115cd2caSopenharmony_ci std::vector<std::string> columns; 531115cd2caSopenharmony_ci columns.push_back("raw_contact_id"); 532115cd2caSopenharmony_ci return columns; 533115cd2caSopenharmony_ci} 534115cd2caSopenharmony_ci 535115cd2caSopenharmony_ciint GetRawIdByResultSet(const std::shared_ptr<DataShare::DataShareResultSet> &resultSet) 536115cd2caSopenharmony_ci{ 537115cd2caSopenharmony_ci if (resultSet == nullptr) { 538115cd2caSopenharmony_ci return -1; 539115cd2caSopenharmony_ci } 540115cd2caSopenharmony_ci int resultSetNum = resultSet->GoToFirstRow(); 541115cd2caSopenharmony_ci int intValue = 0; 542115cd2caSopenharmony_ci while (resultSetNum == OHOS::NativeRdb::E_OK) { 543115cd2caSopenharmony_ci resultSet->GetInt(0, intValue); 544115cd2caSopenharmony_ci resultSetNum = resultSet->GoToNextRow(); 545115cd2caSopenharmony_ci } 546115cd2caSopenharmony_ci resultSet->Close(); 547115cd2caSopenharmony_ci return intValue; 548115cd2caSopenharmony_ci} 549115cd2caSopenharmony_ci 550115cd2caSopenharmony_ciDataShare::DataSharePredicates BuildUpdateContactConvertParams(napi_env env, napi_value &contact, 551115cd2caSopenharmony_ci napi_value &attr, ExecuteHelper *executeHelper) 552115cd2caSopenharmony_ci{ 553115cd2caSopenharmony_ci executeHelper->valueContactData.clear(); 554115cd2caSopenharmony_ci DataShare::DataSharePredicates predicates = 555115cd2caSopenharmony_ci BuildQueryContactData(env, contact, attr, executeHelper->valueContactData); 556115cd2caSopenharmony_ci executeHelper->columns = BuildUpdateContactColumns(); 557115cd2caSopenharmony_ci executeHelper->deletePredicates = BuildDeleteContactDataPredicates(env, attr); 558115cd2caSopenharmony_ci return predicates; 559115cd2caSopenharmony_ci} 560115cd2caSopenharmony_ci 561115cd2caSopenharmony_ciDataShare::DataSharePredicates BuildDeleteContactDataPredicates(napi_env env, napi_value attr) 562115cd2caSopenharmony_ci{ 563115cd2caSopenharmony_ci ContactsBuild contactsBuild; 564115cd2caSopenharmony_ci ContactAttributes attrs = contactsBuild.GetContactAttributes(env, attr); 565115cd2caSopenharmony_ci CheckAttributes(attrs); 566115cd2caSopenharmony_ci DataShare::DataSharePredicates predicates; 567115cd2caSopenharmony_ci AttributesPredicates(true, attrs, predicates); 568115cd2caSopenharmony_ci return predicates; 569115cd2caSopenharmony_ci} 570115cd2caSopenharmony_ci 571115cd2caSopenharmony_ci/** 572115cd2caSopenharmony_ci * @brief Resolve object interface in IS_LOCAL_CONTACT case 573115cd2caSopenharmony_ci * 574115cd2caSopenharmony_ci * @param env Conditions for resolve object interface operation 575115cd2caSopenharmony_ci * @param id Conditions for resolve object interface operation 576115cd2caSopenharmony_ci */ 577115cd2caSopenharmony_ciDataShare::DataSharePredicates BuildIsLocalContactPredicates(napi_env env, napi_value id) 578115cd2caSopenharmony_ci{ 579115cd2caSopenharmony_ci ContactsBuild contactsBuild; 580115cd2caSopenharmony_ci int value = contactsBuild.GetInt(env, id); 581115cd2caSopenharmony_ci DataShare::DataSharePredicates predicates; 582115cd2caSopenharmony_ci if (value != 0) { 583115cd2caSopenharmony_ci predicates.EqualTo("is_deleted", "0"); 584115cd2caSopenharmony_ci predicates.And(); 585115cd2caSopenharmony_ci predicates.EqualTo("contact_id", std::to_string(value)); 586115cd2caSopenharmony_ci predicates.And(); 587115cd2caSopenharmony_ci predicates.EqualTo("account_type", "com.ohos.contacts"); 588115cd2caSopenharmony_ci predicates.And(); 589115cd2caSopenharmony_ci predicates.EqualTo("account_name", "phone"); 590115cd2caSopenharmony_ci } 591115cd2caSopenharmony_ci return predicates; 592115cd2caSopenharmony_ci} 593115cd2caSopenharmony_ci 594115cd2caSopenharmony_ci/** 595115cd2caSopenharmony_ci * @brief Resolve object interface in IS_MY_CARD case 596115cd2caSopenharmony_ci * 597115cd2caSopenharmony_ci * @param env Conditions for resolve object interface operation 598115cd2caSopenharmony_ci * @param id Conditions for resolve object interface operation 599115cd2caSopenharmony_ci */ 600115cd2caSopenharmony_ciDataShare::DataSharePredicates BuildIsMyCardPredicates(napi_env env, napi_value id) 601115cd2caSopenharmony_ci{ 602115cd2caSopenharmony_ci ContactsBuild contactsBuild; 603115cd2caSopenharmony_ci int value = contactsBuild.GetInt(env, id); 604115cd2caSopenharmony_ci DataShare::DataSharePredicates predicates; 605115cd2caSopenharmony_ci if (value != 0) { 606115cd2caSopenharmony_ci predicates.EqualTo("is_deleted", "0"); 607115cd2caSopenharmony_ci predicates.And(); 608115cd2caSopenharmony_ci predicates.EqualTo("contact_id", std::to_string(value)); 609115cd2caSopenharmony_ci } 610115cd2caSopenharmony_ci return predicates; 611115cd2caSopenharmony_ci} 612115cd2caSopenharmony_ci 613115cd2caSopenharmony_civoid ExecuteDone(napi_env env, napi_status status, void *data) 614115cd2caSopenharmony_ci{ 615115cd2caSopenharmony_ci HILOG_INFO("contactApi ExecuteDone start===>"); 616115cd2caSopenharmony_ci ExecuteHelper *executeHelper = reinterpret_cast<ExecuteHelper *>(data); 617115cd2caSopenharmony_ci HILOG_INFO("ExecuteDone workName: %{public}d", executeHelper->actionCode); 618115cd2caSopenharmony_ci napi_value result = nullptr; 619115cd2caSopenharmony_ci napi_deferred deferred = executeHelper->deferred; 620115cd2caSopenharmony_ci HandleExecuteResult(env, executeHelper, result); 621115cd2caSopenharmony_ci if (executeHelper->abilityContext != nullptr) { 622115cd2caSopenharmony_ci HILOG_INFO("executeHelper->abilityContext != nullptr"); 623115cd2caSopenharmony_ci napi_value errorCode = nullptr; 624115cd2caSopenharmony_ci HandleExecuteErrorCode(env, executeHelper, errorCode); 625115cd2caSopenharmony_ci if (errorCode != nullptr) { 626115cd2caSopenharmony_ci NAPI_CALL_RETURN_VOID(env, napi_reject_deferred(env, deferred, errorCode)); 627115cd2caSopenharmony_ci } else { 628115cd2caSopenharmony_ci NAPI_CALL_RETURN_VOID(env, napi_resolve_deferred(env, deferred, result)); 629115cd2caSopenharmony_ci } 630115cd2caSopenharmony_ci } else { 631115cd2caSopenharmony_ci HILOG_INFO("executeHelper->abilityContext = nullptr"); 632115cd2caSopenharmony_ci NAPI_CALL_RETURN_VOID(env, napi_resolve_deferred(env, deferred, result)); 633115cd2caSopenharmony_ci } 634115cd2caSopenharmony_ci executeHelper->deferred = nullptr; 635115cd2caSopenharmony_ci if (executeHelper->valueUpdateContact.capacity() != 0) { 636115cd2caSopenharmony_ci std::vector<DataShare::DataShareValuesBucket>().swap(executeHelper->valueUpdateContact); 637115cd2caSopenharmony_ci } 638115cd2caSopenharmony_ci if (executeHelper->valueContact.capacity() != 0) { 639115cd2caSopenharmony_ci std::vector<DataShare::DataShareValuesBucket>().swap(executeHelper->valueUpdateContact); 640115cd2caSopenharmony_ci } 641115cd2caSopenharmony_ci if (executeHelper->valueContactData.capacity() != 0) { 642115cd2caSopenharmony_ci std::vector<DataShare::DataShareValuesBucket>().swap(executeHelper->valueUpdateContact); 643115cd2caSopenharmony_ci } 644115cd2caSopenharmony_ci 645115cd2caSopenharmony_ci NAPI_CALL_RETURN_VOID(env, napi_delete_async_work(env, executeHelper->work)); 646115cd2caSopenharmony_ci if (executeHelper->dataShareHelper != nullptr) { 647115cd2caSopenharmony_ci executeHelper->dataShareHelper->Release(); 648115cd2caSopenharmony_ci executeHelper->dataShareHelper = nullptr; 649115cd2caSopenharmony_ci } 650115cd2caSopenharmony_ci delete executeHelper; 651115cd2caSopenharmony_ci executeHelper = nullptr; 652115cd2caSopenharmony_ci} 653115cd2caSopenharmony_ci 654115cd2caSopenharmony_civoid ExecuteSyncDone(napi_env env, napi_status status, void *data) 655115cd2caSopenharmony_ci{ 656115cd2caSopenharmony_ci HILOG_INFO("contactApi ExecuteSyncDone start===>"); 657115cd2caSopenharmony_ci if (status != napi_ok) { 658115cd2caSopenharmony_ci HILOG_ERROR("ExecuteSyncDone status is not ok===>"); 659115cd2caSopenharmony_ci return; 660115cd2caSopenharmony_ci } 661115cd2caSopenharmony_ci if (data != nullptr) { 662115cd2caSopenharmony_ci ExecuteHelper *executeHelper = reinterpret_cast<ExecuteHelper *>(data); 663115cd2caSopenharmony_ci HILOG_INFO("ExecuteSyncDone workName: %{public}d", executeHelper->actionCode); 664115cd2caSopenharmony_ci napi_value global; 665115cd2caSopenharmony_ci napi_get_global(env, &global); 666115cd2caSopenharmony_ci napi_value resultData[RESULT_DATA_SIZE]; 667115cd2caSopenharmony_ci if (executeHelper->abilityContext != nullptr) { 668115cd2caSopenharmony_ci HandleExecuteErrorCode(env, executeHelper, resultData[0]); 669115cd2caSopenharmony_ci HandleExecuteResult(env, executeHelper, resultData[1]); 670115cd2caSopenharmony_ci } else { 671115cd2caSopenharmony_ci if (executeHelper->resultData < 0) { 672115cd2caSopenharmony_ci HandleExecuteErrorCode(env, executeHelper, resultData[0]); 673115cd2caSopenharmony_ci HandleExecuteResult(env, executeHelper, resultData[1]); 674115cd2caSopenharmony_ci } else { 675115cd2caSopenharmony_ci napi_get_undefined(env, &resultData[0]); 676115cd2caSopenharmony_ci HandleExecuteResult(env, executeHelper, resultData[1]); 677115cd2caSopenharmony_ci } 678115cd2caSopenharmony_ci } 679115cd2caSopenharmony_ci 680115cd2caSopenharmony_ci napi_value result; 681115cd2caSopenharmony_ci napi_value callBack; 682115cd2caSopenharmony_ci napi_get_reference_value(env, executeHelper->callBack, &callBack); 683115cd2caSopenharmony_ci napi_valuetype valuetype = napi_undefined; 684115cd2caSopenharmony_ci napi_typeof(env, callBack, &valuetype); 685115cd2caSopenharmony_ci if (valuetype != napi_function) { 686115cd2caSopenharmony_ci HILOG_ERROR("contactApi params not is function"); 687115cd2caSopenharmony_ci return; 688115cd2caSopenharmony_ci } 689115cd2caSopenharmony_ci napi_call_function(env, global, callBack, RESULT_DATA_SIZE, resultData, &result); 690115cd2caSopenharmony_ci if (executeHelper->work != nullptr) { 691115cd2caSopenharmony_ci napi_delete_async_work(env, executeHelper->work); 692115cd2caSopenharmony_ci } 693115cd2caSopenharmony_ci executeHelper->work = nullptr; 694115cd2caSopenharmony_ci executeHelper->deferred = nullptr; 695115cd2caSopenharmony_ci if (executeHelper->valueUpdateContact.capacity() != 0) { 696115cd2caSopenharmony_ci std::vector<DataShare::DataShareValuesBucket>().swap(executeHelper->valueUpdateContact); 697115cd2caSopenharmony_ci } 698115cd2caSopenharmony_ci if (executeHelper->valueContact.capacity() != 0) { 699115cd2caSopenharmony_ci std::vector<DataShare::DataShareValuesBucket>().swap(executeHelper->valueUpdateContact); 700115cd2caSopenharmony_ci } 701115cd2caSopenharmony_ci if (executeHelper->valueContactData.capacity() != 0) { 702115cd2caSopenharmony_ci std::vector<DataShare::DataShareValuesBucket>().swap(executeHelper->valueUpdateContact); 703115cd2caSopenharmony_ci } 704115cd2caSopenharmony_ci if (executeHelper->dataShareHelper != nullptr) { 705115cd2caSopenharmony_ci executeHelper->dataShareHelper->Release(); 706115cd2caSopenharmony_ci executeHelper->dataShareHelper = nullptr; 707115cd2caSopenharmony_ci } 708115cd2caSopenharmony_ci delete executeHelper; 709115cd2caSopenharmony_ci executeHelper = nullptr; 710115cd2caSopenharmony_ci } 711115cd2caSopenharmony_ci HILOG_INFO("contactApi ExecuteSyncDone done===>"); 712115cd2caSopenharmony_ci} 713115cd2caSopenharmony_ci 714115cd2caSopenharmony_civoid HandleExecuteErrorCode(napi_env env, ExecuteHelper *executeHelper, napi_value &result) 715115cd2caSopenharmony_ci{ 716115cd2caSopenharmony_ci HILOG_INFO("HandleExecuteErrorCode"); 717115cd2caSopenharmony_ci ResultConvert resultConvert; 718115cd2caSopenharmony_ci switch (executeHelper->actionCode) { 719115cd2caSopenharmony_ci case ADD_CONTACT: 720115cd2caSopenharmony_ci case DELETE_CONTACT: 721115cd2caSopenharmony_ci case UPDATE_CONTACT: 722115cd2caSopenharmony_ci case SELECT_CONTACT: 723115cd2caSopenharmony_ci case IS_LOCAL_CONTACT: 724115cd2caSopenharmony_ci case IS_MY_CARD: 725115cd2caSopenharmony_ci case QUERY_CONTACT: 726115cd2caSopenharmony_ci case QUERY_MY_CARD: 727115cd2caSopenharmony_ci case QUERY_KEY: 728115cd2caSopenharmony_ci case QUERY_CONTACTS: 729115cd2caSopenharmony_ci case QUERY_CONTACTS_BY_EMAIL: 730115cd2caSopenharmony_ci case QUERY_CONTACTS_BY_PHONE_NUMBER: 731115cd2caSopenharmony_ci case QUERY_GROUPS: 732115cd2caSopenharmony_ci case QUERY_HOLDERS: 733115cd2caSopenharmony_ci HILOG_INFO("HandleExecuteErrorCode resultData"); 734115cd2caSopenharmony_ci if (executeHelper->resultData == RDB_PARAMETER_ERROR || executeHelper->resultData == ERROR) { 735115cd2caSopenharmony_ci HILOG_ERROR("handleExecuteErrorCode handle parm error"); 736115cd2caSopenharmony_ci result = ContactsNapiUtils::CreateError(env, PARAMETER_ERROR); 737115cd2caSopenharmony_ci } else if (executeHelper->resultData == VERIFICATION_PERMISSION_ERROR) { 738115cd2caSopenharmony_ci HILOG_ERROR("parameter verification failed error"); 739115cd2caSopenharmony_ci result = ContactsNapiUtils::CreateErrorByVerification(env, PARAMETER_ERROR); 740115cd2caSopenharmony_ci } else if (executeHelper->resultData == RDB_PERMISSION_ERROR) { 741115cd2caSopenharmony_ci HILOG_ERROR("permission error"); 742115cd2caSopenharmony_ci result = ContactsNapiUtils::CreateError(env, PERMISSION_ERROR); 743115cd2caSopenharmony_ci } 744115cd2caSopenharmony_ci break; 745115cd2caSopenharmony_ci default: 746115cd2caSopenharmony_ci break; 747115cd2caSopenharmony_ci } 748115cd2caSopenharmony_ci} 749115cd2caSopenharmony_ci 750115cd2caSopenharmony_civoid HandleExecuteResult(napi_env env, ExecuteHelper *executeHelper, napi_value &result) 751115cd2caSopenharmony_ci{ 752115cd2caSopenharmony_ci ResultConvert resultConvert; 753115cd2caSopenharmony_ci napi_value results = nullptr; 754115cd2caSopenharmony_ci switch (executeHelper->actionCode) { 755115cd2caSopenharmony_ci case ADD_CONTACT: 756115cd2caSopenharmony_ci case DELETE_CONTACT: 757115cd2caSopenharmony_ci case UPDATE_CONTACT: 758115cd2caSopenharmony_ci case SELECT_CONTACT: 759115cd2caSopenharmony_ci if (executeHelper->resultData == RDB_PERMISSION_ERROR) { 760115cd2caSopenharmony_ci napi_create_int64(env, ERROR, &result); 761115cd2caSopenharmony_ci } else { 762115cd2caSopenharmony_ci napi_create_int64(env, executeHelper->resultData, &result); 763115cd2caSopenharmony_ci } 764115cd2caSopenharmony_ci break; 765115cd2caSopenharmony_ci case IS_LOCAL_CONTACT: 766115cd2caSopenharmony_ci case IS_MY_CARD: 767115cd2caSopenharmony_ci napi_get_boolean(env, executeHelper->resultData != 0, &result); 768115cd2caSopenharmony_ci break; 769115cd2caSopenharmony_ci case QUERY_CONTACT: 770115cd2caSopenharmony_ci case QUERY_MY_CARD: 771115cd2caSopenharmony_ci results = resultConvert.ResultSetToObject(env, executeHelper->resultSet); 772115cd2caSopenharmony_ci if (results != nullptr) { 773115cd2caSopenharmony_ci napi_get_element(env, results, 0, &result); 774115cd2caSopenharmony_ci } 775115cd2caSopenharmony_ci break; 776115cd2caSopenharmony_ci case QUERY_KEY: 777115cd2caSopenharmony_ci results = resultConvert.ResultSetToObject(env, executeHelper->resultSet); 778115cd2caSopenharmony_ci if (results != nullptr) { 779115cd2caSopenharmony_ci napi_get_element(env, results, 0, &result); 780115cd2caSopenharmony_ci } 781115cd2caSopenharmony_ci napi_get_named_property(env, result, "key", &result); 782115cd2caSopenharmony_ci break; 783115cd2caSopenharmony_ci case QUERY_CONTACTS: 784115cd2caSopenharmony_ci case QUERY_CONTACTS_BY_EMAIL: 785115cd2caSopenharmony_ci case QUERY_CONTACTS_BY_PHONE_NUMBER: 786115cd2caSopenharmony_ci result = resultConvert.ResultSetToObject(env, executeHelper->resultSet); 787115cd2caSopenharmony_ci break; 788115cd2caSopenharmony_ci case QUERY_GROUPS: 789115cd2caSopenharmony_ci result = resultConvert.ResultSetToGroup(env, executeHelper->resultSet); 790115cd2caSopenharmony_ci break; 791115cd2caSopenharmony_ci case QUERY_HOLDERS: 792115cd2caSopenharmony_ci result = resultConvert.ResultSetToHolder(env, executeHelper->resultSet); 793115cd2caSopenharmony_ci break; 794115cd2caSopenharmony_ci default: 795115cd2caSopenharmony_ci break; 796115cd2caSopenharmony_ci } 797115cd2caSopenharmony_ci} 798115cd2caSopenharmony_ci 799115cd2caSopenharmony_civoid LocalExecuteAddContact(napi_env env, ExecuteHelper *executeHelper) 800115cd2caSopenharmony_ci{ 801115cd2caSopenharmony_ci if (executeHelper->valueContactData.empty()) { 802115cd2caSopenharmony_ci HILOG_ERROR("addContact contact_data can not be empty"); 803115cd2caSopenharmony_ci executeHelper->resultData = ERROR; 804115cd2caSopenharmony_ci return; 805115cd2caSopenharmony_ci } 806115cd2caSopenharmony_ci ContactsControl contactsControl; 807115cd2caSopenharmony_ci int rawId = contactsControl.RawContactInsert( 808115cd2caSopenharmony_ci executeHelper->dataShareHelper, (executeHelper->valueContact)[0]); 809115cd2caSopenharmony_ci std::vector<DataShare::DataShareValuesBucket> value = executeHelper->valueContactData; 810115cd2caSopenharmony_ci unsigned int size = value.size(); 811115cd2caSopenharmony_ci for (unsigned int i = 0; i < size; ++i) { 812115cd2caSopenharmony_ci (executeHelper->valueContactData)[i].Put("raw_contact_id", rawId); 813115cd2caSopenharmony_ci } 814115cd2caSopenharmony_ci int code = contactsControl.ContactDataInsert(executeHelper->dataShareHelper, executeHelper->valueContactData); 815115cd2caSopenharmony_ci if (code == 0) { 816115cd2caSopenharmony_ci executeHelper->resultData = rawId; 817115cd2caSopenharmony_ci } else { 818115cd2caSopenharmony_ci executeHelper->resultData = code; 819115cd2caSopenharmony_ci } 820115cd2caSopenharmony_ci} 821115cd2caSopenharmony_ci 822115cd2caSopenharmony_civoid LocalExecuteDeleteContact(napi_env env, ExecuteHelper *executeHelper) 823115cd2caSopenharmony_ci{ 824115cd2caSopenharmony_ci ContactsControl contactsControl; 825115cd2caSopenharmony_ci int ret = contactsControl.ContactDelete(executeHelper->dataShareHelper, executeHelper->predicates); 826115cd2caSopenharmony_ci HILOG_INFO("LocalExecuteDeleteContact contact ret = %{public}d", ret); 827115cd2caSopenharmony_ci executeHelper->resultData = ret; 828115cd2caSopenharmony_ci} 829115cd2caSopenharmony_ci 830115cd2caSopenharmony_civoid LocalExecuteQueryContact(napi_env env, ExecuteHelper *executeHelper) 831115cd2caSopenharmony_ci{ 832115cd2caSopenharmony_ci ContactsControl contactsControl; 833115cd2caSopenharmony_ci executeHelper->resultSet = contactsControl.ContactQuery( 834115cd2caSopenharmony_ci executeHelper->dataShareHelper, executeHelper->columns, executeHelper->predicates); 835115cd2caSopenharmony_ci executeHelper->resultData = SUCCESS; 836115cd2caSopenharmony_ci} 837115cd2caSopenharmony_ci 838115cd2caSopenharmony_civoid LocalExecuteQueryContactsOrKey(napi_env env, ExecuteHelper *executeHelper) 839115cd2caSopenharmony_ci{ 840115cd2caSopenharmony_ci ContactsControl contactsControl; 841115cd2caSopenharmony_ci executeHelper->resultSet = contactsControl.ContactQuery( 842115cd2caSopenharmony_ci executeHelper->dataShareHelper, executeHelper->columns, executeHelper->predicates); 843115cd2caSopenharmony_ci executeHelper->resultData = SUCCESS; 844115cd2caSopenharmony_ci} 845115cd2caSopenharmony_ci 846115cd2caSopenharmony_civoid LocalExecuteQueryContactsByData(napi_env env, ExecuteHelper *executeHelper) 847115cd2caSopenharmony_ci{ 848115cd2caSopenharmony_ci ContactsControl contactsControl; 849115cd2caSopenharmony_ci executeHelper->resultSet = contactsControl.ContactDataQuery( 850115cd2caSopenharmony_ci executeHelper->dataShareHelper, executeHelper->columns, executeHelper->predicates); 851115cd2caSopenharmony_ci std::shared_ptr<DataShare::DataShareResultSet> resultSet = executeHelper->resultSet; 852115cd2caSopenharmony_ci int rowCount = 0; 853115cd2caSopenharmony_ci resultSet->GetRowCount(rowCount); 854115cd2caSopenharmony_ci if (rowCount == 0) { 855115cd2caSopenharmony_ci executeHelper->resultData = RDB_PARAMETER_ERROR; 856115cd2caSopenharmony_ci resultSet->Close(); 857115cd2caSopenharmony_ci } else { 858115cd2caSopenharmony_ci executeHelper->resultData = SUCCESS; 859115cd2caSopenharmony_ci } 860115cd2caSopenharmony_ci} 861115cd2caSopenharmony_ci 862115cd2caSopenharmony_civoid LocalExecuteQueryGroup(napi_env env, ExecuteHelper *executeHelper) 863115cd2caSopenharmony_ci{ 864115cd2caSopenharmony_ci ContactsControl contactsControl; 865115cd2caSopenharmony_ci executeHelper->resultSet = contactsControl.GroupsQuery( 866115cd2caSopenharmony_ci executeHelper->dataShareHelper, executeHelper->columns, executeHelper->predicates); 867115cd2caSopenharmony_ci executeHelper->resultData = SUCCESS; 868115cd2caSopenharmony_ci} 869115cd2caSopenharmony_ci 870115cd2caSopenharmony_civoid LocalExecuteQueryHolders(napi_env env, ExecuteHelper *executeHelper) 871115cd2caSopenharmony_ci{ 872115cd2caSopenharmony_ci ContactsControl contactsControl; 873115cd2caSopenharmony_ci executeHelper->resultSet = contactsControl.HolderQuery( 874115cd2caSopenharmony_ci executeHelper->dataShareHelper, executeHelper->columns, executeHelper->predicates); 875115cd2caSopenharmony_ci executeHelper->resultData = SUCCESS; 876115cd2caSopenharmony_ci} 877115cd2caSopenharmony_ci 878115cd2caSopenharmony_civoid LocalExecuteQueryMyCard(napi_env env, ExecuteHelper *executeHelper) 879115cd2caSopenharmony_ci{ 880115cd2caSopenharmony_ci ContactsControl contactsControl; 881115cd2caSopenharmony_ci executeHelper->resultSet = contactsControl.MyCardQuery( 882115cd2caSopenharmony_ci executeHelper->dataShareHelper, executeHelper->columns, executeHelper->predicates); 883115cd2caSopenharmony_ci executeHelper->resultData = SUCCESS; 884115cd2caSopenharmony_ci} 885115cd2caSopenharmony_ci 886115cd2caSopenharmony_civoid LocalExecuteUpdateContact(napi_env env, ExecuteHelper *executeHelper) 887115cd2caSopenharmony_ci{ 888115cd2caSopenharmony_ci ContactsControl contactsControl; 889115cd2caSopenharmony_ci // query raw_contact_id 890115cd2caSopenharmony_ci std::shared_ptr<DataShare::DataShareResultSet> resultSet = contactsControl.ContactDataQuery( 891115cd2caSopenharmony_ci executeHelper->dataShareHelper, executeHelper->columns, executeHelper->predicates); 892115cd2caSopenharmony_ci int rawId = GetRawIdByResultSet(resultSet); 893115cd2caSopenharmony_ci if (rawId == 0) { 894115cd2caSopenharmony_ci HILOG_ERROR("LocalExecuteUpdateContact contact rawId equals 0"); 895115cd2caSopenharmony_ci executeHelper->resultData = ERROR; 896115cd2caSopenharmony_ci return; 897115cd2caSopenharmony_ci } 898115cd2caSopenharmony_ci std::vector<DataShare::DataShareValuesBucket> value = executeHelper->valueContactData; 899115cd2caSopenharmony_ci unsigned int size = value.size(); 900115cd2caSopenharmony_ci for (unsigned int i = 0; i < size; ++i) { 901115cd2caSopenharmony_ci (executeHelper->valueContactData)[i].Put("raw_contact_id", rawId); 902115cd2caSopenharmony_ci } 903115cd2caSopenharmony_ci executeHelper->deletePredicates.And(); 904115cd2caSopenharmony_ci executeHelper->deletePredicates.EqualTo("raw_contact_id", std::to_string(rawId)); 905115cd2caSopenharmony_ci int resultCode = contactsControl.ContactDataDelete( 906115cd2caSopenharmony_ci executeHelper->dataShareHelper, executeHelper->deletePredicates); 907115cd2caSopenharmony_ci if (resultCode >= 0) { 908115cd2caSopenharmony_ci resultCode = contactsControl.ContactDataInsert( 909115cd2caSopenharmony_ci executeHelper->dataShareHelper, executeHelper->valueContactData); 910115cd2caSopenharmony_ci } 911115cd2caSopenharmony_ci executeHelper->resultData = resultCode; 912115cd2caSopenharmony_ci} 913115cd2caSopenharmony_ci 914115cd2caSopenharmony_civoid LocalExecuteIsLocalContact(napi_env env, ExecuteHelper *executeHelper) 915115cd2caSopenharmony_ci{ 916115cd2caSopenharmony_ci int64_t isLocal = 0; 917115cd2caSopenharmony_ci ContactsControl contactsControl; 918115cd2caSopenharmony_ci std::shared_ptr<DataShare::DataShareResultSet> resultSet = contactsControl.ContactQuery( 919115cd2caSopenharmony_ci executeHelper->dataShareHelper, executeHelper->columns, executeHelper->predicates); 920115cd2caSopenharmony_ci if (resultSet == nullptr) { 921115cd2caSopenharmony_ci executeHelper->resultData = isLocal; 922115cd2caSopenharmony_ci return; 923115cd2caSopenharmony_ci } 924115cd2caSopenharmony_ci int resultSetNum = resultSet->GoToFirstRow(); 925115cd2caSopenharmony_ci if (resultSetNum == OHOS::NativeRdb::E_OK) { 926115cd2caSopenharmony_ci isLocal = 1; 927115cd2caSopenharmony_ci } 928115cd2caSopenharmony_ci executeHelper->resultData = isLocal; 929115cd2caSopenharmony_ci resultSet->Close(); 930115cd2caSopenharmony_ci} 931115cd2caSopenharmony_ci 932115cd2caSopenharmony_civoid LocalExecuteIsMyCard(napi_env env, ExecuteHelper *executeHelper) 933115cd2caSopenharmony_ci{ 934115cd2caSopenharmony_ci int64_t isMyCard = 0; 935115cd2caSopenharmony_ci ContactsControl contactsControl; 936115cd2caSopenharmony_ci std::shared_ptr<DataShare::DataShareResultSet> resultSet = contactsControl.MyCardQuery( 937115cd2caSopenharmony_ci executeHelper->dataShareHelper, executeHelper->columns, executeHelper->predicates); 938115cd2caSopenharmony_ci if (resultSet == nullptr) { 939115cd2caSopenharmony_ci executeHelper->resultData = isMyCard; 940115cd2caSopenharmony_ci return; 941115cd2caSopenharmony_ci } 942115cd2caSopenharmony_ci int rowCount = 0; 943115cd2caSopenharmony_ci resultSet->GetRowCount(rowCount); 944115cd2caSopenharmony_ci int resultSetNum = resultSet->GoToFirstRow(); 945115cd2caSopenharmony_ci if (resultSetNum == OHOS::NativeRdb::E_OK) { 946115cd2caSopenharmony_ci isMyCard = 1; 947115cd2caSopenharmony_ci } 948115cd2caSopenharmony_ci executeHelper->resultData = isMyCard; 949115cd2caSopenharmony_ci resultSet->Close(); 950115cd2caSopenharmony_ci} 951115cd2caSopenharmony_ci 952115cd2caSopenharmony_civoid LocalExecute(napi_env env, ExecuteHelper *executeHelper) 953115cd2caSopenharmony_ci{ 954115cd2caSopenharmony_ci if (executeHelper->dataShareHelper == nullptr) { 955115cd2caSopenharmony_ci HILOG_ERROR("create dataShareHelper is null, please check your permission"); 956115cd2caSopenharmony_ci executeHelper->resultData = RDB_PERMISSION_ERROR; 957115cd2caSopenharmony_ci return; 958115cd2caSopenharmony_ci } 959115cd2caSopenharmony_ci switch (executeHelper->actionCode) { 960115cd2caSopenharmony_ci case ADD_CONTACT: 961115cd2caSopenharmony_ci LocalExecuteAddContact(env, executeHelper); 962115cd2caSopenharmony_ci break; 963115cd2caSopenharmony_ci case DELETE_CONTACT: 964115cd2caSopenharmony_ci LocalExecuteDeleteContact(env, executeHelper); 965115cd2caSopenharmony_ci break; 966115cd2caSopenharmony_ci case UPDATE_CONTACT: 967115cd2caSopenharmony_ci LocalExecuteUpdateContact(env, executeHelper); 968115cd2caSopenharmony_ci break; 969115cd2caSopenharmony_ci default: 970115cd2caSopenharmony_ci LocalExecuteSplit(env, executeHelper); 971115cd2caSopenharmony_ci HILOG_INFO("LocalExecute case error===>"); 972115cd2caSopenharmony_ci break; 973115cd2caSopenharmony_ci } 974115cd2caSopenharmony_ci} 975115cd2caSopenharmony_ci 976115cd2caSopenharmony_civoid LocalExecuteSplit(napi_env env, ExecuteHelper *executeHelper) 977115cd2caSopenharmony_ci{ 978115cd2caSopenharmony_ci ContactsTelephonyPermission permission; 979115cd2caSopenharmony_ci if (!permission.CheckPermission(ContactsApi::Permission::READ_CONTACTS)) { 980115cd2caSopenharmony_ci HILOG_ERROR("LocalExecuteQueryContactsByData Permission denied!"); 981115cd2caSopenharmony_ci executeHelper->resultData = RDB_PERMISSION_ERROR; 982115cd2caSopenharmony_ci return; 983115cd2caSopenharmony_ci } else if (executeHelper->resultData == VERIFICATION_PERMISSION_ERROR) { 984115cd2caSopenharmony_ci HILOG_ERROR("PARAMETER_ERROR, please check your PARAMETER"); 985115cd2caSopenharmony_ci return; 986115cd2caSopenharmony_ci } 987115cd2caSopenharmony_ci switch (executeHelper->actionCode) { 988115cd2caSopenharmony_ci case QUERY_CONTACT: 989115cd2caSopenharmony_ci LocalExecuteQueryContact(env, executeHelper); 990115cd2caSopenharmony_ci break; 991115cd2caSopenharmony_ci case QUERY_CONTACTS: 992115cd2caSopenharmony_ci LocalExecuteQueryContactsOrKey(env, executeHelper); 993115cd2caSopenharmony_ci break; 994115cd2caSopenharmony_ci case QUERY_CONTACTS_BY_EMAIL: 995115cd2caSopenharmony_ci case QUERY_CONTACTS_BY_PHONE_NUMBER: 996115cd2caSopenharmony_ci LocalExecuteQueryContactsByData(env, executeHelper); 997115cd2caSopenharmony_ci break; 998115cd2caSopenharmony_ci case QUERY_GROUPS: 999115cd2caSopenharmony_ci LocalExecuteQueryGroup(env, executeHelper); 1000115cd2caSopenharmony_ci break; 1001115cd2caSopenharmony_ci case QUERY_HOLDERS: 1002115cd2caSopenharmony_ci LocalExecuteQueryHolders(env, executeHelper); 1003115cd2caSopenharmony_ci break; 1004115cd2caSopenharmony_ci case QUERY_KEY: 1005115cd2caSopenharmony_ci LocalExecuteQueryContactsOrKey(env, executeHelper); 1006115cd2caSopenharmony_ci break; 1007115cd2caSopenharmony_ci case QUERY_MY_CARD: 1008115cd2caSopenharmony_ci LocalExecuteQueryMyCard(env, executeHelper); 1009115cd2caSopenharmony_ci break; 1010115cd2caSopenharmony_ci case IS_LOCAL_CONTACT: 1011115cd2caSopenharmony_ci LocalExecuteIsLocalContact(env, executeHelper); 1012115cd2caSopenharmony_ci break; 1013115cd2caSopenharmony_ci case IS_MY_CARD: 1014115cd2caSopenharmony_ci LocalExecuteIsMyCard(env, executeHelper); 1015115cd2caSopenharmony_ci break; 1016115cd2caSopenharmony_ci default: 1017115cd2caSopenharmony_ci HILOG_INFO("LocalExecute case error===>"); 1018115cd2caSopenharmony_ci break; 1019115cd2caSopenharmony_ci } 1020115cd2caSopenharmony_ci} 1021115cd2caSopenharmony_ci 1022115cd2caSopenharmony_civoid Execute(napi_env env, void *data) 1023115cd2caSopenharmony_ci{ 1024115cd2caSopenharmony_ci ExecuteHelper *executeHelper = static_cast<ExecuteHelper *>(data); 1025115cd2caSopenharmony_ci HILOG_INFO("Execute start workName: %{public}d", executeHelper->actionCode); 1026115cd2caSopenharmony_ci LocalExecute(env, executeHelper); 1027115cd2caSopenharmony_ci} 1028115cd2caSopenharmony_ci 1029115cd2caSopenharmony_cinapi_value CreateAsyncWork(napi_env env, ExecuteHelper *executeHelper) 1030115cd2caSopenharmony_ci{ 1031115cd2caSopenharmony_ci napi_value workName; 1032115cd2caSopenharmony_ci napi_value result = nullptr; 1033115cd2caSopenharmony_ci if (executeHelper->sync == NAPI_CALL_TYPE_CALLBACK) { 1034115cd2caSopenharmony_ci napi_create_string_latin1(env, __func__, NAPI_AUTO_LENGTH, &workName); 1035115cd2caSopenharmony_ci napi_create_reference(env, executeHelper->argv[executeHelper->argc - 1], 1, &executeHelper->callBack); 1036115cd2caSopenharmony_ci napi_create_async_work(env, nullptr, workName, Execute, ExecuteSyncDone, 1037115cd2caSopenharmony_ci reinterpret_cast<void *>(executeHelper), &(executeHelper->work)); 1038115cd2caSopenharmony_ci napi_get_null(env, &result); 1039115cd2caSopenharmony_ci } else { 1040115cd2caSopenharmony_ci napi_create_string_latin1(env, __func__, NAPI_AUTO_LENGTH, &workName); 1041115cd2caSopenharmony_ci napi_create_promise(env, &(executeHelper->deferred), &result); 1042115cd2caSopenharmony_ci napi_create_async_work(env, nullptr, workName, Execute, ExecuteDone, 1043115cd2caSopenharmony_ci reinterpret_cast<void *>(executeHelper), &(executeHelper->work)); 1044115cd2caSopenharmony_ci } 1045115cd2caSopenharmony_ci napi_queue_async_work(env, executeHelper->work); 1046115cd2caSopenharmony_ci executeHelper->promise = result; 1047115cd2caSopenharmony_ci return result; 1048115cd2caSopenharmony_ci} 1049115cd2caSopenharmony_ci 1050115cd2caSopenharmony_ciDataShare::DataSharePredicates ConvertParamsSwitchSplit(int code, napi_env env, const napi_value &key, 1051115cd2caSopenharmony_ci const napi_value &hold, const napi_value &attr, ExecuteHelper *executeHelper) 1052115cd2caSopenharmony_ci{ 1053115cd2caSopenharmony_ci DataShare::DataSharePredicates predicates; 1054115cd2caSopenharmony_ci switch (code) { 1055115cd2caSopenharmony_ci case QUERY_CONTACT: 1056115cd2caSopenharmony_ci VerificationParameterHolderId(env, executeHelper, hold); 1057115cd2caSopenharmony_ci predicates = BuildQueryContactPredicates(env, key, hold, attr); 1058115cd2caSopenharmony_ci break; 1059115cd2caSopenharmony_ci case QUERY_CONTACTS: 1060115cd2caSopenharmony_ci VerificationParameterHolderId(env, executeHelper, hold); 1061115cd2caSopenharmony_ci predicates = BuildQueryContactsPredicates(env, hold, attr); 1062115cd2caSopenharmony_ci break; 1063115cd2caSopenharmony_ci case QUERY_CONTACTS_BY_EMAIL: 1064115cd2caSopenharmony_ci VerificationParameterHolderId(env, executeHelper, hold); 1065115cd2caSopenharmony_ci predicates = BuildQueryContactsByEmailPredicates(env, key, hold, attr); 1066115cd2caSopenharmony_ci break; 1067115cd2caSopenharmony_ci case QUERY_CONTACTS_BY_PHONE_NUMBER: 1068115cd2caSopenharmony_ci VerificationParameterHolderId(env, executeHelper, hold); 1069115cd2caSopenharmony_ci predicates = BuildQueryContactsByPhoneNumberPredicates(env, key, hold, attr); 1070115cd2caSopenharmony_ci break; 1071115cd2caSopenharmony_ci case QUERY_GROUPS: 1072115cd2caSopenharmony_ci VerificationParameterHolderId(env, executeHelper, hold); 1073115cd2caSopenharmony_ci predicates = BuildQueryGroupsPredicates(env, hold); 1074115cd2caSopenharmony_ci break; 1075115cd2caSopenharmony_ci case QUERY_HOLDERS: 1076115cd2caSopenharmony_ci break; 1077115cd2caSopenharmony_ci case QUERY_MY_CARD: 1078115cd2caSopenharmony_ci predicates = BuildQueryMyCardPredicates(env, attr); 1079115cd2caSopenharmony_ci break; 1080115cd2caSopenharmony_ci default: 1081115cd2caSopenharmony_ci HILOG_ERROR("ConvertParamsSwitchSplit code is no match"); 1082115cd2caSopenharmony_ci break; 1083115cd2caSopenharmony_ci } 1084115cd2caSopenharmony_ci return predicates; 1085115cd2caSopenharmony_ci} 1086115cd2caSopenharmony_ci 1087115cd2caSopenharmony_civoid SetChildActionCodeAndConvertParams(napi_env env, ExecuteHelper *executeHelper) 1088115cd2caSopenharmony_ci{ 1089115cd2caSopenharmony_ci napi_value id = nullptr; 1090115cd2caSopenharmony_ci napi_value key = nullptr; 1091115cd2caSopenharmony_ci napi_value hold = nullptr; 1092115cd2caSopenharmony_ci napi_value attr = nullptr; 1093115cd2caSopenharmony_ci napi_value contact = nullptr; 1094115cd2caSopenharmony_ci unsigned int size = executeHelper->argc; 1095115cd2caSopenharmony_ci for (unsigned int i = 0; i < size; i++) { 1096115cd2caSopenharmony_ci ObjectInitId(env, executeHelper->argv[i], id); 1097115cd2caSopenharmony_ci ObjectInitString(env, executeHelper->argv[i], key); 1098115cd2caSopenharmony_ci ObjectInit(env, executeHelper->argv[i], hold, attr, contact); 1099115cd2caSopenharmony_ci } 1100115cd2caSopenharmony_ci ContactsBuild contactsBuild; 1101115cd2caSopenharmony_ci switch (executeHelper->actionCode) { 1102115cd2caSopenharmony_ci case ADD_CONTACT: 1103115cd2caSopenharmony_ci contactsBuild.GetContactData( 1104115cd2caSopenharmony_ci env, executeHelper->argv[0], executeHelper->valueContact, executeHelper->valueContactData); 1105115cd2caSopenharmony_ci break; 1106115cd2caSopenharmony_ci case DELETE_CONTACT: 1107115cd2caSopenharmony_ci executeHelper->predicates = BuildDeleteContactPredicates(env, executeHelper); 1108115cd2caSopenharmony_ci break; 1109115cd2caSopenharmony_ci case UPDATE_CONTACT: 1110115cd2caSopenharmony_ci executeHelper->predicates = BuildUpdateContactConvertParams(env, contact, attr, executeHelper); 1111115cd2caSopenharmony_ci break; 1112115cd2caSopenharmony_ci case IS_LOCAL_CONTACT: 1113115cd2caSopenharmony_ci VerificationParameterId(env, id, executeHelper, hold); 1114115cd2caSopenharmony_ci executeHelper->predicates = BuildIsLocalContactPredicates(env, id); 1115115cd2caSopenharmony_ci break; 1116115cd2caSopenharmony_ci case IS_MY_CARD: 1117115cd2caSopenharmony_ci VerificationParameterId(env, id, executeHelper, hold); 1118115cd2caSopenharmony_ci executeHelper->predicates = BuildIsMyCardPredicates(env, id); 1119115cd2caSopenharmony_ci break; 1120115cd2caSopenharmony_ci case QUERY_KEY: 1121115cd2caSopenharmony_ci VerificationParameterId(env, id, executeHelper, hold); 1122115cd2caSopenharmony_ci executeHelper->predicates = BuildQueryKeyPredicates(env, id, hold); 1123115cd2caSopenharmony_ci break; 1124115cd2caSopenharmony_ci default: 1125115cd2caSopenharmony_ci executeHelper->predicates = ConvertParamsSwitchSplit(executeHelper->actionCode, env, key, hold, 1126115cd2caSopenharmony_ci attr, executeHelper); 1127115cd2caSopenharmony_ci break; 1128115cd2caSopenharmony_ci } 1129115cd2caSopenharmony_ci} 1130115cd2caSopenharmony_ci 1131115cd2caSopenharmony_civoid VerificationParameterId(napi_env env, napi_value id, ExecuteHelper *executeHelper, napi_value hold) 1132115cd2caSopenharmony_ci{ 1133115cd2caSopenharmony_ci ContactsBuild contactsBuild; 1134115cd2caSopenharmony_ci Holder holder = contactsBuild.GetHolder(env, hold); 1135115cd2caSopenharmony_ci int holderId = holder.holderId; 1136115cd2caSopenharmony_ci int valueId = contactsBuild.GetInt(env, id); 1137115cd2caSopenharmony_ci if (valueId <= 0 || isinf(valueId)) { 1138115cd2caSopenharmony_ci executeHelper->resultData = VERIFICATION_PERMISSION_ERROR; 1139115cd2caSopenharmony_ci HILOG_ERROR("PARAMETER_ERROR valueId: %{public}d", valueId); 1140115cd2caSopenharmony_ci } else if (hold != nullptr && holderId != 1) { 1141115cd2caSopenharmony_ci executeHelper->resultData = VERIFICATION_PERMISSION_ERROR; 1142115cd2caSopenharmony_ci HILOG_ERROR("PARAMETER_ERROR holderId: %{public}d", holderId); 1143115cd2caSopenharmony_ci } 1144115cd2caSopenharmony_ci} 1145115cd2caSopenharmony_ci 1146115cd2caSopenharmony_civoid VerificationParameterHolderId(napi_env env, ExecuteHelper *executeHelper, napi_value hold) 1147115cd2caSopenharmony_ci{ 1148115cd2caSopenharmony_ci ContactsBuild contactsBuild; 1149115cd2caSopenharmony_ci Holder holder = contactsBuild.GetHolder(env, hold); 1150115cd2caSopenharmony_ci int holderId = holder.holderId; 1151115cd2caSopenharmony_ci if (hold != nullptr && holderId != 1) { 1152115cd2caSopenharmony_ci executeHelper->resultData = VERIFICATION_PERMISSION_ERROR; 1153115cd2caSopenharmony_ci HILOG_ERROR("PARAMETER_ERROR holderId: %{public}d", holderId); 1154115cd2caSopenharmony_ci } 1155115cd2caSopenharmony_ci} 1156115cd2caSopenharmony_ci 1157115cd2caSopenharmony_cinapi_value Scheduling(napi_env env, napi_callback_info info, ExecuteHelper *executeHelper, int actionCode) 1158115cd2caSopenharmony_ci{ 1159115cd2caSopenharmony_ci size_t argc = MAX_PARAMS; 1160115cd2caSopenharmony_ci napi_value argv[MAX_PARAMS] = {0}; 1161115cd2caSopenharmony_ci napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr); 1162115cd2caSopenharmony_ci executeHelper->argc = argc; 1163115cd2caSopenharmony_ci executeHelper->actionCode = actionCode; 1164115cd2caSopenharmony_ci 1165115cd2caSopenharmony_ci if (argc > 0) { 1166115cd2caSopenharmony_ci napi_valuetype valuetype = napi_undefined; 1167115cd2caSopenharmony_ci napi_typeof(env, argv[argc - 1], &valuetype); 1168115cd2caSopenharmony_ci // last params is function as callback 1169115cd2caSopenharmony_ci if (valuetype == napi_function) { 1170115cd2caSopenharmony_ci executeHelper->sync = NAPI_CALL_TYPE_CALLBACK; 1171115cd2caSopenharmony_ci } else { 1172115cd2caSopenharmony_ci executeHelper->sync = NAPI_CALL_TYPE_PROMISE; 1173115cd2caSopenharmony_ci } 1174115cd2caSopenharmony_ci } 1175115cd2caSopenharmony_ci bool isStageMode = false; 1176115cd2caSopenharmony_ci OHOS::AbilityRuntime::IsStageContext(env, argv[0], isStageMode); 1177115cd2caSopenharmony_ci if (isStageMode) { 1178115cd2caSopenharmony_ci HILOG_INFO("use API 10 interface"); 1179115cd2caSopenharmony_ci for (int i = 1; i < MAX_PARAMS; i++) { 1180115cd2caSopenharmony_ci executeHelper->argv[i - 1] = argv[i]; 1181115cd2caSopenharmony_ci } 1182115cd2caSopenharmony_ci executeHelper->abilityContext = argv[0]; 1183115cd2caSopenharmony_ci executeHelper->argc -= 1; 1184115cd2caSopenharmony_ci } else { 1185115cd2caSopenharmony_ci HILOG_INFO("use API 7 interface"); 1186115cd2caSopenharmony_ci for (int i = 0; i < MAX_PARAMS; i++) { 1187115cd2caSopenharmony_ci executeHelper->argv[i] = argv[i]; 1188115cd2caSopenharmony_ci } 1189115cd2caSopenharmony_ci } 1190115cd2caSopenharmony_ci 1191115cd2caSopenharmony_ci SetChildActionCodeAndConvertParams(env, executeHelper); 1192115cd2caSopenharmony_ci GetDataShareHelper(env, info, executeHelper); 1193115cd2caSopenharmony_ci 1194115cd2caSopenharmony_ci napi_value result = CreateAsyncWork(env, executeHelper); 1195115cd2caSopenharmony_ci return result; 1196115cd2caSopenharmony_ci} 1197115cd2caSopenharmony_ci 1198115cd2caSopenharmony_ci/** 1199115cd2caSopenharmony_ci * @brief Test interface ADD_CONTACT 1200115cd2caSopenharmony_ci * 1201115cd2caSopenharmony_ci * @param env Conditions for resolve object interface operation 1202115cd2caSopenharmony_ci * @param info Conditions for resolve object interface operation 1203115cd2caSopenharmony_ci * 1204115cd2caSopenharmony_ci * @return The result returned by test 1205115cd2caSopenharmony_ci */ 1206115cd2caSopenharmony_cinapi_value AddContact(napi_env env, napi_callback_info info) 1207115cd2caSopenharmony_ci{ 1208115cd2caSopenharmony_ci size_t argc = MAX_PARAMS; 1209115cd2caSopenharmony_ci napi_value argv[MAX_PARAMS] = {0}; 1210115cd2caSopenharmony_ci napi_value thisVar = nullptr; 1211115cd2caSopenharmony_ci void *data; 1212115cd2caSopenharmony_ci napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); 1213115cd2caSopenharmony_ci bool isStageMode = false; 1214115cd2caSopenharmony_ci OHOS::AbilityRuntime::IsStageContext(env, argv[0], isStageMode); 1215115cd2caSopenharmony_ci if (isStageMode) { 1216115cd2caSopenharmony_ci napi_value errorCode = ContactsNapiUtils::CreateError(env, PARAMETER_ERROR); 1217115cd2caSopenharmony_ci switch (argc) { 1218115cd2caSopenharmony_ci case ARGS_TWO: 1219115cd2caSopenharmony_ci if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_object })) { 1220115cd2caSopenharmony_ci napi_throw(env, errorCode); 1221115cd2caSopenharmony_ci } 1222115cd2caSopenharmony_ci break; 1223115cd2caSopenharmony_ci case ARGS_THREE: 1224115cd2caSopenharmony_ci if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_object, napi_function })) { 1225115cd2caSopenharmony_ci napi_throw(env, errorCode); 1226115cd2caSopenharmony_ci } 1227115cd2caSopenharmony_ci break; 1228115cd2caSopenharmony_ci default: 1229115cd2caSopenharmony_ci napi_throw(env, errorCode); 1230115cd2caSopenharmony_ci break; 1231115cd2caSopenharmony_ci } 1232115cd2caSopenharmony_ci } 1233115cd2caSopenharmony_ci ExecuteHelper *executeHelper = new (std::nothrow) ExecuteHelper(); 1234115cd2caSopenharmony_ci napi_value result = nullptr; 1235115cd2caSopenharmony_ci if (executeHelper != nullptr) { 1236115cd2caSopenharmony_ci result = Scheduling(env, info, executeHelper, ADD_CONTACT); 1237115cd2caSopenharmony_ci return result; 1238115cd2caSopenharmony_ci } 1239115cd2caSopenharmony_ci napi_create_int64(env, ERROR, &result); 1240115cd2caSopenharmony_ci return result; 1241115cd2caSopenharmony_ci} 1242115cd2caSopenharmony_ci 1243115cd2caSopenharmony_ci/** 1244115cd2caSopenharmony_ci * @brief Test interface DELETE_CONTACT 1245115cd2caSopenharmony_ci * 1246115cd2caSopenharmony_ci * @param env Conditions for resolve object interface operation 1247115cd2caSopenharmony_ci * @param info Conditions for resolve object interface operation 1248115cd2caSopenharmony_ci * 1249115cd2caSopenharmony_ci * @return The result returned by test 1250115cd2caSopenharmony_ci */ 1251115cd2caSopenharmony_cinapi_value DeleteContact(napi_env env, napi_callback_info info) 1252115cd2caSopenharmony_ci{ 1253115cd2caSopenharmony_ci size_t argc = MAX_PARAMS; 1254115cd2caSopenharmony_ci napi_value argv[MAX_PARAMS] = {0}; 1255115cd2caSopenharmony_ci napi_value thisVar = nullptr; 1256115cd2caSopenharmony_ci void *data; 1257115cd2caSopenharmony_ci napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); 1258115cd2caSopenharmony_ci bool isStageMode = false; 1259115cd2caSopenharmony_ci OHOS::AbilityRuntime::IsStageContext(env, argv[0], isStageMode); 1260115cd2caSopenharmony_ci if (isStageMode) { 1261115cd2caSopenharmony_ci napi_value errorCode = ContactsNapiUtils::CreateError(env, PARAMETER_ERROR); 1262115cd2caSopenharmony_ci switch (argc) { 1263115cd2caSopenharmony_ci case ARGS_TWO: 1264115cd2caSopenharmony_ci if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_string })) { 1265115cd2caSopenharmony_ci napi_throw(env, errorCode); 1266115cd2caSopenharmony_ci } 1267115cd2caSopenharmony_ci break; 1268115cd2caSopenharmony_ci case ARGS_THREE: 1269115cd2caSopenharmony_ci if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_string, napi_function })) { 1270115cd2caSopenharmony_ci napi_throw(env, errorCode); 1271115cd2caSopenharmony_ci } 1272115cd2caSopenharmony_ci break; 1273115cd2caSopenharmony_ci default: 1274115cd2caSopenharmony_ci napi_throw(env, errorCode); 1275115cd2caSopenharmony_ci break; 1276115cd2caSopenharmony_ci } 1277115cd2caSopenharmony_ci } 1278115cd2caSopenharmony_ci ExecuteHelper *executeHelper = new (std::nothrow) ExecuteHelper(); 1279115cd2caSopenharmony_ci napi_value result = nullptr; 1280115cd2caSopenharmony_ci if (executeHelper != nullptr) { 1281115cd2caSopenharmony_ci result = Scheduling(env, info, executeHelper, DELETE_CONTACT); 1282115cd2caSopenharmony_ci return result; 1283115cd2caSopenharmony_ci } 1284115cd2caSopenharmony_ci napi_create_int64(env, ERROR, &result); 1285115cd2caSopenharmony_ci return result; 1286115cd2caSopenharmony_ci} 1287115cd2caSopenharmony_ci 1288115cd2caSopenharmony_ci/** 1289115cd2caSopenharmony_ci * @brief Test interface UPDATE_CONTACT 1290115cd2caSopenharmony_ci * 1291115cd2caSopenharmony_ci * @param env Conditions for resolve object interface operation 1292115cd2caSopenharmony_ci * @param info Conditions for resolve object interface operation 1293115cd2caSopenharmony_ci * 1294115cd2caSopenharmony_ci * @return The result returned by test 1295115cd2caSopenharmony_ci */ 1296115cd2caSopenharmony_cinapi_value UpdateContact(napi_env env, napi_callback_info info) 1297115cd2caSopenharmony_ci{ 1298115cd2caSopenharmony_ci size_t argc = MAX_PARAMS; 1299115cd2caSopenharmony_ci napi_value argv[MAX_PARAMS] = {0}; 1300115cd2caSopenharmony_ci napi_value thisVar = nullptr; 1301115cd2caSopenharmony_ci void *data; 1302115cd2caSopenharmony_ci napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); 1303115cd2caSopenharmony_ci bool isStageMode = false; 1304115cd2caSopenharmony_ci OHOS::AbilityRuntime::IsStageContext(env, argv[0], isStageMode); 1305115cd2caSopenharmony_ci if (isStageMode) { 1306115cd2caSopenharmony_ci napi_value errorCode = ContactsNapiUtils::CreateError(env, PARAMETER_ERROR); 1307115cd2caSopenharmony_ci switch (argc) { 1308115cd2caSopenharmony_ci case ARGS_TWO: 1309115cd2caSopenharmony_ci if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_object })) { 1310115cd2caSopenharmony_ci napi_throw(env, errorCode); 1311115cd2caSopenharmony_ci } 1312115cd2caSopenharmony_ci break; 1313115cd2caSopenharmony_ci case ARGS_THREE: 1314115cd2caSopenharmony_ci if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_object, napi_function }) 1315115cd2caSopenharmony_ci && !ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_object, napi_object })) { 1316115cd2caSopenharmony_ci napi_throw(env, errorCode); 1317115cd2caSopenharmony_ci } 1318115cd2caSopenharmony_ci break; 1319115cd2caSopenharmony_ci case ARGS_FOUR: 1320115cd2caSopenharmony_ci if (!ContactsNapiUtils::MatchParameters(env, argv, 1321115cd2caSopenharmony_ci { napi_object, napi_object, napi_object, napi_function })) { 1322115cd2caSopenharmony_ci napi_throw(env, errorCode); 1323115cd2caSopenharmony_ci } 1324115cd2caSopenharmony_ci break; 1325115cd2caSopenharmony_ci default: 1326115cd2caSopenharmony_ci napi_throw(env, errorCode); 1327115cd2caSopenharmony_ci break; 1328115cd2caSopenharmony_ci } 1329115cd2caSopenharmony_ci } 1330115cd2caSopenharmony_ci ExecuteHelper *executeHelper = new (std::nothrow) ExecuteHelper(); 1331115cd2caSopenharmony_ci napi_value result = nullptr; 1332115cd2caSopenharmony_ci if (executeHelper != nullptr) { 1333115cd2caSopenharmony_ci result = Scheduling(env, info, executeHelper, UPDATE_CONTACT); 1334115cd2caSopenharmony_ci return result; 1335115cd2caSopenharmony_ci } 1336115cd2caSopenharmony_ci napi_create_int64(env, ERROR, &result); 1337115cd2caSopenharmony_ci return result; 1338115cd2caSopenharmony_ci} 1339115cd2caSopenharmony_ci 1340115cd2caSopenharmony_ci/** 1341115cd2caSopenharmony_ci * @brief Test interface QUERY_CONTACT 1342115cd2caSopenharmony_ci * 1343115cd2caSopenharmony_ci * @param env Conditions for resolve object interface operation 1344115cd2caSopenharmony_ci * @param info Conditions for resolve object interface operation 1345115cd2caSopenharmony_ci * 1346115cd2caSopenharmony_ci * @return The result returned by test 1347115cd2caSopenharmony_ci */ 1348115cd2caSopenharmony_cinapi_value QueryContact(napi_env env, napi_callback_info info) 1349115cd2caSopenharmony_ci{ 1350115cd2caSopenharmony_ci size_t argc = MAX_PARAMS; 1351115cd2caSopenharmony_ci napi_value argv[MAX_PARAMS] = {0}; 1352115cd2caSopenharmony_ci napi_value thisVar = nullptr; 1353115cd2caSopenharmony_ci void *data; 1354115cd2caSopenharmony_ci napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); 1355115cd2caSopenharmony_ci bool isStageMode = false; 1356115cd2caSopenharmony_ci OHOS::AbilityRuntime::IsStageContext(env, argv[0], isStageMode); 1357115cd2caSopenharmony_ci if (isStageMode) { 1358115cd2caSopenharmony_ci napi_value errorCode = ContactsNapiUtils::CreateError(env, PARAMETER_ERROR); 1359115cd2caSopenharmony_ci switch (argc) { 1360115cd2caSopenharmony_ci case ARGS_TWO: 1361115cd2caSopenharmony_ci if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_string })) { 1362115cd2caSopenharmony_ci napi_throw(env, errorCode); 1363115cd2caSopenharmony_ci } 1364115cd2caSopenharmony_ci break; 1365115cd2caSopenharmony_ci case ARGS_THREE: 1366115cd2caSopenharmony_ci if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_string, napi_function })) { 1367115cd2caSopenharmony_ci napi_throw(env, errorCode); 1368115cd2caSopenharmony_ci } 1369115cd2caSopenharmony_ci break; 1370115cd2caSopenharmony_ci case ARGS_FOUR: 1371115cd2caSopenharmony_ci if (!ContactsNapiUtils::MatchParameters(env, argv, 1372115cd2caSopenharmony_ci { napi_object, napi_string, napi_object, napi_function }) && 1373115cd2caSopenharmony_ci !ContactsNapiUtils::MatchParameters(env, argv, 1374115cd2caSopenharmony_ci { napi_object, napi_string, napi_object, napi_object })) { 1375115cd2caSopenharmony_ci napi_throw(env, errorCode); 1376115cd2caSopenharmony_ci } 1377115cd2caSopenharmony_ci break; 1378115cd2caSopenharmony_ci case ARGS_FIVE: 1379115cd2caSopenharmony_ci if (!ContactsNapiUtils::MatchParameters(env, argv, 1380115cd2caSopenharmony_ci { 1381115cd2caSopenharmony_ci napi_object, napi_string, napi_object, napi_object, napi_function 1382115cd2caSopenharmony_ci })) { 1383115cd2caSopenharmony_ci napi_throw(env, errorCode); 1384115cd2caSopenharmony_ci } 1385115cd2caSopenharmony_ci break; 1386115cd2caSopenharmony_ci default: 1387115cd2caSopenharmony_ci napi_throw(env, errorCode); 1388115cd2caSopenharmony_ci break; 1389115cd2caSopenharmony_ci } 1390115cd2caSopenharmony_ci } 1391115cd2caSopenharmony_ci ExecuteHelper *executeHelper = new (std::nothrow) ExecuteHelper(); 1392115cd2caSopenharmony_ci napi_value result = nullptr; 1393115cd2caSopenharmony_ci if (executeHelper != nullptr) { 1394115cd2caSopenharmony_ci result = Scheduling(env, info, executeHelper, QUERY_CONTACT); 1395115cd2caSopenharmony_ci return result; 1396115cd2caSopenharmony_ci } 1397115cd2caSopenharmony_ci napi_create_int64(env, ERROR, &result); 1398115cd2caSopenharmony_ci return result; 1399115cd2caSopenharmony_ci} 1400115cd2caSopenharmony_ci 1401115cd2caSopenharmony_ci/** 1402115cd2caSopenharmony_ci * @brief Test interface QUERY_CONTACTS 1403115cd2caSopenharmony_ci * 1404115cd2caSopenharmony_ci * @param env Conditions for resolve object interface operation 1405115cd2caSopenharmony_ci * @param info Conditions for resolve object interface operation 1406115cd2caSopenharmony_ci * 1407115cd2caSopenharmony_ci * @return The result returned by test 1408115cd2caSopenharmony_ci */ 1409115cd2caSopenharmony_cinapi_value QueryContacts(napi_env env, napi_callback_info info) 1410115cd2caSopenharmony_ci{ 1411115cd2caSopenharmony_ci size_t argc = MAX_PARAMS; 1412115cd2caSopenharmony_ci napi_value argv[MAX_PARAMS] = {0}; 1413115cd2caSopenharmony_ci napi_value thisVar = nullptr; 1414115cd2caSopenharmony_ci void *data; 1415115cd2caSopenharmony_ci napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); 1416115cd2caSopenharmony_ci bool isStageMode = false; 1417115cd2caSopenharmony_ci OHOS::AbilityRuntime::IsStageContext(env, argv[0], isStageMode); 1418115cd2caSopenharmony_ci if (isStageMode) { 1419115cd2caSopenharmony_ci napi_value errorCode = ContactsNapiUtils::CreateError(env, PARAMETER_ERROR); 1420115cd2caSopenharmony_ci switch (argc) { 1421115cd2caSopenharmony_ci case ARGS_ONE: 1422115cd2caSopenharmony_ci if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object })) { 1423115cd2caSopenharmony_ci napi_throw(env, errorCode); 1424115cd2caSopenharmony_ci } 1425115cd2caSopenharmony_ci break; 1426115cd2caSopenharmony_ci case ARGS_TWO: 1427115cd2caSopenharmony_ci if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_function })) { 1428115cd2caSopenharmony_ci napi_throw(env, errorCode); 1429115cd2caSopenharmony_ci } 1430115cd2caSopenharmony_ci break; 1431115cd2caSopenharmony_ci case ARGS_THREE: 1432115cd2caSopenharmony_ci if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_object, napi_function }) 1433115cd2caSopenharmony_ci && !ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_object, napi_object }) 1434115cd2caSopenharmony_ci ) { 1435115cd2caSopenharmony_ci napi_throw(env, errorCode); 1436115cd2caSopenharmony_ci } 1437115cd2caSopenharmony_ci break; 1438115cd2caSopenharmony_ci case ARGS_FOUR: 1439115cd2caSopenharmony_ci if (!ContactsNapiUtils::MatchParameters(env, argv, 1440115cd2caSopenharmony_ci { napi_object, napi_object, napi_object, napi_function })) { 1441115cd2caSopenharmony_ci napi_throw(env, errorCode); 1442115cd2caSopenharmony_ci } 1443115cd2caSopenharmony_ci break; 1444115cd2caSopenharmony_ci default: 1445115cd2caSopenharmony_ci napi_throw(env, errorCode); 1446115cd2caSopenharmony_ci break; 1447115cd2caSopenharmony_ci } 1448115cd2caSopenharmony_ci } 1449115cd2caSopenharmony_ci ExecuteHelper *executeHelper = new (std::nothrow) ExecuteHelper(); 1450115cd2caSopenharmony_ci napi_value result = nullptr; 1451115cd2caSopenharmony_ci if (executeHelper != nullptr) { 1452115cd2caSopenharmony_ci result = Scheduling(env, info, executeHelper, QUERY_CONTACTS); 1453115cd2caSopenharmony_ci return result; 1454115cd2caSopenharmony_ci } 1455115cd2caSopenharmony_ci napi_create_int64(env, ERROR, &result); 1456115cd2caSopenharmony_ci return result; 1457115cd2caSopenharmony_ci} 1458115cd2caSopenharmony_ci 1459115cd2caSopenharmony_ci/** 1460115cd2caSopenharmony_ci * @brief Test interface QUERY_CONTACTS_BY_EMAIL 1461115cd2caSopenharmony_ci * 1462115cd2caSopenharmony_ci * @param env Conditions for resolve object interface operation 1463115cd2caSopenharmony_ci * @param info Conditions for resolve object interface operation 1464115cd2caSopenharmony_ci * 1465115cd2caSopenharmony_ci * @return The result returned by test 1466115cd2caSopenharmony_ci */ 1467115cd2caSopenharmony_cinapi_value QueryContactsByEmail(napi_env env, napi_callback_info info) 1468115cd2caSopenharmony_ci{ 1469115cd2caSopenharmony_ci size_t argc = MAX_PARAMS; 1470115cd2caSopenharmony_ci napi_value argv[MAX_PARAMS] = {0}; 1471115cd2caSopenharmony_ci napi_value thisVar = nullptr; 1472115cd2caSopenharmony_ci void *data; 1473115cd2caSopenharmony_ci napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); 1474115cd2caSopenharmony_ci bool isStageMode = false; 1475115cd2caSopenharmony_ci OHOS::AbilityRuntime::IsStageContext(env, argv[0], isStageMode); 1476115cd2caSopenharmony_ci if (isStageMode) { 1477115cd2caSopenharmony_ci napi_value errorCode = ContactsNapiUtils::CreateError(env, PARAMETER_ERROR); 1478115cd2caSopenharmony_ci switch (argc) { 1479115cd2caSopenharmony_ci case ARGS_TWO: 1480115cd2caSopenharmony_ci if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_string })) { 1481115cd2caSopenharmony_ci napi_throw(env, errorCode); 1482115cd2caSopenharmony_ci } 1483115cd2caSopenharmony_ci break; 1484115cd2caSopenharmony_ci case ARGS_THREE: 1485115cd2caSopenharmony_ci if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_string, napi_function })) { 1486115cd2caSopenharmony_ci napi_throw(env, errorCode); 1487115cd2caSopenharmony_ci } 1488115cd2caSopenharmony_ci break; 1489115cd2caSopenharmony_ci case ARGS_FOUR: 1490115cd2caSopenharmony_ci if (!ContactsNapiUtils::MatchParameters(env, argv, 1491115cd2caSopenharmony_ci { napi_object, napi_string, napi_object, napi_function }) && 1492115cd2caSopenharmony_ci !ContactsNapiUtils::MatchParameters(env, argv, 1493115cd2caSopenharmony_ci { napi_object, napi_string, napi_object, napi_function }) && 1494115cd2caSopenharmony_ci !ContactsNapiUtils::MatchParameters(env, argv, 1495115cd2caSopenharmony_ci { napi_object, napi_string, napi_object, napi_object })) { 1496115cd2caSopenharmony_ci napi_throw(env, errorCode); 1497115cd2caSopenharmony_ci } 1498115cd2caSopenharmony_ci break; 1499115cd2caSopenharmony_ci case ARGS_FIVE: 1500115cd2caSopenharmony_ci if (!ContactsNapiUtils::MatchParameters(env, argv, 1501115cd2caSopenharmony_ci { 1502115cd2caSopenharmony_ci napi_object, napi_string, napi_object, napi_object, napi_function 1503115cd2caSopenharmony_ci })) { 1504115cd2caSopenharmony_ci napi_throw(env, errorCode); 1505115cd2caSopenharmony_ci } 1506115cd2caSopenharmony_ci break; 1507115cd2caSopenharmony_ci default: 1508115cd2caSopenharmony_ci napi_throw(env, errorCode); 1509115cd2caSopenharmony_ci break; 1510115cd2caSopenharmony_ci } 1511115cd2caSopenharmony_ci } 1512115cd2caSopenharmony_ci ExecuteHelper *executeHelper = new (std::nothrow) ExecuteHelper(); 1513115cd2caSopenharmony_ci napi_value result = nullptr; 1514115cd2caSopenharmony_ci if (executeHelper != nullptr) { 1515115cd2caSopenharmony_ci result = Scheduling(env, info, executeHelper, QUERY_CONTACTS_BY_EMAIL); 1516115cd2caSopenharmony_ci return result; 1517115cd2caSopenharmony_ci } 1518115cd2caSopenharmony_ci napi_create_int64(env, ERROR, &result); 1519115cd2caSopenharmony_ci return result; 1520115cd2caSopenharmony_ci} 1521115cd2caSopenharmony_ci 1522115cd2caSopenharmony_ci/** 1523115cd2caSopenharmony_ci * @brief Test interface QUERY_CONTACTS_BY_PHONE_NUMBER 1524115cd2caSopenharmony_ci * 1525115cd2caSopenharmony_ci * @param env Conditions for resolve object interface operation 1526115cd2caSopenharmony_ci * @param info Conditions for resolve object interface operation 1527115cd2caSopenharmony_ci * 1528115cd2caSopenharmony_ci * @return The result returned by test 1529115cd2caSopenharmony_ci */ 1530115cd2caSopenharmony_cinapi_value QueryContactsByPhoneNumber(napi_env env, napi_callback_info info) 1531115cd2caSopenharmony_ci{ 1532115cd2caSopenharmony_ci size_t argc = MAX_PARAMS; 1533115cd2caSopenharmony_ci napi_value argv[MAX_PARAMS] = {0}; 1534115cd2caSopenharmony_ci napi_value thisVar = nullptr; 1535115cd2caSopenharmony_ci void *data; 1536115cd2caSopenharmony_ci napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); 1537115cd2caSopenharmony_ci bool isStageMode = false; 1538115cd2caSopenharmony_ci OHOS::AbilityRuntime::IsStageContext(env, argv[0], isStageMode); 1539115cd2caSopenharmony_ci if (isStageMode) { 1540115cd2caSopenharmony_ci napi_value errorCode = ContactsNapiUtils::CreateError(env, PARAMETER_ERROR); 1541115cd2caSopenharmony_ci switch (argc) { 1542115cd2caSopenharmony_ci case ARGS_TWO: 1543115cd2caSopenharmony_ci if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_string })) { 1544115cd2caSopenharmony_ci napi_throw(env, errorCode); 1545115cd2caSopenharmony_ci } 1546115cd2caSopenharmony_ci break; 1547115cd2caSopenharmony_ci case ARGS_THREE: 1548115cd2caSopenharmony_ci if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_string, napi_function })) { 1549115cd2caSopenharmony_ci napi_throw(env, errorCode); 1550115cd2caSopenharmony_ci } 1551115cd2caSopenharmony_ci break; 1552115cd2caSopenharmony_ci case ARGS_FOUR: 1553115cd2caSopenharmony_ci if (!ContactsNapiUtils::MatchParameters(env, argv, 1554115cd2caSopenharmony_ci { napi_object, napi_string, napi_object, napi_function }) && 1555115cd2caSopenharmony_ci !ContactsNapiUtils::MatchParameters(env, argv, 1556115cd2caSopenharmony_ci { napi_object, napi_string, napi_object, napi_object })) { 1557115cd2caSopenharmony_ci napi_throw(env, errorCode); 1558115cd2caSopenharmony_ci } 1559115cd2caSopenharmony_ci break; 1560115cd2caSopenharmony_ci case ARGS_FIVE: 1561115cd2caSopenharmony_ci if (!ContactsNapiUtils::MatchParameters(env, argv, 1562115cd2caSopenharmony_ci { 1563115cd2caSopenharmony_ci napi_object, napi_string, napi_object, napi_object, napi_function 1564115cd2caSopenharmony_ci })) { 1565115cd2caSopenharmony_ci napi_throw(env, errorCode); 1566115cd2caSopenharmony_ci } 1567115cd2caSopenharmony_ci break; 1568115cd2caSopenharmony_ci default: 1569115cd2caSopenharmony_ci napi_throw(env, errorCode); 1570115cd2caSopenharmony_ci break; 1571115cd2caSopenharmony_ci } 1572115cd2caSopenharmony_ci } 1573115cd2caSopenharmony_ci ExecuteHelper *executeHelper = new (std::nothrow) ExecuteHelper(); 1574115cd2caSopenharmony_ci napi_value result = nullptr; 1575115cd2caSopenharmony_ci if (executeHelper != nullptr) { 1576115cd2caSopenharmony_ci result = Scheduling(env, info, executeHelper, QUERY_CONTACTS_BY_PHONE_NUMBER); 1577115cd2caSopenharmony_ci return result; 1578115cd2caSopenharmony_ci } 1579115cd2caSopenharmony_ci napi_create_int64(env, ERROR, &result); 1580115cd2caSopenharmony_ci return result; 1581115cd2caSopenharmony_ci} 1582115cd2caSopenharmony_ci 1583115cd2caSopenharmony_ci/** 1584115cd2caSopenharmony_ci * @brief Test interface QUERY_CONTACTS_BY_PHONE_NUMBER 1585115cd2caSopenharmony_ci * 1586115cd2caSopenharmony_ci * @param env Conditions for resolve object interface operation 1587115cd2caSopenharmony_ci * @param info Conditions for resolve object interface operation 1588115cd2caSopenharmony_ci * 1589115cd2caSopenharmony_ci * @return The result returned by test 1590115cd2caSopenharmony_ci */ 1591115cd2caSopenharmony_cinapi_value QueryGroups(napi_env env, napi_callback_info info) 1592115cd2caSopenharmony_ci{ 1593115cd2caSopenharmony_ci size_t argc = MAX_PARAMS; 1594115cd2caSopenharmony_ci napi_value argv[MAX_PARAMS] = {0}; 1595115cd2caSopenharmony_ci napi_value thisVar = nullptr; 1596115cd2caSopenharmony_ci void *data; 1597115cd2caSopenharmony_ci napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); 1598115cd2caSopenharmony_ci bool isStageMode = false; 1599115cd2caSopenharmony_ci OHOS::AbilityRuntime::IsStageContext(env, argv[0], isStageMode); 1600115cd2caSopenharmony_ci if (isStageMode) { 1601115cd2caSopenharmony_ci napi_value errorCode = ContactsNapiUtils::CreateError(env, PARAMETER_ERROR); 1602115cd2caSopenharmony_ci switch (argc) { 1603115cd2caSopenharmony_ci case ARGS_ONE: 1604115cd2caSopenharmony_ci if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object })) { 1605115cd2caSopenharmony_ci napi_throw(env, errorCode); 1606115cd2caSopenharmony_ci } 1607115cd2caSopenharmony_ci break; 1608115cd2caSopenharmony_ci case ARGS_TWO: 1609115cd2caSopenharmony_ci if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_function }) 1610115cd2caSopenharmony_ci && !ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_object })) { 1611115cd2caSopenharmony_ci napi_throw(env, errorCode); 1612115cd2caSopenharmony_ci } 1613115cd2caSopenharmony_ci break; 1614115cd2caSopenharmony_ci case ARGS_THREE: 1615115cd2caSopenharmony_ci if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_object, napi_function })) { 1616115cd2caSopenharmony_ci napi_throw(env, errorCode); 1617115cd2caSopenharmony_ci } 1618115cd2caSopenharmony_ci break; 1619115cd2caSopenharmony_ci default: 1620115cd2caSopenharmony_ci napi_throw(env, errorCode); 1621115cd2caSopenharmony_ci break; 1622115cd2caSopenharmony_ci } 1623115cd2caSopenharmony_ci } 1624115cd2caSopenharmony_ci ExecuteHelper *executeHelper = new (std::nothrow) ExecuteHelper(); 1625115cd2caSopenharmony_ci napi_value result = nullptr; 1626115cd2caSopenharmony_ci if (executeHelper != nullptr) { 1627115cd2caSopenharmony_ci result = Scheduling(env, info, executeHelper, QUERY_GROUPS); 1628115cd2caSopenharmony_ci return result; 1629115cd2caSopenharmony_ci } 1630115cd2caSopenharmony_ci napi_create_int64(env, ERROR, &result); 1631115cd2caSopenharmony_ci return result; 1632115cd2caSopenharmony_ci} 1633115cd2caSopenharmony_ci 1634115cd2caSopenharmony_ci/** 1635115cd2caSopenharmony_ci * @brief Test interface QUERY_HOLDERS 1636115cd2caSopenharmony_ci * 1637115cd2caSopenharmony_ci * @param env Conditions for resolve object interface operation 1638115cd2caSopenharmony_ci * @param info Conditions for resolve object interface operation 1639115cd2caSopenharmony_ci * 1640115cd2caSopenharmony_ci * @return The result returned by test 1641115cd2caSopenharmony_ci */ 1642115cd2caSopenharmony_cinapi_value QueryHolders(napi_env env, napi_callback_info info) 1643115cd2caSopenharmony_ci{ 1644115cd2caSopenharmony_ci size_t argc = MAX_PARAMS; 1645115cd2caSopenharmony_ci napi_value argv[MAX_PARAMS] = {0}; 1646115cd2caSopenharmony_ci napi_value thisVar = nullptr; 1647115cd2caSopenharmony_ci void *data; 1648115cd2caSopenharmony_ci napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); 1649115cd2caSopenharmony_ci bool isStageMode = false; 1650115cd2caSopenharmony_ci OHOS::AbilityRuntime::IsStageContext(env, argv[0], isStageMode); 1651115cd2caSopenharmony_ci if (isStageMode) { 1652115cd2caSopenharmony_ci napi_value errorCode = ContactsNapiUtils::CreateError(env, PARAMETER_ERROR); 1653115cd2caSopenharmony_ci switch (argc) { 1654115cd2caSopenharmony_ci case ARGS_ONE: 1655115cd2caSopenharmony_ci if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object })) { 1656115cd2caSopenharmony_ci napi_throw(env, errorCode); 1657115cd2caSopenharmony_ci } 1658115cd2caSopenharmony_ci break; 1659115cd2caSopenharmony_ci case ARGS_TWO: 1660115cd2caSopenharmony_ci if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_function })) { 1661115cd2caSopenharmony_ci napi_throw(env, errorCode); 1662115cd2caSopenharmony_ci } 1663115cd2caSopenharmony_ci break; 1664115cd2caSopenharmony_ci default: 1665115cd2caSopenharmony_ci napi_throw(env, errorCode); 1666115cd2caSopenharmony_ci break; 1667115cd2caSopenharmony_ci } 1668115cd2caSopenharmony_ci } 1669115cd2caSopenharmony_ci ExecuteHelper *executeHelper = new (std::nothrow) ExecuteHelper(); 1670115cd2caSopenharmony_ci napi_value result = nullptr; 1671115cd2caSopenharmony_ci if (executeHelper != nullptr) { 1672115cd2caSopenharmony_ci result = Scheduling(env, info, executeHelper, QUERY_HOLDERS); 1673115cd2caSopenharmony_ci return result; 1674115cd2caSopenharmony_ci } 1675115cd2caSopenharmony_ci napi_create_int64(env, ERROR, &result); 1676115cd2caSopenharmony_ci return result; 1677115cd2caSopenharmony_ci} 1678115cd2caSopenharmony_ci 1679115cd2caSopenharmony_ci/** 1680115cd2caSopenharmony_ci * @brief Test interface QUERY_KEY 1681115cd2caSopenharmony_ci * 1682115cd2caSopenharmony_ci * @param env Conditions for resolve object interface operation 1683115cd2caSopenharmony_ci * @param info Conditions for resolve object interface operation 1684115cd2caSopenharmony_ci * 1685115cd2caSopenharmony_ci * @return The result returned by test 1686115cd2caSopenharmony_ci */ 1687115cd2caSopenharmony_cinapi_value QueryKey(napi_env env, napi_callback_info info) 1688115cd2caSopenharmony_ci{ 1689115cd2caSopenharmony_ci size_t argc = MAX_PARAMS; 1690115cd2caSopenharmony_ci napi_value argv[MAX_PARAMS] = {0}; 1691115cd2caSopenharmony_ci napi_value thisVar = nullptr; 1692115cd2caSopenharmony_ci void *data; 1693115cd2caSopenharmony_ci napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); 1694115cd2caSopenharmony_ci bool isStageMode = false; 1695115cd2caSopenharmony_ci OHOS::AbilityRuntime::IsStageContext(env, argv[0], isStageMode); 1696115cd2caSopenharmony_ci if (isStageMode) { 1697115cd2caSopenharmony_ci napi_value errorCode = ContactsNapiUtils::CreateError(env, PARAMETER_ERROR); 1698115cd2caSopenharmony_ci switch (argc) { 1699115cd2caSopenharmony_ci case ARGS_ONE: 1700115cd2caSopenharmony_ci if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object })) { 1701115cd2caSopenharmony_ci napi_throw(env, errorCode); 1702115cd2caSopenharmony_ci } 1703115cd2caSopenharmony_ci break; 1704115cd2caSopenharmony_ci case ARGS_TWO: 1705115cd2caSopenharmony_ci if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_function }) 1706115cd2caSopenharmony_ci && !ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_number })) { 1707115cd2caSopenharmony_ci napi_throw(env, errorCode); 1708115cd2caSopenharmony_ci } 1709115cd2caSopenharmony_ci break; 1710115cd2caSopenharmony_ci case ARGS_THREE: 1711115cd2caSopenharmony_ci if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_number, napi_function }) 1712115cd2caSopenharmony_ci && !ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_number, napi_object })) { 1713115cd2caSopenharmony_ci napi_throw(env, errorCode); 1714115cd2caSopenharmony_ci } 1715115cd2caSopenharmony_ci break; 1716115cd2caSopenharmony_ci case ARGS_FOUR: 1717115cd2caSopenharmony_ci if (!ContactsNapiUtils::MatchParameters(env, argv, 1718115cd2caSopenharmony_ci { napi_object, napi_number, napi_object, napi_function })) { 1719115cd2caSopenharmony_ci napi_throw(env, errorCode); 1720115cd2caSopenharmony_ci } 1721115cd2caSopenharmony_ci break; 1722115cd2caSopenharmony_ci default: 1723115cd2caSopenharmony_ci napi_throw(env, errorCode); 1724115cd2caSopenharmony_ci break; 1725115cd2caSopenharmony_ci } 1726115cd2caSopenharmony_ci } 1727115cd2caSopenharmony_ci ExecuteHelper *executeHelper = new (std::nothrow) ExecuteHelper(); 1728115cd2caSopenharmony_ci napi_value result = nullptr; 1729115cd2caSopenharmony_ci if (executeHelper != nullptr) { 1730115cd2caSopenharmony_ci result = Scheduling(env, info, executeHelper, QUERY_KEY); 1731115cd2caSopenharmony_ci return result; 1732115cd2caSopenharmony_ci } 1733115cd2caSopenharmony_ci napi_create_int64(env, ERROR, &result); 1734115cd2caSopenharmony_ci return result; 1735115cd2caSopenharmony_ci} 1736115cd2caSopenharmony_ci 1737115cd2caSopenharmony_ci/** 1738115cd2caSopenharmony_ci * @brief Test interface QUERY_MY_CARD 1739115cd2caSopenharmony_ci * 1740115cd2caSopenharmony_ci * @param env Conditions for resolve object interface operation 1741115cd2caSopenharmony_ci * @param info Conditions for resolve object interface operation 1742115cd2caSopenharmony_ci * 1743115cd2caSopenharmony_ci * @return The result returned by test 1744115cd2caSopenharmony_ci */ 1745115cd2caSopenharmony_cinapi_value QueryMyCard(napi_env env, napi_callback_info info) 1746115cd2caSopenharmony_ci{ 1747115cd2caSopenharmony_ci size_t argc = MAX_PARAMS; 1748115cd2caSopenharmony_ci napi_value argv[MAX_PARAMS] = {0}; 1749115cd2caSopenharmony_ci napi_value thisVar = nullptr; 1750115cd2caSopenharmony_ci void *data; 1751115cd2caSopenharmony_ci napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); 1752115cd2caSopenharmony_ci bool isStageMode = false; 1753115cd2caSopenharmony_ci OHOS::AbilityRuntime::IsStageContext(env, argv[0], isStageMode); 1754115cd2caSopenharmony_ci if (isStageMode) { 1755115cd2caSopenharmony_ci napi_value errorCode = ContactsNapiUtils::CreateError(env, PARAMETER_ERROR); 1756115cd2caSopenharmony_ci switch (argc) { 1757115cd2caSopenharmony_ci case ARGS_ONE: 1758115cd2caSopenharmony_ci if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object })) { 1759115cd2caSopenharmony_ci napi_throw(env, errorCode); 1760115cd2caSopenharmony_ci } 1761115cd2caSopenharmony_ci break; 1762115cd2caSopenharmony_ci case ARGS_TWO: 1763115cd2caSopenharmony_ci if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_object }) 1764115cd2caSopenharmony_ci && !ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_function })) { 1765115cd2caSopenharmony_ci napi_throw(env, errorCode); 1766115cd2caSopenharmony_ci } 1767115cd2caSopenharmony_ci break; 1768115cd2caSopenharmony_ci case ARGS_THREE: 1769115cd2caSopenharmony_ci if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_object, napi_function })) { 1770115cd2caSopenharmony_ci napi_throw(env, errorCode); 1771115cd2caSopenharmony_ci } 1772115cd2caSopenharmony_ci break; 1773115cd2caSopenharmony_ci default: 1774115cd2caSopenharmony_ci napi_throw(env, errorCode); 1775115cd2caSopenharmony_ci break; 1776115cd2caSopenharmony_ci } 1777115cd2caSopenharmony_ci } 1778115cd2caSopenharmony_ci ExecuteHelper *executeHelper = new (std::nothrow) ExecuteHelper(); 1779115cd2caSopenharmony_ci napi_value result = nullptr; 1780115cd2caSopenharmony_ci if (executeHelper != nullptr) { 1781115cd2caSopenharmony_ci result = Scheduling(env, info, executeHelper, QUERY_MY_CARD); 1782115cd2caSopenharmony_ci return result; 1783115cd2caSopenharmony_ci } 1784115cd2caSopenharmony_ci napi_create_int64(env, ERROR, &result); 1785115cd2caSopenharmony_ci return result; 1786115cd2caSopenharmony_ci} 1787115cd2caSopenharmony_ci 1788115cd2caSopenharmony_ci/** 1789115cd2caSopenharmony_ci * @brief Test interface IS_MY_CARD 1790115cd2caSopenharmony_ci * 1791115cd2caSopenharmony_ci * @param env Conditions for resolve object interface operation 1792115cd2caSopenharmony_ci * @param info Conditions for resolve object interface operation 1793115cd2caSopenharmony_ci * 1794115cd2caSopenharmony_ci * @return The result returned by test 1795115cd2caSopenharmony_ci */ 1796115cd2caSopenharmony_cinapi_value IsMyCard(napi_env env, napi_callback_info info) 1797115cd2caSopenharmony_ci{ 1798115cd2caSopenharmony_ci size_t argc = MAX_PARAMS; 1799115cd2caSopenharmony_ci napi_value argv[MAX_PARAMS] = {0}; 1800115cd2caSopenharmony_ci napi_value thisVar = nullptr; 1801115cd2caSopenharmony_ci void *data; 1802115cd2caSopenharmony_ci napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); 1803115cd2caSopenharmony_ci bool isStageMode = false; 1804115cd2caSopenharmony_ci OHOS::AbilityRuntime::IsStageContext(env, argv[0], isStageMode); 1805115cd2caSopenharmony_ci if (isStageMode) { 1806115cd2caSopenharmony_ci napi_value errorCode = ContactsNapiUtils::CreateError(env, PARAMETER_ERROR); 1807115cd2caSopenharmony_ci switch (argc) { 1808115cd2caSopenharmony_ci case ARGS_TWO: 1809115cd2caSopenharmony_ci if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_number })) { 1810115cd2caSopenharmony_ci napi_throw(env, errorCode); 1811115cd2caSopenharmony_ci } 1812115cd2caSopenharmony_ci break; 1813115cd2caSopenharmony_ci case ARGS_THREE: 1814115cd2caSopenharmony_ci if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_number, napi_function })) { 1815115cd2caSopenharmony_ci napi_throw(env, errorCode); 1816115cd2caSopenharmony_ci } 1817115cd2caSopenharmony_ci break; 1818115cd2caSopenharmony_ci default: 1819115cd2caSopenharmony_ci napi_throw(env, errorCode); 1820115cd2caSopenharmony_ci break; 1821115cd2caSopenharmony_ci } 1822115cd2caSopenharmony_ci } 1823115cd2caSopenharmony_ci ExecuteHelper *executeHelper = new (std::nothrow) ExecuteHelper(); 1824115cd2caSopenharmony_ci napi_value result = nullptr; 1825115cd2caSopenharmony_ci if (executeHelper != nullptr) { 1826115cd2caSopenharmony_ci result = Scheduling(env, info, executeHelper, IS_MY_CARD); 1827115cd2caSopenharmony_ci return result; 1828115cd2caSopenharmony_ci } 1829115cd2caSopenharmony_ci napi_create_int64(env, ERROR, &result); 1830115cd2caSopenharmony_ci return result; 1831115cd2caSopenharmony_ci} 1832115cd2caSopenharmony_ci 1833115cd2caSopenharmony_ci/** 1834115cd2caSopenharmony_ci * @brief Test interface IS_LOCAL_CONTACT 1835115cd2caSopenharmony_ci * 1836115cd2caSopenharmony_ci * @param env Conditions for resolve object interface operation 1837115cd2caSopenharmony_ci * @param info Conditions for resolve object interface operation 1838115cd2caSopenharmony_ci * 1839115cd2caSopenharmony_ci * @return The result returned by test 1840115cd2caSopenharmony_ci */ 1841115cd2caSopenharmony_cinapi_value IsLocalContact(napi_env env, napi_callback_info info) 1842115cd2caSopenharmony_ci{ 1843115cd2caSopenharmony_ci size_t argc = MAX_PARAMS; 1844115cd2caSopenharmony_ci napi_value argv[MAX_PARAMS] = {0}; 1845115cd2caSopenharmony_ci napi_value thisVar = nullptr; 1846115cd2caSopenharmony_ci void *data; 1847115cd2caSopenharmony_ci napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); 1848115cd2caSopenharmony_ci bool isStageMode = false; 1849115cd2caSopenharmony_ci OHOS::AbilityRuntime::IsStageContext(env, argv[0], isStageMode); 1850115cd2caSopenharmony_ci if (isStageMode) { 1851115cd2caSopenharmony_ci napi_value errorCode = ContactsNapiUtils::CreateError(env, PARAMETER_ERROR); 1852115cd2caSopenharmony_ci switch (argc) { 1853115cd2caSopenharmony_ci case ARGS_TWO: 1854115cd2caSopenharmony_ci if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_number })) { 1855115cd2caSopenharmony_ci napi_throw(env, errorCode); 1856115cd2caSopenharmony_ci } 1857115cd2caSopenharmony_ci break; 1858115cd2caSopenharmony_ci case ARGS_THREE: 1859115cd2caSopenharmony_ci if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_number, napi_function })) { 1860115cd2caSopenharmony_ci napi_throw(env, errorCode); 1861115cd2caSopenharmony_ci } 1862115cd2caSopenharmony_ci break; 1863115cd2caSopenharmony_ci default: 1864115cd2caSopenharmony_ci napi_throw(env, errorCode); 1865115cd2caSopenharmony_ci break; 1866115cd2caSopenharmony_ci } 1867115cd2caSopenharmony_ci } 1868115cd2caSopenharmony_ci ExecuteHelper *executeHelper = new (std::nothrow) ExecuteHelper(); 1869115cd2caSopenharmony_ci napi_value result = nullptr; 1870115cd2caSopenharmony_ci if (executeHelper != nullptr) { 1871115cd2caSopenharmony_ci result = Scheduling(env, info, executeHelper, IS_LOCAL_CONTACT); 1872115cd2caSopenharmony_ci return result; 1873115cd2caSopenharmony_ci } 1874115cd2caSopenharmony_ci napi_create_int64(env, ERROR, &result); 1875115cd2caSopenharmony_ci return result; 1876115cd2caSopenharmony_ci} 1877115cd2caSopenharmony_ci 1878115cd2caSopenharmony_cinapi_value DeclareContactConst(napi_env env, napi_value exports) 1879115cd2caSopenharmony_ci{ 1880115cd2caSopenharmony_ci // Contact 1881115cd2caSopenharmony_ci napi_property_descriptor desc[] = { 1882115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("INVALID_CONTACT_ID", 1883115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Contacts::INVALID_CONTACT_ID))), 1884115cd2caSopenharmony_ci }; 1885115cd2caSopenharmony_ci napi_value result = nullptr; 1886115cd2caSopenharmony_ci napi_define_class(env, "Contact", NAPI_AUTO_LENGTH, ContactsNapiUtils::CreateClassConstructor, nullptr, 1887115cd2caSopenharmony_ci sizeof(desc) / sizeof(*desc), desc, &result); 1888115cd2caSopenharmony_ci napi_set_named_property(env, exports, "Contact", result); 1889115cd2caSopenharmony_ci return exports; 1890115cd2caSopenharmony_ci} 1891115cd2caSopenharmony_ci 1892115cd2caSopenharmony_cinapi_value DeclareEmailConst(napi_env env, napi_value exports) 1893115cd2caSopenharmony_ci{ 1894115cd2caSopenharmony_ci // Email 1895115cd2caSopenharmony_ci napi_property_descriptor desc[] = { 1896115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("CUSTOM_LABEL", 1897115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Email::CUSTOM_LABEL))), 1898115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("EMAIL_HOME", 1899115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Email::EMAIL_HOME))), 1900115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("EMAIL_WORK", 1901115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Email::EMAIL_WORK))), 1902115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("EMAIL_OTHER", 1903115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Email::EMAIL_OTHER))), 1904115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("INVALID_LABEL_ID", 1905115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Email::INVALID_LABEL_ID))), 1906115cd2caSopenharmony_ci }; 1907115cd2caSopenharmony_ci napi_value result = nullptr; 1908115cd2caSopenharmony_ci napi_define_class(env, "Email", NAPI_AUTO_LENGTH, ContactsNapiUtils::CreateClassConstructor, nullptr, 1909115cd2caSopenharmony_ci sizeof(desc) / sizeof(*desc), desc, &result); 1910115cd2caSopenharmony_ci napi_set_named_property(env, exports, "Email", result); 1911115cd2caSopenharmony_ci return exports; 1912115cd2caSopenharmony_ci} 1913115cd2caSopenharmony_ci 1914115cd2caSopenharmony_cinapi_value DeclareEventConst(napi_env env, napi_value exports) 1915115cd2caSopenharmony_ci{ 1916115cd2caSopenharmony_ci // Event 1917115cd2caSopenharmony_ci napi_property_descriptor desc[] = { 1918115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("CUSTOM_LABEL", 1919115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Event::CUSTOM_LABEL))), 1920115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("EVENT_ANNIVERSARY", 1921115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Event::EVENT_ANNIVERSARY))), 1922115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("EVENT_OTHER", 1923115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Event::EVENT_OTHER))), 1924115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("EVENT_BIRTHDAY", 1925115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Event::EVENT_BIRTHDAY))), 1926115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("INVALID_LABEL_ID", 1927115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Event::INVALID_LABEL_ID))), 1928115cd2caSopenharmony_ci }; 1929115cd2caSopenharmony_ci napi_value result = nullptr; 1930115cd2caSopenharmony_ci napi_define_class(env, "Event", NAPI_AUTO_LENGTH, ContactsNapiUtils::CreateClassConstructor, nullptr, 1931115cd2caSopenharmony_ci sizeof(desc) / sizeof(*desc), desc, &result); 1932115cd2caSopenharmony_ci napi_set_named_property(env, exports, "Event", result); 1933115cd2caSopenharmony_ci return exports; 1934115cd2caSopenharmony_ci} 1935115cd2caSopenharmony_ci 1936115cd2caSopenharmony_cinapi_value DeclareImAddressConst(napi_env env, napi_value exports) 1937115cd2caSopenharmony_ci{ 1938115cd2caSopenharmony_ci // ImAddress 1939115cd2caSopenharmony_ci napi_property_descriptor desc[] = { 1940115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("CUSTOM_LABEL", 1941115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(ImAddress::CUSTOM_LABEL))), 1942115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("IM_AIM", 1943115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(ImAddress::IM_AIM))), 1944115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("IM_MSN", 1945115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(ImAddress::IM_MSN))), 1946115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("IM_YAHOO", 1947115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(ImAddress::IM_YAHOO))), 1948115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("IM_SKYPE", 1949115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(ImAddress::IM_SKYPE))), 1950115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("IM_QQ", 1951115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(ImAddress::IM_QQ))), 1952115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("IM_ICQ", 1953115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(ImAddress::IM_ICQ))), 1954115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("IM_JABBER", 1955115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(ImAddress::IM_JABBER))), 1956115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("INVALID_LABEL_ID", 1957115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(ImAddress::INVALID_LABEL_ID))), 1958115cd2caSopenharmony_ci }; 1959115cd2caSopenharmony_ci napi_value result = nullptr; 1960115cd2caSopenharmony_ci napi_define_class(env, "ImAddress", NAPI_AUTO_LENGTH, ContactsNapiUtils::CreateClassConstructor, nullptr, 1961115cd2caSopenharmony_ci sizeof(desc) / sizeof(*desc), desc, &result); 1962115cd2caSopenharmony_ci napi_set_named_property(env, exports, "ImAddress", result); 1963115cd2caSopenharmony_ci return exports; 1964115cd2caSopenharmony_ci} 1965115cd2caSopenharmony_ci 1966115cd2caSopenharmony_cinapi_value DeclarePhoneNumberConst(napi_env env, napi_value exports) 1967115cd2caSopenharmony_ci{ 1968115cd2caSopenharmony_ci // PhoneNumber 1969115cd2caSopenharmony_ci napi_property_descriptor desc[] = { 1970115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("CUSTOM_LABEL", 1971115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(PhoneNumber::CUSTOM_LABEL))), 1972115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("NUM_HOME", 1973115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(PhoneNumber::NUM_HOME))), 1974115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("NUM_MOBILE", 1975115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(PhoneNumber::NUM_MOBILE))), 1976115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("NUM_WORK", 1977115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(PhoneNumber::NUM_WORK))), 1978115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("NUM_FAX_WORK", 1979115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(PhoneNumber::NUM_FAX_WORK))), 1980115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("NUM_FAX_HOME", 1981115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(PhoneNumber::NUM_FAX_HOME))), 1982115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("NUM_PAGER", 1983115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(PhoneNumber::NUM_PAGER))), 1984115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("NUM_OTHER", 1985115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(PhoneNumber::NUM_OTHER))), 1986115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("NUM_CALLBACK", 1987115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(PhoneNumber::NUM_CALLBACK))), 1988115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("NUM_CAR", 1989115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(PhoneNumber::NUM_CAR))), 1990115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("NUM_COMPANY_MAIN", 1991115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(PhoneNumber::NUM_COMPANY_MAIN))), 1992115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("NUM_ISDN", 1993115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(PhoneNumber::NUM_ISDN))), 1994115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("NUM_MAIN", 1995115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(PhoneNumber::NUM_MAIN))), 1996115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("NUM_OTHER_FAX", 1997115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(PhoneNumber::NUM_OTHER_FAX))), 1998115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("NUM_RADIO", 1999115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(PhoneNumber::NUM_RADIO))), 2000115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("NUM_TELEX", 2001115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(PhoneNumber::NUM_TELEX))), 2002115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("NUM_TTY_TDD", 2003115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(PhoneNumber::NUM_TTY_TDD))), 2004115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("NUM_WORK_MOBILE", 2005115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(PhoneNumber::NUM_WORK_MOBILE))), 2006115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("NUM_WORK_PAGER", 2007115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(PhoneNumber::NUM_WORK_PAGER))), 2008115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("NUM_ASSISTANT", 2009115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(PhoneNumber::NUM_ASSISTANT))), 2010115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("NUM_MMS", 2011115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(PhoneNumber::NUM_MMS))), 2012115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("INVALID_LABEL_ID", 2013115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(PhoneNumber::INVALID_LABEL_ID))), 2014115cd2caSopenharmony_ci }; 2015115cd2caSopenharmony_ci napi_value result = nullptr; 2016115cd2caSopenharmony_ci napi_define_class(env, "PhoneNumber", NAPI_AUTO_LENGTH, ContactsNapiUtils::CreateClassConstructor, nullptr, 2017115cd2caSopenharmony_ci sizeof(desc) / sizeof(*desc), desc, &result); 2018115cd2caSopenharmony_ci napi_set_named_property(env, exports, "PhoneNumber", result); 2019115cd2caSopenharmony_ci return exports; 2020115cd2caSopenharmony_ci} 2021115cd2caSopenharmony_ci 2022115cd2caSopenharmony_cinapi_value DeclarePostalAddressConst(napi_env env, napi_value exports) 2023115cd2caSopenharmony_ci{ 2024115cd2caSopenharmony_ci // PostalAddress 2025115cd2caSopenharmony_ci napi_property_descriptor desc[] = { 2026115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("CUSTOM_LABEL", 2027115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(PostalAddress::CUSTOM_LABEL))), 2028115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("ADDR_HOME", 2029115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(PostalAddress::ADDR_HOME))), 2030115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("ADDR_WORK", 2031115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(PostalAddress::ADDR_WORK))), 2032115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("ADDR_OTHER", 2033115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(PostalAddress::ADDR_OTHER))), 2034115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("INVALID_LABEL_ID", 2035115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(PostalAddress::INVALID_LABEL_ID))), 2036115cd2caSopenharmony_ci }; 2037115cd2caSopenharmony_ci napi_value result = nullptr; 2038115cd2caSopenharmony_ci napi_define_class(env, "PostalAddress", NAPI_AUTO_LENGTH, ContactsNapiUtils::CreateClassConstructor, nullptr, 2039115cd2caSopenharmony_ci sizeof(desc) / sizeof(*desc), desc, &result); 2040115cd2caSopenharmony_ci napi_set_named_property(env, exports, "PostalAddress", result); 2041115cd2caSopenharmony_ci return exports; 2042115cd2caSopenharmony_ci} 2043115cd2caSopenharmony_ci 2044115cd2caSopenharmony_cinapi_value DeclareRelationConst(napi_env env, napi_value exports) 2045115cd2caSopenharmony_ci{ 2046115cd2caSopenharmony_ci // Relation 2047115cd2caSopenharmony_ci napi_property_descriptor desc[] = { 2048115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("CUSTOM_LABEL", 2049115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Relation::CUSTOM_LABEL))), 2050115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("RELATION_ASSISTANT", 2051115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Relation::RELATION_ASSISTANT))), 2052115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("RELATION_BROTHER", 2053115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Relation::RELATION_BROTHER))), 2054115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("RELATION_CHILD", 2055115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Relation::RELATION_CHILD))), 2056115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("RELATION_DOMESTIC_PARTNER", 2057115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Relation::RELATION_DOMESTIC_PARTNER))), 2058115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("RELATION_FATHER", 2059115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Relation::RELATION_FATHER))), 2060115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("RELATION_FRIEND", 2061115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Relation::RELATION_FRIEND))), 2062115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("RELATION_MANAGER", 2063115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Relation::RELATION_MANAGER))), 2064115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("RELATION_MOTHER", 2065115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Relation::RELATION_MOTHER))), 2066115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("RELATION_PARENT", 2067115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Relation::RELATION_PARENT))), 2068115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("RELATION_PARTNER", 2069115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Relation::RELATION_PARTNER))), 2070115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("RELATION_REFERRED_BY", 2071115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Relation::RELATION_REFERRED_BY))), 2072115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("RELATION_RELATIVE", 2073115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Relation::RELATION_RELATIVE))), 2074115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("RELATION_SISTER", 2075115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Relation::RELATION_SISTER))), 2076115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("RELATION_SPOUSE", 2077115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Relation::RELATION_SPOUSE))), 2078115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("INVALID_LABEL_ID", 2079115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Relation::INVALID_LABEL_ID))), 2080115cd2caSopenharmony_ci }; 2081115cd2caSopenharmony_ci napi_value result = nullptr; 2082115cd2caSopenharmony_ci napi_define_class(env, "Relation", NAPI_AUTO_LENGTH, ContactsNapiUtils::CreateClassConstructor, nullptr, 2083115cd2caSopenharmony_ci sizeof(desc) / sizeof(*desc), desc, &result); 2084115cd2caSopenharmony_ci napi_set_named_property(env, exports, "Relation", result); 2085115cd2caSopenharmony_ci return exports; 2086115cd2caSopenharmony_ci} 2087115cd2caSopenharmony_ci 2088115cd2caSopenharmony_cinapi_value DeclareSipAddressConst(napi_env env, napi_value exports) 2089115cd2caSopenharmony_ci{ 2090115cd2caSopenharmony_ci // SipAddress 2091115cd2caSopenharmony_ci napi_property_descriptor desc[] = { 2092115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("CUSTOM_LABEL", 2093115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(SipAddress::CUSTOM_LABEL))), 2094115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("SIP_HOME", 2095115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(SipAddress::SIP_HOME))), 2096115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("SIP_WORK", 2097115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(SipAddress::SIP_WORK))), 2098115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("SIP_OTHER", 2099115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(SipAddress::SIP_OTHER))), 2100115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("INVALID_LABEL_ID", 2101115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(SipAddress::INVALID_LABEL_ID))), 2102115cd2caSopenharmony_ci }; 2103115cd2caSopenharmony_ci napi_value result = nullptr; 2104115cd2caSopenharmony_ci napi_define_class(env, "SipAddress", NAPI_AUTO_LENGTH, ContactsNapiUtils::CreateClassConstructor, nullptr, 2105115cd2caSopenharmony_ci sizeof(desc) / sizeof(*desc), desc, &result); 2106115cd2caSopenharmony_ci napi_set_named_property(env, exports, "SipAddress", result); 2107115cd2caSopenharmony_ci return exports; 2108115cd2caSopenharmony_ci} 2109115cd2caSopenharmony_ci 2110115cd2caSopenharmony_cinapi_value DeclareAttributeConst(napi_env env, napi_value exports) 2111115cd2caSopenharmony_ci{ 2112115cd2caSopenharmony_ci // Attribute 2113115cd2caSopenharmony_ci napi_property_descriptor desc[] = { 2114115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("ATTR_CONTACT_EVENT", 2115115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Attribute::ATTR_CONTACT_EVENT))), 2116115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("ATTR_EMAIL", 2117115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Attribute::ATTR_EMAIL))), 2118115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("ATTR_GROUP_MEMBERSHIP", 2119115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Attribute::ATTR_GROUP_MEMBERSHIP))), 2120115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("ATTR_IM", 2121115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Attribute::ATTR_IM))), 2122115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("ATTR_NAME", 2123115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Attribute::ATTR_NAME))), 2124115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("ATTR_NICKNAME", 2125115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Attribute::ATTR_NICKNAME))), 2126115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("ATTR_NOTE", 2127115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Attribute::ATTR_NOTE))), 2128115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("ATTR_ORGANIZATION", 2129115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Attribute::ATTR_ORGANIZATION))), 2130115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("ATTR_PHONE", 2131115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Attribute::ATTR_PHONE))), 2132115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("ATTR_PORTRAIT", 2133115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Attribute::ATTR_PORTRAIT))), 2134115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("ATTR_POSTAL_ADDRESS", 2135115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Attribute::ATTR_POSTAL_ADDRESS))), 2136115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("ATTR_RELATION", 2137115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Attribute::ATTR_RELATION))), 2138115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("ATTR_SIP_ADDRESS", 2139115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Attribute::ATTR_SIP_ADDRESS))), 2140115cd2caSopenharmony_ci DECLARE_NAPI_STATIC_PROPERTY("ATTR_WEBSITE", 2141115cd2caSopenharmony_ci ContactsNapiUtils::ToInt32Value(env, static_cast<int32_t>(Attribute::ATTR_WEBSITE))), 2142115cd2caSopenharmony_ci }; 2143115cd2caSopenharmony_ci napi_value result = nullptr; 2144115cd2caSopenharmony_ci napi_define_class(env, "Attribute", NAPI_AUTO_LENGTH, ContactsNapiUtils::CreateClassConstructor, nullptr, 2145115cd2caSopenharmony_ci sizeof(desc) / sizeof(*desc), desc, &result); 2146115cd2caSopenharmony_ci napi_set_named_property(env, exports, "Attribute", result); 2147115cd2caSopenharmony_ci return exports; 2148115cd2caSopenharmony_ci} 2149115cd2caSopenharmony_ci 2150115cd2caSopenharmony_civoid Init(napi_env env, napi_value exports) 2151115cd2caSopenharmony_ci{ 2152115cd2caSopenharmony_ci napi_property_descriptor exportFuncs[] = { 2153115cd2caSopenharmony_ci DECLARE_NAPI_FUNCTION("addContact", OHOS::ContactsApi::AddContact), 2154115cd2caSopenharmony_ci DECLARE_NAPI_FUNCTION("deleteContact", OHOS::ContactsApi::DeleteContact), 2155115cd2caSopenharmony_ci DECLARE_NAPI_FUNCTION("updateContact", OHOS::ContactsApi::UpdateContact), 2156115cd2caSopenharmony_ci DECLARE_NAPI_FUNCTION("queryContact", OHOS::ContactsApi::QueryContact), 2157115cd2caSopenharmony_ci DECLARE_NAPI_FUNCTION("queryContacts", OHOS::ContactsApi::QueryContacts), 2158115cd2caSopenharmony_ci DECLARE_NAPI_FUNCTION("queryContactsByEmail", OHOS::ContactsApi::QueryContactsByEmail), 2159115cd2caSopenharmony_ci DECLARE_NAPI_FUNCTION("queryContactsByPhoneNumber", OHOS::ContactsApi::QueryContactsByPhoneNumber), 2160115cd2caSopenharmony_ci DECLARE_NAPI_FUNCTION("queryGroups", OHOS::ContactsApi::QueryGroups), 2161115cd2caSopenharmony_ci DECLARE_NAPI_FUNCTION("queryHolders", OHOS::ContactsApi::QueryHolders), 2162115cd2caSopenharmony_ci DECLARE_NAPI_FUNCTION("queryKey", OHOS::ContactsApi::QueryKey), 2163115cd2caSopenharmony_ci DECLARE_NAPI_FUNCTION("queryMyCard", OHOS::ContactsApi::QueryMyCard), 2164115cd2caSopenharmony_ci DECLARE_NAPI_FUNCTION("isMyCard", OHOS::ContactsApi::IsMyCard), 2165115cd2caSopenharmony_ci DECLARE_NAPI_FUNCTION("isLocalContact", OHOS::ContactsApi::IsLocalContact), 2166115cd2caSopenharmony_ci }; 2167115cd2caSopenharmony_ci napi_define_properties(env, exports, sizeof(exportFuncs) / sizeof(*exportFuncs), exportFuncs); 2168115cd2caSopenharmony_ci // Declare class const initialization 2169115cd2caSopenharmony_ci DeclareContactConst(env, exports); 2170115cd2caSopenharmony_ci DeclareEmailConst(env, exports); 2171115cd2caSopenharmony_ci DeclareEventConst(env, exports); 2172115cd2caSopenharmony_ci DeclareImAddressConst(env, exports); 2173115cd2caSopenharmony_ci DeclarePhoneNumberConst(env, exports); 2174115cd2caSopenharmony_ci DeclarePostalAddressConst(env, exports); 2175115cd2caSopenharmony_ci DeclareRelationConst(env, exports); 2176115cd2caSopenharmony_ci DeclareSipAddressConst(env, exports); 2177115cd2caSopenharmony_ci DeclareAttributeConst(env, exports); 2178115cd2caSopenharmony_ci} 2179115cd2caSopenharmony_ci} // namespace ContactsApi 2180115cd2caSopenharmony_ci} // namespace OHOS 2181