1 /* 2 * Copyright (C) 2021-2022 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_FILE_ASSET_NAPI_H_ 17 #define INTERFACES_KITS_JS_MEDIALIBRARY_INCLUDE_FILE_ASSET_NAPI_H_ 18 19 #include <mutex> 20 21 #include "file_asset.h" 22 #include "medialibrary_type_const.h" 23 #include "media_thumbnail_helper.h" 24 #include "napi/native_api.h" 25 #include "napi/native_node_api.h" 26 #include "napi_error.h" 27 #include "pixel_map_napi.h" 28 #include "values_bucket.h" 29 #include "napi_remote_object.h" 30 #include "datashare_predicates.h" 31 #include "datashare_abs_result_set.h" 32 #include "datashare_helper.h" 33 34 namespace OHOS { 35 namespace Media { 36 static const std::string FILE_ASSET_NAPI_CLASS_NAME = "FileAsset"; 37 static const std::string USERFILEMGR_FILEASSET_NAPI_CLASS_NAME = "UserFileMgrFileAsset"; 38 39 class FileAssetNapi { 40 public: 41 FileAssetNapi(); 42 ~FileAssetNapi(); 43 44 static napi_value Init(napi_env env, napi_value exports); 45 static napi_value UserFileMgrInit(napi_env env, napi_value exports); 46 static napi_value CreateFileAsset(napi_env env, std::unique_ptr<FileAsset> &iAsset); 47 static napi_value UserFileMgrCreateAsset(napi_env env, FileAsset &iAsset); 48 49 std::string GetFileDisplayName() const; 50 std::string GetRelativePath() const; 51 std::string GetFilePath() const; 52 std::string GetTitle() const; 53 std::string GetFileUri() const; 54 int32_t GetFileId() const; 55 int32_t GetOrientation() const; 56 MediaType GetMediaType() const; 57 std::string GetNetworkId() const; 58 std::string GetTypeMask() const; 59 void SetTypeMask(const std::string &typeMask); 60 bool IsFavorite() const; 61 void SetFavorite(bool isFavorite); 62 bool IsTrash() const; 63 void SetTrash(bool isTrash); 64 static std::unique_ptr<PixelMap> NativeGetThumbnail(const std::string &uri, 65 const std::shared_ptr<AbilityRuntime::Context> &context); 66 private: 67 static void FileAssetNapiDestructor(napi_env env, void* nativeObject, void* finalize_hint); 68 static napi_value FileAssetNapiConstructor(napi_env env, napi_callback_info info); 69 70 static napi_value JSGetFileId(napi_env env, napi_callback_info info); 71 static napi_value JSGetFileUri(napi_env env, napi_callback_info info); 72 static napi_value JSGetFileDisplayName(napi_env env, napi_callback_info info); 73 static napi_value JSGetFilePath(napi_env env, napi_callback_info info); 74 static napi_value JSGetMimeType(napi_env env, napi_callback_info info); 75 static napi_value JSGetMediaType(napi_env env, napi_callback_info info); 76 static napi_value JSGetTitle(napi_env env, napi_callback_info info); 77 static napi_value JSGetArtist(napi_env env, napi_callback_info info); 78 static napi_value JSGetAlbum(napi_env env, napi_callback_info info); 79 static napi_value JSGetSize(napi_env env, napi_callback_info info); 80 static napi_value JSGetAlbumId(napi_env env, napi_callback_info info); 81 static napi_value JSGetAlbumName(napi_env env, napi_callback_info info); 82 static napi_value JSGetDateAdded(napi_env env, napi_callback_info info); 83 static napi_value JSGetDateModified(napi_env env, napi_callback_info info); 84 static napi_value JSGetOrientation(napi_env env, napi_callback_info info); 85 static napi_value JSGetWidth(napi_env env, napi_callback_info info); 86 static napi_value JSGetHeight(napi_env env, napi_callback_info info); 87 static napi_value JSGetDuration(napi_env env, napi_callback_info info); 88 static napi_value JSGetRelativePath(napi_env env, napi_callback_info info); 89 static napi_value JSGetDateTrashed(napi_env env, napi_callback_info info); 90 static napi_value JSSetFileDisplayName(napi_env env, napi_callback_info info); 91 static napi_value JSSetRelativePath(napi_env env, napi_callback_info info); 92 static napi_value JSSetTitle(napi_env env, napi_callback_info info); 93 static napi_value JSSetOrientation(napi_env env, napi_callback_info info); 94 95 static napi_value JSParent(napi_env env, napi_callback_info info); 96 static napi_value JSGetAlbumUri(napi_env env, napi_callback_info info); 97 static napi_value JSGetDateTaken(napi_env env, napi_callback_info info); 98 static napi_value JSIsDirectory(napi_env env, napi_callback_info info); 99 static napi_value JSCommitModify(napi_env env, napi_callback_info info); 100 static napi_value JSOpen(napi_env env, napi_callback_info info); 101 static napi_value JSClose(napi_env env, napi_callback_info info); 102 static napi_value JSGetThumbnail(napi_env env, napi_callback_info info); 103 static napi_value JSFavorite(napi_env env, napi_callback_info info); 104 static napi_value JSIsFavorite(napi_env env, napi_callback_info info); 105 static napi_value JSTrash(napi_env env, napi_callback_info info); 106 static napi_value JSIsTrash(napi_env env, napi_callback_info info); 107 static napi_value JSGetCount(napi_env env, napi_callback_info info); 108 void UpdateFileAssetInfo(); 109 static napi_value UserFileMgrSet(napi_env env, napi_callback_info info); 110 static napi_value UserFileMgrGet(napi_env env, napi_callback_info info); 111 static napi_value UserFileMgrOpen(napi_env env, napi_callback_info info); 112 static napi_value UserFileMgrClose(napi_env env, napi_callback_info info); 113 static napi_value UserFileMgrCommitModify(napi_env env, napi_callback_info info); 114 static napi_value UserFileMgrFavorite(napi_env env, napi_callback_info info); 115 static napi_value UserFileMgrTrash(napi_env env, napi_callback_info info); 116 static napi_value UserFileMgrIsDirectory(napi_env env, napi_callback_info info); 117 static napi_value UserFileMgrGetThumbnail(napi_env env, napi_callback_info info); 118 bool HandleParamSet(const std::string &inputKey, const std::string &value); 119 napi_env env_; 120 121 static thread_local napi_ref sConstructor_; 122 static thread_local napi_ref userFileMgrConstructor_; 123 static thread_local FileAsset *sFileAsset_; 124 std::shared_ptr<FileAsset> fileAssetPtr = nullptr; 125 std::unordered_map<std::string, std::variant<int32_t, int64_t, std::string>> member_; 126 }; 127 struct FileAssetAsyncContext : public NapiError { 128 napi_async_work work; 129 napi_deferred deferred; 130 napi_ref callbackRef; 131 bool status; 132 FileAssetNapi *objectInfo; 133 std::shared_ptr<FileAsset> objectPtr = nullptr; 134 OHOS::DataShare::DataShareValuesBucket valuesBucket; 135 int32_t thumbWidth; 136 int32_t thumbHeight; 137 bool isDirectory; 138 int32_t changedRows; 139 int32_t fd; 140 bool isFavorite = false; 141 bool isTrash = false; 142 std::string networkId; 143 std::shared_ptr<PixelMap> pixelmap; 144 145 size_t argc; 146 napi_value argv[NAPI_ARGC_MAX]; 147 std::string typeMask; 148 ResultNapiType resultNapiType; 149 }; 150 } // namespace Media 151 } // namespace OHOS 152 153 #endif // INTERFACES_KITS_JS_MEDIALIBRARY_INCLUDE_FILE_ASSET_NAPI_H_ 154