1 /*
2  * Copyright (C) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #include "vcard_rdb_helper.h"
16 
17 #include "telephony_errors.h"
18 #include "telephony_log_wrapper.h"
19 
20 namespace OHOS {
21 namespace Telephony {
22 
23 namespace {
24 OHOS::Uri uriRawContact("datashare:///com.ohos.contactsdataability/contacts/raw_contact");
25 OHOS::Uri uriContactData("datashare:///com.ohos.contactsdataability/contacts/contact_data");
26 OHOS::Uri uriAccount("datashare:///com.ohos.contactsdataability/contacts/account");
27 OHOS::Uri uriContact("datashare:///com.ohos.contactsdataability/contacts/contact");
28 OHOS::Uri uriRawContactMaxId("datashare:///com.ohos.contactsdataability/raw_contact/place_holder");
29 
30 } // namespace
31 
32 std::shared_ptr<DataShare::DataShareHelper> VCardRdbHelper::dataShareHelper_ = nullptr;
33 
VCardRdbHelper()34 VCardRdbHelper::VCardRdbHelper() {}
35 
GetInstance()36 VCardRdbHelper &VCardRdbHelper::GetInstance()
37 {
38     static VCardRdbHelper instance;
39     return instance;
40 }
41 
QueryRawContactMaxId(int32_t queryNum)42 int32_t VCardRdbHelper::QueryRawContactMaxId(int32_t queryNum)
43 {
44     if (dataShareHelper_ == nullptr) {
45         TELEPHONY_LOGE("dataShareHelper is nullptr");
46         return DB_FAILD;
47     }
48     Uri uriRawContactMaxIdQuery(uriRawContactMaxId.ToString() + "?isFromBatch=true");
49     DataShare::DataShareValuesBucket dbQueryNum;
50     dbQueryNum.Put("importContactNum", queryNum);
51     int32_t queryResult = dataShareHelper_->Insert(uriRawContactMaxIdQuery, dbQueryNum);
52     if (queryResult < 0) {
53         TELEPHONY_LOGE("query RawContactMaxId failed %{public}d", queryResult);
54 
55         return DB_FAILD;
56     }
57     TELEPHONY_LOGW("batchInsert rawId: %{public}d", queryResult);
58     return queryResult;
59 }
60 
BatchInsertRawContact(const std::vector<DataShare::DataShareValuesBucket> & rawContactValues)61 int32_t VCardRdbHelper::BatchInsertRawContact(const std::vector<DataShare::DataShareValuesBucket> &rawContactValues)
62 {
63     if (dataShareHelper_ == nullptr) {
64         TELEPHONY_LOGE("dataShareHelper_ is nullptr");
65         return DB_FAILD;
66     }
67     Uri uriRawContactBatch(uriRawContact.ToString() + "?isFromBatch=true");
68     int code = dataShareHelper_->BatchInsert(uriRawContactBatch, rawContactValues);
69     TELEPHONY_LOGI("insert code %{public}d", code);
70     return code;
71 }
72 
BatchInsertContactData(const std::vector<DataShare::DataShareValuesBucket> & contactsDataValues)73 int32_t VCardRdbHelper::BatchInsertContactData(const std::vector<DataShare::DataShareValuesBucket> &contactsDataValues)
74 {
75     if (dataShareHelper_ == nullptr) {
76         TELEPHONY_LOGE("dataShareHelper_ is nullptr");
77         return DB_FAILD;
78     }
79     Uri uriContactDataBatch(uriContactData.ToString() + "?isFromBatch=true&isSyncFromCloud=true");
80     int code = dataShareHelper_->BatchInsert(uriContactDataBatch, contactsDataValues);
81     TELEPHONY_LOGI("insert code %{public}d", code);
82     return code;
83 }
84 
InsertRawContact(const DataShare::DataShareValuesBucket & rawContactValues)85 int32_t VCardRdbHelper::InsertRawContact(const DataShare::DataShareValuesBucket &rawContactValues)
86 {
87     if (dataShareHelper_ == nullptr) {
88         TELEPHONY_LOGE("dataShareHelper_ is nullptr");
89         return DB_FAILD;
90     }
91     int rawContactId = dataShareHelper_->Insert(uriRawContact, rawContactValues);
92     TELEPHONY_LOGI("RawContactInsert insert rawContactId %{public}d", rawContactId);
93     return rawContactId;
94 }
95 
InsertContactData(const std::vector<DataShare::DataShareValuesBucket> & contactsDataValues)96 int32_t VCardRdbHelper::InsertContactData(const std::vector<DataShare::DataShareValuesBucket> &contactsDataValues)
97 {
98     if (dataShareHelper_ == nullptr) {
99         TELEPHONY_LOGE("dataShareHelper_ is nullptr");
100         return DB_FAILD;
101     }
102     int code = dataShareHelper_->BatchInsert(uriContactData, contactsDataValues);
103     TELEPHONY_LOGI(" ContactsControl::ContactDataInsert insert code %{public}d", code);
104     return code;
105 }
106 
QueryAccount(std::vector<std::string> & columns,const DataShare::DataSharePredicates & predicates)107 std::shared_ptr<DataShare::DataShareResultSet> VCardRdbHelper::QueryAccount(
108     std::vector<std::string> &columns, const DataShare::DataSharePredicates &predicates)
109 {
110     if (dataShareHelper_ == nullptr) {
111         TELEPHONY_LOGE("dataShareHelper_ is nullptr");
112         return nullptr;
113     }
114     std::shared_ptr<DataShare::DataShareResultSet> resultSet = dataShareHelper_->Query(uriAccount, predicates, columns);
115     return resultSet;
116 }
117 
QueryContact(std::vector<std::string> & columns,const DataShare::DataSharePredicates & predicates)118 std::shared_ptr<DataShare::DataShareResultSet> VCardRdbHelper::QueryContact(
119     std::vector<std::string> &columns, const DataShare::DataSharePredicates &predicates)
120 {
121     if (dataShareHelper_ == nullptr) {
122         TELEPHONY_LOGE("dataShareHelper_ is nullptr");
123         return nullptr;
124     }
125     std::shared_ptr<DataShare::DataShareResultSet> resultSet = dataShareHelper_->Query(uriContact, predicates, columns);
126     return resultSet;
127 }
128 
QueryRawContact(std::vector<std::string> & columns,const DataShare::DataSharePredicates & predicates)129 std::shared_ptr<DataShare::DataShareResultSet> VCardRdbHelper::QueryRawContact(
130     std::vector<std::string> &columns, const DataShare::DataSharePredicates &predicates)
131 {
132     if (dataShareHelper_ == nullptr) {
133         TELEPHONY_LOGE("dataShareHelper_ is nullptr");
134         return nullptr;
135     }
136     std::shared_ptr<DataShare::DataShareResultSet> resultSet =
137         dataShareHelper_->Query(uriRawContact, predicates, columns);
138     return resultSet;
139 }
140 
QueryContactData(std::vector<std::string> & columns,const DataShare::DataSharePredicates & predicates)141 std::shared_ptr<DataShare::DataShareResultSet> VCardRdbHelper::QueryContactData(
142     std::vector<std::string> &columns, const DataShare::DataSharePredicates &predicates)
143 {
144     if (dataShareHelper_ == nullptr) {
145         TELEPHONY_LOGE("dataShareHelper_ is nullptr");
146         return nullptr;
147     }
148     std::shared_ptr<DataShare::DataShareResultSet> resultSet =
149         dataShareHelper_->Query(uriContactData, predicates, columns);
150     return resultSet;
151 }
152 
SetDataHelper(std::shared_ptr<DataShare::DataShareHelper> dataShareHelper)153 void VCardRdbHelper::SetDataHelper(std::shared_ptr<DataShare::DataShareHelper> dataShareHelper)
154 {
155     dataShareHelper_ = dataShareHelper;
156 }
157 
Release()158 void VCardRdbHelper::Release()
159 {
160     if (dataShareHelper_ != nullptr) {
161         dataShareHelper_->Release();
162         dataShareHelper_ = nullptr;
163     }
164 }
165 
166 } // namespace Telephony
167 } // namespace OHOS
168