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 OHOS_NAPI_AVCAST_CONTROLLER_H
17 #define OHOS_NAPI_AVCAST_CONTROLLER_H
18 
19 #include "avcast_controller.h"
20 #include "avsession_log.h"
21 #include "avsession_manager.h"
22 #include "napi/native_api.h"
23 #include "napi/native_node_api.h"
24 #include "napi_avcast_controller_callback.h"
25 #include "napi_async_work.h"
26 
27 namespace OHOS::AVSession {
28 class NapiAVCastController {
29 public:
30     NapiAVCastController();
31     ~NapiAVCastController();
32 
33     static napi_value Init(napi_env env, napi_value exports);
34     static napi_status NewInstance(napi_env env, std::shared_ptr<AVCastController>& nativeController,
35         napi_value& out);
36 
37     using OnEventHandlerType = std::function<napi_status(napi_env, NapiAVCastController*, napi_value, napi_value)>;
38     using OffEventHandlerType = std::function<napi_status(napi_env, NapiAVCastController*, napi_value)>;
39     static constexpr size_t TIME_OUT_SECOND = 5;
40 
41 private:
42     static napi_value ConstructorCallback(napi_env env, napi_callback_info info);
43     static napi_value OnEvent(napi_env env, napi_callback_info info);
44     static napi_value OffEvent(napi_env env, napi_callback_info info);
45 
46     static napi_value SendControlCommand(napi_env env, napi_callback_info info);
47     static napi_value Start(napi_env env, napi_callback_info info);
48     static napi_value Prepare(napi_env env, napi_callback_info info);
49     static napi_value GetDuration(napi_env env, napi_callback_info info);
50     static napi_value GetCastAVPlaybackState(napi_env env, napi_callback_info info);
51     static napi_value GetCurrentItem(napi_env env, napi_callback_info info);
52     static napi_value GetValidCommands(napi_env env, napi_callback_info info);
53     static napi_value Release(napi_env env, napi_callback_info info);
54     static napi_value SetDisplaySurface(napi_env env, napi_callback_info info);
55     static napi_status SetCastPlaybackStateFilter(napi_env env, NapiAVCastController *napiCastController,
56         napi_value filter);
57     static napi_value ProcessMediaKeyResponse(napi_env env, napi_callback_info info);
58 
59     static napi_status OnPlaybackStateChange(napi_env env, NapiAVCastController* napiCastController,
60         napi_value param, napi_value callback);
61     static napi_status OnMediaItemChange(napi_env env, NapiAVCastController* napiCastController,
62         napi_value param, napi_value callback);
63 
64     static napi_status OnPlayNext(napi_env env, NapiAVCastController* napiCastController,
65         napi_value param, napi_value callback);
66     static napi_status OnPlayPrevious(napi_env env, NapiAVCastController* napiCastController,
67         napi_value param, napi_value callback);
68     static napi_status OnRequestPlay(napi_env env, NapiAVCastController* napiCastController,
69         napi_value param, napi_value callback);
70     static napi_status OnSeekDone(napi_env env, NapiAVCastController* napiCastController,
71         napi_value param, napi_value callback);
72     static napi_status OnValidCommandChange(napi_env env, NapiAVCastController* napiCastController,
73         napi_value param, napi_value callback);
74     static napi_status OnVideoSizeChange(napi_env env, NapiAVCastController* napiCastController,
75         napi_value param, napi_value callback);
76     static napi_status OnPlayerError(napi_env env, NapiAVCastController* napiCastController,
77         napi_value param, napi_value callback);
78     static napi_status OnCastControlGenericError(napi_env env, NapiAVCastController* napiCastController,
79         napi_value param, napi_value callback);
80     static napi_status OnCastControlIoError(napi_env env, NapiAVCastController* napiCastController,
81         napi_value param, napi_value callback);
82     static napi_status OnCastControlParsingError(napi_env env, NapiAVCastController* napiCastController,
83         napi_value param, napi_value callback);
84     static napi_status OnCastControlDecodingError(napi_env env, NapiAVCastController* napiCastController,
85         napi_value param, napi_value callback);
86     static napi_status OnCastControlAudioRendererError(napi_env env, NapiAVCastController* napiCastController,
87         napi_value param, napi_value callback);
88     static napi_status OnCastControlDrmError(napi_env env, NapiAVCastController* napiCastController,
89         napi_value param, napi_value callback);
90     static napi_status OnEndOfStream(napi_env env, NapiAVCastController* napiCastController,
91         napi_value param, napi_value callback);
92     static napi_status OnPlayRequest(napi_env env, NapiAVCastController* napiCastController,
93         napi_value param, napi_value callback);
94     static napi_status OnKeyRequest(napi_env env, NapiAVCastController* napiCastController,
95         napi_value param, napi_value callback);
96 
97     static napi_status OffPlaybackStateChange(napi_env env, NapiAVCastController* napiCastController,
98         napi_value callback);
99     static napi_status OffMediaItemChange(napi_env env, NapiAVCastController* napiCastController, napi_value callback);
100     static napi_status OffPlayNext(napi_env env, NapiAVCastController* napiCastController,
101         napi_value callback);
102     static napi_status OffPlayPrevious(napi_env env, NapiAVCastController* napiCastController, napi_value callback);
103     static napi_status OffRequestPlay(napi_env env, NapiAVCastController* napiCastController, napi_value callback);
104     static napi_status OffSeekDone(napi_env env, NapiAVCastController* napiCastController, napi_value callback);
105     static napi_status OffValidCommandChange(napi_env env, NapiAVCastController* napiCastController,
106         napi_value callback);
107     static napi_status OffVideoSizeChange(napi_env env, NapiAVCastController* napiCastController, napi_value callback);
108     static napi_status OffPlayerError(napi_env env, NapiAVCastController* napiCastController, napi_value callback);
109     static napi_status OffCastControlGenericError(napi_env env,
110         NapiAVCastController* napiCastController, napi_value callback);
111     static napi_status OffCastControlIoError(napi_env env,
112         NapiAVCastController* napiCastController, napi_value callback);
113     static napi_status OffCastControlParsingError(napi_env env,
114         NapiAVCastController* napiCastController, napi_value callback);
115     static napi_status OffCastControlDecodingError(napi_env env,
116         NapiAVCastController* napiCastController, napi_value callback);
117     static napi_status OffCastControlAudioRendererError(napi_env env,
118         NapiAVCastController* napiCastController, napi_value callback);
119     static napi_status OffCastControlDrmError(napi_env env,
120         NapiAVCastController* napiCastController, napi_value callback);
121     static napi_status OffEndOfStream(napi_env env, NapiAVCastController* napiCastController, napi_value callback);
122     static napi_status OffPlayRequest(napi_env env, NapiAVCastController* napiCastController, napi_value callback);
123     static napi_status OffKeyRequest(napi_env env, NapiAVCastController* napiCastController, napi_value callback);
124 
125     static void ErrCodeToMessage(int32_t errCode, std::string& message);
126     static napi_status RegisterCallback(napi_env env, const std::shared_ptr<ContextBase>& context,
127         const std::string& event, napi_value filter, napi_value callback);
128     static void ReportStartFailInfo(int error);
129     static void ReportSendControlCommandFailInfo(int error);
130     static std::string GetSendControlCommandErrMsg(int32_t error);
131     static void CheckSendCtrlCmdReportRadar(bool condition, int32_t error);
132     static void CheckStartReportRadar(bool condition, int32_t error);
133 
134     napi_ref wrapperRef_ {};
135     std::shared_ptr<AVCastController> castController_;
136     std::shared_ptr<NapiAVCastControllerCallback> callback_;
137 
138     static constexpr size_t ARGC_ONE = 1;
139     static constexpr size_t ARGC_TWO = 2;
140     static constexpr size_t ARGC_THREE = 3;
141 
142     static constexpr size_t ARGV_FIRST = 0;
143     static constexpr size_t ARGV_SECOND = 1;
144     static constexpr size_t ARGV_THIRD = 2;
145 
146     static std::map<std::string, std::pair<OnEventHandlerType, OffEventHandlerType>> EventHandlers_;
147 };
148 } // namespace OHOS::AVSession
149 #endif // OHOS_NAPI_AVCAST_CONTROLLER_H
150