[evolution/wip/mcrha/eds-libical-glib] src/calendar/gui/e-meeting-*



commit a59172411bea07a8334fb2f4f647128cacb58d27
Author: Milan Crha <mcrha redhat com>
Date:   Tue Mar 26 12:51:00 2019 +0100

    src/calendar/gui/e-meeting-*

 src/calendar/gui/e-comp-editor-page-general.c |  43 +-
 src/calendar/gui/e-meeting-attendee.c         | 658 +++++++++++---------------
 src/calendar/gui/e-meeting-attendee.h         | 217 +++++----
 src/calendar/gui/e-meeting-list-view.c        |  65 +--
 src/calendar/gui/e-meeting-store.c            | 477 +++++++++++--------
 src/calendar/gui/e-meeting-utils.c            |   4 +-
 6 files changed, 723 insertions(+), 741 deletions(-)
---
diff --git a/src/calendar/gui/e-comp-editor-page-general.c b/src/calendar/gui/e-comp-editor-page-general.c
index 0f291fcdf3..f1b9464f82 100644
--- a/src/calendar/gui/e-comp-editor-page-general.c
+++ b/src/calendar/gui/e-comp-editor-page-general.c
@@ -268,9 +268,14 @@ ecep_general_attendees_add_clicked_cb (GtkButton *button,
 
        attendee = e_meeting_store_add_attendee_with_defaults (page_general->priv->meeting_store);
 
-       if ((flags & E_COMP_EDITOR_FLAG_DELEGATE) != 0)
-               e_meeting_attendee_set_delfrom (attendee, g_strdup_printf ("MAILTO:%s",
-                       page_general->priv->user_delegator ? page_general->priv->user_delegator : ""));
+       if ((flags & E_COMP_EDITOR_FLAG_DELEGATE) != 0) {
+               gchar *mailto;
+
+               mailto = g_strdup_printf ("MAILTO:%s",
+                       page_general->priv->user_delegator ? page_general->priv->user_delegator : "");
+               e_meeting_attendee_set_delfrom (attendee, mailto);
+               g_free (mailto);
+       }
 
        e_meeting_list_view_edit (E_MEETING_LIST_VIEW (page_general->priv->attendees_list_view), attendee);
 
@@ -449,6 +454,7 @@ ecep_general_attendee_added_cb (EMeetingListView *meeting_list_view,
        ECompEditor *comp_editor;
        ECompEditorFlags flags;
        ECalClient *client;
+       gchar *mailto;
 
        comp_editor = e_comp_editor_page_ref_editor (E_COMP_EDITOR_PAGE (page_general));
        flags = e_comp_editor_get_flags (comp_editor);
@@ -463,8 +469,9 @@ ecep_general_attendee_added_cb (EMeetingListView *meeting_list_view,
        client = e_comp_editor_get_target_client (comp_editor);
 
        /* do not remove here, it did EMeetingListView already */
-       e_meeting_attendee_set_delfrom (attendee, g_strdup_printf ("MAILTO:%s",
-               page_general->priv->user_delegator ? page_general->priv->user_delegator : ""));
+       mailto = g_strdup_printf ("MAILTO:%s", page_general->priv->user_delegator ? 
page_general->priv->user_delegator : "");
+       e_meeting_attendee_set_delfrom (attendee, mailto);
+       g_free (mailto);
 
        if (client && !e_client_check_capability (E_CLIENT (client), 
E_CAL_STATIC_CAPABILITY_DELEGATE_TO_MANY)) {
                EMeetingAttendee *delegator;
@@ -473,7 +480,7 @@ ecep_general_attendee_added_cb (EMeetingListView *meeting_list_view,
                        page_general->priv->user_delegator, NULL);
                g_return_if_fail (delegator != NULL);
 
-               e_meeting_attendee_set_delto (delegator, g_strdup (e_meeting_attendee_get_address 
(attendee)));
+               e_meeting_attendee_set_delto (delegator, e_meeting_attendee_get_address (attendee));
        }
 
        ecep_general_sensitize_widgets (E_COMP_EDITOR_PAGE (page_general), FALSE);
@@ -637,7 +644,11 @@ ecep_general_list_view_event_cb (EMeetingListView *list_view,
                flags = e_comp_editor_get_flags (comp_editor);
 
                if ((flags & E_COMP_EDITOR_FLAG_DELEGATE) != 0) {
-                       e_meeting_attendee_set_delfrom (attendee, g_strdup_printf ("MAILTO:%s", 
page_general->priv->user_delegator));
+                       gchar *mailto;
+
+                       mailto = g_strdup_printf ("MAILTO:%s", page_general->priv->user_delegator);
+                       e_meeting_attendee_set_delfrom (attendee, mailto);
+                       g_free (mailto);
                }
 
                g_clear_object (&comp_editor);
@@ -998,11 +1009,11 @@ ecep_general_fill_widgets (ECompEditorPage *page,
                        attendee = E_MEETING_ATTENDEE (e_meeting_attendee_new ());
 
                        /* It is supposed to be together with the MAILTO: protocol */
-                       e_meeting_attendee_set_address (attendee, g_strdup (icalproperty_get_attendee 
(prop)));
+                       e_meeting_attendee_set_address (attendee, icalproperty_get_attendee (prop));
 
                        param = icalproperty_get_first_parameter (prop, ICAL_MEMBER_PARAMETER);
                        if (param)
-                               e_meeting_attendee_set_member (attendee, g_strdup (icalparameter_get_member 
(param)));
+                               e_meeting_attendee_set_member (attendee, icalparameter_get_member (param));
 
                        param = icalproperty_get_first_parameter (prop, ICAL_CUTYPE_PARAMETER);
                        if (param)
@@ -1018,27 +1029,27 @@ ecep_general_fill_widgets (ECompEditorPage *page,
 
                        param = icalproperty_get_first_parameter (prop, ICAL_DELEGATEDTO_PARAMETER);
                        if (param)
-                               e_meeting_attendee_set_delto (attendee, g_strdup 
(icalparameter_get_delegatedto (param)));
+                               e_meeting_attendee_set_delto (attendee, icalparameter_get_delegatedto 
(param));
 
                        param = icalproperty_get_first_parameter (prop, ICAL_DELEGATEDFROM_PARAMETER);
                        if (param)
-                               e_meeting_attendee_set_delfrom (attendee, g_strdup 
(icalparameter_get_delegatedfrom (param)));
+                               e_meeting_attendee_set_delfrom (attendee, icalparameter_get_delegatedfrom 
(param));
 
                        param = icalproperty_get_first_parameter (prop, ICAL_PARTSTAT_PARAMETER);
                        if (param)
-                               e_meeting_attendee_set_status (attendee, icalparameter_get_partstat (param));
+                               e_meeting_attendee_set_partstat (attendee, icalparameter_get_partstat 
(param));
 
                        param = icalproperty_get_first_parameter (prop, ICAL_SENTBY_PARAMETER);
                        if (param)
-                               e_meeting_attendee_set_sentby (attendee, g_strdup (icalparameter_get_sentby 
(param)));
+                               e_meeting_attendee_set_sentby (attendee, icalparameter_get_sentby (param));
 
                        param = icalproperty_get_first_parameter (prop, ICAL_CN_PARAMETER);
                        if (param)
-                               e_meeting_attendee_set_cn (attendee, g_strdup (icalparameter_get_cn (param)));
+                               e_meeting_attendee_set_cn (attendee, icalparameter_get_cn (param));
 
                        param = icalproperty_get_first_parameter (prop, ICAL_LANGUAGE_PARAMETER);
                        if (param)
-                               e_meeting_attendee_set_language (attendee, g_strdup 
(icalparameter_get_language (param)));
+                               e_meeting_attendee_set_language (attendee, icalparameter_get_language 
(param));
 
                        e_meeting_store_add_attendee (page_general->priv->meeting_store, attendee);
                        e_meeting_list_view_add_attendee_to_name_selector (attendees_list_view, attendee);
@@ -1185,7 +1196,7 @@ ecep_general_fill_component (ECompEditorPage *page,
                                param = icalparameter_new_role (e_meeting_attendee_get_role (attendee));
                                icalproperty_add_parameter (prop, param);
 
-                               param = icalparameter_new_partstat (e_meeting_attendee_get_status (attendee));
+                               param = icalparameter_new_partstat (e_meeting_attendee_get_partstat 
(attendee));
                                icalproperty_add_parameter (prop, param);
 
                                param = icalparameter_new_rsvp (e_meeting_attendee_get_rsvp (attendee) ? 
ICAL_RSVP_TRUE : ICAL_RSVP_FALSE);
diff --git a/src/calendar/gui/e-meeting-attendee.c b/src/calendar/gui/e-meeting-attendee.c
index 3c50466daf..133a0197c5 100644
--- a/src/calendar/gui/e-meeting-attendee.c
+++ b/src/calendar/gui/e-meeting-attendee.c
@@ -35,15 +35,15 @@ struct _EMeetingAttendeePrivate {
        gchar *member;
        gchar *fburi;
 
-       icalparameter_cutype cutype;
-       icalparameter_role role;
+       ICalParameterCutype cutype;
+       ICalParameterRole role;
 
        gboolean rsvp;
 
        gchar *delto;
        gchar *delfrom;
 
-       icalparameter_partstat status;
+       ICalParameterPartstat partstat;
 
        gchar *sentby;
        gchar *cn;
@@ -76,13 +76,13 @@ static void e_meeting_attendee_finalize     (GObject *obj);
 G_DEFINE_TYPE (EMeetingAttendee, e_meeting_attendee, G_TYPE_OBJECT)
 
 static gchar *
-string_test (gchar *string)
+string_test (const gchar *string)
 {
-       return string != NULL ? string : g_strdup ("");
+       return g_strdup (string ? string : "");
 }
 
 static gboolean
-string_is_set (gchar *string)
+string_is_set (const gchar *string)
 {
        if (string != NULL && *string != '\0')
                return TRUE;
@@ -110,25 +110,42 @@ notify_changed (EMeetingAttendee *ia)
        g_signal_emit_by_name (ia, "changed");
 }
 
+static void
+set_string_value (EMeetingAttendee *ia,
+                 gchar **member,
+                 const gchar *value)
+{
+       if (!string_is_set (*member) && !string_is_set (value))
+               return;
+
+       if (g_strcmp0 (*member, value) == 0)
+               return;
+
+       g_free (*member);
+       *member = string_test (value);
+
+       notify_changed (ia);
+}
+
 static void
 e_meeting_attendee_finalize (GObject *object)
 {
-       EMeetingAttendeePrivate *priv;
+       EMeetingAttendee *ia;
 
-       priv = E_MEETING_ATTENDEE_GET_PRIVATE (object);
+       ia = E_MEETING_ATTENDEE (object);
 
-       g_free (priv->address);
-       g_free (priv->member);
-       g_free (priv->fburi);
+       g_free (ia->priv->address);
+       g_free (ia->priv->member);
+       g_free (ia->priv->fburi);
 
-       g_free (priv->delto);
-       g_free (priv->delfrom);
+       g_free (ia->priv->delto);
+       g_free (ia->priv->delfrom);
 
-       g_free (priv->sentby);
-       g_free (priv->cn);
-       g_free (priv->language);
+       g_free (ia->priv->sentby);
+       g_free (ia->priv->cn);
+       g_free (ia->priv->language);
 
-       g_array_free (priv->busy_periods, TRUE);
+       g_array_free (ia->priv->busy_periods, TRUE);
 
        /* Chain up to parent's finalize() method. */
        G_OBJECT_CLASS (e_meeting_attendee_parent_class)->finalize (object);
@@ -162,15 +179,15 @@ e_meeting_attendee_init (EMeetingAttendee *ia)
        ia->priv->address = string_test (NULL);
        ia->priv->member = string_test (NULL);
 
-       ia->priv->cutype = ICAL_CUTYPE_NONE;
-       ia->priv->role = ICAL_ROLE_NONE;
+       ia->priv->cutype = I_CAL_CUTYPE_NONE;
+       ia->priv->role = I_CAL_ROLE_NONE;
 
        ia->priv->rsvp = FALSE;
 
        ia->priv->delto = string_test (NULL);
        ia->priv->delfrom = string_test (NULL);
 
-       ia->priv->status = ICAL_PARTSTAT_NONE;
+       ia->priv->partstat = I_CAL_PARTSTAT_NONE;
 
        ia->priv->sentby = string_test (NULL);
        ia->priv->cn = string_test (NULL);
@@ -205,465 +222,351 @@ e_meeting_attendee_new (void)
 }
 
 GObject *
-e_meeting_attendee_new_from_e_cal_component_attendee (ECalComponentAttendee *ca)
+e_meeting_attendee_new_from_e_cal_component_attendee (const ECalComponentAttendee *ca)
 {
        EMeetingAttendee *ia;
 
+       g_return_val_if_fail (ca != NULL, NULL);
+
        ia = E_MEETING_ATTENDEE (g_object_new (E_TYPE_MEETING_ATTENDEE, NULL));
 
-       e_meeting_attendee_set_address (ia, g_strdup (ca->value));
-       e_meeting_attendee_set_member (ia, g_strdup (ca->member));
-       e_meeting_attendee_set_cutype (ia, ca->cutype);
-       e_meeting_attendee_set_role (ia, ca->role);
-       e_meeting_attendee_set_status (ia, ca->status);
-       e_meeting_attendee_set_rsvp (ia, ca->rsvp);
-       e_meeting_attendee_set_delto (ia, g_strdup (ca->delto));
-       e_meeting_attendee_set_delfrom (ia, g_strdup (ca->delfrom));
-       e_meeting_attendee_set_sentby (ia, g_strdup (ca->sentby));
-       e_meeting_attendee_set_cn (ia, g_strdup (ca->cn));
-       e_meeting_attendee_set_language (ia, g_strdup (ca->language));
+       e_meeting_attendee_set_address (ia, e_cal_component_attendee_get_value (ca));
+       e_meeting_attendee_set_member (ia, e_cal_component_attendee_get_member (ca));
+       e_meeting_attendee_set_cutype (ia, e_cal_component_attendee_get_cutype (ca));
+       e_meeting_attendee_set_role (ia, e_cal_component_attendee_get_role (ca));
+       e_meeting_attendee_set_partstat (ia, e_cal_component_attendee_get_partstat (ca));
+       e_meeting_attendee_set_rsvp (ia, e_cal_component_attendee_get_rsvp (ca));
+       e_meeting_attendee_set_delto (ia, e_cal_component_attendee_get_delegatedto (ca));
+       e_meeting_attendee_set_delfrom (ia, e_cal_component_attendee_get_delegatedfrom (ca));
+       e_meeting_attendee_set_sentby (ia, e_cal_component_attendee_get_sentby (ca));
+       e_meeting_attendee_set_cn (ia, e_cal_component_attendee_get_cn (ca));
+       e_meeting_attendee_set_language (ia, e_cal_component_attendee_get_language (ca));
 
        return G_OBJECT (ia);
 }
 
 ECalComponentAttendee *
-e_meeting_attendee_as_e_cal_component_attendee (EMeetingAttendee *ia)
+e_meeting_attendee_as_e_cal_component_attendee (const EMeetingAttendee *ia)
 {
-       EMeetingAttendeePrivate *priv;
-       ECalComponentAttendee *ca;
-
-       priv = ia->priv;
-
-       ca = g_new0 (ECalComponentAttendee, 1);
-
-       ca->value = priv->address;
-       ca->member = string_is_set (priv->member) ? priv->member : NULL;
-       ca->cutype= priv->cutype;
-       ca->role = priv->role;
-       ca->status = priv->status;
-       ca->rsvp = priv->rsvp;
-       ca->delto = string_is_set (priv->delto) ? priv->delto : NULL;
-       ca->delfrom = string_is_set (priv->delfrom) ? priv->delfrom : NULL;
-       ca->sentby = string_is_set (priv->sentby) ? priv->sentby : NULL;
-       ca->cn = string_is_set (priv->cn) ? priv->cn : NULL;
-       ca->language = string_is_set (priv->language) ? priv->language : NULL;
-
-       return ca;
+       g_return_val_if_fail (E_IS_MEETING_ATTENDEE (ia), NULL);
+
+       return e_cal_component_attendee_new_full (
+               ia->priv->address,
+               string_is_set (ia->priv->member) ? ia->priv->member : NULL,
+               ia->priv->cutype,
+               ia->priv->role,
+               ia->priv->partstat,
+               ia->priv->rsvp,
+               string_is_set (ia->priv->delfrom) ? ia->priv->delfrom : NULL,
+               string_is_set (ia->priv->delto) ? ia->priv->delto : NULL,
+               string_is_set (ia->priv->sentby) ? ia->priv->sentby : NULL,
+               string_is_set (ia->priv->cn) ? ia->priv->cn : NULL,
+               string_is_set (ia->priv->language) ? ia->priv->language : NULL);
 }
 
 const gchar *
-e_meeting_attendee_get_fburi (EMeetingAttendee *ia)
+e_meeting_attendee_get_fburi (const EMeetingAttendee *ia)
 {
-       EMeetingAttendeePrivate *priv;
+       g_return_val_if_fail (E_IS_MEETING_ATTENDEE (ia), NULL);
 
-       priv = ia->priv;
-
-       return priv->fburi;
+       return ia->priv->fburi;
 }
 
 void
 e_meeting_attendee_set_fburi (EMeetingAttendee *ia,
-                              gchar *fburi)
+                             const gchar *fburi)
 {
-       EMeetingAttendeePrivate *priv;
-
-       priv = ia->priv;
-
-       if (priv->fburi != NULL)
-               g_free (priv->fburi);
-
-       priv->fburi = string_test (fburi);
+       g_return_if_fail (E_IS_MEETING_ATTENDEE (ia));
 
-       notify_changed (ia);
+       set_string_value (ia, &ia->priv->fburi, fburi);
 }
 
 const gchar *
-e_meeting_attendee_get_address (EMeetingAttendee *ia)
+e_meeting_attendee_get_address (const EMeetingAttendee *ia)
 {
-       EMeetingAttendeePrivate *priv;
+       g_return_val_if_fail (E_IS_MEETING_ATTENDEE (ia), NULL);
 
-       priv = ia->priv;
-
-       return priv->address;
+       return ia->priv->address;
 }
 
 void
 e_meeting_attendee_set_address (EMeetingAttendee *ia,
-                                gchar *address)
+                               const gchar *address)
 {
-       EMeetingAttendeePrivate *priv;
-
-       priv = ia->priv;
-
-       if (priv->address != NULL)
-               g_free (priv->address);
-
-       priv->address = string_test (address);
+       g_return_if_fail (E_IS_MEETING_ATTENDEE (ia));
 
-       notify_changed (ia);
+       set_string_value (ia, &ia->priv->address, address);
 }
 
 gboolean
-e_meeting_attendee_is_set_address (EMeetingAttendee *ia)
+e_meeting_attendee_is_set_address (const EMeetingAttendee *ia)
 {
-       EMeetingAttendeePrivate *priv;
-
-       priv = ia->priv;
+       g_return_val_if_fail (E_IS_MEETING_ATTENDEE (ia), FALSE);
 
-       return string_is_set (priv->address);
+       return string_is_set (ia->priv->address);
 }
 
 const gchar *
-e_meeting_attendee_get_member (EMeetingAttendee *ia)
+e_meeting_attendee_get_member (const EMeetingAttendee *ia)
 {
-       EMeetingAttendeePrivate *priv;
+       g_return_val_if_fail (E_IS_MEETING_ATTENDEE (ia), NULL);
 
-       priv = ia->priv;
-
-       return priv->member;
+       return ia->priv->member;
 }
 
 void
 e_meeting_attendee_set_member (EMeetingAttendee *ia,
-                               gchar *member)
+                              const gchar *member)
 {
-       EMeetingAttendeePrivate *priv;
-
-       priv = ia->priv;
-
-       if (priv->member != NULL)
-               g_free (priv->member);
-
-       priv->member = string_test (member);
+       g_return_if_fail (E_IS_MEETING_ATTENDEE (ia));
 
-       notify_changed (ia);
+       set_string_value (ia, &ia->priv->member, member);
 }
 
 gboolean
-e_meeting_attendee_is_set_member (EMeetingAttendee *ia)
+e_meeting_attendee_is_set_member (const EMeetingAttendee *ia)
 {
-       EMeetingAttendeePrivate *priv;
-
-       priv = ia->priv;
+       g_return_val_if_fail (E_IS_MEETING_ATTENDEE (ia), FALSE);
 
-       return string_is_set (priv->member);
+       return string_is_set (ia->priv->member);
 }
 
-icalparameter_cutype
-e_meeting_attendee_get_cutype (EMeetingAttendee *ia)
+ICalParameterCutype
+e_meeting_attendee_get_cutype (const EMeetingAttendee *ia)
 {
-       EMeetingAttendeePrivate *priv;
-
-       priv = ia->priv;
+       g_return_val_if_fail (E_IS_MEETING_ATTENDEE (ia), I_CAL_CUTYPE_NONE);
 
-       return priv->cutype;
+       return ia->priv->cutype;
 }
 
 void
 e_meeting_attendee_set_cutype (EMeetingAttendee *ia,
-                               icalparameter_cutype cutype)
+                              ICalParameterCutype cutype)
 {
-       EMeetingAttendeePrivate *priv;
-
-       priv = ia->priv;
-
-       priv->cutype = cutype;
+       g_return_if_fail (E_IS_MEETING_ATTENDEE (ia));
 
-       notify_changed (ia);
+       if (ia->priv->cutype != cutype) {
+               ia->priv->cutype = cutype;
+               notify_changed (ia);
+       }
 }
 
-icalparameter_role
-e_meeting_attendee_get_role (EMeetingAttendee *ia)
+ICalParameterRole
+e_meeting_attendee_get_role (const EMeetingAttendee *ia)
 {
-       EMeetingAttendeePrivate *priv;
-
-       priv = ia->priv;
+       g_return_val_if_fail (E_IS_MEETING_ATTENDEE (ia), I_CAL_ROLE_NONE);
 
-       return priv->role;
+       return ia->priv->role;
 }
 
 void
 e_meeting_attendee_set_role (EMeetingAttendee *ia,
-                             icalparameter_role role)
+                            ICalParameterRole role)
 {
-       EMeetingAttendeePrivate *priv;
-
-       priv = ia->priv;
-
-       priv->role = role;
+       g_return_if_fail (E_IS_MEETING_ATTENDEE (ia));
 
-       notify_changed (ia);
+       if (ia->priv->role != role) {
+               ia->priv->role = role;
+               notify_changed (ia);
+       }
 }
 
 gboolean
-e_meeting_attendee_get_rsvp (EMeetingAttendee *ia)
+e_meeting_attendee_get_rsvp (const EMeetingAttendee *ia)
 {
-       EMeetingAttendeePrivate *priv;
-
-       priv = ia->priv;
+       g_return_val_if_fail (E_IS_MEETING_ATTENDEE (ia), FALSE);
 
-       return priv->rsvp;
+       return ia->priv->rsvp;
 }
 
 void
 e_meeting_attendee_set_rsvp (EMeetingAttendee *ia,
                              gboolean rsvp)
 {
-       EMeetingAttendeePrivate *priv;
-
-       priv = ia->priv;
-
-       priv->rsvp = rsvp;
+       g_return_if_fail (E_IS_MEETING_ATTENDEE (ia));
 
-       notify_changed (ia);
+       if ((ia->priv->rsvp ? 1 : 0) != (rsvp ? 1 : 0)) {
+               ia->priv->rsvp = rsvp;
+               notify_changed (ia);
+       }
 }
 
 const gchar *
-e_meeting_attendee_get_delto (EMeetingAttendee *ia)
+e_meeting_attendee_get_delto (const EMeetingAttendee *ia)
 {
-       EMeetingAttendeePrivate *priv;
+       g_return_val_if_fail (E_IS_MEETING_ATTENDEE (ia), NULL);
 
-       priv = ia->priv;
-
-       return priv->delto;
+       return ia->priv->delto;
 }
 
 void
 e_meeting_attendee_set_delto (EMeetingAttendee *ia,
-                              gchar *delto)
+                             const gchar *delto)
 {
-       EMeetingAttendeePrivate *priv;
-
-       priv = ia->priv;
-
-       if (priv->delto != NULL)
-               g_free (priv->delto);
-
-       priv->delto = string_test (delto);
+       g_return_if_fail (E_IS_MEETING_ATTENDEE (ia));
 
-       notify_changed (ia);
+       set_string_value (ia, &ia->priv->delto, delto);
 }
 
 gboolean
-e_meeting_attendee_is_set_delto (EMeetingAttendee *ia)
+e_meeting_attendee_is_set_delto (const EMeetingAttendee *ia)
 {
-       EMeetingAttendeePrivate *priv;
-
-       priv = ia->priv;
+       g_return_val_if_fail (E_IS_MEETING_ATTENDEE (ia), FALSE);
 
-       return string_is_set (priv->delto);
+       return string_is_set (ia->priv->delto);
 }
 
 const gchar *
-e_meeting_attendee_get_delfrom (EMeetingAttendee *ia)
+e_meeting_attendee_get_delfrom (const EMeetingAttendee *ia)
 {
-       EMeetingAttendeePrivate *priv;
+       g_return_val_if_fail (E_IS_MEETING_ATTENDEE (ia), NULL);
 
-       priv = ia->priv;
-
-       return priv->delfrom;
+       return ia->priv->delfrom;
 }
 
 void
 e_meeting_attendee_set_delfrom (EMeetingAttendee *ia,
-                                gchar *delfrom)
+                               const gchar *delfrom)
 {
-       EMeetingAttendeePrivate *priv;
-
-       priv = ia->priv;
-
-       if (priv->delfrom != NULL)
-               g_free (priv->delfrom);
-
-       priv->delfrom = string_test (delfrom);
+       g_return_if_fail (E_IS_MEETING_ATTENDEE (ia));
 
-       notify_changed (ia);
+       set_string_value (ia, &ia->priv->delfrom, delfrom);
 }
 
 gboolean
-e_meeting_attendee_is_set_delfrom (EMeetingAttendee *ia)
+e_meeting_attendee_is_set_delfrom (const EMeetingAttendee *ia)
 {
-       EMeetingAttendeePrivate *priv;
-
-       priv = ia->priv;
+       g_return_val_if_fail (E_IS_MEETING_ATTENDEE (ia), FALSE);
 
-       return string_is_set (priv->delfrom);
+       return string_is_set (ia->priv->delfrom);
 }
 
-icalparameter_partstat
-e_meeting_attendee_get_status (EMeetingAttendee *ia)
+ICalParameterPartstat
+e_meeting_attendee_get_partstat (const EMeetingAttendee *ia)
 {
-       EMeetingAttendeePrivate *priv;
-
-       priv = ia->priv;
+       g_return_val_if_fail (E_IS_MEETING_ATTENDEE (ia), I_CAL_PARTSTAT_NONE);
 
-       return priv->status;
+       return ia->priv->partstat;
 }
 
 void
-e_meeting_attendee_set_status (EMeetingAttendee *ia,
-                               icalparameter_partstat status)
+e_meeting_attendee_set_partstat (EMeetingAttendee *ia,
+                                ICalParameterPartstat partstat)
 {
-       EMeetingAttendeePrivate *priv;
-
-       priv = ia->priv;
-
-       priv->status = status;
+       g_return_if_fail (E_IS_MEETING_ATTENDEE (ia));
 
-       notify_changed (ia);
+       if (ia->priv->partstat != partstat) {
+               ia->priv->partstat = partstat;
+               notify_changed (ia);
+       }
 }
 
 const gchar *
-e_meeting_attendee_get_sentby (EMeetingAttendee *ia)
+e_meeting_attendee_get_sentby (const EMeetingAttendee *ia)
 {
-       EMeetingAttendeePrivate *priv;
-
-       priv = ia->priv;
+       g_return_val_if_fail (E_IS_MEETING_ATTENDEE (ia), NULL);
 
-       return priv->sentby;
+       return ia->priv->sentby;
 }
 
 void
 e_meeting_attendee_set_sentby (EMeetingAttendee *ia,
-                               gchar *sentby)
+                              const gchar *sentby)
 {
-       EMeetingAttendeePrivate *priv;
-
-       priv = ia->priv;
-
-       if (priv->sentby != NULL)
-               g_free (priv->sentby);
-
-       priv->sentby = string_test (sentby);
+       g_return_if_fail (E_IS_MEETING_ATTENDEE (ia));
 
-       notify_changed (ia);
+       set_string_value (ia, &ia->priv->sentby, sentby);
 }
 
 gboolean
