diff --git a/bin/nodejs/callback.h b/bin/nodejs/callback.h index b6936287e0ccfedbf178f45205f26d07b9cf25d3..2249b57bf1fb42f78faaab728f7fb1d02f55592e 100755 --- a/bin/nodejs/callback.h +++ b/bin/nodejs/callback.h @@ -11,6 +11,7 @@ using namespace v8; Persistent<Function> accountsChangedCb; +Persistent<Function> accountDetailsChangedCb; Persistent<Function> registrationStateChangedCb; Persistent<Function> volatileDetailsChangedCb; Persistent<Function> incomingAccountMessageCb; @@ -34,6 +35,8 @@ uv_async_t signalAsync; Persistent<Function>* getPresistentCb(const std::string &signal) { if (signal == "AccountsChanged") return &accountsChangedCb; + else if (signal == "AccountDetailsChanged") + return &accountDetailsChangedCb; else if (signal == "RegistrationStateChanged") return ®istrationStateChangedCb; else if (signal == "VolatileDetailsChanged") @@ -142,6 +145,22 @@ void volatileDetailsChanged(const std::string& account_id, const std::map<std::s uv_async_send(&signalAsync); } +void accountDetailsChanged(const std::string& accountId, const std::map<std::string, std::string>& details) { + + std::lock_guard<std::mutex> lock(pendingSignalsLock); + pendingSignals.emplace([accountId, details]() { + Local<Function> func = Local<Function>::New(Isolate::GetCurrent(), accountDetailsChangedCb); + if (!func.IsEmpty()) { + Local<Object> jsDetails = SWIGV8_OBJECT_NEW(); + stringMapToJsMap(payloads, jsDetails); + Local<Value> callback_args[] = {V8_STRING_NEW_LOCAL(accountId), jsDetails}; + func->Call(SWIGV8_CURRENT_CONTEXT(), SWIGV8_NULL(), 2, callback_args); + } + }); + + uv_async_send(&signalAsync); +} + void accountsChanged() { std::lock_guard<std::mutex> lock(pendingSignalsLock); diff --git a/bin/nodejs/nodejs_interface.i b/bin/nodejs/nodejs_interface.i index 5ec434ade90048fb4271fa6e9836f3de5d720cfe..56d3b1d4ceab1fc15d1d8415bb9cc264c27d7f1b 100644 --- a/bin/nodejs/nodejs_interface.i +++ b/bin/nodejs/nodejs_interface.i @@ -125,6 +125,7 @@ void init(const SWIGV8_VALUE& funcMap){ const std::map<std::string, SharedCallback> configEvHandlers = { exportable_callback<ConfigurationSignal::AccountsChanged>(bind(&accountsChanged)), + exportable_callback<ConfigurationSignal::AccountDetailsChanged>(bind(&accountDetailsChanged, _1, _2)), exportable_callback<ConfigurationSignal::RegistrationStateChanged>(bind(®istrationStateChanged, _1, _2, _3, _4)), exportable_callback<ConfigurationSignal::ContactAdded>(bind(&contactAdded, _1, _2, _3 )), exportable_callback<ConfigurationSignal::ContactRemoved>(bind(&contactRemoved, _1, _2, _3 )),