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 "medialibrary_errno.h"
19 #include "medialibrary_napi_log.h"
20 #include "ability.h"
21
22 using namespace std;
23 using namespace OHOS::DataShare;
24 using namespace OHOS::AppExecFwk;
25 namespace OHOS {
26 namespace Media {
27
GetDataShareHelper(napi_env env,napi_callback_info info)28 shared_ptr<DataShare::DataShareHelper> UserFileClient::GetDataShareHelper(napi_env env, napi_callback_info info)
29 {
30 size_t argc = ARGS_ONE;
31 napi_value argv[ARGS_ONE] = {0};
32 napi_value thisVar = nullptr;
33 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, nullptr));
34
35 std::shared_ptr<DataShare::DataShareHelper> dataShareHelper = nullptr;
36 bool isStageMode = false;
37 napi_status status = OHOS::AbilityRuntime::IsStageContext(env, argv[0], isStageMode);
38 if (status != napi_ok || !isStageMode) {
39 auto ability = OHOS::AbilityRuntime::GetCurrentAbility(env);
40 if (ability == nullptr) {
41 NAPI_ERR_LOG("Failed to get native ability instance");
42 return nullptr;
43 }
44 auto context = ability->GetContext();
45 if (context == nullptr) {
46 NAPI_ERR_LOG("Failed to get native context instance");
47 return nullptr;
48 }
49 dataShareHelper = DataShare::DataShareHelper::Creator(context, MEDIALIBRARY_DATA_URI);
50 } else {
51 auto context = OHOS::AbilityRuntime::GetStageModeContext(env, argv[0]);
52 if (context == nullptr) {
53 NAPI_ERR_LOG("Failed to get native stage context instance");
54 return nullptr;
55 }
56 dataShareHelper = DataShare::DataShareHelper::Creator(context, MEDIALIBRARY_DATA_URI);
57 }
58 return dataShareHelper;
59 }
60
IsValid()61 bool UserFileClient::IsValid()
62 {
63 return sDataShareHelper_ != nullptr;
64 }
65
Init(napi_env env,napi_callback_info info)66 void UserFileClient::Init(napi_env env, napi_callback_info info)
67 {
68 sDataShareHelper_ = GetDataShareHelper(env, info);
69 }
70
Query(Uri & uri,const DataSharePredicates & predicates,std::vector<std::string> & columns)71 shared_ptr<DataShareResultSet> UserFileClient::Query(Uri &uri, const DataSharePredicates &predicates,
72 std::vector<std::string> &columns)
73 {
74 if (!IsValid()) {
75 NAPI_ERR_LOG("Query fail, helper null");
76 return nullptr;
77 }
78 return sDataShareHelper_->Query(uri, predicates, columns);
79 }
80
Insert(Uri & uri,const DataShareValuesBucket & value)81 int UserFileClient::Insert(Uri &uri, const DataShareValuesBucket &value)
82 {
83 if (!IsValid()) {
84 NAPI_ERR_LOG("insert fail, helper null");
85 return E_FAIL;
86 }
87 return sDataShareHelper_->Insert(uri, value);
88 }
89
Delete(Uri & uri,const DataSharePredicates & predicates)90 int UserFileClient::Delete(Uri &uri, const DataSharePredicates &predicates)
91 {
92 if (!IsValid()) {
93 NAPI_ERR_LOG("delete fail, helper null");
94 return E_FAIL;
95 }
96 return sDataShareHelper_->Delete(uri, predicates);
97 }
98
NotifyChange(const Uri & uri)99 void UserFileClient::NotifyChange(const Uri &uri)
100 {
101 if (!IsValid()) {
102 NAPI_ERR_LOG("notify change fail, helper null");
103 return;
104 }
105 sDataShareHelper_->NotifyChange(uri);
106 }
107
RegisterObserver(const Uri & uri,const sptr<AAFwk::IDataAbilityObserver> & dataObserver)108 void UserFileClient::RegisterObserver(const Uri &uri, const sptr<AAFwk::IDataAbilityObserver> &dataObserver)
109 {
110 if (!IsValid()) {
111 NAPI_ERR_LOG("register observer fail, helper null");
112 return;
113 }
114 sDataShareHelper_->RegisterObserver(uri, dataObserver);
115 }
116
UnregisterObserver(const Uri & uri,const sptr<AAFwk::IDataAbilityObserver> & dataObserver)117 void UserFileClient::UnregisterObserver(const Uri &uri, const sptr<AAFwk::IDataAbilityObserver> &dataObserver)
118 {
119 if (!IsValid()) {
120 NAPI_ERR_LOG("unregister observer fail, helper null");
121 return;
122 }
123 sDataShareHelper_->UnregisterObserver(uri, dataObserver);
124 }
125
OpenFile(Uri & uri,const std::string & mode)126 int UserFileClient::OpenFile(Uri &uri, const std::string &mode)
127 {
128 if (!IsValid()) {
129 NAPI_ERR_LOG("unregister observer fail, helper null");
130 return E_FAIL;
131 }
132 return sDataShareHelper_->OpenFile(uri, mode);
133 }
134
Update(Uri & uri,const DataSharePredicates & predicates,const DataShareValuesBucket & value)135 int UserFileClient::Update(Uri &uri, const DataSharePredicates &predicates,
136 const DataShareValuesBucket &value)
137 {
138 if (!IsValid()) {
139 NAPI_ERR_LOG("update fail, helper null");
140 return E_FAIL;
141 }
142 return sDataShareHelper_->Update(uri, predicates, value);
143 }
144
145 }
146 }