-e_meeting_attendee_is_set_sentby (EMeetingAttendee *ia)
+e_meeting_attendee_is_set_sentby (const EMeetingAttendee *ia)
 {
-       EMeetingAttendeePrivate *priv;
-
-       priv = ia->priv;
+       g_return_val_if_fail (E_IS_MEETING_ATTENDEE (ia), FALSE);
 
-       return string_is_set (priv->sentby);
+       return string_is_set (ia->priv->sentby);
 }
 
 const gchar *
-e_meeting_attendee_get_cn (EMeetingAttendee *ia)
+e_meeting_attendee_get_cn (const EMeetingAttendee *ia)
 {
-       EMeetingAttendeePrivate *priv;
-
-       priv = ia->priv;
+       g_return_val_if_fail (E_IS_MEETING_ATTENDEE (ia), NULL);
 
-       return priv->cn;
+       return ia->priv->cn;
 }
 
 void
 e_meeting_attendee_set_cn (EMeetingAttendee *ia,
-                           gchar *cn)
+                          const gchar *cn)
 {
-       EMeetingAttendeePrivate *priv;
-
-       priv = ia->priv;
-
-       if (priv->cn != NULL)
-               g_free (priv->cn);
-
-       priv->cn = string_test (cn);
+       g_return_if_fail (E_IS_MEETING_ATTENDEE (ia));
 
-       notify_changed (ia);
+       set_string_value (ia, &ia->priv->cn, cn);
 }
 
 gboolean
