summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorOlliver Schinagl <o.schinagl@ultimaker.com>2015-05-11 12:39:03 (GMT)
committerOlliver Schinagl <o.schinagl@ultimaker.com>2015-05-11 12:39:03 (GMT)
commit7b6d9fe9b6e9ef8505ee89330dd5daf06d15ec7c (patch)
tree637debedb94231449617c3a1c4f3a0319adebbb1 /src
parent74c40b7ff7fdd592104ad8b61fbe5b47efcbd48c (diff)
downloadeulogium-7b6d9fe9b6e9ef8505ee89330dd5daf06d15ec7c.zip
eulogium-7b6d9fe9b6e9ef8505ee89330dd5daf06d15ec7c.tar.gz
eulogium-7b6d9fe9b6e9ef8505ee89330dd5daf06d15ec7c.tar.bz2
[displayService] Query harmaService for file handlers
Harma is the only service that knows which file types are supported by the installed engine. With this patch harma is queried for the supported file handlers. Note. We cache the result and is valid for the lifetime of the displayService. To change this a signal could be added to harma to notify the users of a changed file handler support Signed-off-by: Olliver Schinagl <o.schinagl@ultimaker.com>
Diffstat (limited to 'src')
-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;