(void*)arguments[0]);
}
+#define JSVALUE_TO_CONNECTION(ctx, val) (JSValueToNumber(ctx, val, NULL) == DBUS_BUS_SYSTEM) ? system : session
+
static
JSValueRef getMethod (JSContextRef context,
JSObjectRef function,
}
return jscorebus_create_method(global_context,
- JSValueToNumber(context, arguments[0], NULL)
- == DBUS_BUS_SYSTEM ? system : session,
+ JSVALUE_TO_CONNECTION(context, arguments[0]),
string_from_jsvalue(context, arguments[1]),
string_from_jsvalue(context, arguments[2]),
string_from_jsvalue(context, arguments[3]),
}
return jscorebus_create_signal(global_context,
- JSValueToNumber(context, arguments[0], NULL)
- == DBUS_BUS_SYSTEM ? system : session,
+ JSVALUE_TO_CONNECTION(context, arguments[0]),
string_from_jsvalue(context, arguments[1]),
string_from_jsvalue(context, arguments[2]),
argumentCount > 3 ?
exception);
}
+static
+JSValueRef emitSignal (JSContextRef context,
+ JSObjectRef function,
+ JSObjectRef thisObject,
+ size_t argumentCount,
+ const JSValueRef arguments[],
+ JSValueRef *exception)
+{
+ DBusMessage *message;
+ DBusConnection *connection;
+ char *path;
+ char *interface;
+ char *member;
+ char *signature;
+
+ if (argumentCount < 4)
+ {
+ /* TODO: set exception */
+ g_warning("Not enough arguments for emitSignal");
+ return JSValueMakeBoolean(context, FALSE);
+ }
+
+ connection = JSVALUE_TO_CONNECTION(context, arguments[0]);
+ path = string_from_jsvalue(context, arguments[1]);
+ interface = string_from_jsvalue(context, arguments[2]);
+ member = string_from_jsvalue(context, arguments[3]);
+
+ message = dbus_message_new_signal(path, interface, member);
+
+ g_free(path);
+ g_free(interface);
+ g_free(member);
+
+ if (message == NULL)
+ {
+ return JSValueMakeBoolean(context, FALSE);
+ }
+
+ if (argumentCount > 5)
+ {
+ int i, c;
+ JSValueRef *args;
+ DBusMessageIter iter;
+
+ /* "Splice" the array */
+ args = g_new(JSValueRef, argumentCount - 5);
+ c = 0;
+ for (i = 5; i < argumentCount; i++)
+ args[c++] = arguments[i];
+
+ /* Push arguments to the message */
+ signature = string_from_jsvalue(context, arguments[4]);
+ dbus_message_iter_init_append (message, &iter);
+ if (!jsvalue_array_append_to_message_iter(context,
+ args, c,
+ &iter, signature))
+ {
+ /* TODO: set exception */
+ for (i = 0; i < c; i++)
+ args[i] = NULL;
+ g_free(args);
+ g_free(signature);
+ dbus_message_unref(message);
+ return JSValueMakeBoolean(context, FALSE);
+ }
+
+ for (i = 0; i < c; i++)
+ args[i] = NULL;
+ g_free(args);
+ g_free(signature);
+ }
+
+ if (dbus_connection_send(connection, message, NULL))
+ {
+ dbus_message_unref(message);
+ return JSValueMakeBoolean(context, TRUE);
+ }
+
+ dbus_message_unref(message);
+ return JSValueMakeBoolean(context, FALSE);
+}
+
static
void dbus_finalize(JSObjectRef object)
{
/* Methods */
{ "getMethod", getMethod, kJSPropertyAttributeReadOnly },
{ "getSignal", getSignal, kJSPropertyAttributeReadOnly },
+ { "emitSignal", emitSignal, kJSPropertyAttributeReadOnly },
{ NULL, NULL, 0 }
};