From 1caa169ab0c0d3428723d711a91f198e90bfc054 Mon Sep 17 00:00:00 2001 From: Olliver Schinagl Date: Fri, 8 May 2015 13:23:36 +0200 Subject: Add 'clear data' routine Currently there are is a lot (too much?) data in the data structures that need to be cleaned up afterwards. This patch adds a function to clear up as much as possible in one go. Additionally this patch sets some sane default values to these data Signed-off-by: Olliver Schinagl --- src/eulogium.c | 63 +++++++++++++++++++++++++++++++++------------------------- 1 file changed, 36 insertions(+), 27 deletions(-) diff --git a/src/eulogium.c b/src/eulogium.c index b115bcd..687cf3a 100644 --- a/src/eulogium.c +++ b/src/eulogium.c @@ -126,8 +126,33 @@ static struct button_def but_mat_settings = { .data = NULL, }; -static void _on_print_abort_ret(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) +static void eulogium_print_data_clear(struct eulogium_data *eulogium) { + if (eulogium->progress_data_refresh) + ecore_timer_del(eulogium->progress_data_refresh); + eulogium->progress_data_refresh = NULL; + eulogium->progress = NULL; /* XXX memleak here? when or how is this freeed by efl */ + eulogium->status = NULL; /* XXX memleak here too? how does efl do it */ + eulogium->time = NULL; /* XXX memleak here too? how does efl do it */ + eulogium->name = NULL; /* XXX memleak here too? how does efl do it */ + +// if (eulogium->print.name) +// free(eulogium->print.name); + eulogium->print.name = NULL; + eulogium->print.name_changed = EINA_FALSE; +// if (eulogium->print.file) +// free(eulogium->print.file); + eulogium->print.file = NULL; + + eulogium->print.time = 0; + eulogium->print.material = 0; + eulogium->print.progress = 0; + eulogium->print.flags = ""; +} + +static void _on_print_abort_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) +{ + struct eulogium_data *eulogium = data; const char *errname, *errmsg; Eina_Bool print_abort = EINA_FALSE; @@ -139,6 +164,12 @@ static void _on_print_abort_ret(void *data EINA_UNUSED, const Eldbus_Message *ms EINA_LOG_ERR("Failed to abort print."); return; } + if (print_abort == EINA_TRUE) { + EINA_LOG_INFO("Successfully aborted print."); + eulogium_print_data_clear(eulogium); + } else { + EINA_LOG_WARN("Unable to abort print."); + } } static void _cb_content_prev_set(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) @@ -157,28 +188,8 @@ static void _cb_content_prev_set(void *data, Evas_Object *obj EINA_UNUSED, void static void _print_abort_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { struct eulogium_data *eulogium = data; - Elm_Object_Item *item; eldbus_proxy_call(eulogium->dbus.proxy[HARMA], "abortPrint", _on_print_abort_ret, eulogium, -1, ""); - - item = elm_naviframe_bottom_item_get(eulogium->navi); - if (item) - elm_naviframe_item_pop_to(item); /* XXX what to do else? | XXX stack corrupted after this? (see error log) */ - else - EINA_LOG_CRIT("There is no bottom of the stack!"); - - /* XXX Quick and ugly cleaning up */ - eulogium->status = NULL; /* XXX memleak here too? how does efl do it */ - eulogium->progress = NULL; /* XXX memleak here? when or how is this freeed by efl */ - - free(eulogium->print.name); - eulogium->print.name = NULL; - free(eulogium->print.file); - eulogium->print.file = NULL; - - eulogium->print.time = 0; - eulogium->print.material = 0; - eulogium->print.progress = 0; } static void _on_blink_ret(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) @@ -394,6 +405,7 @@ void eulogium_print_data_set(struct eulogium_data *eulogium, char *filepath) snprintf(buf, buf_size, "file://%s", filepath); eulogium->print.file = buf; eulogium->print.name = ecore_file_strip_ext(ecore_file_file_get(filepath)); + eulogium->print.flags = ""; eulogium->print.material = 100.23; /* TODO */ eulogium->print.time = 12; } @@ -1079,14 +1091,11 @@ static void eulogium_setup(struct eulogium_data *eulogium) while (screen_data.screen[screen_data.count].type != END) screen_data.count++; - eulogium->status = NULL; - eulogium->progress = NULL; + eulogium->progress_data_refresh = NULL; eulogium->print.name = NULL; eulogium->print.file = NULL; - eulogium->print.flags = ""; - eulogium->print.progress = 0; - eulogium->print.time = 0; - eulogium->print.material = 0.0; + eulogium_print_data_clear(eulogium); + eulogium->printer.status = DISCONNECTED; eulogium_button_cb_data_set(&but_return, eulogium); eulogium_button_cb_data_set(&but_print_abort, eulogium); eulogium_button_cb_data_set(&but_print_progress_tune, eulogium); -- cgit v0.12