diff --git a/bin/nodejs/callback.h b/bin/nodejs/callback.h index 657b15ab6..c1da6535c 100644 --- a/bin/nodejs/callback.h +++ b/bin/nodejs/callback.h @@ -23,8 +23,10 @@ Persistent nameRegistrationEndedCb; Persistent knownDevicesChangedCb; Persistent registeredNameFoundCb; Persistent callStateChangedCb; +Persistent mediaChangeRequestedCb; Persistent incomingMessageCb; Persistent incomingCallCb; +Persistent incomingCallWithMediaCb; Persistent conversationLoadedCb; Persistent messageReceivedCb; Persistent conversationRequestReceivedCb; @@ -73,10 +75,14 @@ getPresistentCb(std::string_view signal) return ®isteredNameFoundCb; else if (signal == "CallStateChanged") return &callStateChangedCb; + else if (signal == "MediaChangeRequested") + return &mediaChangeRequestedCb; else if (signal == "IncomingMessage") return &incomingMessageCb; else if (signal == "IncomingCall") return &incomingCallCb; + else if (signal == "IncomingCallWithMedia") + return &incomingCallWithMediaCb; else if (signal == "ConversationLoaded") return &conversationLoadedCb; else if (signal == "MessageReceived") @@ -342,7 +348,12 @@ accountMessageStatusChanged(const std::string& account_id, Local func = Local::New(Isolate::GetCurrent(), accountMessageStatusChangedCb); if (!func.IsEmpty()) { - Local callback_args[] = {V8_STRING_NEW_LOCAL(account_id), SWIGV8_INTEGER_NEW_UNS(message_id), V8_STRING_NEW_LOCAL(to), SWIGV8_INTEGER_NEW(state)}; + Local callback_args[] = { + V8_STRING_NEW_LOCAL(account_id), + V8_STRING_NEW_LOCAL(message_id), + V8_STRING_NEW_LOCAL(peer), + SWIGV8_INTEGER_NEW(state) + }; func->Call(SWIGV8_CURRENT_CONTEXT(), SWIGV8_NULL(), 4, callback_args); } }); @@ -408,7 +419,31 @@ callStateChanged(const std::string& callId, const std::string& state, int detail pendingSignals.emplace([callId, state, detail_code]() { Local func = Local::New(Isolate::GetCurrent(), callStateChangedCb); if (!func.IsEmpty()) { - SWIGV8_VALUE callback_args[] = {V8_STRING_NEW_LOCAL(callId), V8_STRING_NEW_LOCAL(state), SWIGV8_INTEGER_NEW(detail_code)}; + SWIGV8_VALUE callback_args[] = { + V8_STRING_NEW_LOCAL(callId), + V8_STRING_NEW_LOCAL(state), + SWIGV8_INTEGER_NEW(detail_code) + }; + func->Call(SWIGV8_CURRENT_CONTEXT(), SWIGV8_NULL(), 3, callback_args); + } + }); + + uv_async_send(&signalAsync); +} + +void +mediaChangeRequested(const std::string& accountId, const std::string& callId, + const std::vector>& mediaList) +{ + std::lock_guard lock(pendingSignalsLock); + pendingSignals.emplace([accountId, callId, mediaList]() { + Local func = Local::New(Isolate::GetCurrent(), mediaChangeRequestedCb); + if (!func.IsEmpty()) { + SWIGV8_VALUE callback_args[] = { + V8_STRING_NEW_LOCAL(accountId), + V8_STRING_NEW_LOCAL(callId), + stringMapVecToJsMapArray(mediaList) + }; func->Call(SWIGV8_CURRENT_CONTEXT(), SWIGV8_NULL(), 3, callback_args); } }); @@ -456,6 +491,27 @@ incomingCall(const std::string& accountId, const std::string& callId, const std: uv_async_send(&signalAsync); } + +void +incomingCallWithMedia(const std::string& accountId, const std::string& callId, const std::string& from, const std::vector>& mediaList) +{ + std::lock_guard lock(pendingSignalsLock); + pendingSignals.emplace([accountId, callId, from, mediaList]() { + Local func = Local::New(Isolate::GetCurrent(), incomingCallWithMediaCb); + if (!func.IsEmpty()) { + SWIGV8_VALUE callback_args[] = { + V8_STRING_NEW_LOCAL(accountId), + V8_STRING_NEW_LOCAL(callId), + V8_STRING_NEW_LOCAL(from), + stringMapVecToJsMapArray(mediaList) + }; + func->Call(SWIGV8_CURRENT_CONTEXT(), SWIGV8_NULL(), 3, callback_args); + } + }); + + uv_async_send(&signalAsync); +} + /** Conversations */ void diff --git a/bin/nodejs/nodejs_interface.i b/bin/nodejs/nodejs_interface.i index fa7d1b97f..d64d875ee 100644 --- a/bin/nodejs/nodejs_interface.i +++ b/bin/nodejs/nodejs_interface.i @@ -124,7 +124,7 @@ void init(const SWIGV8_VALUE& funcMap){ exportable_callback(bind(&incomingMessage, _1, _2, _3)), exportable_callback(bind(&incomingCall, _1, _2, _3)), exportable_callback(bind(&incomingCallWithMedia, _1, _2, _3, _4)), - exportable_callback(bind(&mediaChangeRequested, _1, _2, _3) + exportable_callback(bind(&mediaChangeRequested, _1, _2, _3)) }; const std::map configEvHandlers = { @@ -140,8 +140,8 @@ void init(const SWIGV8_VALUE& funcMap){ exportable_callback(bind(&knownDevicesChanged, _1, _2 )), exportable_callback(bind(&incomingAccountMessage, _1, _2, _3, _4 )), exportable_callback(bind(&accountMessageStatusChanged, _1, _2, _3, _4, _5 )), - exportable_callback(bind(&profileReceived, _1, _2, _3, _4 )), - exportable_callback(bind(&incomingTrustRequest, _1, _2, _3, _4, _5 )), + //exportable_callback(bind(&profileReceived, _1, _2, _3, _4 )), + //exportable_callback(bind(&incomingTrustRequest, _1, _2, _3, _4, _5 )), }; const std::map conversationHandlers = {