From bb9593c750f326e732e957b6c9d552f548df91cf Mon Sep 17 00:00:00 2001 From: Olliver Schinagl Date: Tue, 23 Jun 2015 15:57:33 +0200 Subject: Fix and use network data Signed-off-by: Olliver Schinagl --- src/dbus_handlers.c | 15 +++++++++------ src/eulogium.c | 54 ++++++++++++++++++++++++++++++++++++----------------- 2 files changed, 46 insertions(+), 23 deletions(-) diff --git a/src/dbus_handlers.c b/src/dbus_handlers.c index 8630f54..7e30fca 100644 --- a/src/dbus_handlers.c +++ b/src/dbus_handlers.c @@ -29,7 +29,7 @@ void on_method_generic_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending void on_method_get_network_info_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) { struct eulogium_data *eulogium = data; /* TODO replace this by making networks direct via ** */ - struct network_data *networks = eulogium->networks; + struct network_data *networks = NULL; const char *errname, *errmsg; Eldbus_Message_Iter *array, *net_struct; char *obj_path, *tech, *ipv4, *ipv6, *ssid, *dummy; @@ -48,7 +48,7 @@ void on_method_get_network_info_ret(void *data, const Eldbus_Message *msg, Eldbu EINA_LOG_ERR("Message content does not match expected \"osssss\" signature. (%s)", eldbus_message_signature_get(msg)); break; } else { - networks = realloc(networks, (i + 1) * sizeof(struct network_data)); + networks = realloc(networks, (i + 2) * sizeof(struct network_data)); if (!networks) { EINA_LOG_ERR("Unable to allocate memory."); } else { @@ -60,10 +60,11 @@ void on_method_get_network_info_ret(void *data, const Eldbus_Message *msg, Eldbu else strncpy(networks[i].obj_path, obj_path, obj_pathsize); - if (strncmp(tech, _TECH_ETHERNET, sizeof(_TECH_ETHERNET))) - networks[i].tech = ETHERNET; - if (strncmp(tech, _TECH_WIFI, sizeof(_TECH_WIFI))) - networks[i].tech = WIFI; + networks[i].tech = UNKNOWN; + if (strcmp(tech, _TECH_ETHERNET)) + networks[i].tech = TECH_ETHERNET; + if (strcmp(tech, _TECH_WIFI)) + networks[i].tech = TECH_WIFI; strncpy(networks[i].ipv4, ipv4, IPV4_MAX_LEN); strncpy(networks[i].ipv6, ipv6, IPV6_MAX_LEN); @@ -71,6 +72,8 @@ void on_method_get_network_info_ret(void *data, const Eldbus_Message *msg, Eldbu } i++; } + networks[i].obj_path = NULL; /* sentinel */ + eulogium->networks = networks; } void on_signal_network_info_changed_ret(void *data, const Eldbus_Message *msg) diff --git a/src/eulogium.c b/src/eulogium.c index 8e3b951..d3774e1 100644 --- a/src/eulogium.c +++ b/src/eulogium.c @@ -78,7 +78,7 @@ static void _but_settings_hotend_1_cb(void *data, Evas_Object *object EINA_UNUSE static void _but_settings_hotend_2_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED); static void _but_change_hotend_1_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED); static void _but_change_hotend_2_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED); -static void _but_network_stats_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED); +static void _but_network_info_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED); static void _but_settings_network_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED); static void _but_settings_language_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED); static void _but_settings_hotend_1_offset_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED); @@ -497,7 +497,7 @@ static struct menu_def menu_settings_network = { .end = NULL, .footer = NULL, .footer_alt = NULL, - .func = _but_network_stats_cb, + .func = _but_network_info_cb, .toggle_timer = NULL, .data = NULL, }, { @@ -1603,28 +1603,48 @@ static void _but_settings_language_cb(void *data, Evas_Object *obj EINA_UNUSED, elm_naviframe_item_simple_push(eulogium->navi, content); } -static void _but_network_stats_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +static char *parse_networks_for_display(struct network_data *networks) +{ + char *buf = NULL; + uint_fast16_t i; + uint_fast32_t pos = 0; + + if (!networks) + return NULL; + + for (i = 0; networks[i].obj_path; i++) { + buf = realloc(buf, pos + 34 * sizeof(char *)); + pos += sprintf(buf + pos, "%s%s IP: %s", i == 0 ? "": "
", (networks[i].tech == TECH_ETHERNET) ? "Ethernet" : (networks[i].tech == TECH_WIFI) ? "WiFi" : "", networks[i].ipv4); + } + + return buf; +} + +static void _but_network_info_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { struct eulogium_data *eulogium = data; - Evas_Object *box, *object; - printf("But settings settings\n"); + Evas_Object *content, *_top, *_bottom; + char *buf; /* XXX Quick hack to make the adv feature a little more useful, this needs to be made much better! */ - box = elm_box_add(eulogium->navi); - evas_object_show(box); + _top = elm_box_add(eulogium->navi); + evas_object_show(_top); - object = elm_label_add(box); - elm_object_text_set(object, "Ethernet IP: 1.2.3.4
WiFi IP: 5.6.7.8"); /* TODO: text outline left */ - evas_object_show(object); - elm_box_pack_end(box, object); + _top = elm_label_add(eulogium->navi); /* TODO, dynamically update IPs */ + buf = parse_networks_for_display(eulogium->networks); + elm_object_text_set(_top, buf); + free(buf); + evas_object_show(_top); - object = elm_button_add(box); - elm_object_text_set(object, _(but_return.text)); /* not pretty using the global XXX */ - evas_object_smart_callback_add(object, "clicked", but_return.cb.func, but_return.cb.data); - evas_object_show(object); - elm_box_pack_end(box, object); + _bottom = elm_button_add(eulogium->navi); + elm_object_text_set(_bottom, _(but_return.text)); /* not pretty using the global XXX */ + evas_object_smart_callback_add(_bottom, "clicked", but_return.cb.func, but_return.cb.data); + evas_object_show(_bottom); - elm_naviframe_item_simple_push(eulogium->navi, box); +// elm_naviframe_item_simple_push(eulogium->navi, box); + content = eulogium_split_screen(eulogium->navi, _top, _bottom); + if (content) + elm_naviframe_item_simple_push(eulogium->navi, content); } static void _but_main_mathot_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED) -- cgit v0.12