• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021-2024 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 #ifndef INTERFACES_KITS_JS_MEDIALIBRARY_INCLUDE_MEDIA_LIBRARY_NAPI_H_
17 #define INTERFACES_KITS_JS_MEDIALIBRARY_INCLUDE_MEDIA_LIBRARY_NAPI_H_
18 
19 #include <mutex>
20 #include <vector>
21 #include "abs_shared_result_set.h"
22 #include "album_napi.h"
23 #include "data_ability_helper.h"
24 #include "data_ability_observer_stub.h"
25 #include "data_ability_predicates.h"
26 #include "fetch_file_result_napi.h"
27 #include "file_asset_napi.h"
28 #include "napi_base_context.h"
29 #include "napi/native_api.h"
30 #include "napi/native_node_api.h"
31 #include "napi_error.h"
32 #include "photo_album.h"
33 #include "smart_album_asset.h"
34 #include "values_bucket.h"
35 #include "napi_remote_object.h"
36 #include "datashare_helper.h"
37 #include "datashare_predicates.h"
38 #include "uv.h"
39 
40 namespace OHOS {
41 namespace Media {
42 #define EXPORT __attribute__ ((visibility ("default")))
43 #define DECLARE_WRITABLE_NAPI_FUNCTION(name, func)                                 \
44     {                                                                              \
45         (name), nullptr, (func), nullptr, nullptr, nullptr, napi_writable, nullptr \
46     }
47 static const std::string MEDIA_LIB_NAPI_CLASS_NAME = "MediaLibrary";
48 static const std::string USERFILE_MGR_NAPI_CLASS_NAME = "UserFileManager";
49 static const std::string PHOTOACCESSHELPER_NAPI_CLASS_NAME = "PhotoAccessHelper";
50 
51 enum ListenerType {
52     INVALID_LISTENER = -1,
53 
54     AUDIO_LISTENER,
55     VIDEO_LISTENER,
56     IMAGE_LISTENER,
57     FILE_LISTENER,
58     SMARTALBUM_LISTENER,
59     DEVICE_LISTENER,
60     REMOTEFILE_LISTENER,
61     ALBUM_LISTENER
62 };
63 
64 enum ReplaceSelectionMode {
65     DEFAULT = 0,
66     ADD_DOCS_TO_RELATIVE_PATH,
67 };
68 
69 struct MediaChangeListener {
70     MediaType mediaType;
71     OHOS::DataShare::DataShareObserver::ChangeInfo changeInfo;
72     std::string strUri;
73 };
74 
75 struct AnalysisProperty {
76     std::string enumName;
77     int32_t enumValue;
78 };
79 
80 class MediaOnNotifyObserver;
81 class ChangeListenerNapi {
82 public:
83     class UvChangeMsg {
84     public:
UvChangeMsg(napi_env env,napi_ref ref,OHOS::DataShare::DataShareObserver::ChangeInfo & changeInfo,std::string strUri)85         UvChangeMsg(napi_env env, napi_ref ref,
86                     OHOS::DataShare::DataShareObserver::ChangeInfo &changeInfo,
87                     std::string strUri)
88             : env_(env), ref_(ref), changeInfo_(changeInfo),
89             strUri_(std::move(strUri)) {}
~UvChangeMsg()90         ~UvChangeMsg() {}
91         napi_env env_;
92         napi_ref ref_;
93         OHOS::DataShare::DataShareObserver::ChangeInfo changeInfo_;
94         uint8_t *data_ {nullptr};
95         std::string strUri_;
96     };
97 
ChangeListenerNapi(napi_env env)98     explicit ChangeListenerNapi(napi_env env) : env_(env) {}
99 
ChangeListenerNapi(const ChangeListenerNapi & listener)100     ChangeListenerNapi(const ChangeListenerNapi &listener)
101     {
102         this->env_ = listener.env_;
103         this->cbOnRef_ = listener.cbOnRef_;
104         this->cbOffRef_ = listener.cbOffRef_;
105     }
106 
107     ChangeListenerNapi& operator=(const ChangeListenerNapi &listener)
108     {
109         this->env_ = listener.env_;
110         this->cbOnRef_ = listener.cbOnRef_;
111         this->cbOffRef_ = listener.cbOffRef_;
112         return *this;
113     }
114 
~ChangeListenerNapi()115     ~ChangeListenerNapi() {};
116 
117     void OnChange(MediaChangeListener &listener, const napi_ref cbRef);
118     int UvQueueWork(uv_loop_s *loop, uv_work_t *work);
119     static napi_value SolveOnChange(napi_env env, UvChangeMsg *msg);
120     static string GetTrashAlbumUri();
121     static std::string trashAlbumUri_;
122     napi_ref cbOnRef_ = nullptr;
123     napi_ref cbOffRef_ = nullptr;
124     sptr<AAFwk::IDataAbilityObserver> audioDataObserver_ = nullptr;
125     sptr<AAFwk::IDataAbilityObserver> videoDataObserver_ = nullptr;
126     sptr<AAFwk::IDataAbilityObserver> imageDataObserver_ = nullptr;
127     sptr<AAFwk::IDataAbilityObserver> fileDataObserver_ = nullptr;
128     sptr<AAFwk::IDataAbilityObserver> smartAlbumDataObserver_ = nullptr;
129     sptr<AAFwk::IDataAbilityObserver> deviceDataObserver_ = nullptr;
130     sptr<AAFwk::IDataAbilityObserver> remoteFileDataObserver_ = nullptr;
131     sptr<AAFwk::IDataAbilityObserver> albumDataObserver_ = nullptr;
132     std::vector<std::shared_ptr<MediaOnNotifyObserver>> observers_;
133 private:
134     napi_env env_ = nullptr;
135 };
136 
137 class MediaObserver : public AAFwk::DataAbilityObserverStub {
138 public:
MediaObserver(const ChangeListenerNapi & listObj,MediaType mediaType)139     MediaObserver(const ChangeListenerNapi &listObj, MediaType mediaType) : listObj_(listObj)
140     {
141         mediaType_ = mediaType;
142     }
143 
144     ~MediaObserver() = default;
145 
OnChange()146     void OnChange() override
147     {
148         MediaChangeListener listener;
149         listener.mediaType = mediaType_;
150         listObj_.OnChange(listener, listObj_.cbOnRef_);
151     }
152 
153     ChangeListenerNapi listObj_;
154     MediaType mediaType_;
155 };
156 
157 class MediaOnNotifyObserver : public DataShare::DataShareObserver  {
158 public:
MediaOnNotifyObserver(const ChangeListenerNapi & listObj,std::string uri,napi_ref ref)159     MediaOnNotifyObserver(const ChangeListenerNapi &listObj, std::string uri, napi_ref ref) : listObj_(listObj)
160     {
161         uri_ = uri;
162         ref_ = ref;
163     }
164 
165     ~MediaOnNotifyObserver() = default;
166 
OnChange(const ChangeInfo & changeInfo)167     void OnChange(const ChangeInfo &changeInfo) override
168     {
169         MediaChangeListener listener;
170         listener.changeInfo = changeInfo;
171         listener.strUri = uri_;
172         listObj_.OnChange(listener, ref_);
173     }
174     ChangeListenerNapi listObj_;
175     std::string uri_;
176     napi_ref ref_;
177 };
178 
179 class ThumbnailBatchGenerateObserver : public DataShare::DataShareObserver {
180 public:
181     ThumbnailBatchGenerateObserver() = default;
182     ~ThumbnailBatchGenerateObserver() = default;
183 
184     void OnChange(const ChangeInfo &changeInfo) override;
185 };
186 
187 class ThumbnailGenerateHandler {
188 public:
ThumbnailGenerateHandler(napi_ref ref,napi_threadsafe_function func)189     ThumbnailGenerateHandler(napi_ref ref, napi_threadsafe_function func) : callbackRef_(ref), threadSafeFunc_(func) {}
190     ~ThumbnailGenerateHandler() = default;
191 
192     napi_ref callbackRef_;
193     napi_threadsafe_function threadSafeFunc_;
194 };
195 
196 class MediaLibraryNapi {
197 public:
198     EXPORT static napi_value Init(napi_env env, napi_value exports);
199     EXPORT static napi_value UserFileMgrInit(napi_env env, napi_value exports);
200     EXPORT static napi_value PhotoAccessHelperInit(napi_env env, napi_value exports);
201 
202     static void ReplaceSelection(std::string &selection, std::vector<std::string> &selectionArgs,
203         const std::string &key, const std::string &keyInstead, const int32_t mode = ReplaceSelectionMode::DEFAULT);
204     static void OnThumbnailGenerated(napi_env env, napi_value cb, void *context, void *data);
205 
206     EXPORT MediaLibraryNapi();
207     EXPORT ~MediaLibraryNapi();
208 
209     static std::mutex sUserFileClientMutex_;
210 
211 private:
212     EXPORT static void MediaLibraryNapiDestructor(napi_env env, void *nativeObject, void *finalize_hint);
213     EXPORT static napi_value MediaLibraryNapiConstructor(napi_env env, napi_callback_info info);
214 
215     EXPORT static napi_value GetMediaLibraryNewInstance(napi_env env, napi_callback_info info);
216     EXPORT static napi_value GetMediaLibraryNewInstanceAsync(napi_env env, napi_callback_info info);
217 
218     EXPORT static napi_value JSGetPublicDirectory(napi_env env, napi_callback_info info);
219     EXPORT static napi_value JSGetFileAssets(napi_env env, napi_callback_info info);
220     EXPORT static napi_value JSGetAlbums(napi_env env, napi_callback_info info);
221 
222     EXPORT static napi_value JSCreateAsset(napi_env env, napi_callback_info info);
223     EXPORT static napi_value JSDeleteAsset(napi_env env, napi_callback_info info);
224 
225     EXPORT static napi_value JSOnCallback(napi_env env, napi_callback_info info);
226     EXPORT static napi_value JSOffCallback(napi_env env, napi_callback_info info);
227 
228     EXPORT static napi_value JSRelease(napi_env env, napi_callback_info info);
229 
230     EXPORT static napi_value JSGetActivePeers(napi_env env, napi_callback_info info);
231     EXPORT static napi_value JSGetAllPeers(napi_env env, napi_callback_info info);
232     EXPORT static napi_value CreateMediaTypeEnum(napi_env env);
233     EXPORT static napi_value CreateFileKeyEnum(napi_env env);
234     EXPORT static napi_value CreateDirectoryTypeEnum(napi_env env);
235     EXPORT static napi_value CreateVirtualAlbumTypeEnum(napi_env env);
236     EXPORT static napi_value CreatePrivateAlbumTypeEnum(napi_env env);
237     EXPORT static napi_value CreatePhotoKeysEnum(napi_env env);
238     EXPORT static napi_value CreateHiddenPhotosDisplayModeEnum(napi_env env);
239     EXPORT static napi_value CreateDeliveryModeEnum(napi_env env);
240     EXPORT static napi_value CreateSourceModeEnum(napi_env env);
241     EXPORT static napi_value CreateCompatibleModeEnum(napi_env env);
242     EXPORT static napi_value CreateResourceTypeEnum(napi_env env);
243 
244     EXPORT static napi_value CreateMediaTypeUserFileEnum(napi_env env);
245 
246     EXPORT static napi_value JSGetSmartAlbums(napi_env env, napi_callback_info info);
247     EXPORT static napi_value JSGetPrivateAlbum(napi_env env, napi_callback_info info);
248     EXPORT static napi_value JSCreateSmartAlbum(napi_env env, napi_callback_info info);
249     EXPORT static napi_value JSDeleteSmartAlbum(napi_env env, napi_callback_info info);
250 
251     EXPORT static napi_value JSStoreMediaAsset(napi_env env, napi_callback_info info);
252     EXPORT static napi_value JSStartImagePreview(napi_env env, napi_callback_info info);
253     EXPORT static napi_value JSGetMediaRemoteStub(napi_env env, napi_callback_info info);
254 
255     EXPORT static napi_value GetUserFileMgr(napi_env env, napi_callback_info info);
256     EXPORT static napi_value GetUserFileMgrAsync(napi_env env, napi_callback_info info);
257     EXPORT static napi_value UserFileMgrCreatePhotoAsset(napi_env env, napi_callback_info info);
258     EXPORT static napi_value UserFileMgrCreateAudioAsset(napi_env env, napi_callback_info info);
259     EXPORT static napi_value UserFileMgrDeleteAsset(napi_env env, napi_callback_info info);
260     EXPORT static napi_value UserFileMgrTrashAsset(napi_env env, napi_callback_info info);
261     EXPORT static napi_value JSGetPhotoAlbums(napi_env env, napi_callback_info info);
262     EXPORT static napi_value JSGetPhotoAssets(napi_env env, napi_callback_info info);
263     EXPORT static napi_value JSGetJsonPhotoAssets(napi_env env, napi_callback_info info);
264     EXPORT static napi_value JSGetAudioAssets(napi_env env, napi_callback_info info);
265     EXPORT static napi_value UserFileMgrGetPrivateAlbum(napi_env env, napi_callback_info info);
266     EXPORT static napi_value UserFileMgrCreateFileKeyEnum(napi_env env);
267     EXPORT static napi_value UserFileMgrOnCallback(napi_env env, napi_callback_info info);
268     EXPORT static napi_value UserFileMgrOffCallback(napi_env env, napi_callback_info info);
269     EXPORT static napi_value CreateAudioKeyEnum(napi_env env);
270     EXPORT static napi_value CreateImageVideoKeyEnum(napi_env env);
271     EXPORT static napi_value CreateAlbumKeyEnum(napi_env env);
272     EXPORT static napi_value CreatePositionTypeEnum(napi_env env);
273     EXPORT static napi_value CreatePhotoSubTypeEnum(napi_env env);
274     EXPORT static napi_value CreatePhotoPermissionTypeEnum(napi_env env);
275     EXPORT static napi_value CreateHideSensitiveTypeEnum(napi_env env);
276     EXPORT static napi_value CreateDynamicRangeTypeEnum(napi_env env);
277 
278     EXPORT static napi_value GetPhotoAccessHelper(napi_env env, napi_callback_info info);
279     EXPORT static napi_value StartPhotoPicker(napi_env env, napi_callback_info info);
280     EXPORT static napi_value GetPhotoAccessHelperAsync(napi_env env, napi_callback_info info);
281     EXPORT static napi_value CreateDeleteRequest(napi_env env, napi_callback_info info);
282     EXPORT static napi_value CheckShortTermPermission(napi_env env, napi_callback_info info);
283     EXPORT static napi_value CreateAssetsHasPermission(napi_env env, napi_callback_info info);
284     EXPORT static napi_value CreateAssetWithShortTermPermission(napi_env env, napi_callback_info info);
285     EXPORT static napi_value ShowAssetsCreationDialog(napi_env env, napi_callback_info info);
286     EXPORT static napi_value RequestPhotoUrisReadPermission(napi_env env, napi_callback_info info);
287     EXPORT static napi_value PhotoAccessHelperCreatePhotoAsset(napi_env env, napi_callback_info info);
288     EXPORT static napi_value PhotoAccessHelperAgentCreateAssets(napi_env env, napi_callback_info info);
289     EXPORT static napi_value PhotoAccessHelperAgentCreateAssetsWithMode(napi_env env, napi_callback_info info);
290     EXPORT static napi_value PhotoAccessGrantPhotoUriPermission(napi_env env, napi_callback_info info);
291     EXPORT static napi_value PhotoAccessGrantPhotoUrisPermission(napi_env env, napi_callback_info info);
292     EXPORT static napi_value PhotoAccessCancelPhotoUriPermission(napi_env env, napi_callback_info info);
293     EXPORT static napi_value PhotoAccessHelperTrashAsset(napi_env env, napi_callback_info info);
294     EXPORT static napi_value PhotoAccessHelperOnCallback(napi_env env, napi_callback_info info);
295     EXPORT static napi_value PhotoAccessHelperOffCallback(napi_env env, napi_callback_info info);
296     EXPORT static napi_value PhotoAccessGetPhotoAssets(napi_env env, napi_callback_info info);
297     EXPORT static napi_value PhotoAccessGetPhotoAssetsSync(napi_env env, napi_callback_info info);
298     EXPORT static napi_value PhotoAccessCreatePhotoAlbum(napi_env env, napi_callback_info info);
299     EXPORT static napi_value PhotoAccessDeletePhotoAlbums(napi_env env, napi_callback_info info);
300     EXPORT static napi_value PhotoAccessGetPhotoAlbums(napi_env env, napi_callback_info info);
301     EXPORT static napi_value PhotoAccessGetPhotoAlbumsSync(napi_env env, napi_callback_info info);
302     EXPORT static napi_value PhotoAccessSaveFormInfo(napi_env env, napi_callback_info info);
303     EXPORT static napi_value PhotoAccessRemoveFormInfo(napi_env env, napi_callback_info info);
304     EXPORT static napi_value PhotoAccessGetFileAssetsInfo(napi_env env, napi_callback_info info);
305     EXPORT static napi_value PhotoAccessStartCreateThumbnailTask(napi_env env, napi_callback_info info);
306     EXPORT static napi_value PhotoAccessStopCreateThumbnailTask(napi_env env, napi_callback_info info);
307     EXPORT static napi_value PhotoAccessGetBurstAssets(napi_env env, napi_callback_info info);
308     EXPORT static napi_value PhotoAccessGetSharedPhotoAssets(napi_env env, napi_callback_info info);
309 
310     EXPORT static napi_value SetHidden(napi_env env, napi_callback_info info);
311     EXPORT static napi_value PahGetHiddenAlbums(napi_env env, napi_callback_info info);
312 
313     EXPORT static napi_value CreateAlbumTypeEnum(napi_env env);
314     EXPORT static napi_value CreateAlbumSubTypeEnum(napi_env env);
315     EXPORT static napi_value CreateNotifyTypeEnum(napi_env env);
316     EXPORT static napi_value CreateDefaultChangeUriEnum(napi_env env);
317     EXPORT static napi_value CreateRequestPhotoTypeEnum(napi_env env);
318     EXPORT static napi_value CreateAnalysisTypeEnum(napi_env env);
319     EXPORT static napi_value CreateAuthorizationModeEnum(napi_env env);
320     EXPORT static napi_value CreateHighlightAlbumInfoTypeEnum(napi_env env);
321     EXPORT static napi_value CreateHighlightUserActionTypeEnum(napi_env env);
322     EXPORT static napi_value CreateMovingPhotoEffectModeEnum(napi_env env);
323     EXPORT static napi_value CreateImageFileTypeEnum(napi_env env);
324     EXPORT static napi_value CreateCloudEnhancementTaskStageEnum(napi_env env);
325     EXPORT static napi_value CreateCloudEnhancementStateEnum(napi_env env);
326     EXPORT static napi_value CreateVideoEnhancementTypeEnum(napi_env env);
327     EXPORT static napi_value CreateSupportedWatermarkTypeEnum(napi_env env);
328     EXPORT static napi_value CreateCloudMediaDownloadTypeEnum(napi_env env);
329     EXPORT static napi_value CreateCloudMediaRetainTypeEnum(napi_env env);
330     EXPORT static napi_value CreateCloudMediaAssetTaskStatusEnum(napi_env env);
331     EXPORT static napi_value CreateCloudMediaTaskPauseCauseEnum(napi_env env);
332 
333     EXPORT static napi_value CreatePhotoAlbum(napi_env env, napi_callback_info info);
334     EXPORT static napi_value DeletePhotoAlbums(napi_env env, napi_callback_info info);
335     EXPORT static napi_value GetPhotoAlbums(napi_env env, napi_callback_info info);
336     EXPORT static napi_value JSGetPhotoIndex(napi_env env, napi_callback_info info);
337     EXPORT static napi_value PhotoAccessGetPhotoIndex(napi_env env, napi_callback_info info);
338     EXPORT static napi_value PhotoAccessGetIndexConstructProgress(napi_env env, napi_callback_info info);
339 
340     EXPORT static napi_value JSApplyChanges(napi_env env, napi_callback_info info);
341 
342     int32_t GetListenerType(const std::string &str) const;
343     void RegisterChange(napi_env env, const std::string &type, ChangeListenerNapi &listObj);
344     void UnregisterChange(napi_env env, const std::string &type, ChangeListenerNapi &listObj);
345     void RegisterNotifyChange(napi_env env,
346         const std::string &uri, bool isDerived, napi_ref ref, ChangeListenerNapi &listObj);
347     void UnRegisterNotifyChange(napi_env env, const std::string &uri, napi_ref ref, ChangeListenerNapi &listObj);
348     static bool CheckRef(napi_env env,
349         napi_ref ref, ChangeListenerNapi &listObj, bool isOff, const std::string &uri);
350     napi_env env_;
351 
352     static thread_local napi_ref sConstructor_;
353     static thread_local napi_ref userFileMgrConstructor_;
354     static thread_local napi_ref photoAccessHelperConstructor_;
355     static thread_local napi_ref sMediaTypeEnumRef_;
356     static thread_local napi_ref sDirectoryEnumRef_;
357     static thread_local napi_ref sVirtualAlbumTypeEnumRef_;
358     static thread_local napi_ref sFileKeyEnumRef_;
359     static thread_local napi_ref sPrivateAlbumEnumRef_;
360 
361     static thread_local napi_ref sUserFileMgrFileKeyEnumRef_;
362     static thread_local napi_ref sAudioKeyEnumRef_;
363     static thread_local napi_ref sImageVideoKeyEnumRef_;
364     static thread_local napi_ref sPhotoKeysEnumRef_;
365     static thread_local napi_ref sAlbumKeyEnumRef_;
366     static thread_local napi_ref sAlbumType_;
367     static thread_local napi_ref sAlbumSubType_;
368     static thread_local napi_ref sPositionTypeEnumRef_;
369     static thread_local napi_ref sHiddenPhotosDisplayModeEnumRef_;
370     static thread_local napi_ref sPhotoSubType_;
371     static thread_local napi_ref sPhotoPermissionType_;
372     static thread_local napi_ref sHideSensitiveType_;
373     static thread_local napi_ref sDynamicRangeType_;
374     static thread_local napi_ref sNotifyType_;
375     static thread_local napi_ref sDefaultChangeUriRef_;
376     static thread_local napi_ref sRequestPhotoTypeEnumRef_;
377     static thread_local napi_ref sAnalysisType_;
378     static thread_local napi_ref sResourceTypeEnumRef_;
379     static thread_local napi_ref sDeliveryModeEnumRef_;
380     static thread_local napi_ref sSourceModeEnumRef_;
381     static thread_local napi_ref sCompatibleModeEnumRef_;
382     static thread_local napi_ref sHighlightAlbumInfoType_;
383     static thread_local napi_ref sHighlightUserActionType_;
384     static thread_local napi_ref sMovingPhotoEffectModeEnumRef_;
385     static thread_local napi_ref sImageFileTypeEnumEnumRef_;
386     static thread_local napi_ref sAuthorizationModeEnumRef_;
387     static thread_local napi_ref sCloudEnhancementTaskStageEnumRef_;
388     static thread_local napi_ref sCloudEnhancementStateEnumRef_;
389     static thread_local napi_ref sVideoEnhancementTypeEnumRef_;
390     static thread_local napi_ref sSupportedWatermarkTypeEnumRef_;
391     static thread_local napi_ref sCloudMediaDownloadTypeEnumRef_;
392     static thread_local napi_ref sCloudMediaRetainTypeEnumRef_;
393     static thread_local napi_ref sCloudMediaAssetTaskStatusEnumRef_;
394     static thread_local napi_ref sCloudMediaTaskPauseCauseEnumRef_;
395 
396     static std::mutex sOnOffMutex_;
397 };
398 
399 struct PickerCallBack {
400     bool ready = false;
401     bool isOrigin;
402     int32_t resultCode;
403     vector<string> uris;
404 };
405 
406 constexpr int32_t DEFAULT_PRIVATEALBUMTYPE = 3;
407 struct MediaLibraryAsyncContext : public NapiError {
408     napi_async_work work;
409     napi_deferred deferred;
410     napi_ref callbackRef;
411     bool status;
412     bool isDelete;
413     bool isCreateByComponent;
414     bool isCreateByAgent;
415     NapiAssetType assetType;
416     AlbumType albumType;
417     MediaLibraryNapi *objectInfo;
418     std::string selection;
419     std::vector<std::string> selectionArgs;
420     std::string order;
421     std::string uri;
422     std::vector<std::string> uriArray;
423     std::string networkId;
424     std::string extendArgs;
425     std::unique_ptr<FetchResult<FileAsset>> fetchFileResult;
426     std::unique_ptr<FetchResult<AlbumAsset>> fetchAlbumResult;
427     std::unique_ptr<FetchResult<PhotoAlbum>> fetchPhotoAlbumResult;
428     std::unique_ptr<FetchResult<SmartAlbumAsset>> fetchSmartAlbumResult;
429     std::unique_ptr<FileAsset> fileAsset;
430     std::unique_ptr<PhotoAlbum> photoAlbumData;
431     std::unique_ptr<SmartAlbumAsset> smartAlbumData;
432     OHOS::DataShare::DataShareValuesBucket valuesBucket;
433     std::vector<OHOS::DataShare::DataShareValuesBucket> valuesBucketArray;
434     unsigned int dirType = 0;
435     int32_t privateAlbumType = DEFAULT_PRIVATEALBUMTYPE;
436     int32_t retVal;
437     std::string directoryRelativePath;
438     std::vector<std::unique_ptr<AlbumAsset>> albumNativeArray;
439     std::vector<std::unique_ptr<SmartAlbumAsset>> smartAlbumNativeArray;
440     std::vector<std::unique_ptr<SmartAlbumAsset>> privateSmartAlbumNativeArray;
441     Ability *ability_;
442     std::string storeMediaSrc;
443     int32_t imagePreviewIndex;
444     int32_t parentSmartAlbumId = 0;
445     int32_t smartAlbumId = -1;
446     int32_t isLocationAlbum = 0;
447     int32_t isHighlightAlbum = 0;
448     size_t argc;
449     napi_value argv[NAPI_ARGC_MAX];
450     ResultNapiType resultNapiType;
451     std::string tableName;
452     std::vector<uint32_t> mediaTypes;
453     OHOS::DataShare::DataSharePredicates predicates;
454     std::vector<std::string> fetchColumn;
455     std::vector<std::string> uris;
456     bool hiddenOnly = false;
457     bool isAnalysisAlbum = false;
458     int32_t hiddenAlbumFetchMode = -1;
459     std::string formId;
460     std::string indexProgress;
461     std::shared_ptr<PickerCallBack> pickerCallBack;
462 };
463 
464 struct MediaLibraryInitContext : public NapiError  {
465     napi_async_work work;
466     napi_deferred deferred;
467     napi_ref callbackRef;
468     size_t argc;
469     napi_value argv[NAPI_ARGC_MAX];
470     napi_ref resultRef_;
471     sptr<IRemoteObject> token_;
472 };
473 } // namespace Media
474 } // namespace OHOS
475 
476 #endif  // INTERFACES_KITS_JS_MEDIALIBRARY_INCLUDE_MEDIA_LIBRARY_NAPI_H_
477