From d38fd4dd1dd10278891e3823cac5f6f961eb7ef8 Mon Sep 17 00:00:00 2001 From: zhouhongli2023 Date: Fri, 28 Jul 2023 12:02:20 +0800 Subject: [PATCH 1/5] api10 Signed-off-by: zhouhongli2023 --- contacts/src/contact.js | 1 + contacts/src/contacts_api.cpp | 257 ++++++++++++++++++++++------------ 2 files changed, 171 insertions(+), 87 deletions(-) diff --git a/contacts/src/contact.js b/contacts/src/contact.js index 78df37f..8b294b2 100644 --- a/contacts/src/contact.js +++ b/contacts/src/contact.js @@ -111,6 +111,7 @@ async function contactsPickerSelect() { export default { selectContact: contactsPickerSelect, + selectContacts: contactsPickerSelect, addContact: contact.addContact, deleteContact: contact.deleteContact, queryContact: contact.queryContact, diff --git a/contacts/src/contacts_api.cpp b/contacts/src/contacts_api.cpp index 03924e6..8d7c984 100644 --- a/contacts/src/contacts_api.cpp +++ b/contacts/src/contacts_api.cpp @@ -146,22 +146,23 @@ int GetType(napi_env env, napi_value value) * @brief Get dataShareHelper * * @param env Conditions for get dataShareHelper operation - * @param info napi call back info - * @param executeHelper contains information necessary through out the NAPI process * + * @return The result returned by get dataShareHelper */ void GetDataShareHelper(napi_env env, napi_callback_info info, ExecuteHelper *executeHelper) { - bool isStageMode = false; + HILOG_ERROR("enter GetDataShareHelper("); napi_value global; - napi_status status = napi_get_global(env, &global); + bool isStageMode = false; napi_value abilityContext = nullptr; - + napi_status status = napi_get_global(env, &global); if (executeHelper->abilityContext != nullptr) { + HILOG_ERROR("have context"); isStageMode = true; status = napi_ok; abilityContext = executeHelper->abilityContext; } else { + HILOG_ERROR("does not have context"); if (status != napi_ok) { HILOG_ERROR("GetDataShareHelper napi_get_global != napi_ok"); } @@ -170,7 +171,6 @@ void GetDataShareHelper(napi_env env, napi_callback_info info, ExecuteHelper *ex if (status != napi_ok) { HILOG_ERROR("GetDataShareHelper napi_get_globalThis != napi_ok"); } - status = napi_get_named_property(env, globalThis, "abilityContext", &abilityContext); if (status != napi_ok) { HILOG_ERROR("GetDataShareHelper napi_get_abilityContext != napi_ok"); @@ -185,12 +185,12 @@ void GetDataShareHelper(napi_env env, napi_callback_info info, ExecuteHelper *ex auto ability = OHOS::AbilityRuntime::GetCurrentAbility(env); if (ability == nullptr) { HILOG_ERROR("Failed to get native ability instance"); - return; + return nullptr; } auto context = ability->GetContext(); if (context == nullptr) { HILOG_ERROR("Failed to get native context instance"); - return; + return nullptr; } executeHelper->dataShareHelper = DataShare::DataShareHelper::Creator(context->GetToken(), CONTACTS_DATA_URI); } else { @@ -198,10 +198,11 @@ void GetDataShareHelper(napi_env env, napi_callback_info info, ExecuteHelper *ex auto context = OHOS::AbilityRuntime::GetStageModeContext(env, abilityContext); if (context == nullptr) { HILOG_ERROR("Failed to get native stage context instance"); - return; + return nullptr; } executeHelper->dataShareHelper = DataShare::DataShareHelper::Creator(context->GetToken(), CONTACTS_DATA_URI); } + return dataShareHelper; } /** @@ -344,38 +345,38 @@ DataShare::DataSharePredicates BuildQueryContactsPredicates(napi_env env, napi_v ContactsBuild contactsBuild; Holder holder = contactsBuild.GetHolder(env, hold); ContactAttributes attrs = contactsBuild.GetContactAttributes(env, attr); - DataShare::DataSharePredicates dataSharepredicates; + DataShare::DataSharePredicates predicates; std::map holders; HoldersStructure(holders, holder); unsigned int size = attrs.attributes.size(); unsigned int mapSize = holders.size(); std::map::iterator it; for (it = holders.begin(); it != holders.end(); ++it) { - dataSharepredicates.EqualTo(it->first, it->second); + predicates.EqualTo(it->first, it->second); if (it != --holders.end()) { - dataSharepredicates.And(); + predicates.And(); } } if (mapSize > 0) { - dataSharepredicates.And(); + predicates.And(); } if (size > 0) { - dataSharepredicates.BeginWrap(); + predicates.BeginWrap(); } for (unsigned int i = 0; i < size; ++i) { - dataSharepredicates.EqualTo("type_id", std::to_string(attrs.attributes[i])); + predicates.EqualTo("type_id", std::to_string(attrs.attributes[i])); if (i != size - 1) { - dataSharepredicates.Or(); + predicates.Or(); } } if (size > 0) { - dataSharepredicates.EndWrap(); + predicates.EndWrap(); } if (size > 0 || mapSize > 0) { - dataSharepredicates.And(); + predicates.And(); } - dataSharepredicates.EqualTo("is_deleted", "0"); - return dataSharepredicates; + predicates.EqualTo("is_deleted", "0"); + return predicates; } /** @@ -620,12 +621,14 @@ DataShare::DataSharePredicates BuildIsMyCardPredicates(napi_env env, napi_value void ExecuteDone(napi_env env, napi_status status, void *data) { + HILOG_INFO("contactApi ExecuteDone start===>"); ExecuteHelper *executeHelper = reinterpret_cast(data); HILOG_INFO("ExecuteDone workName: %{public}d", executeHelper->actionCode); napi_value result = nullptr; napi_deferred deferred = executeHelper->deferred; HandleExecuteResult(env, executeHelper, result); if (executeHelper->abilityContext != nullptr) { + HILOG_INFO("executeHelper->abilityContext != nullptr"); napi_value errorCode = nullptr; HandleExecuteErrorCode(env, executeHelper, errorCode); if (errorCode != nullptr) { @@ -634,10 +637,21 @@ void ExecuteDone(napi_env env, napi_status status, void *data) NAPI_CALL_RETURN_VOID(env, napi_resolve_deferred(env, deferred, result)); } } else { + HILOG_INFO("executeHelper->abilityContext = nullptr"); NAPI_CALL_RETURN_VOID(env, napi_resolve_deferred(env, deferred, result)); } executeHelper->deferred = nullptr; + if (executeHelper->valueUpdateContact.capacity() != 0) { + std::vector().swap(executeHelper->valueUpdateContact); + } + if (executeHelper->valueContact.capacity() != 0) { + std::vector().swap(executeHelper->valueUpdateContact); + } + if (executeHelper->valueContactData.capacity() != 0) { + std::vector().swap(executeHelper->valueUpdateContact); + } + NAPI_CALL_RETURN_VOID(env, napi_delete_async_work(env, executeHelper->work)); if (executeHelper->dataShareHelper != nullptr) { executeHelper->dataShareHelper->Release(); @@ -649,6 +663,7 @@ void ExecuteDone(napi_env env, napi_status status, void *data) void ExecuteSyncDone(napi_env env, napi_status status, void *data) { + HILOG_INFO("contactApi ExecuteSyncDone start===>"); if (status != napi_ok) { HILOG_ERROR("ExecuteSyncDone status is not ok===>"); return; @@ -659,11 +674,13 @@ void ExecuteSyncDone(napi_env env, napi_status status, void *data) napi_value global; napi_get_global(env, &global); napi_value resultData[RESULT_DATA_SIZE]; + if (executeHelper->abilityContext != nullptr) { HandleExecuteErrorCode(env, executeHelper, resultData[0]); HandleExecuteResult(env, executeHelper, resultData[1]); } else { if (executeHelper->resultData < 0) { + HandleExecuteResult(env, executeHelper, resultData[0]); napi_get_undefined(env, &resultData[1]); } else { @@ -671,6 +688,7 @@ void ExecuteSyncDone(napi_env env, napi_status status, void *data) HandleExecuteResult(env, executeHelper, resultData[1]); } } + napi_value result; napi_value callBack; napi_get_reference_value(env, executeHelper->callBack, &callBack); @@ -686,6 +704,15 @@ void ExecuteSyncDone(napi_env env, napi_status status, void *data) } executeHelper->work = nullptr; executeHelper->deferred = nullptr; + if (executeHelper->valueUpdateContact.capacity() != 0) { + std::vector().swap(executeHelper->valueUpdateContact); + } + if (executeHelper->valueContact.capacity() != 0) { + std::vector().swap(executeHelper->valueUpdateContact); + } + if (executeHelper->valueContactData.capacity() != 0) { + std::vector().swap(executeHelper->valueUpdateContact); + } if (executeHelper->dataShareHelper != nullptr) { executeHelper->dataShareHelper->Release(); executeHelper->dataShareHelper = nullptr; @@ -922,6 +949,8 @@ void LocalExecute(napi_env env, ExecuteHelper *executeHelper) { if (executeHelper->dataShareHelper == nullptr) { HILOG_ERROR("create dataShareHelper is null, please check your permission"); + napi_value addContactErrorCode = ContactsNapiUtils::CreateError(env, PERMISSION_ERROR); + napi_throw(env, addContactErrorCode); executeHelper->resultData = RDB_PERMISSION_ERROR; return; } @@ -1090,6 +1119,7 @@ napi_value Scheduling(napi_env env, napi_callback_info info, ExecuteHelper *exec bool isStageMode = false; OHOS::AbilityRuntime::IsStageContext(env, argv[0], isStageMode); if (isStageMode) { + HILOG_INFO("put in context"); for (int i = 1; i < MAX_PARAMS; i++) { executeHelper->argv[i - 1] = argv[i]; } @@ -1101,6 +1131,7 @@ napi_value Scheduling(napi_env env, napi_callback_info info, ExecuteHelper *exec } SetChildActionCodeAndConvertParams(env, executeHelper); + HILOG_INFO("GetDataShareHelper(env, info, executeHelper)"); GetDataShareHelper(env, info, executeHelper); napi_value result = CreateAsyncWork(env, executeHelper); @@ -1125,20 +1156,21 @@ napi_value AddContact(napi_env env, napi_callback_info info) bool isStageMode = false; OHOS::AbilityRuntime::IsStageContext(env, argv[0], isStageMode); if (isStageMode) { - napi_value addContactErrorCode = ContactsNapiUtils::CreateError(env, PARAMETER_ERROR); + HILOG_INFO("AddContact use new api"); + napi_value errorCode = ContactsNapiUtils::CreateError(env, PARAMETER_ERROR); switch (argc) { case ARGS_TWO: if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_object })) { - napi_throw(env, addContactErrorCode); + napi_throw(env, errorCode); } break; case ARGS_THREE: if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_object, napi_function })) { - napi_throw(env, addContactErrorCode); + napi_throw(env, errorCode); } break; default: - napi_throw(env, addContactErrorCode); + napi_throw(env, errorCode); break; } } @@ -1170,20 +1202,21 @@ napi_value DeleteContact(napi_env env, napi_callback_info info) bool isStageMode = false; OHOS::AbilityRuntime::IsStageContext(env, argv[0], isStageMode); if (isStageMode) { - napi_value deleteContactErrorCode = ContactsNapiUtils::CreateError(env, PARAMETER_ERROR); + HILOG_INFO("DeleteContact use new api"); + napi_value errorCode = ContactsNapiUtils::CreateError(env, PARAMETER_ERROR); switch (argc) { case ARGS_TWO: - if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object })) { - napi_throw(env, deleteContactErrorCode); + if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_string })) { + napi_throw(env, errorCode); } break; case ARGS_THREE: - if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_function })) { - napi_throw(env, deleteContactErrorCode); + if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_string, napi_function })) { + napi_throw(env, errorCode); } break; default: - napi_throw(env, deleteContactErrorCode); + napi_throw(env, errorCode); break; } } @@ -1215,26 +1248,27 @@ napi_value UpdateContact(napi_env env, napi_callback_info info) bool isStageMode = false; OHOS::AbilityRuntime::IsStageContext(env, argv[0], isStageMode); if (isStageMode) { - napi_value updateContactErrorCode = ContactsNapiUtils::CreateError(env, PARAMETER_ERROR); + HILOG_INFO("UpdateContact use new api"); + napi_value errorCode = ContactsNapiUtils::CreateError(env, PARAMETER_ERROR); switch (argc) { case ARGS_TWO: - if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object })) { - napi_throw(env, updateContactErrorCode); + if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_object })) { + napi_throw(env, errorCode); } break; case ARGS_THREE: - if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_function }) - && !ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_object })) { - napi_throw(env, updateContactErrorCode); + if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_object, napi_function }) + && !ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_object, napi_object })) { + napi_throw(env, errorCode); } break; case ARGS_FOUR: - if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_object, napi_function })) { - napi_throw(env, updateContactErrorCode); + if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_object, napi_object, napi_function })) { + napi_throw(env, errorCode); } break; default: - napi_throw(env, updateContactErrorCode); + napi_throw(env, errorCode); break; } } @@ -1266,27 +1300,29 @@ napi_value QueryContact(napi_env env, napi_callback_info info) bool isStageMode = false; OHOS::AbilityRuntime::IsStageContext(env, argv[0], isStageMode); if (isStageMode) { + HILOG_INFO("QueryContact use new api"); napi_value errorCode = ContactsNapiUtils::CreateError(env, PARAMETER_ERROR); switch (argc) { case ARGS_TWO: - if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_string })) { + if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_string })) { napi_throw(env, errorCode); } break; case ARGS_THREE: - if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_string, napi_function })) { + if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_string, napi_function })) { napi_throw(env, errorCode); } break; case ARGS_FOUR: - if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_string, napi_object, napi_function })) { + if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_string, napi_object, napi_function }) + && !ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_string, napi_object, napi_object })) { napi_throw(env, errorCode); } break; case ARGS_FIVE: if (!ContactsNapiUtils::MatchParameters(env, argv, { - napi_string, napi_object, napi_object, napi_function + napi_object, napi_string, napi_object, napi_object, napi_function })) { napi_throw(env, errorCode); } @@ -1324,26 +1360,36 @@ napi_value QueryContacts(napi_env env, napi_callback_info info) bool isStageMode = false; OHOS::AbilityRuntime::IsStageContext(env, argv[0], isStageMode); if (isStageMode) { + HILOG_INFO("QueryContacts use new api"); napi_value errorCode = ContactsNapiUtils::CreateError(env, PARAMETER_ERROR); switch (argc) { case ARGS_ONE: + if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object })) { + napi_throw(env, errorCode); + } break; case ARGS_TWO: - if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_function })) { + HILOG_INFO("ARGS_2"); + if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_function })) { napi_throw(env, errorCode); } break; case ARGS_THREE: - if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_function })) { + HILOG_INFO("ARGS_3"); + if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_object, napi_function }) + && !ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_object, napi_object }) + ) { napi_throw(env, errorCode); } break; case ARGS_FOUR: - if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_object, napi_function })) { + HILOG_INFO("ARGS_4"); + if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_object, napi_object, napi_function })) { napi_throw(env, errorCode); } break; default: + HILOG_INFO("default"); napi_throw(env, errorCode); break; } @@ -1376,27 +1422,30 @@ napi_value QueryContactsByEmail(napi_env env, napi_callback_info info) bool isStageMode = false; OHOS::AbilityRuntime::IsStageContext(env, argv[0], isStageMode); if (isStageMode) { + HILOG_INFO("QueryContactsByEmail use new api"); napi_value errorCode = ContactsNapiUtils::CreateError(env, PARAMETER_ERROR); switch (argc) { case ARGS_TWO: - if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_string })) { + if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_string })) { napi_throw(env, errorCode); } break; case ARGS_THREE: - if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_string, napi_function })) { + if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_string, napi_function })) { napi_throw(env, errorCode); } break; case ARGS_FOUR: - if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_string, napi_object, napi_function })) { + if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_string, napi_object, napi_function }) + && !ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_string, napi_object, napi_function }) + && !ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_string, napi_object, napi_object })) { napi_throw(env, errorCode); } break; case ARGS_FIVE: if (!ContactsNapiUtils::MatchParameters(env, argv, { - napi_string, napi_object, napi_object, napi_function + napi_object, napi_string, napi_object, napi_object, napi_function })) { napi_throw(env, errorCode); } @@ -1434,27 +1483,29 @@ napi_value QueryContactsByPhoneNumber(napi_env env, napi_callback_info info) bool isStageMode = false; OHOS::AbilityRuntime::IsStageContext(env, argv[0], isStageMode); if (isStageMode) { + HILOG_INFO("QueryContactsByPhoneNumber use new api"); napi_value errorCode = ContactsNapiUtils::CreateError(env, PARAMETER_ERROR); switch (argc) { case ARGS_TWO: - if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_string })) { + if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_string })) { napi_throw(env, errorCode); } break; case ARGS_THREE: - if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_string, napi_function })) { + if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_string, napi_function })) { napi_throw(env, errorCode); } break; case ARGS_FOUR: - if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_string, napi_object, napi_function })) { + if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_string, napi_object, napi_function }) + && !ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_string, napi_object, napi_object })) { napi_throw(env, errorCode); } break; case ARGS_FIVE: if (!ContactsNapiUtils::MatchParameters(env, argv, { - napi_string, napi_object, napi_object, napi_function + napi_object, napi_string, napi_object, napi_object, napi_function })) { napi_throw(env, errorCode); } @@ -1492,22 +1543,27 @@ napi_value QueryGroups(napi_env env, napi_callback_info info) bool isStageMode = false; OHOS::AbilityRuntime::IsStageContext(env, argv[0], isStageMode); if (isStageMode) { - napi_value queryGroupsErrorCode = ContactsNapiUtils::CreateError(env, PARAMETER_ERROR); + HILOG_INFO("QueryGroups use new api"); + napi_value errorCode = ContactsNapiUtils::CreateError(env, PARAMETER_ERROR); switch (argc) { case ARGS_ONE: + if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object })) { + napi_throw(env, errorCode); + } break; case ARGS_TWO: - if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_function })) { - napi_throw(env, queryGroupsErrorCode); + if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_function }) + && !ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_object })) { + napi_throw(env, errorCode); } break; case ARGS_THREE: - if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_function })) { - napi_throw(env, queryGroupsErrorCode); + if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_object, napi_function })) { + napi_throw(env, errorCode); } break; default: - napi_throw(env, queryGroupsErrorCode); + napi_throw(env, errorCode); break; } } @@ -1539,12 +1595,16 @@ napi_value QueryHolders(napi_env env, napi_callback_info info) bool isStageMode = false; OHOS::AbilityRuntime::IsStageContext(env, argv[0], isStageMode); if (isStageMode) { + HILOG_INFO("QueryHolders use new api"); napi_value errorCode = ContactsNapiUtils::CreateError(env, PARAMETER_ERROR); switch (argc) { case ARGS_ONE: + if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object })) { + napi_throw(env, errorCode); + } break; case ARGS_TWO: - if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_function })) { + if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_function })) { napi_throw(env, errorCode); } break; @@ -1581,25 +1641,41 @@ napi_value QueryKey(napi_env env, napi_callback_info info) bool isStageMode = false; OHOS::AbilityRuntime::IsStageContext(env, argv[0], isStageMode); if (isStageMode) { - napi_value queryKeyErrorCode = ContactsNapiUtils::CreateError(env, PARAMETER_ERROR); + HILOG_INFO("QueryKey use new api"); + napi_value errorCode = ContactsNapiUtils::CreateError(env, PARAMETER_ERROR); switch (argc) { - case ARGS_TWO: + case ARGS_ONE: + HILOG_INFO("ARGS_ONE"); if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object })) { - napi_throw(env, queryKeyErrorCode); + HILOG_INFO("ARGS_ONE THROW"); + napi_throw(env, errorCode); + } + break; + case ARGS_TWO: + HILOG_INFO("ARGS_TWO"); + if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_function }) + && !ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_number })) { + HILOG_INFO("ARGS_TWO THROW"); + napi_throw(env, errorCode); } break; case ARGS_THREE: - if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_function })) { - napi_throw(env, queryKeyErrorCode); + HILOG_INFO("ARGS_THREE"); + if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_number, napi_function })) { + HILOG_INFO("ARGS_THREE THROW"); + napi_throw(env, errorCode); } break; case ARGS_FOUR: - if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_object, napi_function })) { - napi_throw(env, queryKeyErrorCode); + HILOG_INFO("ARGS_THREE"); + if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_number, napi_object, napi_function })) { + HILOG_INFO("ARGS_THREE THROW"); + napi_throw(env, errorCode); } break; default: - napi_throw(env, queryKeyErrorCode); + HILOG_INFO("DEFAULT"); + napi_throw(env, errorCode); break; } } @@ -1631,22 +1707,27 @@ napi_value QueryMyCard(napi_env env, napi_callback_info info) bool isStageMode = false; OHOS::AbilityRuntime::IsStageContext(env, argv[0], isStageMode); if (isStageMode) { - napi_value queryMyCardErrorCode = ContactsNapiUtils::CreateError(env, PARAMETER_ERROR); + HILOG_INFO("QueryMyCard use new api"); + napi_value errorCode = ContactsNapiUtils::CreateError(env, PARAMETER_ERROR); switch (argc) { case ARGS_ONE: + if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object })) { + napi_throw(env, errorCode); + } break; case ARGS_TWO: - if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_function })) { - napi_throw(env, queryMyCardErrorCode); + if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_object }) + && !ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_function })) { + napi_throw(env, errorCode); } break; case ARGS_THREE: - if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_function })) { - napi_throw(env, queryMyCardErrorCode); + if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_object, napi_function })) { + napi_throw(env, errorCode); } break; default: - napi_throw(env, queryMyCardErrorCode); + napi_throw(env, errorCode); break; } } @@ -1678,20 +1759,21 @@ napi_value IsMyCard(napi_env env, napi_callback_info info) bool isStageMode = false; OHOS::AbilityRuntime::IsStageContext(env, argv[0], isStageMode); if (isStageMode) { - napi_value isMyCardErrorCode = ContactsNapiUtils::CreateError(env, PARAMETER_ERROR); + HILOG_INFO("IsMyCard use new api"); + napi_value errorCode = ContactsNapiUtils::CreateError(env, PARAMETER_ERROR); switch (argc) { case ARGS_TWO: - if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object })) { - napi_throw(env, isMyCardErrorCode); + if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_number })) { + napi_throw(env, errorCode); } break; case ARGS_THREE: - if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_function })) { - napi_throw(env, isMyCardErrorCode); + if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_number, napi_function })) { + napi_throw(env, errorCode); } break; default: - napi_throw(env, isMyCardErrorCode); + napi_throw(env, errorCode); break; } } @@ -1723,20 +1805,21 @@ napi_value IsLocalContact(napi_env env, napi_callback_info info) bool isStageMode = false; OHOS::AbilityRuntime::IsStageContext(env, argv[0], isStageMode); if (isStageMode) { - napi_value isLocalContactErrorCode = ContactsNapiUtils::CreateError(env, PARAMETER_ERROR); + HILOG_INFO("IsLocalContact use new api"); + napi_value errorCode = ContactsNapiUtils::CreateError(env, PARAMETER_ERROR); switch (argc) { case ARGS_TWO: - if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object })) { - napi_throw(env, isLocalContactErrorCode); + if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_number })) { + napi_throw(env, errorCode); } break; case ARGS_THREE: - if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_function })) { - napi_throw(env, isLocalContactErrorCode); + if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_number, napi_function })) { + napi_throw(env, errorCode); } break; default: - napi_throw(env, isLocalContactErrorCode); + napi_throw(env, errorCode); break; } } -- Gitee From 4822ad1ef796c041fae85bbf0dcae2f5186365b2 Mon Sep 17 00:00:00 2001 From: zhouhongli2023 Date: Fri, 28 Jul 2023 12:22:08 +0800 Subject: [PATCH 2/5] update Signed-off-by: zhouhongli2023 --- contacts/src/contacts_api.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/contacts/src/contacts_api.cpp b/contacts/src/contacts_api.cpp index 8d7c984..5d40c45 100644 --- a/contacts/src/contacts_api.cpp +++ b/contacts/src/contacts_api.cpp @@ -185,12 +185,12 @@ void GetDataShareHelper(napi_env env, napi_callback_info info, ExecuteHelper *ex auto ability = OHOS::AbilityRuntime::GetCurrentAbility(env); if (ability == nullptr) { HILOG_ERROR("Failed to get native ability instance"); - return nullptr; + return; } auto context = ability->GetContext(); if (context == nullptr) { HILOG_ERROR("Failed to get native context instance"); - return nullptr; + return; } executeHelper->dataShareHelper = DataShare::DataShareHelper::Creator(context->GetToken(), CONTACTS_DATA_URI); } else { @@ -198,11 +198,11 @@ void GetDataShareHelper(napi_env env, napi_callback_info info, ExecuteHelper *ex auto context = OHOS::AbilityRuntime::GetStageModeContext(env, abilityContext); if (context == nullptr) { HILOG_ERROR("Failed to get native stage context instance"); - return nullptr; + return; } executeHelper->dataShareHelper = DataShare::DataShareHelper::Creator(context->GetToken(), CONTACTS_DATA_URI); } - return dataShareHelper; + return; } /** -- Gitee From 34ce16c434255abe69f895e6289753cfa8eacd40 Mon Sep 17 00:00:00 2001 From: zhouhongli2023 Date: Sat, 29 Jul 2023 11:47:50 +0800 Subject: [PATCH 3/5] update Signed-off-by: zhouhongli2023 --- contacts/src/contacts_api.cpp | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/contacts/src/contacts_api.cpp b/contacts/src/contacts_api.cpp index 5d40c45..9ce5ce8 100644 --- a/contacts/src/contacts_api.cpp +++ b/contacts/src/contacts_api.cpp @@ -157,7 +157,6 @@ void GetDataShareHelper(napi_env env, napi_callback_info info, ExecuteHelper *ex napi_value abilityContext = nullptr; napi_status status = napi_get_global(env, &global); if (executeHelper->abilityContext != nullptr) { - HILOG_ERROR("have context"); isStageMode = true; status = napi_ok; abilityContext = executeHelper->abilityContext; @@ -1263,7 +1262,8 @@ napi_value UpdateContact(napi_env env, napi_callback_info info) } break; case ARGS_FOUR: - if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_object, napi_object, napi_function })) { + if (!ContactsNapiUtils::MatchParameters(env, argv, + { napi_object, napi_object, napi_object, napi_function })) { napi_throw(env, errorCode); } break; @@ -1314,8 +1314,10 @@ napi_value QueryContact(napi_env env, napi_callback_info info) } break; case ARGS_FOUR: - if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_string, napi_object, napi_function }) - && !ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_string, napi_object, napi_object })) { + if (!ContactsNapiUtils::MatchParameters(env, argv, + { napi_object, napi_string, napi_object, napi_function }) && + !ContactsNapiUtils::MatchParameters(env, argv, + { napi_object, napi_string, napi_object, napi_object })) { napi_throw(env, errorCode); } break; @@ -1369,13 +1371,11 @@ napi_value QueryContacts(napi_env env, napi_callback_info info) } break; case ARGS_TWO: - HILOG_INFO("ARGS_2"); if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_function })) { napi_throw(env, errorCode); } break; case ARGS_THREE: - HILOG_INFO("ARGS_3"); if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_object, napi_function }) && !ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_object, napi_object }) ) { @@ -1383,13 +1383,12 @@ napi_value QueryContacts(napi_env env, napi_callback_info info) } break; case ARGS_FOUR: - HILOG_INFO("ARGS_4"); - if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_object, napi_object, napi_function })) { + if (!ContactsNapiUtils::MatchParameters(env, argv, + { napi_object, napi_object, napi_object, napi_function })) { napi_throw(env, errorCode); } break; default: - HILOG_INFO("default"); napi_throw(env, errorCode); break; } @@ -1436,9 +1435,12 @@ napi_value QueryContactsByEmail(napi_env env, napi_callback_info info) } break; case ARGS_FOUR: - if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_string, napi_object, napi_function }) - && !ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_string, napi_object, napi_function }) - && !ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_string, napi_object, napi_object })) { + if (!ContactsNapiUtils::MatchParameters(env, argv, + { napi_object, napi_string, napi_object, napi_function }) && + !ContactsNapiUtils::MatchParameters(env, argv, + { napi_object, napi_string, napi_object, napi_function }) && + !ContactsNapiUtils::MatchParameters(env, argv, + { napi_object, napi_string, napi_object, napi_object })) { napi_throw(env, errorCode); } break; @@ -1497,8 +1499,10 @@ napi_value QueryContactsByPhoneNumber(napi_env env, napi_callback_info info) } break; case ARGS_FOUR: - if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_string, napi_object, napi_function }) - && !ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_string, napi_object, napi_object })) { + if (!ContactsNapiUtils::MatchParameters(env, argv, + { napi_object, napi_string, napi_object, napi_function }) && + !ContactsNapiUtils::MatchParameters(env, argv, + { napi_object, napi_string, napi_object, napi_object })) { napi_throw(env, errorCode); } break; @@ -1668,7 +1672,8 @@ napi_value QueryKey(napi_env env, napi_callback_info info) break; case ARGS_FOUR: HILOG_INFO("ARGS_THREE"); - if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_number, napi_object, napi_function })) { + if (!ContactsNapiUtils::MatchParameters(env, argv, + { napi_object, napi_number, napi_object, napi_function })) { HILOG_INFO("ARGS_THREE THROW"); napi_throw(env, errorCode); } -- Gitee From 21061e4aa34316903a54ffebc32271c47e9999d1 Mon Sep 17 00:00:00 2001 From: zhouhongli2023 Date: Sat, 29 Jul 2023 12:05:31 +0800 Subject: [PATCH 4/5] update Signed-off-by: zhouhongli2023 --- contacts/src/contacts_api.cpp | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/contacts/src/contacts_api.cpp b/contacts/src/contacts_api.cpp index 9ce5ce8..86e305c 100644 --- a/contacts/src/contacts_api.cpp +++ b/contacts/src/contacts_api.cpp @@ -673,13 +673,11 @@ void ExecuteSyncDone(napi_env env, napi_status status, void *data) napi_value global; napi_get_global(env, &global); napi_value resultData[RESULT_DATA_SIZE]; - if (executeHelper->abilityContext != nullptr) { HandleExecuteErrorCode(env, executeHelper, resultData[0]); HandleExecuteResult(env, executeHelper, resultData[1]); } else { if (executeHelper->resultData < 0) { - HandleExecuteResult(env, executeHelper, resultData[0]); napi_get_undefined(env, &resultData[1]); } else { @@ -948,8 +946,8 @@ void LocalExecute(napi_env env, ExecuteHelper *executeHelper) { if (executeHelper->dataShareHelper == nullptr) { HILOG_ERROR("create dataShareHelper is null, please check your permission"); - napi_value addContactErrorCode = ContactsNapiUtils::CreateError(env, PERMISSION_ERROR); - napi_throw(env, addContactErrorCode); + napi_value addContactErrorCode = ContactsNapiUtils::CreateError(env, PERMISSION_ERROR); + napi_throw(env, addContactErrorCode); executeHelper->resultData = RDB_PERMISSION_ERROR; return; } @@ -1649,37 +1647,28 @@ napi_value QueryKey(napi_env env, napi_callback_info info) napi_value errorCode = ContactsNapiUtils::CreateError(env, PARAMETER_ERROR); switch (argc) { case ARGS_ONE: - HILOG_INFO("ARGS_ONE"); if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object })) { - HILOG_INFO("ARGS_ONE THROW"); napi_throw(env, errorCode); } break; case ARGS_TWO: - HILOG_INFO("ARGS_TWO"); if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_function }) && !ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_number })) { - HILOG_INFO("ARGS_TWO THROW"); napi_throw(env, errorCode); } break; case ARGS_THREE: - HILOG_INFO("ARGS_THREE"); if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_number, napi_function })) { - HILOG_INFO("ARGS_THREE THROW"); napi_throw(env, errorCode); } break; case ARGS_FOUR: - HILOG_INFO("ARGS_THREE"); if (!ContactsNapiUtils::MatchParameters(env, argv, { napi_object, napi_number, napi_object, napi_function })) { - HILOG_INFO("ARGS_THREE THROW"); napi_throw(env, errorCode); } break; default: - HILOG_INFO("DEFAULT"); napi_throw(env, errorCode); break; } -- Gitee From 70f0e5eb61ef5193b80ae7c5e935e59c2c47557d Mon Sep 17 00:00:00 2001 From: zhouhongli2023 Date: Sat, 29 Jul 2023 12:15:49 +0800 Subject: [PATCH 5/5] update Signed-off-by: zhouhongli2023 --- contacts/include/contacts_api.h | 2 +- contacts/src/contacts_api.cpp | 14 ++++++-------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/contacts/include/contacts_api.h b/contacts/include/contacts_api.h index ea70040..bd72006 100644 --- a/contacts/include/contacts_api.h +++ b/contacts/include/contacts_api.h @@ -69,7 +69,7 @@ napi_value Scheduling(napi_env env, napi_callback_info info, ExecuteHelper *exec void SetChildActionCodeAndConvertParams(napi_env env, ExecuteHelper *executeHelper); DataShare::DataSharePredicates ConvertParamsSwitchSplit( int code, napi_env env, const napi_value &key, const napi_value &hold, const napi_value &attr); -void GetDataShareHelper(napi_env env, napi_callback_info info, ExecuteHelper *executeHelper); +bool GetDataShareHelper(napi_env env, napi_callback_info info, ExecuteHelper *executeHelper); void HolderPredicates(const Holder &holder, DataShare::DataSharePredicates &predicates); void HoldersStructure(std::map &holders, Holder &holder); void AttributesPredicates(bool isBegin, ContactAttributes &attrs, DataShare::DataSharePredicates &predicates); diff --git a/contacts/src/contacts_api.cpp b/contacts/src/contacts_api.cpp index 86e305c..9f8308f 100644 --- a/contacts/src/contacts_api.cpp +++ b/contacts/src/contacts_api.cpp @@ -149,7 +149,7 @@ int GetType(napi_env env, napi_value value) * * @return The result returned by get dataShareHelper */ -void GetDataShareHelper(napi_env env, napi_callback_info info, ExecuteHelper *executeHelper) +bool GetDataShareHelper(napi_env env, napi_callback_info info, ExecuteHelper *executeHelper) { HILOG_ERROR("enter GetDataShareHelper("); napi_value global; @@ -177,19 +177,18 @@ void GetDataShareHelper(napi_env env, napi_callback_info info, ExecuteHelper *ex status = OHOS::AbilityRuntime::IsStageContext(env, abilityContext, isStageMode); } - std::shared_ptr dataShareHelper = nullptr; - + std::shared_ptr dataShareHelper = nullptr; if (status != napi_ok || !isStageMode) { HILOG_INFO("GetFAModeContext"); auto ability = OHOS::AbilityRuntime::GetCurrentAbility(env); if (ability == nullptr) { HILOG_ERROR("Failed to get native ability instance"); - return; + return false; } auto context = ability->GetContext(); if (context == nullptr) { HILOG_ERROR("Failed to get native context instance"); - return; + return false; } executeHelper->dataShareHelper = DataShare::DataShareHelper::Creator(context->GetToken(), CONTACTS_DATA_URI); } else { @@ -197,11 +196,11 @@ void GetDataShareHelper(napi_env env, napi_callback_info info, ExecuteHelper *ex auto context = OHOS::AbilityRuntime::GetStageModeContext(env, abilityContext); if (context == nullptr) { HILOG_ERROR("Failed to get native stage context instance"); - return; + return false; } executeHelper->dataShareHelper = DataShare::DataShareHelper::Creator(context->GetToken(), CONTACTS_DATA_URI); } - return; + return false; } /** @@ -639,7 +638,6 @@ void ExecuteDone(napi_env env, napi_status status, void *data) HILOG_INFO("executeHelper->abilityContext = nullptr"); NAPI_CALL_RETURN_VOID(env, napi_resolve_deferred(env, deferred, result)); } - executeHelper->deferred = nullptr; if (executeHelper->valueUpdateContact.capacity() != 0) { std::vector().swap(executeHelper->valueUpdateContact); -- Gitee