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