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 int64_t GetDateAdded() const; 50 int32_t GetCoverUriSource() const; 51 double GetLatitude() const; 52 double GetLongitude() const; 53 const std::string& GetAlbumName() const; 54 const std::string& GetLPath() const; 55 PhotoAlbumType GetPhotoAlbumType() const; 56 PhotoAlbumSubType GetPhotoAlbumSubType() const; 57 std::shared_ptr<PhotoAlbum> GetPhotoAlbumInstance() const; 58 59 void SetHiddenOnly(const bool hiddenOnly); 60 bool GetHiddenOnly() const; 61 62 private: 63 EXPORT void SetPhotoAlbumNapiProperties(); 64 EXPORT static napi_value PhotoAlbumNapiConstructor(napi_env env, napi_callback_info info); 65 EXPORT static void PhotoAlbumNapiDestructor(napi_env env, void *nativeObject, void *finalizeHint); 66 67 EXPORT static napi_value JSGetAlbumName(napi_env env, napi_callback_info info); 68 EXPORT static napi_value JSGetAlbumUri(napi_env env, napi_callback_info info); 69 EXPORT static napi_value JSGetAlbumCount(napi_env env, napi_callback_info info); 70 EXPORT static napi_value JSGetPhotoAlbumType(napi_env env, napi_callback_info info); 71 EXPORT static napi_value JSGetPhotoAlbumSubType(napi_env env, napi_callback_info info); 72 EXPORT static napi_value JSGetCoverUri(napi_env env, napi_callback_info info); 73 EXPORT static napi_value JSGetDateModified(napi_env env, napi_callback_info info); 74 EXPORT static napi_value JSGetDateModifiedSystem(napi_env env, napi_callback_info info); 75 EXPORT static napi_value JSGetDateAdded(napi_env env, napi_callback_info info); 76 EXPORT static napi_value JSGetCoverUriSource(napi_env env, napi_callback_info info); 77 EXPORT static napi_value JSGetLatitude(napi_env env, napi_callback_info info); 78 EXPORT static napi_value JSGetLongitude(napi_env env, napi_callback_info info); 79 EXPORT static napi_value JSGetAlbumLPath(napi_env env, napi_callback_info info); 80 81 EXPORT static napi_value JSSetAlbumName(napi_env env, napi_callback_info info); 82 EXPORT static napi_value JSSetCoverUri(napi_env env, napi_callback_info info); 83 EXPORT static napi_value PhotoAccessHelperSetCoverUri(napi_env env, napi_callback_info info); 84 85 EXPORT static napi_value JSCommitModify(napi_env env, napi_callback_info info); 86 EXPORT static napi_value JSPhotoAlbumAddAssets(napi_env env, napi_callback_info info); 87 EXPORT static napi_value JSPhotoAlbumRemoveAssets(napi_env env, napi_callback_info info); 88 EXPORT static napi_value JSGetPhotoAssets(napi_env env, napi_callback_info info); 89 EXPORT static napi_value JSRecoverPhotos(napi_env env, napi_callback_info info); 90 EXPORT static napi_value JSDeletePhotos(napi_env env, napi_callback_info info); 91 EXPORT static napi_value PrivateAlbumRecoverPhotos(napi_env env, napi_callback_info info); 92 EXPORT static napi_value PrivateAlbumDeletePhotos(napi_env env, napi_callback_info info); 93 94 EXPORT static napi_value JSPhotoAccessGetAlbumName(napi_env env, napi_callback_info info); 95 EXPORT static napi_value JSPhotoAccessSetAlbumName(napi_env env, napi_callback_info info); 96 EXPORT static napi_value JSPhotoAccessGetAlbumUri(napi_env env, napi_callback_info info); 97 EXPORT static napi_value JSPhotoAccessGetAlbumCount(napi_env env, napi_callback_info info); 98 EXPORT static napi_value JSPhotoAccessGetAlbumImageCount(napi_env env, napi_callback_info info); 99 EXPORT static napi_value JSPhotoAccessGetAlbumVideoCount(napi_env env, napi_callback_info info); 100 EXPORT static napi_value JSPhotoAccessGetPhotoAssets(napi_env env, napi_callback_info info); 101 EXPORT static napi_value JSPhotoAccessGetPhotoAssetsSync(napi_env env, napi_callback_info info); 102 EXPORT static napi_value JSPhotoAccessGetSharedPhotoAssets(napi_env env, napi_callback_info info); 103 104 EXPORT static napi_value PhotoAccessHelperCommitModify(napi_env env, napi_callback_info info); 105 EXPORT static napi_value PhotoAccessHelperAddAssets(napi_env env, napi_callback_info info); 106 EXPORT static napi_value PhotoAccessHelperRemoveAssets(napi_env env, napi_callback_info info); 107 EXPORT static napi_value PhotoAccessHelperRecoverPhotos(napi_env env, napi_callback_info info); 108 EXPORT static napi_value PhotoAccessHelperDeletePhotos(napi_env env, napi_callback_info info); 109 EXPORT static napi_value PhotoAccessHelperGetFaceId(napi_env env, napi_callback_info info); 110 111 napi_env env_; 112 std::shared_ptr<PhotoAlbum> photoAlbumPtr; 113 static thread_local PhotoAlbum *pAlbumData_; 114 static thread_local napi_ref constructor_; 115 static thread_local napi_ref photoAccessConstructor_; 116 static std::mutex mutex_; 117 }; 118 119 struct PhotoAlbumNapiAsyncContext : public NapiError { 120 int32_t changedRows; 121 int32_t newCount; 122 int32_t newImageCount; 123 int32_t newVideoCount; 124 int32_t businessCode; 125 bool isSystemApi{false}; 126 std::vector<std::string> fetchColumn; 127 std::vector<std::string> uris; 128 std::vector<std::string> assetsArray; 129 DataShare::DataSharePredicates predicates; 130 DataShare::DataShareValuesBucket valuesBucket; 131 std::vector<DataShare::DataShareValuesBucket> valuesBuckets; 132 std::string networkId; 133 std::string uri; 134 std::string faceTag; 135 std::unique_ptr<FetchResult<FileAsset>> fetchResult; 136 ResultNapiType resultNapiType; 137 138 size_t argc; 139 napi_value argv[NAPI_ARGC_MAX]; 140 napi_async_work work; 141 napi_deferred deferred; 142 napi_ref callbackRef; 143 144 PhotoAlbumNapi *objectInfo; 145 }; 146 } // namespace Media 147 } // namespace OHOS 148 149 #endif // INTERFACES_KITS_JS_MEDIALIBRARY_INCLUDE_PHOTO_ALBUM_NAPI_H_ 150