summaryrefslogtreecommitdiffstats
path: root/src/procedures.c
diff options
context:
space:
mode:
authorOlliver Schinagl <o.schinagl@ultimaker.com>2015-06-18 08:02:58 (GMT)
committerOlliver Schinagl <o.schinagl@ultimaker.com>2015-06-18 08:02:58 (GMT)
commitf162d53b569c7b83967d524c19bc31d4a5538839 (patch)
tree733d8e3665cda5205373a6e9288d5f5c518c8a51 /src/procedures.c
parent115ad1686819c551086aeeba7be1d74edf096733 (diff)
downloadeulogium-f162d53b569c7b83967d524c19bc31d4a5538839.zip
eulogium-f162d53b569c7b83967d524c19bc31d4a5538839.tar.gz
eulogium-f162d53b569c7b83967d524c19bc31d4a5538839.tar.bz2
update procedure print_start
Signed-off-by: Olliver Schinagl <o.schinagl@ultimaker.com>
Diffstat (limited to 'src/procedures.c')
-rw-r--r--src/procedures.c60
1 files changed, 53 insertions, 7 deletions
diff --git a/src/procedures.c b/src/procedures.c
index cd05d0f..b9c883a 100644
--- a/src/procedures.c
+++ b/src/procedures.c
@@ -20,6 +20,17 @@
#define _PROC_POST_PRINT "POST_PRINT"
#define _PROC_PRE_PRINT_SETUP "PRE_PRINT_SETUP"
+void _container_variant(Eldbus_Message_Iter *parent, const char type, void *data)
+{
+ Eldbus_Message_Iter *child;
+ char sig[2] = { '\0' };
+
+ sig[0] = type;
+ child = eldbus_message_iter_container_new(parent, 'v', sig);
+ eldbus_message_iter_basic_append(child, type, data);
+ eldbus_message_iter_container_close(parent, child);
+}
+
static struct procedure_data procedures[] = {
{
.key = _PROC_PRINT,
@@ -51,16 +62,51 @@ struct procedure_data *procedures_init(void)
return procedures;
};
-void procedure_start_print(Eldbus_Proxy *proxy, struct print_data *print)
+static void _on_start_print_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
{
- Eldbus_Message *msg;
- Eldbus_Message_Iter *iter, *array_itr;
+ struct print_data *print = data;
+ const char *errname, *errmsg;
+ Eina_Bool print_started = EINA_FALSE;
+ if (eldbus_message_error_get(msg, &errname, &errmsg)) {
+ EINA_LOG_ERR("%s %s", errname, errmsg);
+ return;
+ }
+ if (!eldbus_message_arguments_get(msg, "b", &print_started)) {
+ EINA_LOG_ERR("Failed to start print.");
+ return;
+ }
+ if (print_started == EINA_TRUE) {
+ EINA_LOG_INFO("Print has been successfully started");
+ print->block = EINA_FALSE;
+ } else {
+ EINA_LOG_ERR("Unable to start print");
+ }
+}
+
+Eldbus_Pending *procedure_start_print(Eldbus_Proxy *proxy, struct print_data *print)
+{
+ Eldbus_Message *msg;
+ Eldbus_Message_Iter *iter, *dict, *array;
- print = NULL;
msg = eldbus_proxy_method_call_new(proxy, "startProcedure");
iter = eldbus_message_iter_get(msg);
- eldbus_message_iter_arguments_append(iter, "sa{sv}", "PRINT", array_itr);
- eldbus_message_iter_container_new(iter, 'a', "{sv}");
- eldbus_message_iter_container_close(iter, array_itr);
+
+ /* Compose msg sa{sv} */
+ eldbus_message_iter_basic_append(iter, 's', "PRINT");
+ array = eldbus_message_iter_container_new(iter, 'a', "{sv}");
+
+ dict = eldbus_message_iter_container_new(array, 'e', NULL);
+ eldbus_message_iter_basic_append(dict, 's', "name");
+ _container_variant(dict, 's', print->name);
+ eldbus_message_iter_container_close(array, dict);
+
+ dict = eldbus_message_iter_container_new(array, 'e', NULL);
+ eldbus_message_iter_basic_append(dict, 's', "url");
+ _container_variant(dict, 's', print->url);
+ eldbus_message_iter_container_close(array, dict);
+
+ eldbus_message_iter_container_close(iter, array);
+
+ return eldbus_proxy_send(proxy, msg, &_on_start_print_ret, print, -1);
}