summaryrefslogtreecommitdiffstats
path: root/src/eulogium.c
diff options
context:
space:
mode:
authorOlliver Schinagl <o.schinagl@ultimaker.com>2015-04-29 13:39:14 (GMT)
committerOlliver Schinagl <o.schinagl@ultimaker.com>2015-04-29 13:39:14 (GMT)
commit83a1c274b930f20b5179cdbc7fa41525f2ee9ed3 (patch)
tree7044b371a12c92ef22bb42d85222dbb86d6c7146 /src/eulogium.c
parent31d1151f75bcd8610df26d5b6e8bde72567e2402 (diff)
downloadeulogium-83a1c274b930f20b5179cdbc7fa41525f2ee9ed3.zip
eulogium-83a1c274b930f20b5179cdbc7fa41525f2ee9ed3.tar.gz
eulogium-83a1c274b930f20b5179cdbc7fa41525f2ee9ed3.tar.bz2
Check for print bed status before starting a print
Signed-off-by: Olliver Schinagl <o.schinagl@ultimaker.com>
Diffstat (limited to '')
-rw-r--r--src/eulogium.c78
1 files changed, 74 insertions, 4 deletions
diff --git a/src/eulogium.c b/src/eulogium.c
index 9ce88b2..d7f0e3b 100644
--- a/src/eulogium.c
+++ b/src/eulogium.c
@@ -400,15 +400,70 @@ static void _on_start_print_ret(void *data, const Eldbus_Message *msg, Eldbus_Pe
elm_naviframe_item_simple_push(eulogium->navi, content);
}
-static void eulogium_start_print(struct eulogium_data *eulogium, char *filepath)
+static void eulogium_print_start(struct eulogium_data *eulogium)
{
- eulogium_print_data_set(eulogium, filepath);
- eldbus_proxy_call(eulogium->dbus.proxy[HARMA], "startPrint", _on_print_start_ret, eulogium, -1, "sss",
- eulogium->print.name, eulogium->print.file, eulogium->print.flags);
/* TODO: calling startPrint may have a longer then expected timeout. While unlikely we may want to inform
* the user about this via a screen. Difficulty being here, is that we don't want to 'flash' a screen
* too shortly but may not want to delay without reason.
*/
+ eldbus_proxy_call(eulogium->dbus.proxy[HARMA], "startPrint", _on_start_print_ret, eulogium, -1, "sss",
+ eulogium->print.name, eulogium->print.file, eulogium->print.flags);
+}
+
+static void _on_cleared_printer_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
+{
+ const char *errname, *errmsg;
+ Eina_Bool cleared_bed = EINA_FALSE;
+ struct eulogium_data *eulogium = data;
+
+ if (eldbus_message_error_get(msg, &errname, &errmsg)) {
+ EINA_LOG_ERR("%s %s", errname, errmsg);
+ return;
+ }
+ if (!eldbus_message_arguments_get(msg, "b", &cleared_bed)) {
+ EINA_LOG_ERR("Failed to get bed clear status.");
+ return;
+ }
+ if (cleared_bed == EINA_TRUE) {
+ EINA_LOG_INFO("Bed has been Cleared\n");
+ eulogium_print_start(eulogium);
+ } else {
+ Evas_Object *content;
+
+ EINA_LOG_WARN("Bed was unable to be Cleared!\n");
+ content = eulogium_generic_error(eulogium, 0); /* TODO, proper error codes LUT */
+ elm_naviframe_item_simple_push(eulogium->navi, content);
+ }
+}
+
+static void _clear_bed_and_start_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ struct eulogium_data *eulogium = data;
+
+ eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "clearedPrinter", _on_cleared_printer_ret, eulogium, -1, "");
+}
+
+void eulogium_clear_print_bed_and_start_print(struct eulogium_data *eulogium)
+{
+ Evas_Object *content, *obj;
+
+ content = elm_box_add(eulogium->navi);
+ evas_object_show(content);
+
+ obj = elm_label_add(content);
+ elm_object_text_set(obj, "Print bed not empty!<br>Empty print bed.");
+ evas_object_show(obj);
+ elm_box_pack_end(content, obj);
+
+ /* TODO replace with left/right button call, this is just a quick Hack XXX */
+ obj = elm_button_add(content);
+ elm_object_text_set(obj, "Bed is now clear");
+ evas_object_smart_callback_add(obj, "clicked", _clear_bed_and_start_cb, eulogium);
+ evas_object_show(obj);
+ elm_box_pack_end(content, obj);
+
+ /* XXX BUG If we fail, we keep on pushing new frames. instead, we need to replace the current frame */
+ elm_naviframe_item_simple_push(eulogium->navi, content);
}
struct _filelist_data {
@@ -428,6 +483,21 @@ static void _cb_select_file(void *data, Evas_Object *obj EINA_UNUSED, void *even
content = eulogium_print_menu(eulogium, filepath);
elm_naviframe_item_simple_push(eulogium->navi, content);
} else {
+ eulogium_print_data_set(eulogium, filepath);
+ switch (eulogium->printer.status) {
+ Evas_Object *content;
+
+ case IDLE:
+ eulogium_print_start(eulogium);
+ break;
+ case WAIT_FOR_REMOVAL:
+ eulogium_clear_print_bed_and_start_print(eulogium);
+ break;
+ default:
+ content = eulogium_generic_error(eulogium, 0); /* TODO, proper error codes LUT */
+ elm_naviframe_item_simple_push(eulogium->navi, content);
+ break;
+ }
}
}
}