• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "userfile_client.h"
17 
18 #include "ability.h"
19 
20 #include "medialibrary_errno.h"
21 #include "medialibrary_napi_log.h"
22 #include "medialibrary_helper_container.h"
23 
24 using namespace std;
25 using namespace OHOS::DataShare;
26 using namespace OHOS::AppExecFwk;
27 namespace OHOS {
28 namespace Media {
GetDataShareHelper(napi_env env,napi_callback_info info)29 shared_ptr<DataShare::DataShareHelper> UserFileClient::GetDataShareHelper(napi_env env, napi_callback_info info)
30 {
31     size_t argc = ARGS_ONE;
32     napi_value argv[ARGS_ONE] = {0};
33     napi_value thisVar = nullptr;
34     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, nullptr));
35 
36     std::shared_ptr<DataShare::DataShareHelper> dataShareHelper = nullptr;
37     bool isStageMode = false;
38     napi_status status = OHOS::AbilityRuntime::IsStageContext(env, argv[0], isStageMode);
39     if (status != napi_ok || !isStageMode) {
40         auto ability = OHOS::AbilityRuntime::GetCurrentAbility(env);
41         if (ability == nullptr) {
42             NAPI_ERR_LOG("Failed to get native ability instance");
43             return nullptr;
44         }
45         auto context = ability->GetContext();
46         if (context == nullptr) {
47             NAPI_ERR_LOG("Failed to get native context instance");
48             return nullptr;
49         }
50         dataShareHelper = DataShare::DataShareHelper::Creator(context->GetToken(), MEDIALIBRARY_DATA_URI);
51     } else {
52         auto context = OHOS::AbilityRuntime::GetStageModeContext(env, argv[0]);
53         if (context == nullptr) {
54             NAPI_ERR_LOG("Failed to get native stage context instance");
55             return nullptr;
56         }
57         dataShareHelper = DataShare::DataShareHelper::Creator(context->GetToken(), MEDIALIBRARY_DATA_URI);
58     }
59     MediaLibraryHelperContainer::GetInstance()->SetDataShareHelper(dataShareHelper);
60     return dataShareHelper;
61 }
62 
CheckIsStage(napi_env env,napi_callback_info info,bool & result)63 napi_status UserFileClient::CheckIsStage(napi_env env, napi_callback_info info, bool &result)
64 {
65     size_t argc = ARGS_ONE;
66     napi_value argv[ARGS_ONE] = {0};
67     napi_value thisVar = nullptr;
68     napi_status status = napi_get_cb_info(env, info, &argc, argv, &thisVar, nullptr);
69     if (status != napi_ok) {
70         NAPI_ERR_LOG("Failed to get cb info, status=%{public}d", (int) status);
71         return status;
72     }
73 
74     result = false;
75     status = OHOS::AbilityRuntime::IsStageContext(env, argv[0], result);
76     if (status != napi_ok) {
77         NAPI_ERR_LOG("Failed to get stage mode, status=%{public}d", (int) status);
78         return status;
79     }
80     return napi_ok;
81 }
82 
ParseTokenInStageMode(napi_env env,napi_callback_info info)83 sptr<IRemoteObject> UserFileClient::ParseTokenInStageMode(napi_env env, napi_callback_info info)
84 {
85     size_t argc = ARGS_ONE;
86     napi_value argv[ARGS_ONE] = {0};
87     napi_value thisVar = nullptr;
88     if (napi_get_cb_info(env, info, &argc, argv, &thisVar, nullptr) != napi_ok) {
89         NAPI_ERR_LOG("Failed to get cb info");
90         return nullptr;
91     }
92 
93     auto context = OHOS::AbilityRuntime::GetStageModeContext(env, argv[0]);
94     if (context == nullptr) {
95         NAPI_ERR_LOG("Failed to get native stage context instance");
96         return nullptr;
97     }
98     return context->GetToken();
99 }
100 
ParseTokenInAbility(napi_env env,napi_callback_info info)101 sptr<IRemoteObject> UserFileClient::ParseTokenInAbility(napi_env env, napi_callback_info info)
102 {
103     size_t argc = ARGS_ONE;
104     napi_value argv[ARGS_ONE] = {0};
105     napi_value thisVar = nullptr;
106     if (napi_get_cb_info(env, info, &argc, argv, &thisVar, nullptr) != napi_ok) {
107         NAPI_ERR_LOG("Failed to get cb info");
108         return nullptr;
109     }
110 
111     auto ability = OHOS::AbilityRuntime::GetCurrentAbility(env);
112     if (ability == nullptr) {
113         NAPI_ERR_LOG("Failed to get native ability instance");
114         return nullptr;
115     }
116     auto context = ability->GetContext();
117     if (context == nullptr) {
118         NAPI_ERR_LOG("Failed to get native context instance");
119         return nullptr;
120     }
121     return context->GetToken();
122 }
123 
IsValid()124 bool UserFileClient::IsValid()
125 {
126     return sDataShareHelper_ != nullptr;
127 }
128 
Init(const sptr<IRemoteObject> & token,bool isSetHelper)129 void UserFileClient::Init(const sptr<IRemoteObject> &token, bool isSetHelper)
130 {
131     sDataShareHelper_ = DataShare::DataShareHelper::Creator(token, MEDIALIBRARY_DATA_URI);
132     if (isSetHelper) {
133         MediaLibraryHelperContainer::GetInstance()->SetDataShareHelper(sDataShareHelper_);
134     }
135 }
136 
Init(napi_env env,napi_callback_info info)137 void UserFileClient::Init(napi_env env, napi_callback_info info)
138 {
139     sDataShareHelper_ = GetDataShareHelper(env, info);
140 }
141 
Query(Uri & uri,const DataSharePredicates & predicates,std::vector<std::string> & columns,int & errCode)142 shared_ptr<DataShareResultSet> UserFileClient::Query(Uri &uri, const DataSharePredicates &predicates,
143     std::vector<std::string> &columns, int &errCode)
144 {
145     if (!IsValid()) {
146         NAPI_ERR_LOG("Query fail, helper null");
147         return nullptr;
148     }
149     DatashareBusinessError businessError;
150     auto resultSet = sDataShareHelper_->Query(uri, predicates, columns, &businessError);
151     errCode = businessError.GetCode();
152     return resultSet;
153 }
154 
Insert(Uri & uri,const DataShareValuesBucket & value)155 int UserFileClient::Insert(Uri &uri, const DataShareValuesBucket &value)
156 {
157     if (!IsValid()) {
158         NAPI_ERR_LOG("insert fail, helper null");
159         return E_FAIL;
160     }
161     int index = sDataShareHelper_->Insert(uri, value);
162     return index;
163 }
164 
InsertExt(Uri & uri,const DataShareValuesBucket & value,string & result)165 int UserFileClient::InsertExt(Uri &uri, const DataShareValuesBucket &value, string &result)
166 {
167     if (!IsValid()) {
168         NAPI_ERR_LOG("insert fail, helper null");
169         return E_FAIL;
170     }
171     int index = sDataShareHelper_->InsertExt(uri, value, result);
172     return index;
173 }
174 
BatchInsert(Uri & uri,const std::vector<DataShare::DataShareValuesBucket> & values)175 int UserFileClient::BatchInsert(Uri &uri, const std::vector<DataShare::DataShareValuesBucket> &values)
176 {
177     if (!IsValid()) {
178         NAPI_ERR_LOG("Batch insert fail, helper null");
179         return E_FAIL;
180     }
181     return sDataShareHelper_->BatchInsert(uri, values);
182 }
183 
Delete(Uri & uri,const DataSharePredicates & predicates)184 int UserFileClient::Delete(Uri &uri, const DataSharePredicates &predicates)
185 {
186     if (!IsValid()) {
187         NAPI_ERR_LOG("delete fail, helper null");
188         return E_FAIL;
189     }
190     return sDataShareHelper_->Delete(uri, predicates);
191 }
192 
NotifyChange(const Uri & uri)193 void UserFileClient::NotifyChange(const Uri &uri)
194 {
195     if (!IsValid()) {
196         NAPI_ERR_LOG("notify change fail, helper null");
197         return;
198     }
199     sDataShareHelper_->NotifyChange(uri);
200 }
201 
RegisterObserver(const Uri & uri,const sptr<AAFwk::IDataAbilityObserver> & dataObserver)202 void UserFileClient::RegisterObserver(const Uri &uri, const sptr<AAFwk::IDataAbilityObserver> &dataObserver)
203 {
204     if (!IsValid()) {
205         NAPI_ERR_LOG("register observer fail, helper null");
206         return;
207     }
208     sDataShareHelper_->RegisterObserver(uri, dataObserver);
209 }
210 
UnregisterObserver(const Uri & uri,const sptr<AAFwk::IDataAbilityObserver> & dataObserver)211 void UserFileClient::UnregisterObserver(const Uri &uri, const sptr<AAFwk::IDataAbilityObserver> &dataObserver)
212 {
213     if (!IsValid()) {
214         NAPI_ERR_LOG("unregister observer fail, helper null");
215         return;
216     }
217     sDataShareHelper_->UnregisterObserver(uri, dataObserver);
218 }
219 
OpenFile(Uri & uri,const std::string & mode)220 int UserFileClient::OpenFile(Uri &uri, const std::string &mode)
221 {
222     if (!IsValid()) {
223         NAPI_ERR_LOG("Open file fail, helper null");
224         return E_FAIL;
225     }
226     return sDataShareHelper_->OpenFile(uri, mode);
227 }
228 
Update(Uri & uri,const DataSharePredicates & predicates,const DataShareValuesBucket & value)229 int UserFileClient::Update(Uri &uri, const DataSharePredicates &predicates,
230     const DataShareValuesBucket &value)
231 {
232     if (!IsValid()) {
233         NAPI_ERR_LOG("update fail, helper null");
234         return E_FAIL;
235     }
236     return sDataShareHelper_->Update(uri, predicates, value);
237 }
238 
RegisterObserverExt(const Uri & uri,shared_ptr<DataShare::DataShareObserver> dataObserver,bool isDescendants)239 void UserFileClient::RegisterObserverExt(const Uri &uri,
240     shared_ptr<DataShare::DataShareObserver> dataObserver, bool isDescendants)
241 {
242     if (!IsValid()) {
243         NAPI_ERR_LOG("register observer fail, helper null");
244         return;
245     }
246     sDataShareHelper_->RegisterObserverExt(uri, std::move(dataObserver), isDescendants);
247 }
248 
UnregisterObserverExt(const Uri & uri,std::shared_ptr<DataShare::DataShareObserver> dataObserver)249 void UserFileClient::UnregisterObserverExt(const Uri &uri, std::shared_ptr<DataShare::DataShareObserver> dataObserver)
250 {
251     if (!IsValid()) {
252         NAPI_ERR_LOG("unregister observer fail, helper null");
253         return;
254     }
255     sDataShareHelper_->UnregisterObserverExt(uri, std::move(dataObserver));
256 }
257 
Clear()258 void UserFileClient::Clear()
259 {
260     sDataShareHelper_ = nullptr;
261 }
262 }
263 }
264