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 #define EXPORT __attribute__ ((visibility ("default"))) 29 class PhotoAlbumNapi { 30 public: 31 EXPORT PhotoAlbumNapi(); 32 EXPORT ~PhotoAlbumNapi(); 33 34 EXPORT static napi_value Init(napi_env env, napi_value exports); 35 EXPORT static napi_value PhotoAccessInit(napi_env env, napi_value exports); 36 EXPORT static napi_value CreatePhotoAlbumNapi(napi_env env, std::unique_ptr<PhotoAlbum> &albumData); 37 EXPORT static napi_value CreatePhotoAlbumNapi(napi_env env, std::shared_ptr<PhotoAlbum> &albumData); 38 39 int32_t GetAlbumId() const; 40 int32_t GetCount() const; 41 int32_t GetImageCount() const; 42 int32_t GetVideoCount() const; 43 void SetCount(int32_t count); 44 void SetImageCount(int32_t count); 45 void SetVideoCount(int32_t count); 46 const std::string& GetAlbumUri() const; 47 const std::string& GetCoverUri() const; 48 int64_t GetDateModified() const; 49 double GetLatitude() const; 50 double GetLongitude() const; 51 const std::string& GetAlbumName() const; 52 PhotoAlbumType GetPhotoAlbumType() const; 53 PhotoAlbumSubType GetPhotoAlbumSubType() const; 54 std::shared_ptr<PhotoAlbum> GetPhotoAlbumInstance() const; 55 56 void SetHiddenOnly(const bool hiddenOnly); 57 bool GetHiddenOnly() const; 58 59 private: 60 EXPORT void SetPhotoAlbumNapiProperties(); 61 EXPORT static napi_value PhotoAlbumNapiConstructor(napi_env env, napi_callback_info info); 62 EXPORT static void PhotoAlbumNapiDestructor(napi_env env, void *nativeObject, void *finalizeHint); 63 64 EXPORT static napi_value JSGetAlbumName(napi_env env, napi_callback_info info); 65 EXPORT static napi_value JSGetAlbumUri(napi_env env, napi_callback_info info); 66 EXPORT static napi_value JSGetAlbumCount(napi_env env, napi_callback_info info); 67 EXPORT static napi_value JSGetPhotoAlbumType(napi_env env, napi_callback_info info); 68 EXPORT static napi_value JSGetPhotoAlbumSubType(napi_env env, napi_callback_info info); 69 EXPORT static napi_value JSGetCoverUri(napi_env env, napi_callback_info info); 70 EXPORT static napi_value JSGetDateModified(napi_env env, napi_callback_info info); 71 EXPORT static napi_value JSGetLatitude(napi_env env, napi_callback_info info); 72 EXPORT static napi_value JSGetLongitude(napi_env env, napi_callback_info info); 73 74 EXPORT static napi_value JSSetAlbumName(napi_env env, napi_callback_info info); 75 EXPORT static napi_value JSSetCoverUri(napi_env env, napi_callback_info info); 76 EXPORT static napi_value PhotoAccessHelperSetCoverUri(napi_env env, napi_callback_info info); 77 78 EXPORT static napi_value JSCommitModify(napi_env env, napi_callback_info info); 79 EXPORT static napi_value JSPhotoAlbumAddAssets(napi_env env, napi_callback_info info); 80 EXPORT static napi_value JSPhotoAlbumRemoveAssets(napi_env env, napi_callback_info info); 81 EXPORT static napi_value JSGetPhotoAssets(napi_env env, napi_callback_info info); 82 EXPORT static napi_value JSRecoverPhotos(napi_env env, napi_callback_info info); 83 EXPORT static napi_value JSDeletePhotos(napi_env env, napi_callback_info info); 84 EXPORT static napi_value PrivateAlbumRecoverPhotos(napi_env env, napi_callback_info info); 85 EXPORT static napi_value PrivateAlbumDeletePhotos(napi_env env, napi_callback_info info); 86 87 EXPORT static napi_value JSPhotoAccessGetAlbumName(napi_env env, napi_callback_info info); 88 EXPORT static napi_value JSPhotoAccessSetAlbumName(napi_env env, napi_callback_info info); 89 EXPORT static napi_value JSPhotoAccessGetAlbumUri(napi_env env, napi_callback_info info); 90 EXPORT static napi_value JSPhotoAccessGetAlbumCount(napi_env env, napi_callback_info info); 91 EXPORT static napi_value JSPhotoAccessGetAlbumImageCount(napi_env env, napi_callback_info info); 92 EXPORT static napi_value JSPhotoAccessGetAlbumVideoCount(napi_env env, napi_callback_info info); 93 EXPORT static napi_value JSPhotoAccessGetPhotoAssets(napi_env env, napi_callback_info info); 94 EXPORT static napi_value JSPhotoAccessGetPhotoAssetsSync(napi_env env, napi_callback_info info); 95 EXPORT static napi_value JSPhotoAccessGetSharedPhotoAssets(napi_env env, napi_callback_info info); 96 97 EXPORT static napi_value PhotoAccessHelperCommitModify(napi_env env, napi_callback_info info); 98 EXPORT static napi_value PhotoAccessHelperAddAssets(napi_env env, napi_callback_info info); 99 EXPORT static napi_value PhotoAccessHelperRemoveAssets(napi_env env, napi_callback_info info); 100 EXPORT static napi_value PhotoAccessHelperRecoverPhotos(napi_env env, napi_callback_info info); 101 EXPORT static napi_value PhotoAccessHelperDeletePhotos(napi_env env, napi_callback_info info); 102 EXPORT static napi_value PhotoAccessHelperGetFaceId(napi_env env, napi_callback_info info); 103 104 napi_env env_; 105 std::shared_ptr<PhotoAlbum> photoAlbumPtr; 106 static thread_local PhotoAlbum *pAlbumData_; 107 static thread_local napi_ref constructor_; 108 static thread_local napi_ref photoAccessConstructor_; 109 }; 110 111 struct PhotoAlbumNapiAsyncContext : public NapiError { 112 int32_t changedRows; 113 int32_t newCount; 114 int32_t newImageCount; 115 int32_t newVideoCount; 116 std::vector<std::string> fetchColumn; 117 DataShare::DataSharePredicates predicates; 118 DataShare::DataShareValuesBucket valuesBucket; 119 std::vector<DataShare::DataShareValuesBucket> valuesBuckets; 120 std::string networkId; 121 std::string uri; 122 std::string faceTag; 123 std::unique_ptr<FetchResult<FileAsset>> fetchResult; 124 ResultNapiType resultNapiType; 125 126 size_t argc; 127 napi_value argv[NAPI_ARGC_MAX]; 128 napi_async_work work; 129 napi_deferred deferred; 130 napi_ref callbackRef; 131 132 PhotoAlbumNapi *objectInfo; 133 }; 134 } // namespace Media 135 } // namespace OHOS 136 137 #endif // INTERFACES_KITS_JS_MEDIALIBRARY_INCLUDE_PHOTO_ALBUM_NAPI_H_ 138