From bdcbed96688ff521269d437b44d6dc2047806196 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Fri, 9 Aug 2013 10:58:09 +0200 Subject: Bug #704369 - Meeting change asks on save, but tries to send update anyway --- calendar/gui/dialogs/send-comp.c | 59 ++-------------------------------------- calendar/gui/e-calendar-view.c | 3 ++ calendar/gui/itip-utils.c | 54 ++++++++++++++++++++++++++++++++++++ calendar/gui/itip-utils.h | 1 + 4 files changed, 61 insertions(+), 56 deletions(-) diff --git a/calendar/gui/dialogs/send-comp.c b/calendar/gui/dialogs/send-comp.c index 70dd372400..9be9406965 100644 --- a/calendar/gui/dialogs/send-comp.c +++ b/calendar/gui/dialogs/send-comp.c @@ -31,6 +31,7 @@ #include #include "e-util/e-util.h" +#include "gui/itip-utils.h" static gboolean component_has_new_attendees (ECalComponent *comp) @@ -43,60 +44,6 @@ component_has_new_attendees (ECalComponent *comp) return g_object_get_data (G_OBJECT (comp), "new-attendees") != NULL; } -static gboolean -component_has_recipients (ECalComponent *comp) -{ - GSList *attendees = NULL; - ECalComponentAttendee *attendee; - ECalComponentOrganizer organizer; - gboolean res = FALSE; - - g_return_val_if_fail (comp != NULL, FALSE); - - e_cal_component_get_organizer (comp, &organizer); - e_cal_component_get_attendee_list (comp, &attendees); - - if (!attendees) { - if (organizer.value && e_cal_component_get_vtype (comp) == E_CAL_COMPONENT_JOURNAL) { - /* memos store recipients in an extra property */ - icalcomponent *icalcomp; - icalproperty *icalprop; - - icalcomp = e_cal_component_get_icalcomponent (comp); - - for (icalprop = icalcomponent_get_first_property (icalcomp, ICAL_X_PROPERTY); - icalprop != NULL; - icalprop = icalcomponent_get_next_property (icalcomp, ICAL_X_PROPERTY)) { - const gchar *x_name; - - x_name = icalproperty_get_x_name (icalprop); - - if (g_str_equal (x_name, "X-EVOLUTION-RECIPIENTS")) { - const gchar *str_recipients = icalproperty_get_x (icalprop); - - res = str_recipients && g_ascii_strcasecmp (organizer.value, str_recipients) != 0; - break; - } - } - } - - return res; - } - - if (g_slist_length (attendees) > 1 || !e_cal_component_has_organizer (comp)) { - e_cal_component_free_attendee_list (attendees); - return TRUE; - } - - attendee = attendees->data; - - res = organizer.value && attendee && attendee->value && g_ascii_strcasecmp (organizer.value, attendee->value) != 0; - - e_cal_component_free_attendee_list (attendees); - - return res; -} - static gboolean have_nonprocedural_alarm (ECalComponent *comp) { @@ -174,7 +121,7 @@ send_component_dialog (GtkWindow *parent, if (strip_alarms) *strip_alarms = TRUE; - if (e_cal_client_check_save_schedules (client) || !component_has_recipients (comp)) + if (e_cal_client_check_save_schedules (client) || !itip_component_has_recipients (comp)) return FALSE; vtype = e_cal_component_get_vtype (comp); @@ -263,7 +210,7 @@ send_dragged_or_resized_component_dialog (GtkWindow *parent, if (strip_alarms) *strip_alarms = TRUE; - if (e_cal_client_check_save_schedules (client) || !component_has_recipients (comp)) + if (e_cal_client_check_save_schedules (client) || !itip_component_has_recipients (comp)) save_schedules = TRUE; vtype = e_cal_component_get_vtype (comp); diff --git a/calendar/gui/e-calendar-view.c b/calendar/gui/e-calendar-view.c index 9344d9ff1e..61a88850cd 100644 --- a/calendar/gui/e-calendar-view.c +++ b/calendar/gui/e-calendar-view.c @@ -1830,6 +1830,9 @@ e_calendar_view_send (ECalendarView *cal_view, ECalModel *model; ECalComponent *send_comp = NULL; + if (!itip_component_has_recipients (comp)) + return; + if (mod == CALOBJ_MOD_ALL && e_cal_component_is_instance (comp)) { /* Ensure we send the master object, not the instance only */ icalcomponent *icalcomp = NULL; diff --git a/calendar/gui/itip-utils.c b/calendar/gui/itip-utils.c index 440ae8ff46..02f346d0d8 100644 --- a/calendar/gui/itip-utils.c +++ b/calendar/gui/itip-utils.c @@ -2285,3 +2285,57 @@ is_icalcomp_valid (icalcomponent *icalcomp) return TRUE; } + +gboolean +itip_component_has_recipients (ECalComponent *comp) +{ + GSList *attendees = NULL; + ECalComponentAttendee *attendee; + ECalComponentOrganizer organizer; + gboolean res = FALSE; + + g_return_val_if_fail (comp != NULL, FALSE); + + e_cal_component_get_organizer (comp, &organizer); + e_cal_component_get_attendee_list (comp, &attendees); + + if (!attendees) { + if (organizer.value && e_cal_component_get_vtype (comp) == E_CAL_COMPONENT_JOURNAL) { + /* memos store recipients in an extra property */ + icalcomponent *icalcomp; + icalproperty *icalprop; + + icalcomp = e_cal_component_get_icalcomponent (comp); + + for (icalprop = icalcomponent_get_first_property (icalcomp, ICAL_X_PROPERTY); + icalprop != NULL; + icalprop = icalcomponent_get_next_property (icalcomp, ICAL_X_PROPERTY)) { + const gchar *x_name; + + x_name = icalproperty_get_x_name (icalprop); + + if (g_str_equal (x_name, "X-EVOLUTION-RECIPIENTS")) { + const gchar *str_recipients = icalproperty_get_x (icalprop); + + res = str_recipients && g_ascii_strcasecmp (organizer.value, str_recipients) != 0; + break; + } + } + } + + return res; + } + + if (g_slist_length (attendees) > 1 || !e_cal_component_has_organizer (comp)) { + e_cal_component_free_attendee_list (attendees); + return TRUE; + } + + attendee = attendees->data; + + res = organizer.value && attendee && attendee->value && g_ascii_strcasecmp (organizer.value, attendee->value) != 0; + + e_cal_component_free_attendee_list (attendees); + + return res; +} diff --git a/calendar/gui/itip-utils.h b/calendar/gui/itip-utils.h index 18d2dcaa37..5c3ed3b9e5 100644 --- a/calendar/gui/itip-utils.h +++ b/calendar/gui/itip-utils.h @@ -95,6 +95,7 @@ gboolean reply_to_calendar_comp (ESourceRegistry *registry, icalcomponent *zones, GSList *attachments_list); gboolean is_icalcomp_valid (icalcomponent *icalcomp); +gboolean itip_component_has_recipients (ECalComponent *comp); G_END_DECLS -- cgit v1.2.3