From f162d53b569c7b83967d524c19bc31d4a5538839 Mon Sep 17 00:00:00 2001 From: Olliver Schinagl Date: Thu, 18 Jun 2015 10:02:58 +0200 Subject: update procedure print_start Signed-off-by: Olliver Schinagl --- src/procedures.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++++------- src/procedures.h | 3 +-- 2 files changed, 54 insertions(+), 9 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); } diff --git a/src/procedures.h b/src/procedures.h index 76e4adc..79e23eb 100644 --- a/src/procedures.h +++ b/src/procedures.h @@ -21,10 +21,9 @@ struct procedure_data { uint_fast16_t keylen; Eina_Bool available; Eina_Bool executable; - char steps[]; }; struct procedure_data *procedures_init(void); -void procedure_start_print(Eldbus_Proxy *proxy, struct print_data *print); +Eldbus_Pending *procedure_start_print(Eldbus_Proxy *proxy, struct print_data *print); #endif /* _EULOGIUM_PRIVATE_H */ -- cgit v0.12