static void _eventd_tts_event_action(EventdPluginContext *context, EventdPluginAction *action, EventdEvent *event) { gchar *msg; gint id; msg = evhelpers_format_string_get_string(action->message, event, NULL, NULL); id = spd_say(context->spd, SPD_NOTIFICATION, msg); if ( id == -1 ) g_warning("Couldn't synthetise text"); g_free(msg); }
static void _eventd_exec_event_action(EventdPluginContext *context, EventdPluginAction *action, EventdEvent *event) { gchar *cmd; GError *error = NULL; cmd = evhelpers_format_string_get_string(action->command, event, NULL, NULL); if ( ! g_spawn_command_line_async(cmd, &error) ) { g_warning("Couldn't spawn '%s': %s", cmd, error->message); g_clear_error(&error); } g_free(cmd); }
EVENTD_EXPORT FilenameProcessResult evhelpers_filename_process(const Filename *filename, EventdEvent *event, const gchar *subdir, gchar **ret_uri, GVariant **ret_data) { g_return_val_if_fail(filename != NULL, FILENAME_PROCESS_RESULT_NONE); g_return_val_if_fail(event != NULL, FILENAME_PROCESS_RESULT_NONE); g_return_val_if_fail(subdir != NULL, FILENAME_PROCESS_RESULT_NONE); g_return_val_if_fail(ret_uri != NULL, FILENAME_PROCESS_RESULT_NONE); g_return_val_if_fail(ret_data != NULL, FILENAME_PROCESS_RESULT_NONE); gchar *uri = NULL; if ( filename->data_name != NULL ) { GVariant *data; data = eventd_event_get_data(event, filename->data_name); if ( data == NULL ) return FILENAME_PROCESS_RESULT_NONE; if ( g_variant_is_of_type(data, G_VARIANT_TYPE_STRING) ) uri = g_variant_dup_string(data, NULL); else if ( g_variant_is_of_type(data, G_VARIANT_TYPE("(msmsv)")) ) { *ret_data = g_variant_ref(data); return FILENAME_PROCESS_RESULT_DATA; } else return FILENAME_PROCESS_RESULT_NONE; } else if ( filename->file_uri != NULL ) uri = evhelpers_format_string_get_string(filename->file_uri, event, NULL, NULL); else g_return_val_if_reached(FILENAME_PROCESS_RESULT_NONE); if ( uri == NULL ) return FILENAME_PROCESS_RESULT_NONE; if ( *uri == '\0' ) { g_free(uri); return FILENAME_PROCESS_RESULT_NONE; } if ( g_str_has_prefix(uri, "data:") ) { gchar *mime_type = uri + strlen("data:"); if ( _evhelpers_filename_check_data_base64_prefix(mime_type) ) { gchar *c; guchar *data; gsize length; /* We checked for ";base64," already */ c = g_utf8_strchr(mime_type, -1, ','); *c = '\0'; data = g_base64_decode(c + 1, &length); c = g_utf8_strchr(mime_type, c - mime_type, ';'); *c++ = '\0'; if ( *mime_type == '\0' ) mime_type = NULL; if ( *c == '\0' ) c = NULL; *ret_data = g_variant_new("(msmsv)", mime_type, c, g_variant_new_from_data(G_VARIANT_TYPE_BYTESTRING, data, length, FALSE, g_free, data)); g_free(uri); return FILENAME_PROCESS_RESULT_DATA; } } else if ( g_str_has_prefix(uri, "file://") ) { const gchar *p = uri + strlen("file://"); if ( ! g_path_is_absolute(p) ) { gchar *tmp = uri; if ( g_path_is_absolute(subdir) ) uri = g_strconcat("file://", subdir, G_DIR_SEPARATOR_S, p, NULL); else uri = g_strconcat("file://", g_get_user_data_dir(), G_DIR_SEPARATOR_S PACKAGE_NAME G_DIR_SEPARATOR_S, subdir, G_DIR_SEPARATOR_S, p, NULL); g_free(tmp); p = uri + strlen("file://"); } if ( g_file_test(p, G_FILE_TEST_IS_REGULAR) ) { *ret_uri = uri; return FILENAME_PROCESS_RESULT_URI; } } else if ( g_str_has_prefix(uri, "theme:") ) { *ret_uri = uri; return FILENAME_PROCESS_RESULT_THEME; } g_free(uri); return FILENAME_PROCESS_RESULT_NONE; }