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_CLOUD_ENHANCEMENT_NAPI_H 17 #define INTERFACES_KITS_JS_MEDIALIBRARY_INCLUDE_CLOUD_ENHANCEMENT_NAPI_H 18 19 #include <vector> 20 21 #include "datashare_helper.h" 22 #include "datashare_predicates.h" 23 #include "file_asset_napi.h" 24 #include "photo_proxy.h" 25 #include "values_bucket.h" 26 #include "napi_base_context.h" 27 #include "napi_error.h" 28 #include "napi/native_api.h" 29 #include "napi/native_node_api.h" 30 #include "fetch_file_result_napi.h" 31 32 namespace OHOS { 33 namespace Media { 34 #define EXPORT __attribute__ ((visibility ("default"))) 35 enum class CE_AVAILABLE : int32_t { 36 NOT_SUPPORT, 37 SUPPORT, 38 PROCESSING, 39 FAILED_RETRY, 40 FAILED, 41 SUCCESS, 42 EDIT, 43 }; 44 45 enum class PHOTO_CE_STATUS_CODE : int32_t { 46 // failed retry 47 LIMIT_USAGE = 100, 48 LIMIT_REQUEST, 49 TASK_CACHE_TIMEOUT, 50 NETWORK_UNAVAILABLE, 51 TEMPERATURES_GUARD, 52 NETWORK_WEAK, 53 // failed 54 EXECUTE_FAILED, 55 // failed retry 56 DO_AUTH_FAILED, 57 TASK_CANNOT_EXECUTE, 58 // failed 59 NON_RECOVERABLE = 200 60 }; 61 62 class CloudEnhancementNapi { 63 public: 64 EXPORT CloudEnhancementNapi() = default; 65 EXPORT ~CloudEnhancementNapi() = default; 66 EXPORT static napi_value Init(napi_env env, napi_value exports); 67 68 static bool InitUserFileClient(napi_env env, napi_callback_info info); 69 static napi_status ParseArgGetPhotoAsset(napi_env env, napi_value arg, int &fileId, std::string &uri, 70 std::string &displayName); 71 72 private: 73 EXPORT static napi_value Constructor(napi_env env, napi_callback_info info); 74 EXPORT static void Destructor(napi_env env, void* nativeObject, void* finalizeHint); 75 76 EXPORT static napi_value JSGetCloudEnhancementInstance(napi_env env, napi_callback_info info); 77 EXPORT static napi_value JSSubmitCloudEnhancementTasks(napi_env env, napi_callback_info info); 78 EXPORT static napi_value JSPrioritizeCloudEnhancementTask(napi_env env, napi_callback_info info); 79 EXPORT static napi_value JSCancelCloudEnhancementTasks(napi_env env, napi_callback_info info); 80 EXPORT static napi_value JSCancelAllCloudEnhancementTasks(napi_env env, napi_callback_info info); 81 EXPORT static napi_value JSQueryCloudEnhancementTaskState(napi_env env, napi_callback_info info); 82 EXPORT static napi_value JSSyncCloudEnhancementTaskStatus(napi_env env, napi_callback_info info); 83 EXPORT static napi_value JSGetCloudEnhancementPair(napi_env env, napi_callback_info info); 84 85 static thread_local napi_ref constructor_; 86 }; 87 88 struct CloudEnhancementAsyncContext : public NapiError { 89 size_t argc; 90 napi_value argv[NAPI_ARGC_MAX]; 91 napi_async_work work; 92 napi_deferred deferred; 93 napi_ref callbackRef; 94 95 const int32_t UNDEFINED = -1; 96 CloudEnhancementNapi* objectInfo; 97 DataShare::DataSharePredicates predicates; 98 DataShare::DataShareValuesBucket valuesBucket; 99 std::vector<std::string> uris; 100 std::string photoUri; 101 int32_t fileId {UNDEFINED}; 102 std::string displayName; 103 bool hasCloudWatermark_; 104 ResultNapiType resultNapiType; 105 NapiAssetType assetType; 106 std::unique_ptr<FileAsset> fileAsset; 107 CloudEnhancementTaskStage cloudEnhancementTaskStage_ = CloudEnhancementTaskStage::TASK_STAGE_EXCEPTION; 108 int32_t transferredFileSize_ {UNDEFINED}; 109 int32_t totalFileSize_ {UNDEFINED}; 110 int32_t expectedDuration_ {UNDEFINED}; 111 int32_t statusCode_ {UNDEFINED}; 112 std::unique_ptr<FetchResult<FileAsset>> fetchFileResult; 113 bool GetPairAsset(); 114 }; 115 } // namespace Media 116 } // namespace OHOS 117 118 #endif // INTERFACES_KITS_JS_MEDIALIBRARY_INCLUDE_CLOUD_ENHANCEMENT_NAPI_H 119