1 /* 2 * Copyright (C) 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_PHOTO_ALBUM_SENDABLE_NAPI_H_ 17 #define INTERFACES_KITS_JS_MEDIALIBRARY_INCLUDE_PHOTO_ALBUM_SENDABLE_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 SendablePhotoAlbumNapi { 30 public: 31 EXPORT SendablePhotoAlbumNapi(); 32 EXPORT ~SendablePhotoAlbumNapi(); 33 34 EXPORT static napi_value PhotoAccessInit(napi_env env, napi_value exports); 35 EXPORT static napi_value CreatePhotoAlbumNapi(napi_env env, std::unique_ptr<PhotoAlbum> &albumData); 36 EXPORT static napi_value CreatePhotoAlbumNapi(napi_env env, std::shared_ptr<PhotoAlbum> &albumData); 37 38 int32_t GetAlbumId() const; 39 int32_t GetCount() const; 40 int32_t GetImageCount() const; 41 int32_t GetVideoCount() const; 42 void SetCount(int32_t count); 43 void SetImageCount(int32_t count); 44 void SetVideoCount(int32_t count); 45 const std::string& GetAlbumUri() const; 46 const std::string& GetCoverUri() const; 47 int64_t GetDateModified() const; 48 double GetLatitude() const; 49 double GetLongitude() const; 50 const std::string& GetAlbumName() const; 51 PhotoAlbumType GetPhotoAlbumType() const; 52 PhotoAlbumSubType GetPhotoAlbumSubType() const; 53 std::shared_ptr<PhotoAlbum> GetPhotoAlbumInstance() const; 54 55 void SetHiddenOnly(const bool hiddenOnly); 56 bool GetHiddenOnly() const; 57 58 private: 59 EXPORT void SetPhotoAlbumNapiProperties(); 60 EXPORT static napi_value PhotoAlbumNapiConstructor(napi_env env, napi_callback_info info); 61 EXPORT static void PhotoAlbumNapiDestructor(napi_env env, void *nativeObject, void *finalizeHint); 62 63 EXPORT static napi_value JSGetPhotoAlbumType(napi_env env, napi_callback_info info); 64 EXPORT static napi_value JSGetPhotoAlbumSubType(napi_env env, napi_callback_info info); 65 EXPORT static napi_value JSGetCoverUri(napi_env env, napi_callback_info info); 66 EXPORT static napi_value JSGetDateModified(napi_env env, napi_callback_info info); 67 68 EXPORT static napi_value JSSetAlbumName(napi_env env, napi_callback_info info); 69 70 EXPORT static napi_value JSCommitModify(napi_env env, napi_callback_info info); 71 72 EXPORT static napi_value JSPhotoAccessGetAlbumName(napi_env env, napi_callback_info info); 73 EXPORT static napi_value JSPhotoAccessSetAlbumName(napi_env env, napi_callback_info info); 74 EXPORT static napi_value JSPhotoAccessGetAlbumUri(napi_env env, napi_callback_info info); 75 EXPORT static napi_value JSPhotoAccessGetAlbumCount(napi_env env, napi_callback_info info); 76 EXPORT static napi_value JSPhotoAccessGetAlbumImageCount(napi_env env, napi_callback_info info); 77 EXPORT static napi_value JSPhotoAccessGetAlbumVideoCount(napi_env env, napi_callback_info info); 78 EXPORT static napi_value JSPhotoAccessGetPhotoAssets(napi_env env, napi_callback_info info); 79 EXPORT static napi_value JSPhotoAccessGetPhotoAssetsSync(napi_env env, napi_callback_info info); 80 EXPORT static napi_value JSPhotoAccessGetSharedPhotoAssets(napi_env env, napi_callback_info info); 81 82 EXPORT static napi_value PhotoAccessHelperCommitModify(napi_env env, napi_callback_info info); 83 EXPORT static napi_value ConvertToPhotoAlbum(napi_env env, napi_callback_info info); 84 EXPORT static napi_value PhotoAccessHelperGetFaceId(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 photoAccessConstructor_; 90 }; 91 92 struct SendablePhotoAlbumNapiAsyncContext : public NapiError { 93 int32_t changedRows; 94 int32_t newCount; 95 int32_t newImageCount; 96 int32_t newVideoCount; 97 std::vector<std::string> fetchColumn; 98 DataShare::DataSharePredicates predicates; 99 DataShare::DataShareValuesBucket valuesBucket; 100 std::vector<DataShare::DataShareValuesBucket> valuesBuckets; 101 std::string networkId; 102 std::string uri; 103 std::string faceTag; 104 std::unique_ptr<FetchResult<FileAsset>> fetchResult; 105 ResultNapiType resultNapiType; 106 107 size_t argc; 108 napi_value argv[NAPI_ARGC_MAX]; 109 napi_async_work work; 110 napi_deferred deferred; 111 napi_ref callbackRef; 112 113 SendablePhotoAlbumNapi *objectInfo; 114 }; 115 } // namespace Media 116 } // namespace OHOS 117 118 #endif // INTERFACES_KITS_JS_MEDIALIBRARY_INCLUDE_PHOTO_ALBUM_SENDABLE_NAPI_H_ 119