From 2eedc6b2b7906005014f723f515a6134f125024c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?L=C3=A9o?= <leopold.chappuis@savoirfairelinux.com>
Date: Thu, 9 Jan 2025 11:01:53 -0500
Subject: [PATCH] nodejs: add userSearch signal

Change-Id: I7ceb5c0809918ca53cbcf2bc1c0d8efff586f960
---
 bin/nodejs/callback.h         | 21 +++++++++++++++++++++
 bin/nodejs/nodejs_interface.i |  1 +
 2 files changed, 22 insertions(+)

diff --git a/bin/nodejs/callback.h b/bin/nodejs/callback.h
index fd97e1c97..f1e3072e3 100644
--- a/bin/nodejs/callback.h
+++ b/bin/nodejs/callback.h
@@ -54,6 +54,7 @@ Persistent<Function> conversationPreferencesUpdatedCb;
 Persistent<Function> messageSendCb;
 Persistent<Function> accountProfileReceivedCb;
 Persistent<Function> profileReceivedCb;
+Persistent<Function> userSearchEndedCb;
 
 std::queue<std::function<void()>> pendingSignals;
 std::mutex pendingSignalsLock;
@@ -153,6 +154,8 @@ getPresistentCb(std::string_view signal)
         return &accountProfileReceivedCb;
     else if (signal == "ProfileReceived")
         return &profileReceivedCb;
+    else if (signal == "UserSearchEnded")
+        return &userSearchEndedCb;
     else
         return nullptr;
 }
@@ -556,6 +559,24 @@ knownDevicesChanged(const std::string& accountId, const std::map<std::string, st
     uv_async_send(&signalAsync);
 }
 
+void
+userSearchEnded(const std::string& accountId,int state, const std::string& query,  const std::vector<std::map<std::string, std::string>>& results)
+{
+    std::lock_guard lock(pendingSignalsLock);
+    pendingSignals.emplace([accountId,state,query, results]() {
+        Local<Function> func = Local<Function>::New(Isolate::GetCurrent(), userSearchEndedCb);
+        if (!func.IsEmpty()) {
+            SWIGV8_VALUE callback_args[] = {V8_STRING_NEW_LOCAL(accountId),
+                                            SWIGV8_INTEGER_NEW(state),
+                                            V8_STRING_NEW_LOCAL(query),
+                                            stringMapVecToJsMapArray(results)};
+            func->Call(SWIGV8_CURRENT_CONTEXT(), SWIGV8_NULL(), 4, callback_args);
+        }
+    });
+
+    uv_async_send(&signalAsync);
+}
+
 void
 incomingTrustRequest(const std::string& accountId,
                      const std::string& from,
diff --git a/bin/nodejs/nodejs_interface.i b/bin/nodejs/nodejs_interface.i
index d1517c4d1..b486c7b1d 100644
--- a/bin/nodejs/nodejs_interface.i
+++ b/bin/nodejs/nodejs_interface.i
@@ -144,6 +144,7 @@ void init(const SWIGV8_VALUE& funcMap){
         exportable_callback<ConfigurationSignal::ProfileReceived>(bind(&profileReceived, _1, _2, _3)),
         exportable_callback<ConfigurationSignal::AccountProfileReceived>(bind(&accountProfileReceived, _1, _2, _3)),
         //exportable_callback<ConfigurationSignal::IncomingTrustRequest>(bind(&incomingTrustRequest, _1, _2, _3, _4, _5 )),
+        exportable_callback<ConfigurationSignal::UserSearchEnded>(bind(&userSearchEnded, _1, _2, _3, _4 )),
     };
 
     const std::map<std::string, SharedCallback> dataTransferEvHandlers = {
-- 
GitLab