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 98 struct JsOnChangeCallbackWrapper { 99 UvChangeMsg* msg_; 100 std::list<std::string> extraUris_; 101 uint32_t uriSize_ { 0 }; 102 std::shared_ptr<NativeRdb::ResultSet> sharedAssets_; 103 std::vector<std::shared_ptr<RowObject>> sharedAssetsRowObjVector_; 104 std::shared_ptr<NativeRdb::ResultSet> extraSharedAssets_; 105 }; 106 ChangeListenerNapi(napi_env env)107 explicit ChangeListenerNapi(napi_env env) : env_(env) {} 108 ChangeListenerNapi(const ChangeListenerNapi & listener)109 ChangeListenerNapi(const ChangeListenerNapi &listener) 110 { 111 this->env_ = listener.env_; 112 this->cbOnRef_ = listener.cbOnRef_; 113 this->cbOffRef_ = listener.cbOffRef_; 114 } 115 116 ChangeListenerNapi& operator=(const ChangeListenerNapi &listener) 117 { 118 this->env_ = listener.env_; 119 this->cbOnRef_ = listener.cbOnRef_; 120 this->cbOffRef_ = listener.cbOffRef_; 121 return *this; 122 } 123 ~ChangeListenerNapi()124 ~ChangeListenerNapi() {}; 125 126 void OnChange(MediaChangeListener &listener, const napi_ref cbRef); 127 void QueryRdbAndNotifyChange(uv_loop_s *loop, UvChangeMsg *msg, uv_work_t *work); 128 int UvQueueWork(uv_loop_s *loop, uv_work_t *work); 129 static napi_value SolveOnChange(napi_env env, JsOnChangeCallbackWrapper* wrapper); 130 void GetResultSetFromMsg(UvChangeMsg* msg, JsOnChangeCallbackWrapper* wrapper); 131 std::shared_ptr<NativeRdb::ResultSet> GetSharedResultSetFromIds(std::vector<string>& Ids, bool isPhoto); 132 void GetIdsFromUris(std::list<Uri>& listValue, std::vector<string>& ids, bool isPhoto); 133 static string GetTrashAlbumUri(); 134 static std::string trashAlbumUri_; 135 napi_ref cbOnRef_ = nullptr; 136 napi_ref cbOffRef_ = nullptr; 137 sptr<AAFwk::IDataAbilityObserver> audioDataObserver_ = nullptr; 138 sptr<AAFwk::IDataAbilityObserver> videoDataObserver_ = nullptr; 139 sptr<AAFwk::IDataAbilityObserver> imageDataObserver_ = nullptr; 140 sptr<AAFwk::IDataAbilityObserver> fileDataObserver_ = nullptr; 141 sptr<AAFwk::IDataAbilityObserver> smartAlbumDataObserver_ = nullptr; 142 sptr<AAFwk::IDataAbilityObserver> deviceDataObserver_ = nullptr; 143 sptr<AAFwk::IDataAbilityObserver> remoteFileDataObserver_ = nullptr; 144 sptr<AAFwk::IDataAbilityObserver> albumDataObserver_ = nullptr; 145 std::vector<std::shared_ptr<MediaOnNotifyObserver>> observers_; 146 private: 147 napi_env env_ = nullptr; 148 149 static napi_status SetSharedAssetArray(const napi_env& env, const char* fieldStr, 150 ChangeListenerNapi::JsOnChangeCallbackWrapper *wrapper, napi_value& result, bool isPhoto); 151 152 static int ParseSharedPhotoAssets(ChangeListenerNapi::JsOnChangeCallbackWrapper *wrapper, 153 bool isPhoto); 154 static napi_value BuildSharedPhotoAssetsObj(const napi_env& env, 155 ChangeListenerNapi::JsOnChangeCallbackWrapper *wrapper, bool isPhoto); 156 }; 157 158 class MediaObserver : public AAFwk::DataAbilityObserverStub { 159 public: MediaObserver(const ChangeListenerNapi & listObj,MediaType mediaType)160 MediaObserver(const ChangeListenerNapi &listObj, MediaType mediaType) : listObj_(listObj) 161 { 162 mediaType_ = mediaType; 163 } 164 165 ~MediaObserver() = default; 166 OnChange()167 void OnChange() override 168 { 169 MediaChangeListener listener; 170 listener.mediaType = mediaType_; 171 listObj_.OnChange(listener, listObj_.cbOnRef_); 172 } 173 174 ChangeListenerNapi listObj_; 175 MediaType mediaType_; 176 }; 177 178 class MediaOnNotifyObserver : public DataShare::DataShareObserver { 179 public: MediaOnNotifyObserver(const ChangeListenerNapi & listObj,std::string uri,napi_ref ref)180 MediaOnNotifyObserver(const ChangeListenerNapi &listObj, std::string uri, napi_ref ref) : listObj_(listObj) 181 { 182 uri_ = uri; 183 ref_ = ref; 184 } 185 186 ~MediaOnNotifyObserver() = default; 187 OnChange(const ChangeInfo & changeInfo)188 void OnChange(const ChangeInfo &changeInfo) override 189 { 190 MediaChangeListener listener; 191 listener.changeInfo = changeInfo; 192 listener.strUri = uri_; 193 listObj_.OnChange(listener, ref_); 194 } 195 ChangeListenerNapi listObj_; 196 std::string uri_; 197 napi_ref ref_; 198 }; 199 200 class ThumbnailBatchGenerateObserver : public DataShare::DataShareObserver { 201 public: 202 ThumbnailBatchGenerateObserver() = default; 203 ~ThumbnailBatchGenerateObserver() = default; 204 205 void OnChange(const ChangeInfo &changeInfo) override; 206 }; 207 208 class ThumbnailGenerateHandler { 209 public: ThumbnailGenerateHandler(napi_ref ref,napi_threadsafe_function func)210 ThumbnailGenerateHandler(napi_ref ref, napi_threadsafe_function func) : callbackRef_(ref), threadSafeFunc_(func) {} 211 ~ThumbnailGenerateHandler() = default; 212 213 napi_ref callbackRef_; 214 napi_threadsafe_function threadSafeFunc_; 215 }; 216 217 class MediaLibraryNapi { 218 public: 219 EXPORT static napi_value Init(napi_env env, napi_value exports); 220 EXPORT static napi_value UserFileMgrInit(napi_env env, napi_value exports); 221 EXPORT static napi_value PhotoAccessHelperInit(napi_env env, napi_value exports); 222 223 static void ReplaceSelection(std::string &selection, std::vector<std::string> &selectionArgs, 224 const std::string &key, const std::string &keyInstead, const int32_t mode = ReplaceSelectionMode::DEFAULT); 225 static void OnThumbnailGenerated(napi_env env, napi_value cb, void *context, void *data); 226 int32_t GetUserId(); 227 void SetUserId(const int32_t &userId); 228 229 EXPORT MediaLibraryNapi(); 230 EXPORT ~MediaLibraryNapi(); 231 static std::mutex sUserFileClientMutex_; 232 233 private: 234 EXPORT static void MediaLibraryNapiDestructor(napi_env env, void *nativeObject, void *finalize_hint); 235 EXPORT static napi_value MediaLibraryNapiConstructor(napi_env env, napi_callback_info info); 236 237 EXPORT static napi_value GetMediaLibraryNewInstance(napi_env env, napi_callback_info info); 238 EXPORT static napi_value GetMediaLibraryNewInstanceAsync(napi_env env, napi_callback_info info); 239 240 EXPORT static napi_value JSGetPublicDirectory(napi_env env, napi_callback_info info); 241 EXPORT static napi_value JSGetFileAssets(napi_env env, napi_callback_info info); 242 EXPORT static napi_value JSGetAlbums(napi_env env, napi_callback_info info); 243 244 EXPORT static napi_value JSCreateAsset(napi_env env, napi_callback_info info); 245 EXPORT static napi_value JSDeleteAsset(napi_env env, napi_callback_info info); 246 247 EXPORT static napi_value JSOnCallback(napi_env env, napi_callback_info info); 248 EXPORT static napi_value JSOffCallback(napi_env env, napi_callback_info info); 249 250 EXPORT static napi_value JSRelease(napi_env env, napi_callback_info info); 251 252 EXPORT static napi_value JSGetActivePeers(napi_env env, napi_callback_info info); 253 EXPORT static napi_value JSGetAllPeers(napi_env env, napi_callback_info info); 254 EXPORT static napi_value CreateMediaTypeEnum(napi_env env); 255 EXPORT static napi_value CreateFileKeyEnum(napi_env env); 256 EXPORT static napi_value CreateDirectoryTypeEnum(napi_env env); 257 EXPORT static napi_value CreateVirtualAlbumTypeEnum(napi_env env); 258 EXPORT static napi_value CreatePrivateAlbumTypeEnum(napi_env env); 259 EXPORT static napi_value CreateDeliveryModeEnum(napi_env env); 260 EXPORT static napi_value CreateSourceModeEnum(napi_env env); 261 EXPORT static napi_value CreateCompatibleModeEnum(napi_env env); 262 263 EXPORT static napi_value CreatePhotoKeysEnum(napi_env env); 264 EXPORT static napi_value CreateHiddenPhotosDisplayModeEnum(napi_env env); 265 266 EXPORT static napi_value CreateMediaTypeUserFileEnum(napi_env env); 267 EXPORT static napi_value CreateKeyFrameThumbnailTypeEnum(napi_env env); 268 269 EXPORT static napi_value JSGetSmartAlbums(napi_env env, napi_callback_info info); 270 EXPORT static napi_value JSGetPrivateAlbum(napi_env env, napi_callback_info info); 271 EXPORT static napi_value JSCreateSmartAlbum(napi_env env, napi_callback_info info); 272 EXPORT static napi_value JSDeleteSmartAlbum(napi_env env, napi_callback_info info); 273 274 EXPORT static napi_value JSStoreMediaAsset(napi_env env, napi_callback_info info); 275 EXPORT static napi_value JSStartImagePreview(napi_env env, napi_callback_info info); 276 EXPORT static napi_value JSGetMediaRemoteStub(napi_env env, napi_callback_info info); 277 278 EXPORT static napi_value GetUserFileMgr(napi_env env, napi_callback_info info); 279 EXPORT static napi_value GetUserFileMgrAsync(napi_env env, napi_callback_info info); 280 EXPORT static napi_value UserFileMgrCreatePhotoAsset(napi_env env, napi_callback_info info); 281 EXPORT static napi_value UserFileMgrCreateAudioAsset(napi_env env, napi_callback_info info); 282 EXPORT static napi_value UserFileMgrDeleteAsset(napi_env env, napi_callback_info info); 283 EXPORT static napi_value UserFileMgrTrashAsset(napi_env env, napi_callback_info info); 284 EXPORT static napi_value JSGetPhotoAlbums(napi_env env, napi_callback_info info); 285 EXPORT static napi_value JSGetPhotoAssets(napi_env env, napi_callback_info info); 286 EXPORT static napi_value JSGetJsonPhotoAssets(napi_env env, napi_callback_info info); 287 EXPORT static napi_value JSGetAudioAssets(napi_env env, napi_callback_info info); 288 EXPORT static napi_value UserFileMgrGetPrivateAlbum(napi_env env, napi_callback_info info); 289 EXPORT static napi_value UserFileMgrCreateFileKeyEnum(napi_env env); 290 EXPORT static napi_value UserFileMgrOnCallback(napi_env env, napi_callback_info info); 291 EXPORT static napi_value UserFileMgrOffCallback(napi_env env, napi_callback_info info); 292 EXPORT static napi_value CreateAudioKeyEnum(napi_env env); 293 EXPORT static napi_value CreateImageVideoKeyEnum(napi_env env); 294 EXPORT static napi_value CreateAlbumKeyEnum(napi_env env); 295 EXPORT static napi_value CreatePositionTypeEnum(napi_env env); 296 EXPORT static napi_value CreatePhotoSubTypeEnum(napi_env env); 297 EXPORT static napi_value CreatePhotoPermissionTypeEnum(napi_env env); 298 EXPORT static napi_value CreateHideSensitiveTypeEnum(napi_env env); 299 EXPORT static napi_value CreateDynamicRangeTypeEnum(napi_env env); 300 301 EXPORT static napi_value GetPhotoAccessHelper(napi_env env, napi_callback_info info); 302 EXPORT static napi_value StartPhotoPicker(napi_env env, napi_callback_info info); 303 EXPORT static napi_value GetPhotoAccessHelperAsync(napi_env env, napi_callback_info info); 304 EXPORT static napi_value CreateDeleteRequest(napi_env env, napi_callback_info info); 305 EXPORT static napi_value CheckShortTermPermission(napi_env env, napi_callback_info info); 306 EXPORT static napi_value CreateAssetsHasPermission(napi_env env, napi_callback_info info); 307 EXPORT static napi_value CreateAssetWithShortTermPermission(napi_env env, napi_callback_info info); 308 EXPORT static napi_value CreateAssetsForAppWithAlbum(napi_env env, napi_callback_info info); 309 EXPORT static napi_value ShowAssetsCreationDialog(napi_env env, napi_callback_info info); 310 EXPORT static napi_value RequestPhotoUrisReadPermission(napi_env env, napi_callback_info info); 311 EXPORT static napi_value PhotoAccessHelperCreatePhotoAsset(napi_env env, napi_callback_info info); 312 EXPORT static napi_value PhotoAccessHelperAgentCreateAssets(napi_env env, napi_callback_info info); 313 EXPORT static napi_value PhotoAccessHelperAgentCreateAssetsWithMode(napi_env env, napi_callback_info info); 314 EXPORT static napi_value PhotoAccessGrantPhotoUriPermission(napi_env env, napi_callback_info info); 315 EXPORT static napi_value PhotoAccessGrantPhotoUrisPermission(napi_env env, napi_callback_info info); 316 EXPORT static napi_value PhotoAccessCancelPhotoUriPermission(napi_env env, napi_callback_info info); 317 EXPORT static napi_value PhotoAccessHelperTrashAsset(napi_env env, napi_callback_info info); 318 EXPORT static napi_value PhotoAccessHelperOnCallback(napi_env env, napi_callback_info info); 319 EXPORT static napi_value PhotoAccessHelperOffCallback(napi_env env, napi_callback_info info); 320 EXPORT static napi_value PhotoAccessGetPhotoAssets(napi_env env, napi_callback_info info); 321 EXPORT static napi_value PhotoAccessGetPhotoAssetsSync(napi_env env, napi_callback_info info); 322 EXPORT static napi_value PhotoAccessCreatePhotoAlbum(napi_env env, napi_callback_info info); 323 EXPORT static napi_value PhotoAccessDeletePhotoAlbums(napi_env env, napi_callback_info info); 324 EXPORT static napi_value PhotoAccessGetPhotoAlbums(napi_env env, napi_callback_info info); 325 EXPORT static napi_value PhotoAccessGetPhotoAlbumsSync(napi_env env, napi_callback_info info); 326 EXPORT static napi_value PhotoAccessSaveFormInfo(napi_env env, napi_callback_info info); 327 EXPORT static napi_value PhotoAccessSaveGalleryFormInfo(napi_env env, napi_callback_info info); 328 EXPORT static napi_value PhotoAccessRemoveFormInfo(napi_env env, napi_callback_info info); 329 EXPORT static napi_value PhotoAccessRemoveGalleryFormInfo(napi_env env, napi_callback_info info); 330 EXPORT static napi_value PhotoAccessUpdateGalleryFormInfo(napi_env env, napi_callback_info info); 331 EXPORT static napi_value PhotoAccessGetFileAssetsInfo(napi_env env, napi_callback_info info); 332 EXPORT static napi_value PhotoAccessStartCreateThumbnailTask(napi_env env, napi_callback_info info); 333 EXPORT static napi_value PhotoAccessStopCreateThumbnailTask(napi_env env, napi_callback_info info); 334 EXPORT static napi_value PhotoAccessGetBurstAssets(napi_env env, napi_callback_info info); 335 EXPORT static napi_value PhotoAccessHelperGetDataAnalysisProgress(napi_env env, napi_callback_info info); 336 EXPORT static napi_value PhotoAccessHelperGetAnalysisData(napi_env env, napi_callback_info info); 337 EXPORT static napi_value PhotoAccessGetSharedPhotoAssets(napi_env env, napi_callback_info info); 338 EXPORT static napi_value PhotoAccessHelperSetForceHideSensitiveType(napi_env env, napi_callback_info info); 339 EXPORT static napi_value PhotoAccessStartAssetAnalysis(napi_env env, napi_callback_info info); 340 341 EXPORT static napi_value SetHidden(napi_env env, napi_callback_info info); 342 EXPORT static napi_value PahGetHiddenAlbums(napi_env env, napi_callback_info info); 343 344 EXPORT static napi_value CreateAlbumTypeEnum(napi_env env); 345 EXPORT static napi_value CreateAlbumSubTypeEnum(napi_env env); 346 EXPORT static napi_value CreateNotifyTypeEnum(napi_env env); 347 EXPORT static napi_value CreateDefaultChangeUriEnum(napi_env env); 348 EXPORT static napi_value CreateAnalysisTypeEnum(napi_env env); 349 EXPORT static napi_value CreateRequestPhotoTypeEnum(napi_env env); 350 EXPORT static napi_value CreateResourceTypeEnum(napi_env env); 351 EXPORT static napi_value CreateAuthorizationModeEnum(napi_env env); 352 EXPORT static napi_value CreateHighlightAlbumInfoTypeEnum(napi_env env); 353 EXPORT static napi_value CreateHighlightUserActionTypeEnum(napi_env env); 354 EXPORT static napi_value CreateMovingPhotoEffectModeEnum(napi_env env); 355 EXPORT static napi_value CreateImageFileTypeEnum(napi_env env); 356 EXPORT static napi_value CreateCloudEnhancementTaskStageEnum(napi_env env); 357 EXPORT static napi_value CreateCloudEnhancementStateEnum(napi_env env); 358 EXPORT static napi_value CreateSupportedWatermarkTypeEnum(napi_env env); 359 EXPORT static napi_value CreateVideoEnhancementTypeEnum(napi_env env); 360 EXPORT static napi_value CreateCloudMediaDownloadTypeEnum(napi_env env); 361 EXPORT static napi_value CreateCloudMediaRetainTypeEnum(napi_env env); 362 EXPORT static napi_value CreateCloudMediaAssetTaskStatusEnum(napi_env env); 363 EXPORT static napi_value CreateCloudMediaTaskPauseCauseEnum(napi_env env); 364 365 EXPORT static napi_value CreatePhotoAlbum(napi_env env, napi_callback_info info); 366 EXPORT static napi_value DeletePhotoAlbums(napi_env env, napi_callback_info info); 367 EXPORT static napi_value GetPhotoAlbums(napi_env env, napi_callback_info info); 368 EXPORT static napi_value JSGetPhotoIndex(napi_env env, napi_callback_info info); 369 EXPORT static napi_value PhotoAccessGetPhotoIndex(napi_env env, napi_callback_info info); 370 EXPORT static napi_value PhotoAccessGetIndexConstructProgress(napi_env env, napi_callback_info info); 371 EXPORT static napi_value PhotoAccessGetSupportedPhotoFormats(napi_env env, napi_callback_info info); 372 373 EXPORT static napi_value JSApplyChanges(napi_env env, napi_callback_info info); 374 375 int32_t GetListenerType(const std::string &str) const; 376 void RegisterChange(napi_env env, const std::string &type, ChangeListenerNapi &listObj); 377 void UnregisterChange(napi_env env, const std::string &type, ChangeListenerNapi &listObj); 378 void RegisterNotifyChange(napi_env env, 379 const std::string &uri, bool isDerived, napi_ref ref, ChangeListenerNapi &listObj); 380 void UnRegisterNotifyChange(napi_env env, const std::string &uri, napi_ref ref, ChangeListenerNapi &listObj); 381 static bool CheckRef(napi_env env, 382 napi_ref ref, ChangeListenerNapi &listObj, bool isOff, const std::string &uri); 383 napi_env env_; 384 int32_t userId_ = -1; 385 386 static thread_local napi_ref sConstructor_; 387 static thread_local napi_ref userFileMgrConstructor_; 388 static thread_local napi_ref photoAccessHelperConstructor_; 389 static thread_local napi_ref sMediaTypeEnumRef_; 390 static thread_local napi_ref sKeyFrameThumbnailTypeRef_; 391 static thread_local napi_ref sDirectoryEnumRef_; 392 static thread_local napi_ref sVirtualAlbumTypeEnumRef_; 393 static thread_local napi_ref sFileKeyEnumRef_; 394 static thread_local napi_ref sPrivateAlbumEnumRef_; 395 396 static thread_local napi_ref sUserFileMgrFileKeyEnumRef_; 397 static thread_local napi_ref sAudioKeyEnumRef_; 398 static thread_local napi_ref sImageVideoKeyEnumRef_; 399 static thread_local napi_ref sPhotoKeysEnumRef_; 400 static thread_local napi_ref sAlbumKeyEnumRef_; 401 static thread_local napi_ref sAlbumType_; 402 static thread_local napi_ref sAlbumSubType_; 403 static thread_local napi_ref sPositionTypeEnumRef_; 404 static thread_local napi_ref sHiddenPhotosDisplayModeEnumRef_; 405 static thread_local napi_ref sPhotoSubType_; 406 static thread_local napi_ref sPhotoPermissionType_; 407 static thread_local napi_ref sHideSensitiveType_; 408 static thread_local napi_ref sDynamicRangeType_; 409 static thread_local napi_ref sNotifyType_; 410 static thread_local napi_ref sDefaultChangeUriRef_; 411 static thread_local napi_ref sAnalysisType_; 412 static thread_local napi_ref sRequestPhotoTypeEnumRef_; 413 static thread_local napi_ref sResourceTypeEnumRef_; 414 static thread_local napi_ref sDeliveryModeEnumRef_; 415 static thread_local napi_ref sSourceModeEnumRef_; 416 static thread_local napi_ref sCompatibleModeEnumRef_; 417 static thread_local napi_ref sHighlightAlbumInfoType_; 418 static thread_local napi_ref sHighlightUserActionType_; 419 static thread_local napi_ref sMovingPhotoEffectModeEnumRef_; 420 static thread_local napi_ref sImageFileTypeEnumEnumRef_; 421 static thread_local napi_ref sCloudEnhancementTaskStageEnumRef_; 422 static thread_local napi_ref sCloudEnhancementStateEnumRef_; 423 static thread_local napi_ref sAuthorizationModeEnumRef_; 424 static thread_local napi_ref sSupportedWatermarkTypeEnumRef_; 425 static thread_local napi_ref sVideoEnhancementTypeEnumRef_; 426 static thread_local napi_ref sCloudMediaDownloadTypeEnumRef_; 427 static thread_local napi_ref sCloudMediaRetainTypeEnumRef_; 428 static thread_local napi_ref sCloudMediaAssetTaskStatusEnumRef_; 429 static thread_local napi_ref sCloudMediaTaskPauseCauseEnumRef_; 430 431 static std::mutex sOnOffMutex_; 432 }; 433 434 struct PickerCallBack { 435 bool ready = false; 436 bool isOrigin; 437 int32_t resultCode; 438 vector<string> uris; 439 }; 440 441 constexpr int32_t DEFAULT_PRIVATEALBUMTYPE = 3; 442 struct MediaLibraryAsyncContext : public NapiError { 443 napi_async_work work; 444 napi_deferred deferred; 445 napi_ref callbackRef; 446 bool status; 447 bool isDelete; 448 bool isCreateByComponent; 449 bool isCreateByAgent; 450 bool needSystemApp = false; 451 NapiAssetType assetType; 452 AlbumType albumType; 453 MediaLibraryNapi *objectInfo; 454 std::string selection; 455 std::vector<std::string> selectionArgs; 456 std::string order; 457 std::string uri; 458 std::vector<std::string> uriArray; 459 std::string networkId; 460 std::string extendArgs; 461 std::string analysisProgress; 462 int32_t analysisType = AnalysisType::ANALYSIS_INVALID; 463 std::unique_ptr<FetchResult<FileAsset>> fetchFileResult; 464 std::unique_ptr<FetchResult<AlbumAsset>> fetchAlbumResult; 465 std::unique_ptr<FetchResult<PhotoAlbum>> fetchPhotoAlbumResult; 466 std::unique_ptr<FetchResult<SmartAlbumAsset>> fetchSmartAlbumResult; 467 std::unique_ptr<FileAsset> fileAsset; 468 std::unique_ptr<PhotoAlbum> photoAlbumData; 469 std::unique_ptr<SmartAlbumAsset> smartAlbumData; 470 OHOS::DataShare::DataShareValuesBucket valuesBucket; 471 std::vector<OHOS::DataShare::DataShareValuesBucket> valuesBucketArray; 472 unsigned int dirType = 0; 473 int32_t privateAlbumType = DEFAULT_PRIVATEALBUMTYPE; 474 int32_t retVal; 475 std::string directoryRelativePath; 476 std::vector<std::unique_ptr<AlbumAsset>> albumNativeArray; 477 std::vector<std::unique_ptr<SmartAlbumAsset>> smartAlbumNativeArray; 478 std::vector<std::unique_ptr<SmartAlbumAsset>> privateSmartAlbumNativeArray; 479 Ability *ability_; 480 std::string storeMediaSrc; 481 int32_t imagePreviewIndex; 482 int32_t parentSmartAlbumId = 0; 483 int32_t smartAlbumId = -1; 484 int32_t isLocationAlbum = 0; 485 int32_t isHighlightAlbum = 0; 486 size_t argc; 487 napi_value argv[NAPI_ARGC_MAX]; 488 ResultNapiType resultNapiType; 489 std::string tableName; 490 std::vector<uint32_t> mediaTypes; 491 std::vector<string> mediaTypeNames; 492 int32_t photoType; 493 OHOS::DataShare::DataSharePredicates predicates; 494 std::vector<std::string> fetchColumn; 495 std::vector<std::string> uris; 496 bool isForce = false; 497 bool hiddenOnly = false; 498 bool isAnalysisAlbum = false; 499 int32_t hiddenAlbumFetchMode = -1; 500 std::string formId; 501 std::string indexProgress; 502 std::shared_ptr<PickerCallBack> pickerCallBack; 503 std::vector<std::string> analysisDatas; 504 uint32_t tokenId; 505 std::vector<std::string> albumIds; 506 std::unordered_map<int32_t, unique_ptr<PhotoAlbum>> albumMap; 507 bool isContainsAlbumUri = false; 508 int32_t taskId = -1; 509 bool isFullAnalysis = false; 510 }; 511 512 struct MediaLibraryInitContext : public NapiError { 513 napi_async_work work; 514 napi_deferred deferred; 515 napi_ref callbackRef; 516 size_t argc; 517 napi_value argv[NAPI_ARGC_MAX]; 518 napi_ref resultRef_; 519 sptr<IRemoteObject> token_; 520 }; 521 } // namespace Media 522 } // namespace OHOS 523 524 #endif // INTERFACES_KITS_JS_MEDIALIBRARY_INCLUDE_MEDIA_LIBRARY_NAPI_H_ 525