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 "file_access_ext_stub_impl.h"
17
18 #include <cinttypes>
19 #include "user_access_tracer.h"
20 #include "file_access_framework_errno.h"
21 #include "hilog_wrapper.h"
22 #include "hitrace_meter.h"
23
24 namespace OHOS {
25 namespace FileAccessFwk {
GetOwner()26 std::shared_ptr<FileAccessExtAbility> FileAccessExtStubImpl::GetOwner()
27 {
28 return extension_;
29 }
30
OpenFile(const Uri & uri,const int flags,int & fd)31 int FileAccessExtStubImpl::OpenFile(const Uri &uri, const int flags, int &fd)
32 {
33 UserAccessTracer trace;
34 trace.Start("OpenFile");
35 if (extension_ == nullptr) {
36 HILOG_ERROR("OpenFile get extension failed.");
37 return E_IPCS;
38 }
39
40 int ret = extension_->OpenFile(uri, flags, fd);
41 return ret;
42 }
43
CreateFile(const Uri & parent,const std::string & displayName,Uri & newFile)44 int FileAccessExtStubImpl::CreateFile(const Uri &parent, const std::string &displayName, Uri &newFile)
45 {
46 UserAccessTracer trace;
47 trace.Start("CreateFile");
48 if (extension_ == nullptr) {
49 HILOG_ERROR("CreateFile get extension failed.");
50 return E_IPCS;
51 }
52
53 int ret = extension_->CreateFile(parent, displayName, newFile);
54 return ret;
55 }
56
Mkdir(const Uri & parent,const std::string & displayName,Uri & newFile)57 int FileAccessExtStubImpl::Mkdir(const Uri &parent, const std::string &displayName, Uri &newFile)
58 {
59 UserAccessTracer trace;
60 trace.Start("Mkdir");
61 if (extension_ == nullptr) {
62 HILOG_ERROR("Mkdir get extension failed.");
63 return E_IPCS;
64 }
65
66 int ret = extension_->Mkdir(parent, displayName, newFile);
67 return ret;
68 }
69
Delete(const Uri & sourceFile)70 int FileAccessExtStubImpl::Delete(const Uri &sourceFile)
71 {
72 UserAccessTracer trace;
73 trace.Start("Delete");
74 if (extension_ == nullptr) {
75 HILOG_ERROR("Delete get extension failed.");
76 return E_IPCS;
77 }
78
79 int ret = extension_->Delete(sourceFile);
80 return ret;
81 }
82
Move(const Uri & sourceFile,const Uri & targetParent,Uri & newFile)83 int FileAccessExtStubImpl::Move(const Uri &sourceFile, const Uri &targetParent, Uri &newFile)
84 {
85 UserAccessTracer trace;
86 trace.Start("Move");
87 if (extension_ == nullptr) {
88 HILOG_ERROR("Move get extension failed.");
89 return E_IPCS;
90 }
91
92 int ret = extension_->Move(sourceFile, targetParent, newFile);
93 return ret;
94 }
95
Copy(const Uri & sourceUri,const Uri & destUri,std::vector<CopyResult> & copyResult,bool force)96 int FileAccessExtStubImpl::Copy(const Uri &sourceUri, const Uri &destUri, std::vector<CopyResult> ©Result,
97 bool force)
98 {
99 UserAccessTracer trace;
100 trace.Start("Copy");
101 if (extension_ == nullptr) {
102 HILOG_ERROR("Copy get extension failed.");
103 return E_IPCS;
104 }
105 int ret = extension_->Copy(sourceUri, destUri, copyResult, force);
106 return ret;
107 }
108
Rename(const Uri & sourceFile,const std::string & displayName,Uri & newFile)109 int FileAccessExtStubImpl::Rename(const Uri &sourceFile, const std::string &displayName, Uri &newFile)
110 {
111 UserAccessTracer trace;
112 trace.Start("Rename");
113 if (extension_ == nullptr) {
114 HILOG_ERROR("Rename get extension failed.");
115 return E_IPCS;
116 }
117
118 int ret = extension_->Rename(sourceFile, displayName, newFile);
119 return ret;
120 }
121
ListFile(const FileInfo & fileInfo,const int64_t offset,const int64_t maxCount,const FileFilter & filter,std::vector<FileInfo> & fileInfoVec)122 int FileAccessExtStubImpl::ListFile(const FileInfo &fileInfo, const int64_t offset, const int64_t maxCount,
123 const FileFilter &filter, std::vector<FileInfo> &fileInfoVec)
124 {
125 UserAccessTracer trace;
126 trace.Start("ListFile");
127 if (extension_ == nullptr) {
128 HILOG_ERROR("ListFile get extension failed.");
129 return E_IPCS;
130 }
131
132 int ret = extension_->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec);
133 return ret;
134 }
135
ScanFile(const FileInfo & fileInfo,const int64_t offset,const int64_t maxCount,const FileFilter & filter,std::vector<FileInfo> & fileInfoVec)136 int FileAccessExtStubImpl::ScanFile(const FileInfo &fileInfo, const int64_t offset, const int64_t maxCount,
137 const FileFilter &filter, std::vector<FileInfo> &fileInfoVec)
138 {
139 UserAccessTracer trace;
140 trace.Start("ScanFile");
141 if (extension_ == nullptr) {
142 HILOG_ERROR("ScanFile get extension failed.");
143 return E_IPCS;
144 }
145
146 int ret = extension_->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec);
147 return ret;
148 }
149
Query(const Uri & uri,std::vector<std::string> & columns,std::vector<std::string> & results)150 int FileAccessExtStubImpl::Query(const Uri &uri, std::vector<std::string> &columns, std::vector<std::string> &results)
151 {
152 UserAccessTracer trace;
153 trace.Start("Query");
154 if (extension_ == nullptr) {
155 HILOG_ERROR("Query get extension failed.");
156 return E_IPCS;
157 }
158
159 int ret = extension_->Query(uri, columns, results);
160 return ret;
161 }
162
GetRoots(std::vector<RootInfo> & rootInfoVec)163 int FileAccessExtStubImpl::GetRoots(std::vector<RootInfo> &rootInfoVec)
164 {
165 UserAccessTracer trace;
166 trace.Start("GetRoots");
167 if (extension_ == nullptr) {
168 HILOG_ERROR("GetRoots get extension failed.");
169 return E_IPCS;
170 }
171
172 int ret = extension_->GetRoots(rootInfoVec);
173 return ret;
174 }
175
GetThumbnail(const Uri & uri,const ThumbnailSize & thumbnailSize,std::shared_ptr<PixelMap> & pixelMap)176 int FileAccessExtStubImpl::GetThumbnail(const Uri &uri, const ThumbnailSize &thumbnailSize,
177 std::shared_ptr<PixelMap> &pixelMap)
178 {
179 UserAccessTracer trace;
180 trace.Start("GetThumbnail");
181 if (extension_ == nullptr) {
182 HILOG_ERROR("GetThumbnail get extension failed.");
183 return E_IPCS;
184 }
185 std::unique_ptr<PixelMap> tempPtr;
186 Size size{ thumbnailSize.width, thumbnailSize.height };
187 int ret = extension_->GetThumbnail(uri, size, tempPtr);
188 if (ret != ERR_OK) {
189 HILOG_ERROR("GetThumbnail failed.");
190 return ret;
191 }
192 pixelMap = std::move(tempPtr);
193 return ret;
194 }
195
GetFileInfoFromUri(const Uri & selectFile,FileInfo & fileInfo)196 int FileAccessExtStubImpl::GetFileInfoFromUri(const Uri &selectFile, FileInfo &fileInfo)
197 {
198 UserAccessTracer trace;
199 trace.Start("GetFileInfoFromUri");
200 if (extension_ == nullptr) {
201 HILOG_ERROR("GetFileInfoFromUri get extension failed.");
202 return E_IPCS;
203 }
204
205 int ret = extension_->GetFileInfoFromUri(selectFile, fileInfo);
206 return ret;
207 }
208
GetFileInfoFromRelativePath(const std::string & selectFile,FileInfo & fileInfo)209 int FileAccessExtStubImpl::GetFileInfoFromRelativePath(const std::string &selectFile, FileInfo &fileInfo)
210 {
211 UserAccessTracer trace;
212 trace.Start("GetFileInfoFromRelativePath");
213 if (extension_ == nullptr) {
214 HILOG_ERROR("GetFileInfoFromRelativePath get extension failed.");
215 return E_IPCS;
216 }
217
218 int ret = extension_->GetFileInfoFromRelativePath(selectFile, fileInfo);
219 return ret;
220 }
221
Access(const Uri & uri,bool & isExist)222 int FileAccessExtStubImpl::Access(const Uri &uri, bool &isExist)
223 {
224 UserAccessTracer trace;
225 trace.Start("Access");
226 if (extension_ == nullptr) {
227 HILOG_ERROR("Access get extension failed.");
228 return E_IPCS;
229 }
230
231 int ret = extension_->Access(uri, isExist);
232 return ret;
233 }
234
StartWatcher(const Uri & uri)235 int FileAccessExtStubImpl::StartWatcher(const Uri &uri)
236 {
237 UserAccessTracer trace;
238 trace.Start("StartWatcher");
239 if (extension_ == nullptr) {
240 HILOG_ERROR("StartWatcher get extension failed.");
241 return E_IPCS;
242 }
243
244 int ret = extension_->StartWatcher(uri);
245 return ret;
246 }
247
StopWatcher(const Uri & uri,bool isUnregisterAll)248 int FileAccessExtStubImpl::StopWatcher(const Uri &uri, bool isUnregisterAll)
249 {
250 UserAccessTracer trace;
251 trace.Start("StopWatcher");
252 if (extension_ == nullptr) {
253 HILOG_ERROR("StopWatcher get extension failed.");
254 return E_IPCS;
255 }
256
257 int ret = extension_->StopWatcher(uri, isUnregisterAll);
258 return ret;
259 }
260 } // namespace FileAccessFwk
261 } // namespace OHOS
262