[some] jack session D-Bus proxies
This commit is contained in:
parent
0e4270e1bc
commit
eccd9d26ad
|
@ -32,6 +32,7 @@
|
|||
#define JACKDBUS_IFACE_CONTROL "org.jackaudio.JackControl"
|
||||
#define JACKDBUS_IFACE_CONFIGURE "org.jackaudio.Configure"
|
||||
#define JACKDBUS_IFACE_PATCHBAY "org.jackaudio.JackPatchbay"
|
||||
#define JACKDBUS_IFACE_SESSMGR "org.jackaudio.SessionManager"
|
||||
|
||||
#define SERVICE_NAME DBUS_NAME_BASE
|
||||
#define CONTROL_OBJECT_PATH DBUS_BASE_PATH "/Control"
|
||||
|
@ -66,6 +67,8 @@
|
|||
#define JACKDBUS_PORT_TYPE_AUDIO 0
|
||||
#define JACKDBUS_PORT_TYPE_MIDI 1
|
||||
|
||||
#define JACKDBUS_SESSION_NOTIFY_TYPE_SAVE 1 /* JackSessionSave */
|
||||
|
||||
#define GRAPH_DICT_OBJECT_TYPE_GRAPH 0
|
||||
#define GRAPH_DICT_OBJECT_TYPE_CLIENT 1
|
||||
#define GRAPH_DICT_OBJECT_TYPE_PORT 2
|
||||
|
|
|
@ -629,6 +629,146 @@ bool jack_reset_all_params(void)
|
|||
return jack_proxy_read_conf_container(address, NULL, reset_callback);
|
||||
}
|
||||
|
||||
struct jack_proxy_session_save_one_reply_cookie
|
||||
{
|
||||
void * context;
|
||||
void (* callback)(void * context, const char * commandline);
|
||||
};
|
||||
|
||||
#define cookie_ptr ((struct jack_proxy_session_save_one_reply_cookie *)void_cookie)
|
||||
|
||||
static void jack_proxy_session_save_one_handle_reply(void * context, void * void_cookie, DBusMessage * reply_ptr)
|
||||
{
|
||||
const char * reply_signature;
|
||||
DBusMessageIter top_iter;
|
||||
DBusMessageIter array_iter;
|
||||
DBusMessageIter struct_iter;
|
||||
const char * uuid;
|
||||
const char * client_name;
|
||||
const char * commandline;
|
||||
uint32_t flags;
|
||||
|
||||
if (reply_ptr == NULL)
|
||||
{
|
||||
cookie_ptr->callback(cookie_ptr->context, NULL);
|
||||
return;
|
||||
}
|
||||
|
||||
reply_signature = dbus_message_get_signature(reply_ptr);
|
||||
|
||||
if (strcmp(reply_signature, "a(sssu)") != 0)
|
||||
{
|
||||
log_error(JACKDBUS_IFACE_SESSMGR ".Notify() reply signature mismatch. '%s'", reply_signature);
|
||||
return;
|
||||
}
|
||||
|
||||
dbus_message_iter_init(reply_ptr, &top_iter);
|
||||
|
||||
commandline = NULL;
|
||||
|
||||
for (dbus_message_iter_recurse(&top_iter, &array_iter);
|
||||
dbus_message_iter_get_arg_type(&array_iter) != DBUS_TYPE_INVALID;
|
||||
dbus_message_iter_next(&array_iter))
|
||||
{
|
||||
if (commandline != NULL)
|
||||
{
|
||||
log_error(JACKDBUS_IFACE_SESSMGR ".Notify() save returned more than one command");
|
||||
return;
|
||||
}
|
||||
|
||||
dbus_message_iter_recurse(&array_iter, &struct_iter);
|
||||
|
||||
dbus_message_iter_get_basic(&struct_iter, &uuid);
|
||||
dbus_message_iter_next(&struct_iter);
|
||||
|
||||
dbus_message_iter_get_basic(&struct_iter, &client_name);
|
||||
dbus_message_iter_next(&struct_iter);
|
||||
|
||||
dbus_message_iter_get_basic(&struct_iter, &commandline);
|
||||
dbus_message_iter_next(&struct_iter);
|
||||
|
||||
ASSERT(commandline != NULL);
|
||||
|
||||
dbus_message_iter_get_basic(&struct_iter, &flags);
|
||||
dbus_message_iter_next(&struct_iter);
|
||||
|
||||
dbus_message_iter_next(&struct_iter);
|
||||
}
|
||||
|
||||
if (commandline == NULL)
|
||||
{
|
||||
log_error(JACKDBUS_IFACE_SESSMGR ".Notify() save returned no commands");
|
||||
return;
|
||||
}
|
||||
|
||||
cookie_ptr->callback(cookie_ptr->context, commandline);
|
||||
}
|
||||
|
||||
#undef cookie_ptr
|
||||
|
||||
bool
|
||||
jack_proxy_session_save_one(
|
||||
bool queue,
|
||||
const char * target,
|
||||
const char * path,
|
||||
void * callback_context,
|
||||
void (* completion_callback)(
|
||||
void * context,
|
||||
const char * commandline))
|
||||
{
|
||||
bool ret;
|
||||
dbus_bool_t dbus_bool;
|
||||
dbus_uint32_t type;
|
||||
DBusMessage * request_ptr;
|
||||
struct jack_proxy_session_save_one_reply_cookie cookie;
|
||||
|
||||
ret = false;
|
||||
|
||||
dbus_bool = queue;
|
||||
type = JACKDBUS_SESSION_NOTIFY_TYPE_SAVE;
|
||||
|
||||
request_ptr = cdbus_new_method_call_message(
|
||||
JACKDBUS_SERVICE_NAME,
|
||||
JACKDBUS_OBJECT_PATH,
|
||||
JACKDBUS_IFACE_SESSMGR,
|
||||
"Notify",
|
||||
"bsus",
|
||||
&dbus_bool,
|
||||
&target,
|
||||
&type,
|
||||
&path,
|
||||
NULL);
|
||||
if (request_ptr == NULL)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
cookie.context = callback_context;
|
||||
cookie.callback = completion_callback;
|
||||
|
||||
ret = cdbus_call_async(request_ptr, callback_context, &cookie, sizeof(cookie), jack_proxy_session_save_one_handle_reply);
|
||||
|
||||
dbus_message_unref(request_ptr);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool
|
||||
jack_proxy_session_has_callback(
|
||||
const char * client,
|
||||
bool * has_callback_ptr)
|
||||
{
|
||||
dbus_bool_t has_callback;
|
||||
|
||||
if (!dbus_call(0, JACKDBUS_SERVICE_NAME, JACKDBUS_OBJECT_PATH, JACKDBUS_IFACE_SESSMGR, "HasSessionCallback", "s", &client, "b", &has_callback))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
*has_callback_ptr = has_callback;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool jack_proxy_exit(void)
|
||||
{
|
||||
if (!dbus_call(0, JACKDBUS_SERVICE_NAME, JACKDBUS_OBJECT_PATH, JACKDBUS_IFACE_CONTROL, "Exit", "", ""))
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
/*
|
||||
* LADI Session Handler (ladish)
|
||||
*
|
||||
* Copyright (C) 2009,2010 Nedko Arnaudov <nedko@arnaudov.name>
|
||||
* Copyright (C) 2009,2010,2011 Nedko Arnaudov <nedko@arnaudov.name>
|
||||
*
|
||||
**************************************************************************
|
||||
* This file contains interface to the helper functionality for accessing
|
||||
|
@ -135,6 +135,21 @@ jack_proxy_reset_parameter_value(
|
|||
|
||||
bool jack_reset_all_params(void);
|
||||
|
||||
bool
|
||||
jack_proxy_session_save_one(
|
||||
bool queue,
|
||||
const char * target,
|
||||
const char * path,
|
||||
void * callback_context,
|
||||
void (* completion_callback)(
|
||||
void * context,
|
||||
const char * commandline));
|
||||
|
||||
bool
|
||||
jack_proxy_session_has_callback(
|
||||
const char * client,
|
||||
bool * has_callback_ptr);
|
||||
|
||||
bool jack_proxy_exit(void);
|
||||
|
||||
#endif /* #ifndef JACK_PROXY_H__88702EEC_4B82_407F_A664_AD70C1E14D02__INCLUDED */
|
||||
|
|
Loading…
Reference in New Issue