1 /* 2 * Copyright (C) 2023 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_PHOTO_ALBUM_NAPI_H_ 17 #define INTERFACES_KITS_JS_MEDIALIBRARY_INCLUDE_PHOTO_ALBUM_NAPI_H_ 18 19 #include "photo_album.h" 20 21 #include "datashare_values_bucket.h" 22 #include "fetch_result.h" 23 #include "file_asset.h" 24 #include "napi_error.h" 25 26 namespace OHOS { 27 namespace Media { 28 class PhotoAlbumNapi { 29 public: 30 PhotoAlbumNapi(); 31 ~PhotoAlbumNapi(); 32 33 static napi_value Init(napi_env env, napi_value exports); 34 static napi_value PhotoAccessInit(napi_env env, napi_value exports); 35 static napi_value CreatePhotoAlbumNapi(napi_env env, std::unique_ptr<PhotoAlbum> &albumData); 36 37 int32_t GetAlbumId() const; 38 int32_t GetCount() const; 39 void SetCount(int32_t count); 40 const std::string& GetAlbumUri() const; 41 const std::string& GetCoverUri() const; 42 int64_t GetDateModified() const; 43 const std::string& GetAlbumName() const; 44 PhotoAlbumType GetPhotoAlbumType() const; 45 PhotoAlbumSubType GetPhotoAlbumSubType() const; 46 std::shared_ptr<PhotoAlbum> GetPhotoAlbumInstance() const; 47 48 private: 49 void SetPhotoAlbumNapiProperties(); 50 static napi_value PhotoAlbumNapiConstructor(napi_env env, napi_callback_info info); 51 static void PhotoAlbumNapiDestructor(napi_env env, void *nativeObject, void *finalizeHint); 52 53 static napi_value JSGetAlbumName(napi_env env, napi_callback_info info); 54 static napi_value JSGetAlbumUri(napi_env env, napi_callback_info info); 55 static napi_value JSGetAlbumCount(napi_env env, napi_callback_info info); 56 static napi_value JSGetPhotoAlbumType(napi_env env, napi_callback_info info); 57 static napi_value JSGetPhotoAlbumSubType(napi_env env, napi_callback_info info); 58 static napi_value JSGetCoverUri(napi_env env, napi_callback_info info); 59 static napi_value JSGetDateModified(napi_env env, napi_callback_info info); 60 61 static napi_value JSSetAlbumName(napi_env env, napi_callback_info info); 62 static napi_value JSSetCoverUri(napi_env env, napi_callback_info info); 63 static napi_value PhotoAccessHelperSetCoverUri(napi_env env, napi_callback_info info); 64 65 static napi_value JSCommitModify(napi_env env, napi_callback_info info); 66 static napi_value JSPhotoAlbumAddAssets(napi_env env, napi_callback_info info); 67 static napi_value JSPhotoAlbumRemoveAssets(napi_env env, napi_callback_info info); 68 static napi_value JSGetPhotoAssets(napi_env env, napi_callback_info info); 69 static napi_value JSRecoverPhotos(napi_env env, napi_callback_info info); 70 static napi_value JSDeletePhotos(napi_env env, napi_callback_info info); 71 static napi_value PrivateAlbumRecoverPhotos(napi_env env, napi_callback_info info); 72 static napi_value PrivateAlbumDeletePhotos(napi_env env, napi_callback_info info); 73 74 static napi_value JSPhotoAccessGetAlbumName(napi_env env, napi_callback_info info); 75 static napi_value JSPhotoAccessSetAlbumName(napi_env env, napi_callback_info info); 76 static napi_value JSPhotoAccessGetAlbumUri(napi_env env, napi_callback_info info); 77 static napi_value JSPhotoAccessGetAlbumCount(napi_env env, napi_callback_info info); 78 static napi_value JSPhoteAccessGetPhotoAssets(napi_env env, napi_callback_info info); 79 80 static napi_value PhotoAccessHelperCommitModify(napi_env env, napi_callback_info info); 81 static napi_value PhotoAccessHelperAddAssets(napi_env env, napi_callback_info info); 82 static napi_value PhotoAccessHelperRemoveAssets(napi_env env, napi_callback_info info); 83 static napi_value PhotoAccessHelperRecoverPhotos(napi_env env, napi_callback_info info); 84 static napi_value PhotoAccessHelperDeletePhotos(napi_env env, napi_callback_info info); 85 86 napi_env env_; 87 std::shared_ptr<PhotoAlbum> photoAlbumPtr; 88 static thread_local PhotoAlbum *pAlbumData_; 89 static thread_local napi_ref constructor_; 90 static thread_local napi_ref photoAccessConstructor_; 91 }; 92 93 struct PhotoAlbumNapiAsyncContext : public NapiError { 94 int32_t changedRows; 95 std::vector<std::string> fetchColumn; 96 DataShare::DataSharePredicates predicates; 97 DataShare::DataShareValuesBucket valuesBucket; 98 std::vector<DataShare::DataShareValuesBucket> valuesBuckets; 99 std::string networkId; 100 std::unique_ptr<FetchResult<FileAsset>> fetchResult; 101 ResultNapiType resultNapiType; 102 103 size_t argc; 104 napi_value argv[NAPI_ARGC_MAX]; 105 napi_async_work work; 106 napi_deferred deferred; 107 napi_ref callbackRef; 108 109 PhotoAlbumNapi *objectInfo; 110 }; 111 } // namespace Media 112 } // namespace OHOS 113 114 #endif // INTERFACES_KITS_JS_MEDIALIBRARY_INCLUDE_PHOTO_ALBUM_NAPI_H_ 115