• 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 #define MLOG_TAG "FileExtension"
16 
17 #include "media_file_ext_ability.h"
18 
19 #include <cstdlib>
20 
21 #include "app_mgr_client.h"
22 #include "extension_context.h"
23 #include "file_access_ext_stub_impl.h"
24 #include "js_runtime_utils.h"
25 #include "media_file_extention_utils.h"
26 #include "media_log.h"
27 #include "medialibrary_client_errno.h"
28 #include "medialibrary_data_manager.h"
29 #include "medialibrary_errno.h"
30 #include "singleton.h"
31 
32 namespace OHOS {
33 namespace Media {
34 using namespace std;
35 using namespace OHOS::AppExecFwk;
36 using namespace OHOS::AbilityRuntime;
37 using namespace OHOS::FileAccessFwk;
38 using namespace OHOS::DataShare;
39 
MediaFileExtAbility(JsRuntime & jsRuntime)40 MediaFileExtAbility::MediaFileExtAbility(JsRuntime& jsRuntime) : jsRuntime_(jsRuntime) {}
41 
~MediaFileExtAbility()42 MediaFileExtAbility::~MediaFileExtAbility() {}
43 
Create(const unique_ptr<Runtime> & runtime)44 MediaFileExtAbility* MediaFileExtAbility::Create(const unique_ptr<Runtime>& runtime)
45 {
46     MEDIA_INFO_LOG("create MediaFileExtAbility");
47     return new MediaFileExtAbility(static_cast<JsRuntime&>(*runtime));
48 }
49 
MediaFileExtCreator(const unique_ptr<Runtime> & runtime)50 static MediaFileExtAbility* MediaFileExtCreator(const unique_ptr<Runtime>& runtime)
51 {
52     MEDIA_INFO_LOG("MediaFileExtCreator::%s", __func__);
53     return  MediaFileExtAbility::Create(runtime);
54 }
55 
RegisterFileExtCreator()56 __attribute__((constructor)) void RegisterFileExtCreator()
57 {
58     MEDIA_INFO_LOG("MediaFileExtCreator::%s", __func__);
59     FileAccessExtAbility::SetCreator(MediaFileExtCreator);
60 }
61 
Init(const shared_ptr<AbilityLocalRecord> & record,const shared_ptr<OHOSApplication> & application,shared_ptr<AbilityHandler> & handler,const sptr<IRemoteObject> & token)62 void MediaFileExtAbility::Init(const shared_ptr<AbilityLocalRecord> &record,
63     const shared_ptr<OHOSApplication> &application, shared_ptr<AbilityHandler> &handler,
64     const sptr<IRemoteObject> &token)
65 {
66     MEDIA_INFO_LOG("Init MediaFileExtAbility");
67     FileAccessExtAbility::Init(record, application, handler, token);
68 }
69 
OnStart(const AAFwk::Want & want)70 void MediaFileExtAbility::OnStart(const AAFwk::Want &want)
71 {
72     MEDIA_INFO_LOG("Onstart MediaFileExtAbility");
73     Extension::OnStart(want);
74     auto context = AbilityRuntime::Context::GetApplicationContext();
75     if (context == nullptr) {
76         MEDIA_ERR_LOG("Failed to get context");
77         DelayedSingleton<AppExecFwk::AppMgrClient>::GetInstance()->KillApplicationSelf();
78         return;
79     }
80     int32_t errCode = MediaLibraryDataManager::GetInstance()->InitMediaLibraryMgr(context, nullptr);
81     if (errCode != E_OK) {
82         MEDIA_ERR_LOG("failed to init MediaLibraryManager, exit");
83         DelayedSingleton<AppExecFwk::AppMgrClient>::GetInstance()->KillApplicationSelf();
84         return;
85     }
86 }
87 
OnStop()88 void MediaFileExtAbility::OnStop()
89 {
90     MEDIA_INFO_LOG("%{public}s begin.", __func__);
91     MediaLibraryDataManager::GetInstance()->ClearMediaLibraryMgr();
92 }
93 
OnConnect(const AAFwk::Want & want)94 sptr<IRemoteObject> MediaFileExtAbility::OnConnect(const AAFwk::Want &want)
95 {
96     Extension::OnConnect(want);
97     sptr<FileAccessExtStubImpl> remoteObject = new (nothrow) FileAccessExtStubImpl(
98         static_pointer_cast<MediaFileExtAbility>(shared_from_this()),
99         reinterpret_cast<napi_env>(&jsRuntime_.GetNativeEngine()));
100     if (remoteObject == nullptr) {
101         MEDIA_ERR_LOG("OnConnect MediaFileExtAbility get obj fail");
102         return nullptr;
103     }
104 
105     return remoteObject->AsObject();
106 }
107 
ConvertErrno(int32_t innerErr)108 int32_t ConvertErrno(int32_t innerErr)
109 {
110     if (innerErr >= 0) {
111         return E_SUCCESS;
112     }
113     int32_t err = JS_INNER_FAIL;
114     if (ClientErrTable.find(innerErr) != ClientErrTable.end()) {
115         err = ClientErrTable.at(innerErr);
116     }
117     return err;
118 }
119 
OpenFile(const Uri & uri,const int flags,int & fd)120 int MediaFileExtAbility::OpenFile(const Uri &uri, const int flags, int &fd)
121 {
122     return ConvertErrno(MediaFileExtentionUtils::OpenFile(uri, flags, fd));
123 }
124 
CreateFile(const Uri & parentUri,const string & displayName,Uri & newFileUri)125 int MediaFileExtAbility::CreateFile(const Uri &parentUri, const string &displayName,  Uri &newFileUri)
126 {
127     return ConvertErrno(MediaFileExtentionUtils::CreateFile(parentUri, displayName, newFileUri));
128 }
129 
Mkdir(const Uri & parentUri,const string & displayName,Uri & newFileUri)130 int MediaFileExtAbility::Mkdir(const Uri &parentUri, const string &displayName, Uri &newFileUri)
131 {
132     return ConvertErrno(MediaFileExtentionUtils::Mkdir(parentUri, displayName, newFileUri));
133 }
134 
Delete(const Uri & sourceFileUri)135 int MediaFileExtAbility::Delete(const Uri &sourceFileUri)
136 {
137     return ConvertErrno(MediaFileExtentionUtils::Delete(sourceFileUri));
138 }
139 
ListFile(const FileInfo & parentInfo,const int64_t offset,const int64_t maxCount,const FileAccessFwk::FileFilter & filter,vector<FileInfo> & fileList)140 int MediaFileExtAbility::ListFile(const FileInfo &parentInfo, const int64_t offset, const int64_t maxCount,
141     const FileAccessFwk::FileFilter &filter, vector<FileInfo> &fileList)
142 {
143     return ConvertErrno(MediaFileExtentionUtils::ListFile(parentInfo, offset, maxCount, filter, fileList));
144 }
145 
ScanFile(const FileInfo & parentInfo,const int64_t offset,const int64_t maxCount,const FileAccessFwk::FileFilter & filter,vector<FileInfo> & fileList)146 int MediaFileExtAbility::ScanFile(const FileInfo &parentInfo, const int64_t offset, const int64_t maxCount,
147     const FileAccessFwk::FileFilter &filter, vector<FileInfo> &fileList)
148 {
149     return ConvertErrno(MediaFileExtentionUtils::ScanFile(parentInfo, offset, maxCount, filter, fileList));
150 }
151 
Query(const Uri & uri,std::vector<std::string> & columns,std::vector<std::string> & results)152 int MediaFileExtAbility::Query(const Uri &uri, std::vector<std::string> &columns, std::vector<std::string> &results)
153 {
154     return ConvertErrno(MediaFileExtentionUtils::Query(uri, columns, results));
155 }
156 
GetRoots(vector<FileAccessFwk::RootInfo> & rootList)157 int MediaFileExtAbility::GetRoots(vector<FileAccessFwk::RootInfo> &rootList)
158 {
159     return ConvertErrno(MediaFileExtentionUtils::GetRoots(rootList));
160 }
161 
Move(const Uri & sourceFileUri,const Uri & targetParentUri,Uri & newFileUri)162 int MediaFileExtAbility::Move(const Uri &sourceFileUri, const Uri &targetParentUri, Uri &newFileUri)
163 {
164     return ConvertErrno(MediaFileExtentionUtils::Move(sourceFileUri, targetParentUri, newFileUri));
165 }
166 
Copy(const Uri & sourceUri,const Uri & destUri,std::vector<CopyResult> & copyResult,bool force)167 int MediaFileExtAbility::Copy(const Uri &sourceUri, const Uri &destUri, std::vector<CopyResult> &copyResult, bool force)
168 {
169     return MediaFileExtentionUtils::Copy(sourceUri, destUri, copyResult, force);
170 }
171 
Rename(const Uri & sourceFileUri,const string & displayName,Uri & newFileUri)172 int MediaFileExtAbility::Rename(const Uri &sourceFileUri, const string &displayName, Uri &newFileUri)
173 {
174     return ConvertErrno(MediaFileExtentionUtils::Rename(sourceFileUri, displayName, newFileUri));
175 }
176 
Access(const Uri & uri,bool & isExist)177 int MediaFileExtAbility::Access(const Uri &uri, bool &isExist)
178 {
179     return ConvertErrno(MediaFileExtentionUtils::Access(uri, isExist));
180 }
181 
GetThumbnail(const Uri & uri,const Size & size,std::unique_ptr<PixelMap> & pixelMap)182 int MediaFileExtAbility::GetThumbnail(const Uri &uri, const Size &size, std::unique_ptr<PixelMap> &pixelMap)
183 {
184     return ConvertErrno(MediaFileExtentionUtils::GetThumbnail(uri, size, pixelMap));
185 }
186 
GetFileInfoFromUri(const Uri & selectFile,FileInfo & fileInfo)187 int MediaFileExtAbility::GetFileInfoFromUri(const Uri &selectFile, FileInfo &fileInfo)
188 {
189     return ConvertErrno(MediaFileExtentionUtils::GetFileInfoFromUri(selectFile, fileInfo));
190 }
191 
GetFileInfoFromRelativePath(const string & relativePath,FileAccessFwk::FileInfo & fileInfo)192 int MediaFileExtAbility::GetFileInfoFromRelativePath(const string &relativePath, FileAccessFwk::FileInfo &fileInfo)
193 {
194     return ConvertErrno(MediaFileExtentionUtils::GetFileInfoFromRelativePath(relativePath, fileInfo));
195 }
196 } // Media
197 } // OHOS
198