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