summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/eulogium.c45
-rw-r--r--src/eulogium.h1
2 files changed, 32 insertions, 14 deletions
diff --git a/src/eulogium.c b/src/eulogium.c
index 0aa237a..1fa272f 100644
--- a/src/eulogium.c
+++ b/src/eulogium.c
@@ -769,13 +769,15 @@ static void _cb_populate_filelist(const char *name, const char *path, void *data
snprintf(filepath, dir_len, "%s/%s", path, name);
if (!ecore_file_is_dir(filepath)) {
- int len;
+ int i, valid_ext = 0;
ext = ecore_file_ext_get(name);
if (!ext)
return;
- len = strlen(ext);
- if (strncmp(ext, "gcode", len) != 0) /* TODO: compare to list of filetypes/filterlist/mimetype. Get from griffin. */
+ for (i = 0; eulogium->printer.file_handlers[i] != NULL; i++)
+ if (strncmp(ext, eulogium->printer.file_handlers[i], strlen(ext)) == 0)
+ valid_ext++;
+ if (!valid_ext)
return;
}
@@ -1132,6 +1134,7 @@ static void eulogium_setup(struct eulogium_data *eulogium)
eulogium->print.file = NULL;
eulogium_print_data_clear(eulogium);
eulogium->printer.status = DISCONNECTED;
+ eulogium->printer.file_handlers = NULL;
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);
@@ -1242,28 +1245,38 @@ static void eulogium_printer_status_set(struct eulogium_data *eulogium, struct _
eulogium->printer.status = status->i;
}
-static void _on_get_file_handlers_ret(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
+static void _on_get_file_handlers_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
{
const char *errname, *errmsg;
Eldbus_Message_Iter *array;
- uint_fast8_t num_file_handlers, i;
- char **file_handlers;
+ uint_fast8_t i;
+ char *file_handler;
+ char **file_handlers = NULL;
+ 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, "yas", &num_file_handlers, &array)) {
+ if (!eldbus_message_arguments_get(msg, "as", &array)) {
EINA_LOG_ERR("Message content does not match expected \"as\" signature.");
return;
}
- file_handlers = malloc(num_file_handlers * sizeof(char *));
- for (i = 0; i < num_file_handlers; i++) {
- if (!eldbus_message_iter_get_and_next(array, 's', &file_handlers[i]))
- EINA_LOG_ERR("Message content does not match expected \"s\" signature.");
- printf("fh: %s\n", file_handlers[i]);
+ for (i = 0; (eldbus_message_iter_get_and_next(array, 's', &file_handler)); i++) {
+ int fhandler_size = strlen(file_handler) + 1;
+
+ file_handlers = realloc(file_handlers, (i + 1) * sizeof(char *));
+ if (!file_handlers)
+ EINA_LOG_ERR("Unable to allocate memory.");
+ else
+ file_handlers[i] = malloc(fhandler_size);
+ if (!file_handlers[i])
+ EINA_LOG_ERR("Unable to allocate memory.");
+ else
+ strncpy(file_handlers[i], file_handler, fhandler_size);
}
- free(file_handlers); /* TODO: Return filehandlers via data, free array after use there. Cache results during runtime prob. */
+ file_handlers[i] = NULL; /* sentinel */
+ eulogium->printer.file_handlers = file_handlers;
}
static void _on_get_status_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
@@ -1364,7 +1377,7 @@ static int eulogium_dbus_init(struct eulogium_data *eulogium)
* and the statusChanged signal may not have been fired yet
*/
/* TODO: put signal/method name strings in macro/LUT */
- eldbus_proxy_call(eulogium->dbus.proxy[HARMA], "getFileHandlers", _on_get_file_handlers_ret, NULL, -1, "");
+ 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_signal_handler_add(eulogium->dbus.proxy[PRINTER], "statusChanged", _on_status_changed_ret, eulogium);
@@ -1398,6 +1411,7 @@ EAPI_MAIN int elm_main(int argc, char **argv)
ECORE_GETOPT_VALUE_NONE
};
int args;
+ uint_fast8_t i;
struct eulogium_data eulogium;
Evas_Object *window, *object;
// Evas_Object *splash_window;
@@ -1490,6 +1504,9 @@ EAPI_MAIN int elm_main(int argc, char **argv)
elm_run();
eldbus_connection_unref(eulogium.dbus.conn);
+ for (i = 0; eulogium.printer.file_handlers[i] != NULL; i++)
+ free(eulogium.printer.file_handlers[i]);
+ free(eulogium.printer.file_handlers); /* TODO: Cleanup function? */
elm_shutdown();
diff --git a/src/eulogium.h b/src/eulogium.h
index cae6200..29c6aaf 100644
--- a/src/eulogium.h
+++ b/src/eulogium.h
@@ -44,6 +44,7 @@ char *griffin_print_status[] = {
struct printer_data {
enum printer_status status;
+ char **file_handlers;
uint_fast8_t hotend_count;
double *hotend_temp;
double *hotend_target_temp;