-e_meeting_attendee_is_set_cn (EMeetingAttendee *ia)
+e_meeting_attendee_is_set_cn (const EMeetingAttendee *ia)
 {
-       EMeetingAttendeePrivate *priv;
-
-       priv = ia->priv;
+       g_return_val_if_fail (E_IS_MEETING_ATTENDEE (ia), FALSE);
 
-       return string_is_set (priv->cn);
+       return string_is_set (ia->priv->cn);
 }
 
 const gchar *
-e_meeting_attendee_get_language (EMeetingAttendee *ia)
+e_meeting_attendee_get_language (const EMeetingAttendee *ia)
 {
-       EMeetingAttendeePrivate *priv;
-
-       priv = ia->priv;
+       g_return_val_if_fail (E_IS_MEETING_ATTENDEE (ia), NULL);
 
-       return priv->language;
+       return ia->priv->language;
 }
 
 void
 e_meeting_attendee_set_language (EMeetingAttendee *ia,
-                                 gchar *language)
+                                const gchar *language)
 {
-       EMeetingAttendeePrivate *priv;
-
-       priv = ia->priv;
-
-       if (priv->language != NULL)
-               g_free (priv->language);
-
-       priv->language = string_test (language);
+       g_return_if_fail (E_IS_MEETING_ATTENDEE (ia));
 
-       notify_changed (ia);
+       set_string_value (ia, &ia->priv->language, language);
 }
 
 gboolean
-e_meeting_attendee_is_set_language (EMeetingAttendee *ia)
+e_meeting_attendee_is_set_language (const EMeetingAttendee *ia)
 {
-       EMeetingAttendeePrivate *priv;
-
-       priv = ia->priv;
+       g_return_val_if_fail (E_IS_MEETING_ATTENDEE (ia), FALSE);
 
-       return string_is_set (priv->language);
+       return string_is_set (ia->priv->language);
 }
 
 EMeetingAttendeeType
-e_meeting_attendee_get_atype (EMeetingAttendee *ia)
+e_meeting_attendee_get_atype (const EMeetingAttendee *ia)
 {
-       EMeetingAttendeePrivate *priv;
-
-       priv = ia->priv;
+       g_return_val_if_fail (E_IS_MEETING_ATTENDEE (ia), E_MEETING_ATTENDEE_RESOURCE_UNKNOWN);
 
-       if (priv->cutype == ICAL_CUTYPE_ROOM
-           || priv->cutype == ICAL_CUTYPE_RESOURCE)
+       if (ia->priv->cutype == I_CAL_CUTYPE_ROOM ||
+           ia->priv->cutype == I_CAL_CUTYPE_RESOURCE)
                return E_MEETING_ATTENDEE_RESOURCE;
 
-       if (priv->role == ICAL_ROLE_CHAIR
-           || priv->role == ICAL_ROLE_REQPARTICIPANT)
+       if (ia->priv->role == I_CAL_ROLE_CHAIR ||
+           ia->priv->role == I_CAL_ROLE_REQPARTICIPANT)
                return E_MEETING_ATTENDEE_REQUIRED_PERSON;
 
        return E_MEETING_ATTENDEE_OPTIONAL_PERSON;
 }
 
 EMeetingAttendeeEditLevel
-e_meeting_attendee_get_edit_level (EMeetingAttendee *ia)
+e_meeting_attendee_get_edit_level (const EMeetingAttendee *ia)
 {
-       EMeetingAttendeePrivate *priv;
-
-       g_return_val_if_fail (ia != NULL, E_MEETING_ATTENDEE_EDIT_NONE);
        g_return_val_if_fail (E_IS_MEETING_ATTENDEE (ia), E_MEETING_ATTENDEE_EDIT_NONE);
 
-       priv = ia->priv;
-
-       return priv->edit_level;
+       return ia->priv->edit_level;
 }
 
 void
 e_meeting_attendee_set_edit_level (EMeetingAttendee *ia,
                                    EMeetingAttendeeEditLevel level)
 {
-       EMeetingAttendeePrivate *priv;
-
-       g_return_if_fail (ia != NULL);
        g_return_if_fail (E_IS_MEETING_ATTENDEE (ia));
 
-       priv = ia->priv;
-
-       priv->edit_level = level;
+       ia->priv->edit_level = level;
 }
 
 static gint
