diff options
Diffstat (limited to 'calendar/gui/itip-utils.c')
-rw-r--r-- | calendar/gui/itip-utils.c | 65 |
1 files changed, 63 insertions, 2 deletions
diff --git a/calendar/gui/itip-utils.c b/calendar/gui/itip-utils.c index 9679cdcb45..36ddbea045 100644 --- a/calendar/gui/itip-utils.c +++ b/calendar/gui/itip-utils.c @@ -42,6 +42,7 @@ #include "e-util/e-passwords.h" #include "calendar-config.h" #include "itip-utils.h" +#include "dialogs/cal-attachment.h" #define GNOME_EVOLUTION_COMPOSER_OAFIID "OAFIID:GNOME_Evolution_Mail_Composer:" BASE_VERSION @@ -823,9 +824,64 @@ comp_compliant (ECalComponentItipMethod method, ECalComponent *comp, ECal *clien return clone; } +static gboolean +append_cal_attachments (GNOME_Evolution_Composer composer_server, ECalComponent + *comp, GSList *attach_list) +{ + CORBA_char *content_type = NULL, *filename = NULL, *description = NULL; + CORBA_Environment ev; + GNOME_Evolution_Composer_AttachmentData *attach_data = NULL; + struct CalMimeAttach *mime_attach; + GSList *l; + gboolean retval = TRUE; + + CORBA_exception_init (&ev); + + for (l = attach_list; l ; l = l->next) { + mime_attach = (struct CalMimeAttach *) l->data; + + filename = CORBA_string_dup (mime_attach->filename); + content_type = CORBA_string_dup (mime_attach->content_type); + description = CORBA_string_dup (mime_attach->description); + + attach_data = GNOME_Evolution_Composer_AttachmentData__alloc (); + attach_data->_length = mime_attach->length; + attach_data->_maximum = attach_data->_length; + attach_data->_buffer = CORBA_sequence_CORBA_char_allocbuf (attach_data->_length); + memcpy (attach_data->_buffer, mime_attach->encoded_data, attach_data->_length); + + GNOME_Evolution_Composer_attachData (composer_server, + content_type, filename, description, + TRUE, attach_data, + &ev); + if (BONOBO_EX (&ev)) { + g_warning ("Unable to add attachments in composer"); + retval = FALSE; + } + + CORBA_exception_free (&ev); + if (content_type != NULL) + CORBA_free (content_type); + if (filename != NULL) + CORBA_free (filename); + if (description != NULL) + CORBA_free (description); + if (attach_data != NULL) { + CORBA_free (attach_data->_buffer); + CORBA_free (attach_data); + } + g_free (mime_attach->filename); + g_free (mime_attach->content_type); + g_free (mime_attach->description); + g_free (mime_attach->encoded_data); + } + + return retval; +} + gboolean itip_send_comp (ECalComponentItipMethod method, ECalComponent *send_comp, - ECal *client, icalcomponent *zones) + ECal *client, icalcomponent *zones, GSList *attachments_list) { GNOME_Evolution_Composer composer_server; ECalComponent *comp = NULL; @@ -932,7 +988,12 @@ itip_send_comp (ECalComponentItipMethod method, ECalComponent *send_comp, g_warning ("Unable to place iTip message in composer"); goto cleanup; } - + + if (attachments_list) { + if (append_cal_attachments (composer_server, comp, attachments_list)) + retval = TRUE; + } + if (method == E_CAL_COMPONENT_METHOD_PUBLISH) { GNOME_Evolution_Composer_show (composer_server, &ev); if (BONOBO_EX (&ev)) |