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 #define MLOG_TAG "Extension"
16 
17 #include "media_datashare_stub_impl.h"
18 
19 #include "media_log.h"
20 
21 namespace OHOS {
22 namespace DataShare {
GetOwner()23 std::shared_ptr<MediaDataShareExtAbility> MediaDataShareStubImpl::GetOwner()
24 {
25     return extension_;
26 }
27 
GetFileTypes(const Uri & uri,const std::string & mimeTypeFilter)28 std::vector<std::string> MediaDataShareStubImpl::GetFileTypes(const Uri &uri, const std::string &mimeTypeFilter)
29 {
30     MEDIA_DEBUG_LOG("begin.");
31     std::vector<std::string> ret;
32     auto client = sptr<MediaDataShareStubImpl>(this);
33     auto extension = client->GetOwner();
34     if (extension == nullptr) {
35         MEDIA_ERR_LOG("%{public}s end failed.", __func__);
36         return ret;
37     }
38     ret = extension->GetFileTypes(uri, mimeTypeFilter);
39     MEDIA_DEBUG_LOG("end successfully.");
40     return ret;
41 }
42 
OpenFile(const Uri & uri,const std::string & mode)43 int MediaDataShareStubImpl::OpenFile(const Uri &uri, const std::string &mode)
44 {
45     int ret = -1;
46     auto client = sptr<MediaDataShareStubImpl>(this);
47     auto extension = client->GetOwner();
48     if (extension == nullptr) {
49         MEDIA_ERR_LOG("%{public}s end failed.", __func__);
50         return ret;
51     }
52     ret = extension->OpenFile(uri, mode);
53     return ret;
54 }
55 
OpenRawFile(const Uri & uri,const std::string & mode)56 int MediaDataShareStubImpl::OpenRawFile(const Uri &uri, const std::string &mode)
57 {
58     MEDIA_DEBUG_LOG("begin.");
59     int ret = -1;
60     auto client = sptr<MediaDataShareStubImpl>(this);
61     auto extension = client->GetOwner();
62     if (extension == nullptr) {
63         MEDIA_ERR_LOG("%{public}s end failed.", __func__);
64         return ret;
65     }
66     ret = extension->OpenRawFile(uri, mode);
67     MEDIA_DEBUG_LOG("end successfully. ret: %{public}d", ret);
68     return ret;
69 }
70 
Insert(const Uri & uri,const DataShareValuesBucket & value)71 int MediaDataShareStubImpl::Insert(const Uri &uri, const DataShareValuesBucket &value)
72 {
73     int ret = 0;
74     auto client = sptr<MediaDataShareStubImpl>(this);
75     auto extension = client->GetOwner();
76     if (extension == nullptr) {
77         MEDIA_ERR_LOG("%{public}s end failed.", __func__);
78         return ret;
79     }
80     ret = extension->Insert(uri, value);
81     return ret;
82 }
83 
InsertExt(const Uri & uri,const DataShareValuesBucket & value,std::string & result)84 int MediaDataShareStubImpl::InsertExt(const Uri &uri, const DataShareValuesBucket &value, std::string &result)
85 {
86     int ret = 0;
87     auto client = sptr<MediaDataShareStubImpl>(this);
88     auto extension = client->GetOwner();
89     if (extension == nullptr) {
90         MEDIA_ERR_LOG("%{public}s end failed.", __func__);
91         return ret;
92     }
93     ret = extension->InsertExt(uri, value, result);
94     return ret;
95 }
96 
Update(const Uri & uri,const DataSharePredicates & predicates,const DataShareValuesBucket & value)97 int MediaDataShareStubImpl::Update(const Uri &uri, const DataSharePredicates &predicates,
98     const DataShareValuesBucket &value)
99 {
100     int ret = 0;
101     auto client = sptr<MediaDataShareStubImpl>(this);
102     auto extension = client->GetOwner();
103     if (extension == nullptr) {
104         MEDIA_ERR_LOG("%{public}s end failed.", __func__);
105         return ret;
106     }
107     ret = extension->Update(uri, predicates, value);
108     return ret;
109 }
110 
Delete(const Uri & uri,const DataSharePredicates & predicates)111 int MediaDataShareStubImpl::Delete(const Uri &uri, const DataSharePredicates &predicates)
112 {
113     int ret = 0;
114     auto client = sptr<MediaDataShareStubImpl>(this);
115     auto extension = client->GetOwner();
116     if (extension == nullptr) {
117         MEDIA_ERR_LOG("%{public}s end failed.", __func__);
118         return ret;
119     }
120     ret = extension->Delete(uri, predicates);
121     return ret;
122 }
123 
Query(const Uri & uri,const DataSharePredicates & predicates,std::vector<std::string> & columns,DatashareBusinessError & businessError)124 std::shared_ptr<DataShareResultSet> MediaDataShareStubImpl::Query(const Uri &uri,
125     const DataSharePredicates &predicates, std::vector<std::string> &columns, DatashareBusinessError &businessError)
126 {
127     auto client = sptr<MediaDataShareStubImpl>(this);
128     auto extension = client->GetOwner();
129     if (extension == nullptr) {
130         MEDIA_ERR_LOG("%{public}s end failed.", __func__);
131         return nullptr;
132     }
133     return extension->Query(uri, predicates, columns, businessError);
134 }
135 
GetType(const Uri & uri)136 std::string MediaDataShareStubImpl::GetType(const Uri &uri)
137 {
138     MEDIA_DEBUG_LOG("begin.");
139     std::string ret = "";
140     auto client = sptr<MediaDataShareStubImpl>(this);
141     auto extension = client->GetOwner();
142     if (extension == nullptr) {
143         MEDIA_ERR_LOG("%{public}s end failed.", __func__);
144         return ret;
145     }
146     ret = extension->GetType(uri);
147     MEDIA_DEBUG_LOG("end successfully.");
148     return ret;
149 }
150 
BatchInsert(const Uri & uri,const std::vector<DataShareValuesBucket> & values)151 int MediaDataShareStubImpl::BatchInsert(const Uri &uri, const std::vector<DataShareValuesBucket> &values)
152 {
153     MEDIA_DEBUG_LOG("begin.");
154     int ret = 0;
155     auto client = sptr<MediaDataShareStubImpl>(this);
156     auto extension = client->GetOwner();
157     if (extension == nullptr) {
158         MEDIA_ERR_LOG("%{public}s end failed.", __func__);
159         return ret;
160     }
161     ret = extension->BatchInsert(uri, values);
162     MEDIA_DEBUG_LOG("end successfully.");
163     return ret;
164 }
165 
RegisterObserver(const Uri & uri,const sptr<AAFwk::IDataAbilityObserver> & dataObserver)166 bool MediaDataShareStubImpl::RegisterObserver(const Uri &uri, const sptr<AAFwk::IDataAbilityObserver> &dataObserver)
167 {
168     MEDIA_DEBUG_LOG("begin.");
169     bool ret = false;
170     auto client = sptr<MediaDataShareStubImpl>(this);
171     auto extension = client->GetOwner();
172     if (extension == nullptr) {
173         MEDIA_ERR_LOG("%{public}s end failed.", __func__);
174         return ret;
175     }
176     ret = extension->RegisterObserver(uri, dataObserver);
177     MEDIA_DEBUG_LOG("end successfully. ret: %{public}d", ret);
178     return ret;
179 }
180 
UnregisterObserver(const Uri & uri,const sptr<AAFwk::IDataAbilityObserver> & dataObserver)181 bool MediaDataShareStubImpl::UnregisterObserver(const Uri &uri, const sptr<AAFwk::IDataAbilityObserver> &dataObserver)
182 {
183     MEDIA_DEBUG_LOG("begin.");
184     bool ret = false;
185     auto client = sptr<MediaDataShareStubImpl>(this);
186     auto extension = client->GetOwner();
187     if (extension == nullptr) {
188         MEDIA_ERR_LOG("%{public}s end failed.", __func__);
189         return ret;
190     }
191     ret = extension->UnregisterObserver(uri, dataObserver);
192     MEDIA_DEBUG_LOG("end successfully. ret: %{public}d", ret);
193     return ret;
194 }
195 
NotifyChange(const Uri & uri)196 bool MediaDataShareStubImpl::NotifyChange(const Uri &uri)
197 {
198     MEDIA_DEBUG_LOG("begin.");
199     bool ret = false;
200     auto client = sptr<MediaDataShareStubImpl>(this);
201     auto extension = client->GetOwner();
202     if (extension == nullptr) {
203         MEDIA_ERR_LOG("%{public}s end failed.", __func__);
204         return ret;
205     }
206     ret = extension->NotifyChange(uri);
207     MEDIA_DEBUG_LOG("end successfully. ret: %{public}d", ret);
208     return ret;
209 }
210 
NormalizeUri(const Uri & uri)211 Uri MediaDataShareStubImpl::NormalizeUri(const Uri &uri)
212 {
213     MEDIA_DEBUG_LOG("begin.");
214     Uri urivalue("");
215     auto client = sptr<MediaDataShareStubImpl>(this);
216     auto extension = client->GetOwner();
217     if (extension == nullptr) {
218         MEDIA_ERR_LOG("%{public}s end failed.", __func__);
219         return urivalue;
220     }
221     urivalue = extension->NormalizeUri(uri);
222     MEDIA_DEBUG_LOG("end successfully.");
223     return urivalue;
224 }
225 
DenormalizeUri(const Uri & uri)226 Uri MediaDataShareStubImpl::DenormalizeUri(const Uri &uri)
227 {
228     MEDIA_DEBUG_LOG("begin.");
229     Uri urivalue("");
230     auto client = sptr<MediaDataShareStubImpl>(this);
231     auto extension = client->GetOwner();
232     if (extension == nullptr) {
233         MEDIA_ERR_LOG("%{public}s end failed.", __func__);
234         return urivalue;
235     }
236     urivalue = extension->DenormalizeUri(uri);
237     MEDIA_DEBUG_LOG("end successfully.");
238     return urivalue;
239 }
240 } // namespace DataShare
241 } // namespace OHOS
242