summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorOlliver Schinagl <o.schinagl@ultimaker.com>2015-05-08 11:23:36 (GMT)
committerOlliver Schinagl <o.schinagl@ultimaker.com>2015-05-08 11:26:28 (GMT)
commit1caa169ab0c0d3428723d711a91f198e90bfc054 (patch)
treeff10b2a4e1fb1fc1bfe435791222f5ac5a7a8126 /src
parent22d47c405d69ca7ebd2c557687978ab9d8083c2b (diff)
downloadeulogium-1caa169ab0c0d3428723d711a91f198e90bfc054.zip
eulogium-1caa169ab0c0d3428723d711a91f198e90bfc054.tar.gz
eulogium-1caa169ab0c0d3428723d711a91f198e90bfc054.tar.bz2
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 <o.schinagl@ultimaker.com>
Diffstat (limited to 'src')
-rw-r--r--src/eulogium.c63
1 files 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);