* Copyright (c) 2021-2023 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef CONTACT_API_H
#define CONTACT_API_H
#include "contacts_build.h"
#include "contacts_napi_object.h"
#include "napi_base_context.h"
#include "contacts_control.h"
#include "contacts_sync_api.h"
#include "contacts_sync_operations.h"
namespace OHOS {
namespace ContactsApi {
const int32_t SLEEP_TIME = 100;
struct HasMatchedCallLogParam {
std::string phoneNumber;
std::string formatPhoneNumber;
int64_t minDuration = 0;
int64_t withInTime = -1;
};
void Init(napi_env env, napi_value exports);
napi_value DeclareContactConst(napi_env env, napi_value exports);
napi_value DeclareEmailConst(napi_env env, napi_value exports);
napi_value DeclareEventConst(napi_env env, napi_value exports);
napi_value DeclareImAddressConst(napi_env env, napi_value exports);
napi_value DeclarePhoneNumberConst(napi_env env, napi_value exports);
napi_value DeclarePostalAddressConst(napi_env env, napi_value exports);
napi_value DeclareRelationConst(napi_env env, napi_value exports);
napi_value DeclareSipAddressConst(napi_env env, napi_value exports);
napi_value DeclareAttributeConst(napi_env env, napi_value exports);
napi_value ContactsPickerSelect(napi_env env, napi_callback_info info);
napi_value ContactsPickerImport(napi_env env, napi_callback_info info);
napi_value AddContact(napi_env env, napi_callback_info info);
napi_value AddContacts(napi_env env, napi_callback_info info);
napi_value DeleteContact(napi_env env, napi_callback_info info);
napi_value UpdateContact(napi_env env, napi_callback_info info);
napi_value QueryContactsCount(napi_env env, napi_callback_info info);
napi_value QueryContact(napi_env env, napi_callback_info info);
napi_value QueryContacts(napi_env env, napi_callback_info info);
napi_value QueryContactsByEmail(napi_env env, napi_callback_info info);
napi_value QueryContactsByPhoneNumber(napi_env env, napi_callback_info info);
napi_value QueryGroups(napi_env env, napi_callback_info info);
napi_value QueryHolders(napi_env env, napi_callback_info info);
napi_value QueryKey(napi_env env, napi_callback_info info);
napi_value QueryMyCard(napi_env env, napi_callback_info info);
napi_value IsMyCard(napi_env env, napi_callback_info info);
napi_value IsLocalContact(napi_env env, napi_callback_info info);
napi_value HasMatchedCallLog(napi_env env, napi_callback_info info);
void Execute(napi_env env, void *data);
void ExecuteAsync(napi_env env, void *data);
void ExecuteDone(napi_env env, napi_status status, void *data);
void ExecuteSyncDone(napi_env env, napi_status status, void *data);
void HandleExecuteErrorCode(napi_env env, ExecuteHelper *executeHelper, napi_value &errorCode);
void HandleExecuteResult(napi_env env, ExecuteHelper *executeHelper, napi_value &result);
void HandleAddContactsResult(napi_env env, ExecuteHelper *executeHelper, napi_value &result);
void HandleAddContactsErrorCode(napi_env env, ExecuteHelper *executeHelper, napi_value &result);
void HandleSelectContactResult(napi_env env, ExecuteHelper *executeHelper, napi_value &result);
void HandleQueryContactCountResult(napi_env env, ExecuteHelper *executeHelper, napi_value &result);
int GetRawIdByResultSet(const std::shared_ptr<DataShare::DataShareResultSet> &resultSet);
napi_value CreateAsyncWork(napi_env env, ExecuteHelper *executeHelper);
void LocalExecute(napi_env env, ExecuteHelper *executeHelper);
void LocalExecuteSplit(napi_env env, ExecuteHelper *executeHelper);
void LocalExecuteAddContact(napi_env env, ExecuteHelper *executeHelper);
void LocalExecuteAddContacts(napi_env env, ExecuteHelper *executeHelper);
void BatchInsertPortrait(const std::vector<DataShare::ExecResult> &results, ExecuteHelper *executeHelper);
void HandleContactBatchInsertResult(const DataShare::ExecResultSet &execResultSet,
const std::vector<DataShare::OperationStatement> &statements, ExecuteHelper *executeHelper);
void LocalExecuteDeleteContact(napi_env env, ExecuteHelper *executeHelper);
void LocalExecuteQueryContact(napi_env env, ExecuteHelper *executeHelper);
void LocalExecuteQueryContactCount(napi_env env, ExecuteHelper *executeHelper);
void LocalExecuteQueryContactsOrKey(napi_env env, ExecuteHelper *executeHelper);
void LocalExecuteQueryContactsByData(napi_env env, ExecuteHelper *executeHelper);
void LocalExecuteQueryGroup(napi_env env, ExecuteHelper *executeHelper);
void LocalExecuteQueryHolders(napi_env env, ExecuteHelper *executeHelper);
void LocalExecuteQueryMyCard(napi_env env, ExecuteHelper *executeHelper);
void LocalExecuteUpdateContact(napi_env env, ExecuteHelper *executeHelper);
void LocalExecuteIsLocalContact(napi_env env, ExecuteHelper *executeHelper);
void LocalExecuteIsMyCard(napi_env env, ExecuteHelper *executeHelper);
void LocalExecuteHasMatchedCallLog(napi_env env, ExecuteHelper *executeHelper);
napi_value Scheduling(napi_env env, napi_callback_info info, ExecuteHelper *executeHelper, int actionCode);
void VerificationParameterId(napi_env env, napi_value id, ExecuteHelper *executeHelper, napi_value hold);
void VerificationParameterHolderId(napi_env env, ExecuteHelper *executeHelper, napi_value hold);
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, 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<std::string, std::string> &holders, Holder &holder);
void AttributesPredicates(bool isBegin, ContactAttributes &attrs, DataShare::DataSharePredicates &predicates);
void CheckAttributes(ContactAttributes &attrs);
DataShare::DataSharePredicates BuildQueryContactPredicates(
napi_env env, std::string key, napi_value hold, napi_value attr);
DataShare::DataSharePredicates BuildUpdateContactPredicates(napi_env env, napi_value contacts, napi_value attr);
DataShare::DataSharePredicates BuildQueryContactData(napi_env env, napi_value &contactsObject,
napi_value &attrObject, ExecuteHelper *executeHelper);
std::vector<std::string> BuildUpdateContactColumns();
DataShare::DataSharePredicates BuildUpdateContactConvertParams(
napi_env env, napi_value &contacts, napi_value &attr, ExecuteHelper &executeHelper);
DataShare::DataSharePredicates BuildQueryContactsPredicates(napi_env env, napi_value hold, napi_value attr);
DataShare::DataSharePredicates BuildQueryContactCountPredicates();
DataShare::DataSharePredicates BuildQueryContactsByEmailPredicates(
napi_env env, std::string email, napi_value hold, napi_value attr);
DataShare::DataSharePredicates BuildQueryContactsByPhoneNumberPredicates(
napi_env env, std::string phoneNumber, napi_value hold, napi_value attr);
std::string GetE164FormatPhoneNumber(std::string &phoneNumber);
std::string FormatPhoneNumber(const std::string &number, const std::string &country);
std::string GetCountryCode();
DataShare::DataSharePredicates BuildQueryGroupsPredicates(napi_env env, napi_value hold);
DataShare::DataSharePredicates BuildQueryKeyPredicates(napi_env env, int id, napi_value hold);
DataShare::DataSharePredicates BuildQueryMyCardPredicates(napi_env env, napi_value attr);
DataShare::DataSharePredicates BuildIsLocalContactPredicates(napi_env env, napi_value id);
DataShare::DataSharePredicates BuildIsMyCardPredicates(napi_env env, napi_value id);
DataShare::DataSharePredicates BuildDeleteContactDataPredicates(napi_env env, napi_value attr);
DataShare::DataSharePredicates BuildDeleteContactPredicates(napi_env env, ExecuteHelper &executeHelper);
bool ParseQueryCallLogParams(napi_env env, ExecuteHelper *executeHelper, HasMatchedCallLogParam ¶m);
bool BuildQueryCallLogPredicates(napi_env env, ExecuteHelper *executeHelper, DataShare::DataSharePredicates &predicate);
void ObjectInit(napi_env env, napi_value object, napi_value &hold, napi_value &attr, napi_value &contacts);
void ObjectInitId(napi_env env, napi_value object, napi_value &id);
void ObjectInitString(napi_env env, napi_value object, napi_value &key);
int GetType(napi_env env, napi_value value);
int InsertContactPortrait(ExecuteHelper *executeHelper, ContactsControl &contactsControl,
int rawContactId, bool isAddType);
std::string QueryContactIdByRawContactId(std::shared_ptr<DataShare::DataShareHelper> dataShareHelper,
ContactsControl &contactsControl, int rawContactId);
int HandleConverPortraitFailed(ExecuteHelper *executeHelper, ContactsControl &contactsControl, int rawContactId,
const std::string &contactId, int errorCode);
bool isForegroundCheck(napi_env env, ExecuteHelper *executeHelper);
void ProcessInsertContactsWithLimit(napi_env env, ExecuteHelper *executeHelper);
}
}
#endif