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