diff options
-rw-r--r-- | src/eulogium.c | 61 | ||||
-rw-r--r-- | src/eulogium.h | 12 |
2 files changed, 62 insertions, 11 deletions
diff --git a/src/eulogium.c b/src/eulogium.c index ecf8f80..93c89b8 100644 --- a/src/eulogium.c +++ b/src/eulogium.c @@ -546,18 +546,33 @@ Evas_Object *eulogium_split_screen(Evas_Object *parent, Evas_Object *top, Evas_O static void _on_get_progress_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) { const char *errname, *errmsg; - struct eulogium_data *eulogium = data; + double *progress = data; if (eldbus_message_error_get(msg, &errname, &errmsg)) { EINA_LOG_ERR("%s %s", errname, errmsg); return; } - if (!eldbus_message_arguments_get(msg, "d", &eulogium->print.progress)) { + if (!eldbus_message_arguments_get(msg, "d", progress)) { EINA_LOG_ERR("Failed to get print progress."); return; } } +static void _on_get_time_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) +{ + const char *errname, *errmsg; + uint_fast32_t *time = data; + + if (eldbus_message_error_get(msg, &errname, &errmsg)) { + EINA_LOG_ERR("%s %s", errname, errmsg); + return; + } + if (!eldbus_message_arguments_get(msg, "u", time)) { + EINA_LOG_ERR("Failed to get remaining print time."); + return; + } +} + static Eina_Bool _timer_progress_data_update_cb(void *data) { struct eulogium_data *eulogium = data; @@ -565,10 +580,13 @@ static Eina_Bool _timer_progress_data_update_cb(void *data) static double progress = 0; static double time = -1; - eldbus_proxy_call(eulogium->dbus.proxy[HARMA], "getProgress", _on_get_progress_ret, eulogium, -1, ""); + eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "getProgress", _on_get_progress_ret, &eulogium->print.progress, -1, ""); + eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "getTime", _on_get_time_ret, &eulogium->print.time, -1, ""); if (eulogium->printer.status != status) { elm_object_text_set(eulogium->status, griffin_print_status[eulogium->printer.status]); + if (eulogium->printer.status == COOLING) + elm_progressbar_inverted_set(eulogium->progress, EINA_TRUE); status = eulogium->printer.status; } if (eulogium->print.progress != progress) { @@ -1302,10 +1320,22 @@ static void eulogium_printer_status_set(struct eulogium_data *eulogium, struct _ break; #endif case (PAUSED): /* fall through TODO: make pause screen with resume/other button */ + case (HEATING): /* fall through */ + case (SLICING): /* fall through */ case (PRINTING): /* fall through */ - eldbus_proxy_call(eulogium->dbus.proxy[HARMA], "getPrintName", _on_get_print_name_ret, eulogium, -1, ""); - content = eulogium_print_progress(eulogium); - break; + case (COOLING): + /* Check if the previous state was already one of the printing states. + * If the state was one of the various printing states, do nothing. + */ + if (!((eulogium->printer.status == PAUSED) || + (eulogium->printer.status == HEATING) || + (eulogium->printer.status == SLICING) || + (eulogium->printer.status == PRINTING) || + (eulogium->printer.status == COOLING))) { + eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "getPrintName", _on_get_print_name_ret, eulogium, -1, ""); + content = eulogium_print_progress(eulogium); + } + break; case (WAIT_FOR_REMOVAL): if (eulogium->printer.status != status->i) { eulogium_print_data_clear(eulogium); @@ -1393,15 +1423,27 @@ static void _on_get_status_ret(void *data, const Eldbus_Message *msg, Eldbus_Pen } else if (!strncmp(state, "ERROR", 5)) { status.i = ERROR; status.s = griffin_print_status[ERROR]; + } else if (!strncmp(state, "FIRST_RUN_WIZZARD", 17)) { + status.i = FIRST_RUN_WIZZARD; + status.s = griffin_print_status[FIRST_RUN_WIZZARD]; } else if (!strncmp(state, "IDLE", 4)) { status.i = IDLE; status.s = griffin_print_status[IDLE]; - } else if (!strncmp(state, "WAIT_FOR_REMOVAL", 16)) { - status.i = WAIT_FOR_REMOVAL; - status.s = griffin_print_status[WAIT_FOR_REMOVAL]; + } else if (!strncmp(state, "SLICING", 7)) { + status.i = SLICING; + status.s = griffin_print_status[SLICING]; + } else if (!strncmp(state, "HEATING", 7)) { + status.i = HEATING; + status.s = griffin_print_status[HEATING]; } else if (!strncmp(state, "PRINTING", 8)) { status.i = PRINTING; status.s = griffin_print_status[PRINTING]; + } else if (!strncmp(state, "COOLING", 7)) { + status.i = COOLING; + status.s = griffin_print_status[COOLING]; + } else if (!strncmp(state, "WAIT_FOR_REMOVAL", 16)) { + status.i = WAIT_FOR_REMOVAL; + status.s = griffin_print_status[WAIT_FOR_REMOVAL]; } else if (!strncmp(state, "PAUSED", 6)) { status.i = PAUSED; status.s = griffin_print_status[PAUSED]; @@ -1721,6 +1763,7 @@ static int eulogium_dbus_init(struct eulogium_data *eulogium) /* TODO: put signal/method name strings in macro/LUT */ eldbus_proxy_call(eulogium->dbus.proxy[HARMA], "getFileHandlers", _on_get_file_handlers_ret, eulogium, -1, ""); eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "getStatus", _on_get_status_ret, eulogium, -1, ""); + eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "getPrintName", _on_get_print_name_ret, eulogium, -1, ""); eldbus_proxy_signal_handler_add(eulogium->dbus.proxy[PRINTER], "statusChanged", _on_status_changed_ret, eulogium); eldbus_proxy_signal_handler_add(proxy, "UnitNew", _on_unit_new_ret, eulogium); diff --git a/src/eulogium.h b/src/eulogium.h index ca9c1b6..39acd0b 100644 --- a/src/eulogium.h +++ b/src/eulogium.h @@ -19,9 +19,13 @@ enum printer_status { UNKNOWN, DISCONNECTED, ERROR, - WAIT_FOR_REMOVAL, + FIRST_RUN_WIZZARD, IDLE, + SLICING, + HEATING, PRINTING, + COOLING, + WAIT_FOR_REMOVAL, PAUSED, }; @@ -29,9 +33,13 @@ char *griffin_print_status[] = { "Unknown", "Disconnected", "Error", - "Wait for Removal", + "First Run Wizard", "IDLE", + "Slicing", + "Heating", "Printing:", + "Cooling down", + "Wait for Removal", "Paused", }; |