@@ -707,23 +610,19 @@ compare_period_starts (gconstpointer arg1,
 static void
 ensure_periods_sorted (EMeetingAttendee *ia)
 {
-       EMeetingAttendeePrivate *priv;
-
-       priv = ia->priv;
-
-       if (priv->busy_periods_sorted)
+       if (ia->priv->busy_periods_sorted)
                return;
 
        qsort (
-               priv->busy_periods->data, priv->busy_periods->len,
+               ia->priv->busy_periods->data, ia->priv->busy_periods->len,
                sizeof (EMeetingFreeBusyPeriod),
                compare_period_starts);
 
-       priv->busy_periods_sorted = TRUE;
+       ia->priv->busy_periods_sorted = TRUE;
 }
 
 gboolean
-e_meeting_attendee_get_show_address (EMeetingAttendee *ia)
+e_meeting_attendee_get_show_address (const EMeetingAttendee *ia)
 {
        g_return_val_if_fail (E_IS_MEETING_ATTENDEE (ia), FALSE);
 
@@ -745,48 +644,41 @@ e_meeting_attendee_set_show_address (EMeetingAttendee *ia,
 }
 
 gboolean
-e_meeting_attendee_get_has_calendar_info (EMeetingAttendee *ia)
+e_meeting_attendee_get_has_calendar_info (const EMeetingAttendee *ia)
 {
-       EMeetingAttendeePrivate *priv;
-
-       priv = ia->priv;
+       g_return_val_if_fail (E_IS_MEETING_ATTENDEE (ia), FALSE);
 
-       return priv->has_calendar_info;
+       return ia->priv->has_calendar_info;
 }
 
 void
 e_meeting_attendee_set_has_calendar_info (EMeetingAttendee *ia,
                                           gboolean has_calendar_info)
 {
-       EMeetingAttendeePrivate *priv;
-
-       priv = ia->priv;
+       g_return_if_fail (E_IS_MEETING_ATTENDEE (ia));
 
-       priv->has_calendar_info = has_calendar_info;
+       ia->priv->has_calendar_info = has_calendar_info;
 }
 
 const GArray *
 e_meeting_attendee_get_busy_periods (EMeetingAttendee *ia)
 {
-       EMeetingAttendeePrivate *priv;
-
-       priv = ia->priv;
+       g_return_val_if_fail (E_IS_MEETING_ATTENDEE (ia), NULL);
 
        ensure_periods_sorted (ia);
 
-       return priv->busy_periods;
+       return ia->priv->busy_periods;
 }
 
 gint
 e_meeting_attendee_find_first_busy_period (EMeetingAttendee *ia,
-                                           GDate *date)
+                                          const GDate *date)
 {
-       EMeetingAttendeePrivate *priv;
        EMeetingFreeBusyPeriod *period;
        gint lower, upper, middle = 0, cmp = 0;
        GDate tmp_date;
 
-       priv = ia->priv;
+       g_return_val_if_fail (E_IS_MEETING_ATTENDEE (ia), -1);
 
        /* Make sure the busy periods have been sorted. */
        ensure_periods_sorted (ia);
@@ -794,11 +686,11 @@ e_meeting_attendee_find_first_busy_period (EMeetingAttendee *ia,
        /* Calculate the first day which could have a busy period which
         * continues onto our given date. */
        tmp_date = *date;
-       g_date_subtract_days (&tmp_date, priv->longest_period_in_days);
+       g_date_subtract_days (&tmp_date, ia->priv->longest_period_in_days);
 
        /* We want the first busy period which starts on tmp_date. */
        lower = 0;
-       upper = priv->busy_periods->len;
+       upper = ia->priv->busy_periods->len;
 
        if (upper == 0)
                return -1;
@@ -806,7 +698,7 @@ e_meeting_attendee_find_first_busy_period (EMeetingAttendee *ia,
        while (lower < upper) {
                middle = (lower + upper) >> 1;
 
-               period = &g_array_index (priv->busy_periods,
+               period = &g_array_index (ia->priv->busy_periods,
                                         EMeetingFreeBusyPeriod, middle);
 
                cmp = g_date_compare (&tmp_date, &period->start.date);
@@ -823,7 +715,7 @@ e_meeting_attendee_find_first_busy_period (EMeetingAttendee *ia,
         * backwards to the first one. */
        if (cmp == 0) {
                while (middle > 0) {
-                       period = &g_array_index (priv->busy_periods,
+                       period = &g_array_index (ia->priv->busy_periods,
                                                 EMeetingFreeBusyPeriod, middle - 1);
                        if (g_date_compare (&tmp_date, &period->start.date) != 0)
                                break;
@@ -834,7 +726,7 @@ e_meeting_attendee_find_first_busy_period (EMeetingAttendee *ia,
                 * the last one we looked at was before it, so if there are
                 * any more periods after this one we return it. */
                middle++;
-               if (priv->busy_periods->len <= middle)
+               if (ia->priv->busy_periods->len <= middle)
                        return -1;
        }
 
@@ -857,18 +749,14 @@ e_meeting_attendee_add_busy_period (EMeetingAttendee *ia,
                                     const gchar *summary,
                                     const gchar *location)
 {
-       EMeetingAttendeePrivate *priv;
        EMeetingFreeBusyPeriod period;
        gint period_in_days;
 
-       g_return_val_if_fail (ia != NULL, FALSE);
        g_return_val_if_fail (E_IS_MEETING_ATTENDEE (ia), FALSE);
        g_return_val_if_fail (busy_type < E_MEETING_FREE_BUSY_LAST, FALSE);
        /* summary may be NULL (optional XFB data)  */
        /* location may be NULL (optional XFB data) */
 
-       priv = ia->priv;
-
        /* Check the dates are valid. */
        if (!g_date_valid_dmy (start_day, start_month, start_year))
                return FALSE;
@@ -902,31 +790,31 @@ e_meeting_attendee_add_busy_period (EMeetingAttendee *ia,
                goto done;
 
        /* If the busy range is not set elsewhere, track it as best we can */
-       if (!priv->start_busy_range_set) {
-               if (!g_date_valid (&priv->busy_periods_start.date)) {
-                       priv->busy_periods_start.date = period.start.date;
-                       priv->busy_periods_start.hour = period.start.hour;
-                       priv->busy_periods_start.minute = period.start.minute;
+       if (!ia->priv->start_busy_range_set) {
+               if (!g_date_valid (&ia->priv->busy_periods_start.date)) {
+                       ia->priv->busy_periods_start.date = period.start.date;
+                       ia->priv->busy_periods_start.hour = period.start.hour;
+                       ia->priv->busy_periods_start.minute = period.start.minute;
                } else {
                        gint compare;
 
                        compare = g_date_compare (
                                &period.start.date,
-                               &priv->busy_periods_start.date);
+                               &ia->priv->busy_periods_start.date);
 
                        switch (compare) {
                        case -1:
-                               priv->busy_periods_start.date = period.start.date;
-                               priv->busy_periods_start.hour = period.start.hour;
-                               priv->busy_periods_start.minute = period.start.minute;
+                               ia->priv->busy_periods_start.date = period.start.date;
+                               ia->priv->busy_periods_start.hour = period.start.hour;
+                               ia->priv->busy_periods_start.minute = period.start.minute;
                                break;
                        case 0:
-                               if (period.start.hour < priv->busy_periods_start.hour
-                                   || (period.start.hour == priv->busy_periods_start.hour
-                                       && period.start.minute < priv->busy_periods_start.minute)) {
-                                       priv->busy_periods_start.date = period.start.date;
-                                       priv->busy_periods_start.hour = period.start.hour;
-                                       priv->busy_periods_start.minute = period.start.minute;
+                               if (period.start.hour < ia->priv->busy_periods_start.hour
+                                   || (period.start.hour == ia->priv->busy_periods_start.hour
+                                       && period.start.minute < ia->priv->busy_periods_start.minute)) {
+                                       ia->priv->busy_periods_start.date = period.start.date;
+                                       ia->priv->busy_periods_start.hour = period.start.hour;
+                                       ia->priv->busy_periods_start.minute = period.start.minute;
                                        break;
                                }
                                break;
@@ -934,33 +822,33 @@ e_meeting_attendee_add_busy_period (EMeetingAttendee *ia,
                }
        }
 
-       if (!priv->end_busy_range_set) {
-               if (!g_date_valid (&priv->busy_periods_end.date)) {
-                       priv->busy_periods_end.date = period.end.date;
-                       priv->busy_periods_end.hour = period.end.hour;
-                       priv->busy_periods_end.minute = period.end.minute;
+       if (!ia->priv->end_busy_range_set) {
+               if (!g_date_valid (&ia->priv->busy_periods_end.date)) {
+                       ia->priv->busy_periods_end.date = period.end.date;
+                       ia->priv->busy_periods_end.hour = period.end.hour;
+                       ia->priv->busy_periods_end.minute = period.end.minute;
                } else {
                        gint compare;
 
                        compare = g_date_compare (
                                &period.end.date,
-                               &priv->busy_periods_end.date);
+                               &ia->priv->busy_periods_end.date);
 
                        switch (compare) {
                        case 0:
-                               if (period.end.hour > priv->busy_periods_end.hour
-                                   || (period.end.hour == priv->busy_periods_end.hour
-                                       && period.end.minute > priv->busy_periods_end.minute)) {
-                                       priv->busy_periods_end.date = period.end.date;
-                                       priv->busy_periods_end.hour = period.end.hour;
-                                       priv->busy_periods_end.minute = period.end.minute;
+                               if (period.end.hour > ia->priv->busy_periods_end.hour
+                                   || (period.end.hour == ia->priv->busy_periods_end.hour
+                                       && period.end.minute > ia->priv->busy_periods_end.minute)) {
+                                       ia->priv->busy_periods_end.date = period.end.date;
+                                       ia->priv->busy_periods_end.hour = period.end.hour;
+                                       ia->priv->busy_periods_end.minute = period.end.minute;
                                        break;
                                }
                                break;
                        case 1:
-                               priv->busy_periods_end.date = period.end.date;
-                               priv->busy_periods_end.hour = period.end.hour;
-                               priv->busy_periods_end.minute = period.end.minute;
+                               ia->priv->busy_periods_end.date = period.end.date;
+                               ia->priv->busy_periods_end.hour = period.end.hour;
+                               ia->priv->busy_periods_end.minute = period.end.minute;
                                break;
                        }
                }
@@ -970,39 +858,47 @@ e_meeting_attendee_add_busy_period (EMeetingAttendee *ia,
        e_meeting_xfb_data_init (&(period.xfb));
        e_meeting_xfb_data_set (&(period.xfb), summary, location);
 
-       g_array_append_val (priv->busy_periods, period);
+       g_array_append_val (ia->priv->busy_periods, period);
 
        period_in_days =
                g_date_get_julian (&period.end.date) -
                g_date_get_julian (&period.start.date) + 1;
-       priv->longest_period_in_days =
-               MAX (priv->longest_period_in_days, period_in_days);
+       ia->priv->longest_period_in_days =
+               MAX (ia->priv->longest_period_in_days, period_in_days);
 
 done:
-       priv->has_calendar_info = TRUE;
-       priv->busy_periods_sorted = FALSE;
+       ia->priv->has_calendar_info = TRUE;
+       ia->priv->busy_periods_sorted = FALSE;
 
        return TRUE;
 }
 
 EMeetingTime
-e_meeting_attendee_get_start_busy_range (EMeetingAttendee *ia)
+e_meeting_attendee_get_start_busy_range (const EMeetingAttendee *ia)
 {
-       EMeetingAttendeePrivate *priv;
+       EMeetingTime mt;
+
+       g_date_clear (&mt.date, 1);
+       mt.hour = 0;
+       mt.minute = 0;
 
-       priv = ia->priv;
+       g_return_val_if_fail (E_IS_MEETING_ATTENDEE (ia), mt);
 
-       return priv->busy_periods_start;
+       return ia->priv->busy_periods_start;
 }
 
 EMeetingTime
-e_meeting_attendee_get_end_busy_range (EMeetingAttendee *ia)
+e_meeting_attendee_get_end_busy_range (const EMeetingAttendee *ia)
 {
-       EMeetingAttendeePrivate *priv;
+       EMeetingTime mt;
 
-       priv = ia->priv;
+       g_date_clear (&mt.date, 1);
+       mt.hour = 0;
+       mt.minute = 0;
 
-       return priv->busy_periods_end;
+       g_return_val_if_fail (E_IS_MEETING_ATTENDEE (ia), mt);
+
+       return ia->priv->busy_periods_end;
 }
 
 gboolean
@@ -1013,12 +909,8 @@ e_meeting_attendee_set_start_busy_range (EMeetingAttendee *ia,
                                          gint start_hour,
                                          gint start_minute)
 {
-       EMeetingAttendeePrivate *priv;
-
        g_return_val_if_fail (E_IS_MEETING_ATTENDEE (ia), FALSE);
 
-       priv = ia->priv;
-
        /* Check the dates are valid. */
        if (!g_date_valid_dmy (start_day, start_month, start_year))
                return FALSE;
@@ -1027,14 +919,14 @@ e_meeting_attendee_set_start_busy_range (EMeetingAttendee *ia,
        if (start_minute < 0 || start_minute > 59)
                return FALSE;
 
-       g_date_clear (&priv->busy_periods_start.date, 1);
+       g_date_clear (&ia->priv->busy_periods_start.date, 1);
        g_date_set_dmy (
-               &priv->busy_periods_start.date,
+               &ia->priv->busy_periods_start.date,
                start_day, start_month, start_year);
-       priv->busy_periods_start.hour = start_hour;
-       priv->busy_periods_start.minute = start_minute;
+       ia->priv->busy_periods_start.hour = start_hour;
+       ia->priv->busy_periods_start.minute = start_minute;
 
-       priv->start_busy_range_set = TRUE;
+       ia->priv->start_busy_range_set = TRUE;
 
        return TRUE;
 }
@@ -1047,12 +939,8 @@ e_meeting_attendee_set_end_busy_range (EMeetingAttendee *ia,
                                        gint end_hour,
                                        gint end_minute)
 {
-       EMeetingAttendeePrivate *priv;
-
        g_return_val_if_fail (E_IS_MEETING_ATTENDEE (ia), FALSE);
 
-       priv = ia->priv;
-
        /* Check the dates are valid. */
        if (!g_date_valid_dmy (end_day, end_month, end_year))
                return FALSE;
@@ -1061,14 +949,14 @@ e_meeting_attendee_set_end_busy_range (EMeetingAttendee *ia,
        if (end_minute < 0 || end_minute > 59)
                return FALSE;
 
-       g_date_clear (&priv->busy_periods_end.date, 1);
+       g_date_clear (&ia->priv->busy_periods_end.date, 1);
        g_date_set_dmy (
-               &priv->busy_periods_end.date,
+               &ia->priv->busy_periods_end.date,
                end_day, end_month, end_year);
-       priv->busy_periods_end.hour = end_hour;
-       priv->busy_periods_end.minute = end_minute;
+       ia->priv->busy_periods_end.hour = end_hour;
+       ia->priv->busy_periods_end.minute = end_minute;
 
-       priv->end_busy_range_set = TRUE;
+       ia->priv->end_busy_range_set = TRUE;
 
        return TRUE;
 }
@@ -1077,22 +965,18 @@ e_meeting_attendee_set_end_busy_range (EMeetingAttendee *ia,
 void
 e_meeting_attendee_clear_busy_periods (EMeetingAttendee *ia)
 {
-       EMeetingAttendeePrivate *priv;
-
        g_return_if_fail (E_IS_MEETING_ATTENDEE (ia));
 
-       priv = ia->priv;
+       g_array_set_size (ia->priv->busy_periods, 0);
+       ia->priv->busy_periods_sorted = TRUE;
 
-       g_array_set_size (priv->busy_periods, 0);
-       priv->busy_periods_sorted = TRUE;
-
-       g_date_clear (&priv->busy_periods_start.date, 1);
-       priv->busy_periods_start.hour = 0;
-       priv->busy_periods_start.minute = 0;
+       g_date_clear (&ia->priv->busy_periods_start.date, 1);
+       ia->priv->busy_periods_start.hour = 0;
+       ia->priv->busy_periods_start.minute = 0;
 
-       g_date_clear (&priv->busy_periods_end.date, 1);
-       priv->busy_periods_end.hour = 0;
-       priv->busy_periods_end.minute = 0;
+       g_date_clear (&ia->priv->busy_periods_end.date, 1);
+       ia->priv->busy_periods_end.hour = 0;
+       ia->priv->busy_periods_end.minute = 0;
 
-       priv->longest_period_in_days = 0;
+       ia->priv->longest_period_in_days = 0;
 }
diff --git a/src/calendar/gui/e-meeting-attendee.h b/src/calendar/gui/e-meeting-attendee.h
index d19f5f5033..1e6bd839b6 100644
--- a/src/calendar/gui/e-meeting-attendee.h
+++ b/src/calendar/gui/e-meeting-attendee.h
@@ -44,11 +44,11 @@ typedef struct _EMeetingAttendeeClass    EMeetingAttendeeClass;
  * meeting room). These are used for the Autopick options, where the user can
  * ask for a time when, for example, all people and one resource are free.
  * The default is E_MEETING_ATTENDEE_REQUIRED_PERSON. */
-typedef enum
-{
+typedef enum {
        E_MEETING_ATTENDEE_REQUIRED_PERSON,
        E_MEETING_ATTENDEE_OPTIONAL_PERSON,
-       E_MEETING_ATTENDEE_RESOURCE
+       E_MEETING_ATTENDEE_RESOURCE,
+       E_MEETING_ATTENDEE_RESOURCE_UNKNOWN
 } EMeetingAttendeeType;
 
 typedef enum
@@ -70,101 +70,122 @@ struct _EMeetingAttendeeClass {
        void (* changed) (EMeetingAttendee *ia);
 };
 
-
-GType      e_meeting_attendee_get_type (void);
-GObject   *e_meeting_attendee_new      (void);
-GObject   *e_meeting_attendee_new_from_e_cal_component_attendee (ECalComponentAttendee *ca);
-
-ECalComponentAttendee *e_meeting_attendee_as_e_cal_component_attendee (EMeetingAttendee *ia);
-
-const gchar *e_meeting_attendee_get_address (EMeetingAttendee *ia);
-void e_meeting_attendee_set_address (EMeetingAttendee *ia, gchar *address);
-gboolean e_meeting_attendee_is_set_address (EMeetingAttendee *ia);
-
-const gchar *e_meeting_attendee_get_member (EMeetingAttendee *ia);
-void e_meeting_attendee_set_member (EMeetingAttendee *ia, gchar *member);
-gboolean e_meeting_attendee_is_set_member (EMeetingAttendee *ia);
-
-ICalParameterCutype e_meeting_attendee_get_cutype (EMeetingAttendee *ia);
-void e_meeting_attendee_set_cutype (EMeetingAttendee *ia, ICalParameterCutype cutype);
-
-ICalParameterRole e_meeting_attendee_get_role (EMeetingAttendee *ia);
-void e_meeting_attendee_set_role (EMeetingAttendee *ia, ICalParameterRole role);
-
-gboolean e_meeting_attendee_get_rsvp (EMeetingAttendee *ia);
-void e_meeting_attendee_set_rsvp (EMeetingAttendee *ia, gboolean rsvp);
-
-const gchar *e_meeting_attendee_get_delto (EMeetingAttendee *ia);
-void e_meeting_attendee_set_delto (EMeetingAttendee *ia, gchar *delto);
-gboolean e_meeting_attendee_is_set_delto (EMeetingAttendee *ia);
-
-const gchar *e_meeting_attendee_get_delfrom (EMeetingAttendee *ia);
-void e_meeting_attendee_set_delfrom (EMeetingAttendee *ia, gchar *delfrom);
-gboolean e_meeting_attendee_is_set_delfrom (EMeetingAttendee *ia);
-
-ICalParameterPartstat e_meeting_attendee_get_status (EMeetingAttendee *ia);
-void e_meeting_attendee_set_status (EMeetingAttendee *ia, ICalParameterPartstat status);
-
-const gchar *e_meeting_attendee_get_sentby (EMeetingAttendee *ia);
-void e_meeting_attendee_set_sentby (EMeetingAttendee *ia, gchar *sentby);
-gboolean e_meeting_attendee_is_set_sentby (EMeetingAttendee *ia);
-
-const gchar *e_meeting_attendee_get_cn (EMeetingAttendee *ia);
-void e_meeting_attendee_set_cn (EMeetingAttendee *ia, gchar *cn);
-gboolean e_meeting_attendee_is_set_cn (EMeetingAttendee *ia);
-
-const gchar *e_meeting_attendee_get_language (EMeetingAttendee *ia);
-void e_meeting_attendee_set_language (EMeetingAttendee *ia, gchar *language);
-gboolean e_meeting_attendee_is_set_language (EMeetingAttendee *ia);
-
-EMeetingAttendeeType e_meeting_attendee_get_atype (EMeetingAttendee *ia);
-
-EMeetingAttendeeEditLevel e_meeting_attendee_get_edit_level (EMeetingAttendee *ia);
-void e_meeting_attendee_set_edit_level (EMeetingAttendee *ia, EMeetingAttendeeEditLevel level);
-
-gboolean e_meeting_attendee_get_show_address (EMeetingAttendee *ia);
-void e_meeting_attendee_set_show_address (EMeetingAttendee *ia, gboolean show_address);
-
-gboolean e_meeting_attendee_get_has_calendar_info (EMeetingAttendee *ia);
-void e_meeting_attendee_set_has_calendar_info (EMeetingAttendee *ia, gboolean has_calendar_info);
-
-const gchar * e_meeting_attendee_get_fburi (EMeetingAttendee *ia);
-void e_meeting_attendee_set_fburi (EMeetingAttendee *ia, gchar *fburi);
-
-const GArray *e_meeting_attendee_get_busy_periods (EMeetingAttendee *ia);
-gint e_meeting_attendee_find_first_busy_period (EMeetingAttendee *ia, GDate *date);
-gboolean e_meeting_attendee_add_busy_period (EMeetingAttendee *ia,
-                                       gint start_year,
-                                       gint start_month,
-                                       gint start_day,
-                                       gint start_hour,
-                                       gint start_minute,
-                                       gint end_year,
-                                       gint end_month,
-                                       gint end_day,
-                                       gint end_hour,
-                                       gint end_minute,
-                                       EMeetingFreeBusyType busy_type,
-                                       const gchar *summary,
-                                       const gchar *location);
-
-EMeetingTime e_meeting_attendee_get_start_busy_range (EMeetingAttendee *ia);
-EMeetingTime e_meeting_attendee_get_end_busy_range (EMeetingAttendee *ia);
-
-gboolean e_meeting_attendee_set_start_busy_range (EMeetingAttendee *ia,
-                                                 gint start_year,
-                                                 gint start_month,
-                                                 gint start_day,
-                                                 gint start_hour,
-                                                 gint start_minute);
-gboolean e_meeting_attendee_set_end_busy_range (EMeetingAttendee *ia,
-                                               gint end_year,
-                                               gint end_month,
-                                               gint end_day,
-                                               gint end_hour,
-                                               gint end_minute);
-
-void e_meeting_attendee_clear_busy_periods (EMeetingAttendee *ia);
+GType          e_meeting_attendee_get_type     (void);
+GObject *      e_meeting_attendee_new          (void);
+GObject *      e_meeting_attendee_new_from_e_cal_component_attendee
+                                               (const ECalComponentAttendee *ca);
+
+ECalComponentAttendee *
+               e_meeting_attendee_as_e_cal_component_attendee
+                                               (const EMeetingAttendee *ia);
+
+const gchar *  e_meeting_attendee_get_address  (const EMeetingAttendee *ia);
+void           e_meeting_attendee_set_address  (EMeetingAttendee *ia,
+                                                const gchar *address);
+gboolean       e_meeting_attendee_is_set_address
+                                               (const EMeetingAttendee *ia);
+const gchar *  e_meeting_attendee_get_member   (const EMeetingAttendee *ia);
+void           e_meeting_attendee_set_member   (EMeetingAttendee *ia,
+                                                const gchar *member);
+gboolean       e_meeting_attendee_is_set_member(const EMeetingAttendee *ia);
+ICalParameterCutype
+               e_meeting_attendee_get_cutype   (const EMeetingAttendee *ia);
+void           e_meeting_attendee_set_cutype   (EMeetingAttendee *ia,
+                                                ICalParameterCutype cutype);
+ICalParameterRole
+               e_meeting_attendee_get_role     (const EMeetingAttendee *ia);
+void           e_meeting_attendee_set_role     (EMeetingAttendee *ia,
+                                                ICalParameterRole role);
+gboolean       e_meeting_attendee_get_rsvp     (const EMeetingAttendee *ia);
+void           e_meeting_attendee_set_rsvp     (EMeetingAttendee *ia,
+                                                gboolean rsvp);
+const gchar *  e_meeting_attendee_get_delto    (const EMeetingAttendee *ia);
+void           e_meeting_attendee_set_delto    (EMeetingAttendee *ia,
+                                                const gchar *delto);
+gboolean       e_meeting_attendee_is_set_delto (const EMeetingAttendee *ia);
+const gchar *  e_meeting_attendee_get_delfrom  (const EMeetingAttendee *ia);
+void           e_meeting_attendee_set_delfrom  (EMeetingAttendee *ia,
+                                                const gchar *delfrom);
+gboolean       e_meeting_attendee_is_set_delfrom
+                                               (const EMeetingAttendee *ia);
+ICalParameterPartstat
+               e_meeting_attendee_get_partstat (const EMeetingAttendee *ia);
+void           e_meeting_attendee_set_partstat (EMeetingAttendee *ia,
+                                                ICalParameterPartstat partstat);
+const gchar *  e_meeting_attendee_get_sentby   (const EMeetingAttendee *ia);
+void           e_meeting_attendee_set_sentby   (EMeetingAttendee *ia,
+                                                const gchar *sentby);
+gboolean       e_meeting_attendee_is_set_sentby(const EMeetingAttendee *ia);
+const gchar *  e_meeting_attendee_get_cn       (const EMeetingAttendee *ia);
+void           e_meeting_attendee_set_cn       (EMeetingAttendee *ia,
+                                                const gchar *cn);
+gboolean       e_meeting_attendee_is_set_cn    (const EMeetingAttendee *ia);
+const gchar *  e_meeting_attendee_get_language (const EMeetingAttendee *ia);
+void           e_meeting_attendee_set_language (EMeetingAttendee *ia,
+                                                const gchar *language);
+gboolean       e_meeting_attendee_is_set_language
+                                               (const EMeetingAttendee *ia);
+EMeetingAttendeeType
+               e_meeting_attendee_get_atype    (const EMeetingAttendee *ia);
+EMeetingAttendeeEditLevel
+               e_meeting_attendee_get_edit_level
+                                               (const EMeetingAttendee *ia);
+void           e_meeting_attendee_set_edit_level
+                                               (EMeetingAttendee *ia,
+                                                EMeetingAttendeeEditLevel level);
+gboolean       e_meeting_attendee_get_show_address
+                                               (const EMeetingAttendee *ia);
+void           e_meeting_attendee_set_show_address
+                                               (EMeetingAttendee *ia,
+                                                gboolean show_address);
+gboolean       e_meeting_attendee_get_has_calendar_info
+                                               (const EMeetingAttendee *ia);
+void           e_meeting_attendee_set_has_calendar_info
+                                               (EMeetingAttendee *ia,
+                                                gboolean has_calendar_info);
+const gchar *  e_meeting_attendee_get_fburi    (const EMeetingAttendee *ia);
+void           e_meeting_attendee_set_fburi    (EMeetingAttendee *ia,
+                                                const gchar *fburi);
+const GArray * e_meeting_attendee_get_busy_periods
+                                               (EMeetingAttendee *ia);
+gint           e_meeting_attendee_find_first_busy_period
+                                               (EMeetingAttendee *ia,
+                                                const GDate *date);
+gboolean       e_meeting_attendee_add_busy_period
+                                               (EMeetingAttendee *ia,
+                                                gint start_year,
+                                                gint start_month,
+                                                gint start_day,
+                                                gint start_hour,
+                                                gint start_minute,
+                                                gint end_year,
+                                                gint end_month,
+                                                gint end_day,
+                                                gint end_hour,
+                                                gint end_minute,
+                                                EMeetingFreeBusyType busy_type,
+                                                const gchar *summary,
+                                                const gchar *location);
+EMeetingTime   e_meeting_attendee_get_start_busy_range
+                                               (const EMeetingAttendee *ia);
+EMeetingTime   e_meeting_attendee_get_end_busy_range
+                                               (const EMeetingAttendee *ia);
+gboolean       e_meeting_attendee_set_start_busy_range
+                                               (EMeetingAttendee *ia,
+                                                gint start_year,
+                                                gint start_month,
+                                                gint start_day,
+                                                gint start_hour,
+                                                gint start_minute);
+gboolean       e_meeting_attendee_set_end_busy_range
+                                               (EMeetingAttendee *ia,
+                                                gint end_year,
+                                                gint end_month,
+                                                gint end_day,
+                                                gint end_hour,
+                                                gint end_minute);
+void           e_meeting_attendee_clear_busy_periods
+                                               (EMeetingAttendee *ia);
 
 G_END_DECLS
 
diff --git a/src/calendar/gui/e-meeting-list-view.c b/src/calendar/gui/e-meeting-list-view.c
index 5bd9fb2eb0..922239e71a 100644
--- a/src/calendar/gui/e-meeting-list-view.c
+++ b/src/calendar/gui/e-meeting-list-view.c
@@ -65,11 +65,11 @@ static const gchar *sections[] = {N_("Chair Persons"),
                                  N_("Resources"),
                                  NULL};
 
-static icalparameter_role roles[] = {ICAL_ROLE_CHAIR,
-                                    ICAL_ROLE_REQPARTICIPANT,
-                                    ICAL_ROLE_OPTPARTICIPANT,
-                                    ICAL_ROLE_NONPARTICIPANT,
-                                    ICAL_ROLE_NONE};
+static ICalParameterRole roles[] = { I_CAL_ROLE_CHAIR,
+                                    I_CAL_ROLE_REQPARTICIPANT,
+                                    I_CAL_ROLE_OPTPARTICIPANT,
+                                    I_CAL_ROLE_NONPARTICIPANT,
+                                    I_CAL_ROLE_NONE };
 
 G_DEFINE_TYPE (EMeetingListView, e_meeting_list_view, GTK_TYPE_TREE_VIEW)
 
@@ -239,16 +239,16 @@ value_edited (GtkTreeView *view,
 }
 
 static guint
-get_index_from_role (icalparameter_role role)
+get_index_from_role (ICalParameterRole role)
 {
        switch (role)   {
-               case ICAL_ROLE_CHAIR:
+               case I_CAL_ROLE_CHAIR:
                        return 0;
-               case ICAL_ROLE_REQPARTICIPANT:
+               case I_CAL_ROLE_REQPARTICIPANT:
                        return 1;
-               case ICAL_ROLE_OPTPARTICIPANT:
+               case I_CAL_ROLE_OPTPARTICIPANT:
                        return 2;
-               case ICAL_ROLE_NONPARTICIPANT:
+               case I_CAL_ROLE_NONPARTICIPANT:
                        return 3;
                default:
                        return 1;
@@ -368,7 +368,7 @@ attendee_edited_cb (GtkCellRenderer *renderer,
                gboolean can_remove = TRUE;
 
                for (l = addresses, m = names; l && m; l = l->next, m = m->next) {
-                       gchar *name = m->data, *email = l->data;
+                       gchar *name = m->data, *email = l->data, *mailto;
 
                        if (!((name && *name) || (email && *email)))
                                        continue;
@@ -381,15 +381,17 @@ attendee_edited_cb (GtkCellRenderer *renderer,
                        }
 
                        attendee = e_meeting_store_add_attendee_with_defaults (model);
-                       e_meeting_attendee_set_address (attendee, g_strdup_printf ("MAILTO:%s", (gchar *) 
l->data));
-                       e_meeting_attendee_set_cn (attendee, g_strdup (m->data));
+                       mailto = g_strdup_printf ("MAILTO:%s", (gchar *) l->data);
+                       e_meeting_attendee_set_address (attendee, mailto);
+                       g_free (mailto);
+                       e_meeting_attendee_set_cn (attendee, m->data);
                        if (existing_attendee) {
                                e_meeting_attendee_set_cutype (attendee, e_meeting_attendee_get_cutype 
(existing_attendee));
                                e_meeting_attendee_set_role (attendee, e_meeting_attendee_get_role 
(existing_attendee));
                                e_meeting_attendee_set_rsvp (attendee, e_meeting_attendee_get_rsvp 
(existing_attendee));
-                               e_meeting_attendee_set_status (attendee, ICAL_PARTSTAT_NEEDSACTION);
-                               e_meeting_attendee_set_delfrom (attendee, g_strdup 
(e_meeting_attendee_get_delfrom (existing_attendee)));
-                               e_meeting_attendee_set_fburi (attendee, g_strdup 
(e_meeting_attendee_get_fburi (existing_attendee)));
+                               e_meeting_attendee_set_partstat (attendee, I_CAL_PARTSTAT_NEEDSACTION);
+                               e_meeting_attendee_set_delfrom (attendee, e_meeting_attendee_get_delfrom 
(existing_attendee));
+                               e_meeting_attendee_set_fburi (attendee, e_meeting_attendee_get_fburi 
(existing_attendee));
                                e_meeting_attendee_set_show_address (attendee, 
e_meeting_attendee_get_show_address (existing_attendee));
                        }
                        e_meeting_list_view_add_attendee_to_name_selector (E_MEETING_LIST_VIEW (view), 
attendee);
@@ -414,6 +416,7 @@ attendee_edited_cb (GtkCellRenderer *renderer,
                        gboolean show_address = FALSE;
                        EMeetingAttendee *attendee;
                        EDestination *destination;
+                       gchar *mailto;
 
                        if (existing_attendee) {
                                const gchar *addr = e_meeting_attendee_get_address (existing_attendee);
@@ -432,9 +435,11 @@ attendee_edited_cb (GtkCellRenderer *renderer,
                        value_edited (view, E_MEETING_STORE_ADDRESS_COL, path, email);
                        value_edited (view, E_MEETING_STORE_CN_COL, path, name);
 
-                       e_meeting_attendee_set_address (attendee, g_strdup_printf ("MAILTO:%s", email));
-                       e_meeting_attendee_set_cn (attendee, g_strdup (name));
-                       e_meeting_attendee_set_role (attendee, ICAL_ROLE_REQPARTICIPANT);
+                       mailto = g_strdup_printf ("MAILTO:%s", email);
+                       e_meeting_attendee_set_address (attendee, mailto);
+                       g_free (mailto);
+                       e_meeting_attendee_set_cn (attendee, name);
+                       e_meeting_attendee_set_role (attendee, I_CAL_ROLE_REQPARTICIPANT);
 
                        destination = e_select_names_renderer_get_destination (E_SELECT_NAMES_RENDERER 
(renderer));
                        if (destination) {
@@ -447,8 +452,7 @@ attendee_edited_cb (GtkCellRenderer *renderer,
                                        fburi = e_contact_get (contact, E_CONTACT_FREEBUSY_URL);
                                        if (fburi && *fburi)
                                                e_meeting_attendee_set_fburi (attendee, fburi);
-                                       else
-                                               g_free (fburi);
+                                       g_free (fburi);
 
                                        if (!e_contact_get (contact, E_CONTACT_IS_LIST)) {
                                                GList *email_list;
@@ -466,7 +470,7 @@ attendee_edited_cb (GtkCellRenderer *renderer,
                        e_meeting_list_view_add_attendee_to_name_selector (E_MEETING_LIST_VIEW (view), 
attendee);
 
                        if (address_changed)
-                               e_meeting_attendee_set_status (attendee, ICAL_PARTSTAT_NEEDSACTION);
+                               e_meeting_attendee_set_partstat (attendee, I_CAL_PARTSTAT_NEEDSACTION);
 
                        g_signal_emit_by_name (view, "attendee_added", (gpointer) attendee);
                }
@@ -875,7 +879,7 @@ e_meeting_list_view_edit (EMeetingListView *emlv,
 static void
 process_section (EMeetingListView *view,
                  GList *destinations,
-                 icalparameter_role role,
+                 ICalParameterRole role,
                  GSList **la)
 {
        EMeetingListViewPrivate *priv;
@@ -1000,18 +1004,19 @@ process_section (EMeetingListView *view,
 
                        if (e_meeting_store_find_attendee (priv->store, email_addr, NULL) == NULL) {
                                EMeetingAttendee *ia = e_meeting_store_add_attendee_with_defaults 
(priv->store);
+                               gchar *mailto;
 
-                               e_meeting_attendee_set_address (ia, g_strdup_printf ("MAILTO:%s", 
email_addr));
+                               mailto = g_strdup_printf ("MAILTO:%s", email_addr);
+                               e_meeting_attendee_set_address (ia, mailto);
+                               g_free (mailto);
                                e_meeting_attendee_set_role (ia, role);
-                               if (role == ICAL_ROLE_NONPARTICIPANT)
-                                       e_meeting_attendee_set_cutype (ia, ICAL_CUTYPE_RESOURCE);
-                               e_meeting_attendee_set_cn (ia, g_strdup (name));
+                               if (role == I_CAL_ROLE_NONPARTICIPANT)
+                                       e_meeting_attendee_set_cutype (ia, I_CAL_CUTYPE_RESOURCE);
+                               e_meeting_attendee_set_cn (ia, name);
                                e_meeting_attendee_set_show_address (ia, show_address);
 
-                               if (fburi) {
+                               if (fburi)
                                        e_meeting_attendee_set_fburi (ia, fburi);
-                                       fburi = NULL;
-                               }
                        } else {
                                if (g_slist_length (*la) == 1) {
                                        g_slist_free (*la);
diff --git a/src/calendar/gui/e-meeting-store.c b/src/calendar/gui/e-meeting-store.c
index 1d897f222b..70a9f0c2ab 100644
--- a/src/calendar/gui/e-meeting-store.c
+++ b/src/calendar/gui/e-meeting-store.c
@@ -49,7 +49,7 @@ struct _EMeetingStorePrivate {
        gint stamp;
 
        ECalClient *client;
-       icaltimezone *zone;
+       ICalTimezone *zone;
 
        gint default_reminder_interval;
        EDurationType default_reminder_units;
@@ -104,32 +104,32 @@ G_DEFINE_TYPE_WITH_CODE (
        G_IMPLEMENT_INTERFACE (E_TYPE_EXTENSIBLE, NULL)
        G_IMPLEMENT_INTERFACE (GTK_TYPE_TREE_MODEL, ems_tree_model_init))
 
-static icalparameter_cutype
+static ICalParameterCutype
 text_to_type (const gchar *type)
 {
        if (!e_util_utf8_strcasecmp (type, _("Individual")))
-               return ICAL_CUTYPE_INDIVIDUAL;
+               return I_CAL_CUTYPE_INDIVIDUAL;
        else if (!e_util_utf8_strcasecmp (type, _("Group")))
-               return ICAL_CUTYPE_GROUP;
+               return I_CAL_CUTYPE_GROUP;
        else if (!e_util_utf8_strcasecmp (type, _("Resource")))
-               return ICAL_CUTYPE_RESOURCE;
+               return I_CAL_CUTYPE_RESOURCE;
        else if (!e_util_utf8_strcasecmp (type, _("Room")))
-               return ICAL_CUTYPE_ROOM;
+               return I_CAL_CUTYPE_ROOM;
        else
-               return ICAL_CUTYPE_NONE;
+               return I_CAL_CUTYPE_NONE;
 }
 
 static gchar *
-type_to_text (icalparameter_cutype type)
+type_to_text (ICalParameterCutype type)
 {
        switch (type) {
-       case ICAL_CUTYPE_INDIVIDUAL:
+       case I_CAL_CUTYPE_INDIVIDUAL:
                return _("Individual");
-       case ICAL_CUTYPE_GROUP:
+       case I_CAL_CUTYPE_GROUP:
                return _("Group");
-       case ICAL_CUTYPE_RESOURCE:
+       case I_CAL_CUTYPE_RESOURCE:
                return _("Resource");
-       case ICAL_CUTYPE_ROOM:
+       case I_CAL_CUTYPE_ROOM:
                return _("Room");
        default:
                return _("Unknown");
@@ -139,32 +139,32 @@ type_to_text (icalparameter_cutype type)
 
 }
 
-static icalparameter_role
+static ICalParameterRole
 text_to_role (const gchar *role)
 {
        if (!e_util_utf8_strcasecmp (role, _("Chair")))
-               return ICAL_ROLE_CHAIR;
+               return I_CAL_ROLE_CHAIR;
        else if (!e_util_utf8_strcasecmp (role, _("Required Participant")))
-               return ICAL_ROLE_REQPARTICIPANT;
+               return I_CAL_ROLE_REQPARTICIPANT;
        else if (!e_util_utf8_strcasecmp (role, _("Optional Participant")))
-               return ICAL_ROLE_OPTPARTICIPANT;
+               return I_CAL_ROLE_OPTPARTICIPANT;
        else if (!e_util_utf8_strcasecmp (role, _("Non-Participant")))
-               return ICAL_ROLE_NONPARTICIPANT;
+               return I_CAL_ROLE_NONPARTICIPANT;
        else
-               return ICAL_ROLE_NONE;
+               return I_CAL_ROLE_NONE;
 }
 
 static gchar *
-role_to_text (icalparameter_role role)
+role_to_text (ICalParameterRole role)
 {
        switch (role) {
-       case ICAL_ROLE_CHAIR:
+       case I_CAL_ROLE_CHAIR:
                return _("Chair");
-       case ICAL_ROLE_REQPARTICIPANT:
+       case I_CAL_ROLE_REQPARTICIPANT:
                return _("Required Participant");
-       case ICAL_ROLE_OPTPARTICIPANT:
+       case I_CAL_ROLE_OPTPARTICIPANT:
                return _("Optional Participant");
-       case ICAL_ROLE_NONPARTICIPANT:
+       case I_CAL_ROLE_NONPARTICIPANT:
                return _("Non-Participant");
        default:
                return _("Unknown");
@@ -189,46 +189,46 @@ boolean_to_text (gboolean b)
                return _("No");
 }
 
-static icalparameter_partstat
+static ICalParameterPartstat
 text_to_partstat (const gchar *partstat)
 {
        if (!e_util_utf8_strcasecmp (partstat, _("Needs Action")))
-               return ICAL_PARTSTAT_NEEDSACTION;
+               return I_CAL_PARTSTAT_NEEDSACTION;
        else if (!e_util_utf8_strcasecmp (partstat, _("Accepted")))
-               return ICAL_PARTSTAT_ACCEPTED;
+               return I_CAL_PARTSTAT_ACCEPTED;
        else if (!e_util_utf8_strcasecmp (partstat, _("Declined")))
-               return ICAL_PARTSTAT_DECLINED;
+               return I_CAL_PARTSTAT_DECLINED;
        else if (!e_util_utf8_strcasecmp (partstat, _("Tentative")))
-               return ICAL_PARTSTAT_TENTATIVE;
+               return I_CAL_PARTSTAT_TENTATIVE;
        else if (!e_util_utf8_strcasecmp (partstat, _("Delegated")))
-               return ICAL_PARTSTAT_DELEGATED;
+               return I_CAL_PARTSTAT_DELEGATED;
        else if (!e_util_utf8_strcasecmp (partstat, _("Completed")))
-               return ICAL_PARTSTAT_COMPLETED;
+               return I_CAL_PARTSTAT_COMPLETED;
        else if (!e_util_utf8_strcasecmp (partstat, _("In Process")))
-               return ICAL_PARTSTAT_INPROCESS;
+               return I_CAL_PARTSTAT_INPROCESS;
        else
-               return ICAL_PARTSTAT_NONE;
+               return I_CAL_PARTSTAT_NONE;
 }
 
 static gchar *
-partstat_to_text (icalparameter_partstat partstat)
+partstat_to_text (ICalParameterPartstat partstat)
 {
        switch (partstat) {
-       case ICAL_PARTSTAT_NEEDSACTION:
+       case I_CAL_PARTSTAT_NEEDSACTION:
                return _("Needs Action");
-       case ICAL_PARTSTAT_ACCEPTED:
+       case I_CAL_PARTSTAT_ACCEPTED:
                return _("Accepted");
-       case ICAL_PARTSTAT_DECLINED:
+       case I_CAL_PARTSTAT_DECLINED:
                return _("Declined");
-       case ICAL_PARTSTAT_TENTATIVE:
+       case I_CAL_PARTSTAT_TENTATIVE:
                return _("Tentative");
-       case ICAL_PARTSTAT_DELEGATED:
+       case I_CAL_PARTSTAT_DELEGATED:
                return _("Delegated");
-       case ICAL_PARTSTAT_COMPLETED:
+       case I_CAL_PARTSTAT_COMPLETED:
                return _("Completed");
-       case ICAL_PARTSTAT_INPROCESS:
+       case I_CAL_PARTSTAT_INPROCESS:
                return _("In Process");
-       case ICAL_PARTSTAT_NONE:
+       case I_CAL_PARTSTAT_NONE:
        default:
                return _("Unknown");
        }
@@ -384,7 +384,7 @@ get_value (GtkTreeModel *model,
                g_value_init (value, G_TYPE_STRING);
                g_value_set_string (
                        value, partstat_to_text (
-                       e_meeting_attendee_get_status (attendee)));
+                       e_meeting_attendee_get_partstat (attendee)));
                break;
        case E_MEETING_STORE_CN_COL:
                g_value_init (value, G_TYPE_STRING);
@@ -535,24 +535,27 @@ e_meeting_store_set_value (EMeetingStore *store,
                            gint col,
                            const gchar *val)
 {
-       icalparameter_cutype type;
+       ICalParameterCutype cutype;
        EMeetingAttendee *attendee = g_ptr_array_index (store->priv->attendees, row);
 
        switch (col) {
        case E_MEETING_STORE_ADDRESS_COL:
-               if (val != NULL && *((gchar *) val))
-                       e_meeting_attendee_set_address (
-                               attendee, g_strdup_printf (
-                               "MAILTO:%s", (gchar *) val));
+               if (val != NULL && *((gchar *) val)) {
+                       gchar *mailto;
+
+                       mailto = g_strdup_printf ("MAILTO:%s", (const gchar *) val);
+                       e_meeting_attendee_set_address (attendee, mailto);
+                       g_free (mailto);
+               }
                break;
        case E_MEETING_STORE_MEMBER_COL:
-               e_meeting_attendee_set_member (attendee, g_strdup (val));
+               e_meeting_attendee_set_member (attendee, val);
                break;
        case E_MEETING_STORE_TYPE_COL:
-               type = text_to_type (val);
-               e_meeting_attendee_set_cutype (attendee, text_to_type (val));
-               if (type == ICAL_CUTYPE_RESOURCE) {
-                       e_meeting_attendee_set_role (attendee, ICAL_ROLE_NONPARTICIPANT);
+               cutype = text_to_type (val);
+               e_meeting_attendee_set_cutype (attendee, cutype);
+               if (cutype == I_CAL_CUTYPE_RESOURCE) {
+                       e_meeting_attendee_set_role (attendee, I_CAL_ROLE_NONPARTICIPANT);
                }
                break;
        case E_MEETING_STORE_ROLE_COL:
@@ -562,19 +565,19 @@ e_meeting_store_set_value (EMeetingStore *store,
                e_meeting_attendee_set_rsvp (attendee, text_to_boolean (val));
                break;
        case E_MEETING_STORE_DELTO_COL:
-               e_meeting_attendee_set_delto (attendee, g_strdup (val));
+               e_meeting_attendee_set_delto (attendee, val);
                break;
        case E_MEETING_STORE_DELFROM_COL:
-               e_meeting_attendee_set_delfrom (attendee, g_strdup (val));
+               e_meeting_attendee_set_delfrom (attendee, val);
                break;
        case E_MEETING_STORE_STATUS_COL:
-               e_meeting_attendee_set_status (attendee, text_to_partstat (val));
+               e_meeting_attendee_set_partstat (attendee, text_to_partstat (val));
                break;
        case E_MEETING_STORE_CN_COL:
-               e_meeting_attendee_set_cn (attendee, g_strdup (val));
+               e_meeting_attendee_set_cn (attendee, val);
                break;
        case E_MEETING_STORE_LANGUAGE_COL:
-               e_meeting_attendee_set_language (attendee, g_strdup (val));
+               e_meeting_attendee_set_language (attendee, val);
                break;
        }
 }
@@ -776,6 +779,8 @@ meeting_store_finalize (GObject *object)
 
        g_free (priv->fb_uri);
 
+       g_clear_object (&priv->zone);
+
        g_mutex_clear (&priv->mutex);
 
        /* Chain up to parent's finalize() method. */
@@ -977,7 +982,7 @@ e_meeting_store_set_free_busy_template (EMeetingStore *store,
        g_object_notify (G_OBJECT (store), "free-busy-template");
 }
 
-icaltimezone *
+ICalTimezone *
 e_meeting_store_get_timezone (EMeetingStore *store)
 {
        g_return_val_if_fail (E_IS_MEETING_STORE (store), NULL);
@@ -987,14 +992,15 @@ e_meeting_store_get_timezone (EMeetingStore *store)
 
 void
 e_meeting_store_set_timezone (EMeetingStore *store,
-                              icaltimezone *timezone)
+                             const ICalTimezone *timezone)
 {
        g_return_if_fail (E_IS_MEETING_STORE (store));
 
        if (store->priv->zone == timezone)
                return;
 
-       store->priv->zone = timezone;
+       g_clear_object (&store->priv->zone);
+       store->priv->zone = e_cal_util_copy_timezone (timezone);
 
        g_object_notify (G_OBJECT (store), "timezone");
 }
@@ -1078,8 +1084,8 @@ e_meeting_store_add_attendee_with_defaults (EMeetingStore *store)
 
        attendee = E_MEETING_ATTENDEE (e_meeting_attendee_new ());
 
-       e_meeting_attendee_set_address (attendee, g_strdup (""));
-       e_meeting_attendee_set_member (attendee, g_strdup (""));
+       e_meeting_attendee_set_address (attendee, "");
+       e_meeting_attendee_set_member (attendee, "");
 
        str = g_strdup (_("Individual"));
        e_meeting_attendee_set_cutype (attendee, text_to_type (str));
@@ -1091,15 +1097,15 @@ e_meeting_store_add_attendee_with_defaults (EMeetingStore *store)
        e_meeting_attendee_set_rsvp (attendee, text_to_boolean (str));
        g_free (str);
 
-       e_meeting_attendee_set_delto (attendee, g_strdup (""));
-       e_meeting_attendee_set_delfrom (attendee, g_strdup (""));
+       e_meeting_attendee_set_delto (attendee, "");
+       e_meeting_attendee_set_delfrom (attendee, "");
 
        str = g_strdup (_("Needs Action"));
-       e_meeting_attendee_set_status (attendee, text_to_partstat (str));
+       e_meeting_attendee_set_partstat (attendee, text_to_partstat (str));
        g_free (str);
 
-       e_meeting_attendee_set_cn (attendee, g_strdup (""));
-       e_meeting_attendee_set_language (attendee, g_strdup ("en"));
+       e_meeting_attendee_set_cn (attendee, "");
+       e_meeting_attendee_set_language (attendee, "en");
 
        e_meeting_store_add_attendee (store, attendee);
 
@@ -1308,44 +1314,57 @@ e_meeting_store_get_attendees (EMeetingStore *store)
        return store->priv->attendees;
 }
 
-static icaltimezone *
-find_zone (icalproperty *ip,
-           icalcomponent *tz_top_level)
+static ICalTimezone *
+find_zone (ICalProperty *in_prop,
+          ICalComponent *tz_top_level)
 {
-       icalparameter *param;
-       icalcomponent *sub_comp;
+       ICalParameter *param;
+       ICalComponent *subcomp;
        const gchar *tzid;
-       icalcompiter iter;
+       ICalCompIter *iter;
 
        if (tz_top_level == NULL)
                return NULL;
 
-       param = icalproperty_get_first_parameter (ip, ICAL_TZID_PARAMETER);
+       param = i_cal_property_get_first_parameter (in_prop, I_CAL_TZID_PARAMETER);
        if (param == NULL)
                return NULL;
-       tzid = icalparameter_get_tzid (param);
+       tzid = i_cal_parameter_get_tzid (param);
+
+       iter = i_cal_component_begin_component (tz_top_level, I_CAL_VTIMEZONE_COMPONENT);
+       subcomp = i_cal_comp_iter_deref (iter);
+       while (subcomp) {
+               ICalComponent *next_subcomp;
+               ICalProperty *prop;
+
+               next_subcomp = i_cal_comp_iter_next (iter);
 
-       iter = icalcomponent_begin_component (tz_top_level, ICAL_VTIMEZONE_COMPONENT);
-       while ((sub_comp = icalcompiter_deref (&iter)) != NULL) {
-               icalcomponent *clone;
-               icalproperty *prop;
-               const gchar *tz_tzid;
+               prop = i_cal_component_get_first_property (subcomp, I_CAL_TZID_PROPERTY);
+               if (prop && !g_strcmp0 (tzid, i_cal_property_get_tzid (prop))) {
+                       ICalComponent *clone;
+                       ICalTimezone *zone;
 
-               prop = icalcomponent_get_first_property (sub_comp, ICAL_TZID_PROPERTY);
-               tz_tzid = icalproperty_get_tzid (prop);
-               if (!strcmp (tzid, tz_tzid)) {
-                       icaltimezone *zone;
+                       zone = i_cal_timezone_new ();
+                       clone = i_cal_component_new_clone (subcomp);
+                       i_cal_timezone_set_component (zone, clone);
 
-                       zone = icaltimezone_new ();
-                       clone = icalcomponent_new_clone (sub_comp);
-                       icaltimezone_set_component (zone, clone);
+                       g_clear_object (&next_subcomp);
+                       g_clear_object (&subcomp);
+                       g_clear_object (&param);
+                       g_clear_object (&prop);
+                       g_clear_object (&iter);
 
                        return zone;
                }
 
-               icalcompiter_next (&iter);
+               g_clear_object (&prop);
+               g_object_unref (subcomp);
+               subcomp = next_subcomp;
        }
 
+       g_clear_object (&param);
+       g_clear_object (&iter);
+
        return NULL;
 }
 
@@ -1376,106 +1395,122 @@ process_callbacks (EMeetingStoreQueueData *qdata)
 }
 
 static void
-process_free_busy_comp_get_xfb (icalproperty *ip,
+process_free_busy_comp_get_xfb (ICalProperty *ip,
                                 gchar **summary,
                                 gchar **location)
 {
-       const gchar *tmp = NULL;
+       gchar *tmp;
 
        g_return_if_fail (ip != NULL);
        g_return_if_fail (summary != NULL && *summary == NULL);
        g_return_if_fail (location != NULL && *location == NULL);
 
-       /* We extract extended free/busy information from the icalproperty
+       /* We extract extended free/busy information from the ICalProperty
         * here (X-SUMMARY and X-LOCATION). If the property carries such,
         * it will be displayed as a tooltip for the busy period. Otherwise,
         * nothing will happen (*summary and/or *location will be NULL)
         */
 
-       tmp = icalproperty_get_parameter_as_string (
-               ip, E_MEETING_FREE_BUSY_XPROP_SUMMARY);
-       *summary = e_meeting_xfb_utf8_string_new_from_ical (
-               tmp, E_MEETING_FREE_BUSY_XPROP_MAXLEN);
-       tmp = icalproperty_get_parameter_as_string (
-               ip, E_MEETING_FREE_BUSY_XPROP_LOCATION);
-       *location = e_meeting_xfb_utf8_string_new_from_ical (
-               tmp, E_MEETING_FREE_BUSY_XPROP_MAXLEN);
+       tmp = i_cal_property_get_parameter_as_string_r (ip, E_MEETING_FREE_BUSY_XPROP_SUMMARY);
+       *summary = e_meeting_xfb_utf8_string_new_from_ical (tmp, E_MEETING_FREE_BUSY_XPROP_MAXLEN);
+       g_free (tmp);
+
+       tmp = i_cal_property_get_parameter_as_string_r (ip, E_MEETING_FREE_BUSY_XPROP_LOCATION);
+       *location = e_meeting_xfb_utf8_string_new_from_ical (tmp, E_MEETING_FREE_BUSY_XPROP_MAXLEN);
+       g_free (tmp);
 }
 
 static void
 process_free_busy_comp (EMeetingAttendee *attendee,
-                        icalcomponent *fb_comp,
-                        icaltimezone *zone,
-                        icalcomponent *tz_top_level)
+                       ICalComponent *fb_comp,
+                       ICalTimezone *zone,
+                       ICalComponent *tz_top_level)
 {
-       icalproperty *ip;
+       ICalProperty *ip;
 
-       ip = icalcomponent_get_first_property (fb_comp, ICAL_DTSTART_PROPERTY);
+       ip = i_cal_component_get_first_property (fb_comp, I_CAL_DTSTART_PROPERTY);
        if (ip != NULL) {
-               struct icaltimetype dtstart;
-               icaltimezone *ds_zone;
-
-               dtstart = icalproperty_get_dtstart (ip);
-               if (!icaltime_is_utc (dtstart))
-                       ds_zone = find_zone (ip, tz_top_level);
-               else
-                       ds_zone = icaltimezone_get_utc_timezone ();
-               icaltimezone_convert_time (&dtstart, ds_zone, zone);
-               e_meeting_attendee_set_start_busy_range (
-                       attendee,
-                       dtstart.year,
-                       dtstart.month,
-                       dtstart.day,
-                       dtstart.hour,
-                       dtstart.minute);
+               ICalTime *dtstart;
+               ICalTimezone *ds_zone;
+
+               dtstart = i_cal_property_get_dtstart (ip);
+               if (dtstart) {
+                       if (!i_cal_time_is_utc (dtstart))
+                               ds_zone = find_zone (ip, tz_top_level);
+                       else
+                               ds_zone = g_object_ref (i_cal_timezone_get_utc_timezone ());
+                       i_cal_timezone_convert_time (dtstart, ds_zone, zone);
+
+                       e_meeting_attendee_set_start_busy_range (
+                               attendee,
+                               i_cal_time_get_year (dtstart),
+                               i_cal_time_get_month (dtstart),
+                               i_cal_time_get_day (dtstart),
+                               i_cal_time_get_hour (dtstart),
+                               i_cal_time_get_minute (dtstart));
+
+                       g_clear_object (&ds_zone);
+                       g_clear_object (&dtstart);
+               }
        }
+       g_clear_object (&ip);
 
-       ip = icalcomponent_get_first_property (fb_comp, ICAL_DTEND_PROPERTY);
+       ip = i_cal_component_get_first_property (fb_comp, I_CAL_DTEND_PROPERTY);
        if (ip != NULL) {
-               struct icaltimetype dtend;
-               icaltimezone *de_zone;
-
-               dtend = icalproperty_get_dtend (ip);
-               if (!icaltime_is_utc (dtend))
-                       de_zone = find_zone (ip, tz_top_level);
-               else
-                       de_zone = icaltimezone_get_utc_timezone ();
-               icaltimezone_convert_time (&dtend, de_zone, zone);
-               e_meeting_attendee_set_end_busy_range (
-                       attendee,
-                       dtend.year,
-                       dtend.month,
-                       dtend.day,
-                       dtend.hour,
-                       dtend.minute);
+               ICalTime *dtend;
+               ICalTimezone *de_zone;
+
+               dtend = i_cal_property_get_dtend (ip);
+               if (dtend) {
+                       if (!i_cal_time_is_utc (dtend))
+                               de_zone = find_zone (ip, tz_top_level);
+                       else
+                               de_zone = g_object_ref (i_cal_timezone_get_utc_timezone ());
+                       i_cal_timezone_convert_time (dtend, de_zone, zone);
+
+                       e_meeting_attendee_set_end_busy_range (
+                               attendee,
+                               i_cal_time_get_year (dtend),
+                               i_cal_time_get_month (dtend),
+                               i_cal_time_get_day (dtend),
+                               i_cal_time_get_hour (dtend),
+                               i_cal_time_get_minute (dtend));
+
+                       g_clear_object (&de_zone);
+                       g_clear_object (&dtend);
+               }
        }
+       g_clear_object (&ip);
 
-       ip = icalcomponent_get_first_property (fb_comp, ICAL_FREEBUSY_PROPERTY);
-       while (ip != NULL) {
-               icalparameter *param;
-               struct icalperiodtype fb;
+       for (ip = i_cal_component_get_first_property (fb_comp, I_CAL_FREEBUSY_PROPERTY);
+            ip;
+            g_object_unref (ip), ip = i_cal_component_get_next_property (fb_comp, I_CAL_FREEBUSY_PROPERTY)) {
+               ICalParameter *param;
+               ICalPeriod *fb;
                EMeetingFreeBusyType busy_type = E_MEETING_FREE_BUSY_LAST;
-               icalparameter_fbtype fbtype = ICAL_FBTYPE_BUSY;
+               ICalParameterFbtype fbtype = I_CAL_FBTYPE_BUSY;
 
-               fb = icalproperty_get_freebusy (ip);
-               param = icalproperty_get_first_parameter (ip, ICAL_FBTYPE_PARAMETER);
-               if (param != NULL)
-                       fbtype = icalparameter_get_fbtype (param);
+               fb = i_cal_property_get_freebusy (ip);
+               param = i_cal_property_get_first_parameter (ip, I_CAL_FBTYPE_PARAMETER);
+               if (param) {
+                       fbtype = i_cal_parameter_get_fbtype (param);
+                       g_clear_object (&param);
+               }
 
                switch (fbtype) {
-               case ICAL_FBTYPE_BUSY:
+               case I_CAL_FBTYPE_BUSY:
                        busy_type = E_MEETING_FREE_BUSY_BUSY;
                        break;
 
-               case ICAL_FBTYPE_BUSYUNAVAILABLE:
+               case I_CAL_FBTYPE_BUSYUNAVAILABLE:
                        busy_type = E_MEETING_FREE_BUSY_OUT_OF_OFFICE;
                        break;
 
-               case ICAL_FBTYPE_BUSYTENTATIVE:
+               case I_CAL_FBTYPE_BUSYTENTATIVE:
                        busy_type = E_MEETING_FREE_BUSY_TENTATIVE;
                        break;
 
-               case ICAL_FBTYPE_FREE:
+               case I_CAL_FBTYPE_FREE:
                        busy_type = E_MEETING_FREE_BUSY_FREE;
                        break;
 
@@ -1484,15 +1519,19 @@ process_free_busy_comp (EMeetingAttendee *attendee,
                }
 
                if (busy_type != E_MEETING_FREE_BUSY_LAST) {
-                       icaltimezone *utc_zone = icaltimezone_get_utc_timezone ();
+                       ICalTimezone *utc_zone = i_cal_timezone_get_utc_timezone ();
+                       ICalTime *fbstart, *fbend;
                        gchar *summary = NULL;
                        gchar *location = NULL;
 
-                       icaltimezone_convert_time (&fb.start, utc_zone, zone);
-                       icaltimezone_convert_time (&fb.end, utc_zone, zone);
+                       fbstart = i_cal_period_get_start (fb);
+                       fbend = i_cal_period_get_end (fb);
+
+                       i_cal_timezone_convert_time (fbstart, utc_zone, zone);
+                       i_cal_timezone_convert_time (fbend, utc_zone, zone);
 
                        /* Extract extended free/busy (XFB) information from
-                        * the icalproperty, if it carries such.
+                        * the ICalProperty, if it carries such.
                         * See the comment for the EMeetingXfbData structure
                         * for a reference.
                         */
@@ -1500,77 +1539,91 @@ process_free_busy_comp (EMeetingAttendee *attendee,
 
                        e_meeting_attendee_add_busy_period (
                                attendee,
-                               fb.start.year,
-                               fb.start.month,
-                               fb.start.day,
-                               fb.start.hour,
-                               fb.start.minute,
-                               fb.end.year,
-                               fb.end.month,
-                               fb.end.day,
-                               fb.end.hour,
-                               fb.end.minute,
+                               i_cal_time_get_year (fbstart),
+                               i_cal_time_get_month (fbstart),
+                               i_cal_time_get_day (fbstart),
+                               i_cal_time_get_hour (fbstart),
+                               i_cal_time_get_minute (fbstart),
+                               i_cal_time_get_year (fbend),
+                               i_cal_time_get_month (fbend),
+                               i_cal_time_get_day (fbend),
+                               i_cal_time_get_hour (fbend),
+                               i_cal_time_get_minute (fbend),
                                busy_type,
                                summary,
                                location);
 
-                       if (summary != NULL)
-                               g_free (summary);
-                       if (location != NULL)
-                               g_free (location);
+                       g_clear_object (&fbstart);
+                       g_clear_object (&fbend);
+                       g_free (summary);
+                       g_free (location);
                }
 
-               ip = icalcomponent_get_next_property (fb_comp, ICAL_FREEBUSY_PROPERTY);
+               g_clear_object (&fb);
        }
 }
 
 static void
 process_free_busy (EMeetingStoreQueueData *qdata,
-                   gchar *text)
+                  const gchar *text)
 {
        EMeetingStore *store = qdata->store;
        EMeetingStorePrivate *priv;
        EMeetingAttendee *attendee = qdata->attendee;
-       icalcomponent *main_comp;
-       icalcomponent_kind kind = ICAL_NO_COMPONENT;
+       ICalComponent *main_comp;
+       ICalComponentKind kind = I_CAL_NO_COMPONENT;
 
        priv = store->priv;
 
-       main_comp = icalparser_parse_string (text);
+       main_comp = i_cal_parser_parse_string (text);
        if (main_comp == NULL) {
                process_callbacks (qdata);
                return;
        }
 
-       kind = icalcomponent_isa (main_comp);
-       if (kind == ICAL_VCALENDAR_COMPONENT) {
-               icalcompiter iter;
-               icalcomponent *tz_top_level, *sub_comp;
+       kind = i_cal_component_isa (main_comp);
+       if (kind == I_CAL_VCALENDAR_COMPONENT) {
+               ICalCompIter *iter;
+               ICalComponent *tz_top_level, *subcomp;
 
                tz_top_level = e_cal_util_new_top_level ();
 
-               iter = icalcomponent_begin_component (main_comp, ICAL_VTIMEZONE_COMPONENT);
-               while ((sub_comp = icalcompiter_deref (&iter)) != NULL) {
-                       icalcomponent *clone;
+               iter = i_cal_component_begin_component (main_comp, I_CAL_VTIMEZONE_COMPONENT);
+               subcomp = i_cal_comp_iter_deref (iter);
+               while (subcomp) {
+                       ICalComponent *next_subcomp;
 
-                       clone = icalcomponent_new_clone (sub_comp);
-                       icalcomponent_add_component (tz_top_level, clone);
+                       next_subcomp = i_cal_comp_iter_next (iter);
 
-                       icalcompiter_next (&iter);
+                       i_cal_component_take_component (tz_top_level,
+                               i_cal_component_new_clone (subcomp));
+
+                       g_object_unref (subcomp);
+                       subcomp = next_subcomp;
                }
 
-               iter = icalcomponent_begin_component (main_comp, ICAL_VFREEBUSY_COMPONENT);
-               while ((sub_comp = icalcompiter_deref (&iter)) != NULL) {
-                       process_free_busy_comp (attendee, sub_comp, priv->zone, tz_top_level);
+               g_clear_object (&iter);
+
+               iter = i_cal_component_begin_component (main_comp, I_CAL_VFREEBUSY_COMPONENT);
+               subcomp = i_cal_comp_iter_deref (iter);
+               while (subcomp) {
+                       ICalComponent *next_subcomp;
 
-                       icalcompiter_next (&iter);
+                       next_subcomp = i_cal_comp_iter_next (iter);
+
+                       process_free_busy_comp (attendee, subcomp, priv->zone, tz_top_level);
+
+                       g_object_unref (subcomp);
+                       subcomp = next_subcomp;
                }
-               icalcomponent_free (tz_top_level);
-       } else if (kind == ICAL_VFREEBUSY_COMPONENT) {
+
+               g_clear_object (&iter);
+               g_clear_object (&tz_top_level);
+       } else if (kind == I_CAL_VFREEBUSY_COMPONENT) {
                process_free_busy_comp (attendee, main_comp, priv->zone, NULL);
        }
 
-       icalcomponent_free (main_comp);
+       g_clear_object (&main_comp);
 
        process_callbacks (qdata);
 }
@@ -1747,25 +1800,33 @@ refresh_busy_periods (gpointer data)
 
        /* Check the server for free busy data */
        if (priv->client) {
-               struct icaltimetype itt;
-
-               itt = icaltime_null_time ();
-               itt.year = g_date_get_year (&qdata->start.date);
-               itt.month = g_date_get_month (&qdata->start.date);
-               itt.day = g_date_get_day (&qdata->start.date);
-               itt.hour = qdata->start.hour;
-               itt.minute = qdata->start.minute;
-               fbd->startt = icaltime_as_timet_with_zone (itt, priv->zone);
-
-               itt = icaltime_null_time ();
-               itt.year = g_date_get_year (&qdata->end.date);
-               itt.month = g_date_get_month (&qdata->end.date);
-               itt.day = g_date_get_day (&qdata->end.date);
-               itt.hour = qdata->end.hour;
-               itt.minute = qdata->end.minute;
-               fbd->endt = icaltime_as_timet_with_zone (itt, priv->zone);
-               fbd->qdata = qdata;
+               ICalTime *itt;
+
+               itt = i_cal_time_null_time ();
+               i_cal_time_set_date (itt,
+                       g_date_get_year (&qdata->start.date),
+                       g_date_get_month (&qdata->start.date),
+                       g_date_get_day (&qdata->start.date));
+               i_cal_time_set_time (itt,
+                       qdata->start.hour,
+                       qdata->start.minute,
+                       0);
+               fbd->startt = i_cal_time_as_timet_with_zone (itt, priv->zone);
+               g_clear_object (&itt);
+
+               itt = i_cal_time_null_time ();
+               i_cal_time_set_date (itt,
+                       g_date_get_year (&qdata->end.date),
+                       g_date_get_month (&qdata->end.date),
+                       g_date_get_day (&qdata->end.date));
+               i_cal_time_set_time (itt,
+                       qdata->end.hour,
+                       qdata->end.minute,
+                       0);
+               fbd->endt = i_cal_time_as_timet_with_zone (itt, priv->zone);
+               g_clear_object (&itt);
 
+               fbd->qdata = qdata;
                fbd->users = g_slist_append (fbd->users, g_strdup (fbd->email));
 
        }
diff --git a/src/calendar/gui/e-meeting-utils.c b/src/calendar/gui/e-meeting-utils.c
index e7df2f89fa..8b9678e6b0 100644
--- a/src/calendar/gui/e-meeting-utils.c
+++ b/src/calendar/gui/e-meeting-utils.c
@@ -93,7 +93,7 @@ e_meeting_xfb_data_clear (EMeetingXfbData *xfb)
 }
 
 /* Creates an XFB string from a string property of a vfreebusy
- * icalproperty. The ical string we read may be base64 encoded, but
+ * ICalProperty. The iCal string we read may be base64 encoded, but
  * we get no reliable indication whether it really is. So we
  * try to base64-decode, and failing that, assume the string
  * is plain. The result is validated for UTF-8. We try to convert
@@ -117,7 +117,7 @@ e_meeting_xfb_utf8_string_new_from_ical (const gchar *icalstring,
        if (icalstring == NULL)
                return NULL;
 
-       /* ical does not carry charset hints, so we
+       /* iCal does not carry charset hints, so we
         * try UTF-8 first, then conversion using
         * system locale info.
         */


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]