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