1 /* 2 * Copyright (c) 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 REQUEST_NAPI_H 17 #define REQUEST_NAPI_H 18 19 #include <string> 20 #include <vector> 21 #include "upload_config.h" 22 #include "upload_task.h" 23 #include "upload_common.h" 24 #include "async_call.h" 25 #include "progress_callback.h" 26 #include "header_receive_callback.h" 27 #include "notify_callback.h" 28 #include "context.h" 29 30 namespace OHOS::Request::UploadNapi { 31 using namespace OHOS::Request::Upload; 32 class UploadTaskNapi { 33 public: 34 static napi_value JsUpload(napi_env env, napi_callback_info info); 35 static napi_value JsOn(napi_env env, napi_callback_info info); 36 static napi_value JsOff(napi_env env, napi_callback_info info); 37 static napi_value JsRemove(napi_env env, napi_callback_info info); 38 39 UploadTaskNapi &operator=(std::shared_ptr<Upload::UploadTask> &&uploadTask); 40 bool operator==(const std::shared_ptr<Upload::UploadTask> &uploadTask); 41 static napi_status GetContext(napi_env env, napi_value *argv, int ¶mPosition, 42 std::shared_ptr<OHOS::AbilityRuntime::Context> &context); 43 44 private: 45 static napi_value GetCtor(napi_env env); 46 static napi_value Initialize(napi_env env, napi_callback_info info); 47 48 struct RemoveContextInfo : public AsyncCall::Context { 49 UploadTaskNapi *proxy = nullptr; 50 bool removeStatus = false; 51 napi_status status = napi_generic_failure; RemoveContextInfoRemoveContextInfo52 RemoveContextInfo() : Context(nullptr, nullptr) {}; RemoveContextInfoRemoveContextInfo53 RemoveContextInfo(InputAction input, OutputAction output) : Context(std::move(input), std::move(output)) {}; ~RemoveContextInfoRemoveContextInfo54 virtual ~RemoveContextInfo() {}; 55 operatorRemoveContextInfo56 napi_status operator()(napi_env env, size_t argc, napi_value *argv, napi_value self) override 57 { 58 NAPI_ASSERT_BASE(env, self != nullptr, "self is nullptr", napi_invalid_arg); 59 NAPI_CALL_BASE(env, napi_unwrap(env, self, reinterpret_cast<void **>(&proxy)), napi_invalid_arg); 60 NAPI_ASSERT_BASE(env, proxy != nullptr, "there is no native upload task", napi_invalid_arg); 61 return Context::operator()(env, argc, argv, self); 62 } operatorRemoveContextInfo63 napi_status operator()(napi_env env, napi_value *result) override 64 { 65 if (status != napi_ok) { 66 return status; 67 } 68 return Context::operator()(env, result); 69 } 70 }; 71 72 struct JsParam { 73 std::string type; 74 napi_value callback; 75 napi_value self; 76 }; 77 78 using Exec = std::function<napi_status(napi_env, napi_value, napi_value)>; 79 static std::map<std::string, Exec> onTypeHandlers_; 80 static std::map<std::string, Exec> offTypeHandlers_; 81 static napi_status OnProgress(napi_env env, napi_value callback, napi_value self); 82 static napi_status OnHeaderReceive(napi_env env, napi_value callback, napi_value self); 83 static napi_status OnFail(napi_env env, napi_value callback, napi_value self); 84 static napi_status OnComplete(napi_env env, napi_value callback, napi_value self); 85 static napi_status OffProgress(napi_env env, napi_value callback, napi_value self); 86 static napi_status OffHeaderReceive(napi_env env, napi_value callback, napi_value self); 87 static napi_status OffFail(napi_env env, napi_value callback, napi_value self); 88 static napi_status OffComplete(napi_env env, napi_value callback, napi_value self); 89 static napi_status ParseParam(napi_env env, napi_callback_info info, bool IsRequiredParam, JsParam &jsParam); 90 91 std::shared_ptr<Upload::IProgressCallback> onProgress_ = nullptr; 92 std::shared_ptr<Upload::IHeaderReceiveCallback> onHeaderReceive_ = nullptr; 93 std::shared_ptr<Upload::INotifyCallback> onFail_ = nullptr; 94 std::shared_ptr<Upload::INotifyCallback> onComplete_ = nullptr; 95 std::shared_ptr<Upload::UploadTask> napiUploadTask_ = nullptr; 96 std::shared_ptr<Upload::UploadConfig> napiUploadConfig_ = nullptr; 97 }; 98 } // namespace OHOS::Request::UploadNapi 99 #endif // REQUEST_NAPI_H