[evolution/wip/mcrha/eds-libical-glib] Finish e-comp-editor-page-recurrence.c to use libical-glib exclusively



commit a0aed16f38efd0d58f3d089c7372e4b8e0509dae
Author: Milan Crha <mcrha redhat com>
Date:   Tue Apr 9 12:49:34 2019 +0200

    Finish e-comp-editor-page-recurrence.c to use libical-glib exclusively

 src/calendar/gui/e-comp-editor-page-recurrence.c | 293 ++++++++++++-----------
 1 file changed, 151 insertions(+), 142 deletions(-)
---
diff --git a/src/calendar/gui/e-comp-editor-page-recurrence.c 
b/src/calendar/gui/e-comp-editor-page-recurrence.c
index 6104f2b04a..aacbe60eb9 100644
--- a/src/calendar/gui/e-comp-editor-page-recurrence.c
+++ b/src/calendar/gui/e-comp-editor-page-recurrence.c
@@ -92,10 +92,10 @@ enum recur_type {
 };
 
 static const gint freq_map[] = {
-       ICAL_DAILY_RECURRENCE,
-       ICAL_WEEKLY_RECURRENCE,
-       ICAL_MONTHLY_RECURRENCE,
-       ICAL_YEARLY_RECURRENCE,
+       I_CAL_DAILY_RECURRENCE,
+       I_CAL_WEEKLY_RECURRENCE,
+       I_CAL_MONTHLY_RECURRENCE,
+       I_CAL_YEARLY_RECURRENCE,
        -1
 };
 
@@ -148,7 +148,7 @@ struct _ECompEditorPageRecurrencePrivate {
 
        /* For ending date, created by hand */
        GtkWidget *ending_date_edit;
-       struct icaltimetype ending_date_tt;
+       ICalTime *ending_date_tt;
 
        /* For ending count of occurrences, created by hand */
        GtkWidget *ending_count_spin;
@@ -863,7 +863,7 @@ ecep_recurrence_make_monthly_special (ECompEditorPageRecurrence *page_recurrence
 static void
 ecep_recurrence_make_recurrence_special (ECompEditorPageRecurrence *page_recurrence)
 {
-       icalrecurrencetype_frequency frequency;
+       ICalRecurrenceFrequency frequency;
        GtkWidget *child;
 
        g_return_if_fail (E_IS_COMP_EDITOR_PAGE_RECURRENCE (page_recurrence));
@@ -884,21 +884,21 @@ ecep_recurrence_make_recurrence_special (ECompEditorPageRecurrence *page_recurre
        frequency = e_dialog_combo_box_get (page_recurrence->priv->recr_interval_unit_combo, freq_map);
 
        switch (frequency) {
-       case ICAL_DAILY_RECURRENCE:
+       case I_CAL_DAILY_RECURRENCE:
                gtk_widget_hide (page_recurrence->priv->recr_interval_special_box);
                break;
 
-       case ICAL_WEEKLY_RECURRENCE:
+       case I_CAL_WEEKLY_RECURRENCE:
                ecep_recurrence_make_weekly_special (page_recurrence);
                gtk_widget_show (page_recurrence->priv->recr_interval_special_box);
                break;
 
-       case ICAL_MONTHLY_RECURRENCE:
+       case I_CAL_MONTHLY_RECURRENCE:
                ecep_recurrence_make_monthly_special (page_recurrence);
                gtk_widget_show (page_recurrence->priv->recr_interval_special_box);
                break;
 
-       case ICAL_YEARLY_RECURRENCE:
+       case I_CAL_YEARLY_RECURRENCE:
                gtk_widget_hide (page_recurrence->priv->recr_interval_special_box);
                break;
 
@@ -907,16 +907,21 @@ ecep_recurrence_make_recurrence_special (ECompEditorPageRecurrence *page_recurre
        }
 }
 
-/* Counts the elements in the by_xxx fields of an icalrecurrencetype */
+/* Counts the elements in the by_xxx fields of an ICalRecurrence */
 static gint
-ecep_recurrence_count_by_xxx (gshort *field,
-                             gint max_elements)
+ecep_recurrence_count_by_xxx_and_free (GArray *array) /* gshort */
 {
        gint ii;
 
-       for (ii = 0; ii < max_elements; ii++)
-               if (field[ii] == ICAL_RECURRENCE_ARRAY_MAX)
+       if (!array)
+               return 0;
+
+       for (ii = 0; ii < array->len; ii++) {
+               if (g_array_index (array, gshort, ii) == I_CAL_RECURRENCE_ARRAY_MAX)
                        break;
+       }
+
+       g_array_unref (array);
 
        return ii;
 }
@@ -962,9 +967,9 @@ ecep_recurrence_make_ending_until_special (ECompEditorPageRecurrence *page_recur
                e_date_edit_set_date (date_edit, i_cal_time_get_year (itt), i_cal_time_get_month (itt), 
i_cal_time_get_day (itt));
        } else {
                e_date_edit_set_date (date_edit,
-                       page_recurrence->priv->ending_date_tt.year,
-                       page_recurrence->priv->ending_date_tt.month,
-                       page_recurrence->priv->ending_date_tt.day);
+                       i_cal_time_get_year (page_recurrence->priv->ending_date_tt),
+                       i_cal_time_get_month (page_recurrence->priv->ending_date_tt),
+                       i_cal_time_get_day (page_recurrence->priv->ending_date_tt));
        }
 
        g_signal_connect_swapped (
@@ -1068,15 +1073,19 @@ ecep_recurrence_make_ending_special (ECompEditorPageRecurrence *page_recurrence)
  */
 static void
 ecep_recurrence_fill_ending_date (ECompEditorPageRecurrence *page_recurrence,
-                                 struct icalrecurrencetype *rrule,
+                                 ICalRecurrence *rrule,
                                  ICalComponent *component)
 {
        g_return_if_fail (E_IS_COMP_EDITOR_PAGE_RECURRENCE (page_recurrence));
 
        g_signal_handlers_block_matched (page_recurrence->priv->recr_ending_combo, G_SIGNAL_MATCH_DATA, 0, 0, 
NULL, NULL, page_recurrence);
 
-       if (rrule->count == 0) {
-               if (rrule->until.year == 0) {
+       if (i_cal_recurrence_get_count (rrule) == 0) {
+               ICalTime *until;
+
+               until = i_cal_recurrence_get_until (rrule);
+
+               if (!until || i_cal_time_get_year (until) == 0) {
                        /* Forever */
 
                        e_dialog_combo_box_set (
@@ -1086,37 +1095,36 @@ ecep_recurrence_fill_ending_date (ECompEditorPageRecurrence *page_recurrence,
                } else {
                        /* Ending date */
 
-                       if (!rrule->until.is_date) {
-                               icaltimezone *from_zone, *to_zone = NULL;
-                               ICalTimezone *izone;
+                       if (!i_cal_time_is_date (until)) {
+                               ICalTimezone *from_zone, *to_zone = NULL;
                                ICalTime *dtstart;
 
                                dtstart = i_cal_component_get_dtstart (component);
 
-                               from_zone = icaltimezone_get_utc_timezone ();
-                               izone = dtstart ? i_cal_time_get_timezone (dtstart) : NULL;
-                               if (izone)
-                                       to_zone = i_cal_object_get_native (I_CAL_OBJECT (izone));
+                               from_zone = i_cal_timezone_get_utc_timezone ();
+                               to_zone = dtstart ? i_cal_time_get_timezone (dtstart) : NULL;
 
                                if (to_zone)
-                                       icaltimezone_convert_time (&rrule->until, from_zone, to_zone);
+                                       i_cal_timezone_convert_time (until, from_zone, to_zone);
 
-                               rrule->until.hour = 0;
-                               rrule->until.minute = 0;
-                               rrule->until.second = 0;
-                               rrule->until.is_date = TRUE;
+                               i_cal_time_set_time (until, 0, 0, 0);
+                               i_cal_time_set_is_date (until, TRUE);
+                               i_cal_recurrence_set_until (rrule, until);
                        }
 
-                       page_recurrence->priv->ending_date_tt = rrule->until;
+                       g_clear_object (&page_recurrence->priv->ending_date_tt);
+                       page_recurrence->priv->ending_date_tt = i_cal_recurrence_get_until (rrule);
                        e_dialog_combo_box_set (
                                page_recurrence->priv->recr_ending_combo,
                                ENDING_UNTIL,
                                ending_types_map);
                }
+
+               g_clear_object (&until);
        } else {
                /* Count of occurrences */
 
-               page_recurrence->priv->ending_count = rrule->count;
+               page_recurrence->priv->ending_count = i_cal_recurrence_get_count (rrule);
                e_dialog_combo_box_set (
                        page_recurrence->priv->recr_ending_combo,
                        ENDING_FOR,
@@ -1200,7 +1208,8 @@ ecep_recurrence_clear_widgets (ECompEditorPageRecurrence *page_recurrence)
        e_dialog_combo_box_set (page_recurrence->priv->recr_interval_unit_combo, ICAL_DAILY_RECURRENCE, 
freq_map);
        g_signal_handlers_unblock_matched (page_recurrence->priv->recr_interval_unit_combo, 
G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, page_recurrence);
 
-       page_recurrence->priv->ending_date_tt = icaltime_today ();
+       g_clear_object (&page_recurrence->priv->ending_date_tt);
+       page_recurrence->priv->ending_date_tt = i_cal_time_today ();
        page_recurrence->priv->ending_count = 2;
 
        g_signal_handlers_block_matched (page_recurrence->priv->recr_ending_combo, G_SIGNAL_MATCH_DATA, 0, 0, 
NULL, NULL, page_recurrence);
@@ -1220,42 +1229,43 @@ static void
 ecep_recurrence_simple_recur_to_comp (ECompEditorPageRecurrence *page_recurrence,
                                      ICalComponent *component)
 {
-       struct icalrecurrencetype r;
        enum ending_type ending_type;
        ICalProperty *prop;
        ICalRecurrence *recur;
+       ICalTime *until;
        gboolean date_set;
+       gint year, month, day;
 
        g_return_if_fail (E_IS_COMP_EDITOR_PAGE_RECURRENCE (page_recurrence));
 
-       icalrecurrencetype_clear (&r);
+       recur = i_cal_recurrence_new ();
 
        /* Frequency, interval, week start */
 
-       r.freq = e_dialog_combo_box_get (page_recurrence->priv->recr_interval_unit_combo, freq_map);
-       r.interval = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON 
(page_recurrence->priv->recr_interval_value_spin));
+       i_cal_recurrence_set_freq (recur, e_dialog_combo_box_get 
(page_recurrence->priv->recr_interval_unit_combo, freq_map));
+       i_cal_recurrence_set_interval (recur, gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON 
(page_recurrence->priv->recr_interval_value_spin)));
 
        switch (calendar_config_get_week_start_day ()) {
                case G_DATE_MONDAY:
-                       r.week_start = ICAL_MONDAY_WEEKDAY;
+                       i_cal_recurrence_set_week_start (recur, I_CAL_MONDAY_WEEKDAY);
                        break;
                case G_DATE_TUESDAY:
-                       r.week_start = ICAL_TUESDAY_WEEKDAY;
+                       i_cal_recurrence_set_week_start (recur, I_CAL_TUESDAY_WEEKDAY);
                        break;
                case G_DATE_WEDNESDAY:
-                       r.week_start = ICAL_WEDNESDAY_WEEKDAY;
+                       i_cal_recurrence_set_week_start (recur, I_CAL_WEDNESDAY_WEEKDAY);
                        break;
                case G_DATE_THURSDAY:
-                       r.week_start = ICAL_THURSDAY_WEEKDAY;
+                       i_cal_recurrence_set_week_start (recur, I_CAL_THURSDAY_WEEKDAY);
                        break;
                case G_DATE_FRIDAY:
-                       r.week_start = ICAL_FRIDAY_WEEKDAY;
+                       i_cal_recurrence_set_week_start (recur, I_CAL_FRIDAY_WEEKDAY);
                        break;
                case G_DATE_SATURDAY:
-                       r.week_start = ICAL_SATURDAY_WEEKDAY;
+                       i_cal_recurrence_set_week_start (recur, I_CAL_SATURDAY_WEEKDAY);
                        break;
                case G_DATE_SUNDAY:
-                       r.week_start = ICAL_SUNDAY_WEEKDAY;
+                       i_cal_recurrence_set_week_start (recur, I_CAL_SUNDAY_WEEKDAY);
                        break;
                default:
                        g_warn_if_reached ();
@@ -1264,12 +1274,12 @@ ecep_recurrence_simple_recur_to_comp (ECompEditorPageRecurrence *page_recurrence
 
        /* Frequency-specific data */
 
-       switch (r.freq) {
-       case ICAL_DAILY_RECURRENCE:
+       switch (i_cal_recurrence_get_freq (recur)) {
+       case I_CAL_DAILY_RECURRENCE:
                /* Nothing else is required */
                break;
 
-       case ICAL_WEEKLY_RECURRENCE: {
+       case I_CAL_WEEKLY_RECURRENCE: {
                EWeekdayChooser *chooser;
                gint ii;
 
@@ -1281,25 +1291,27 @@ ecep_recurrence_simple_recur_to_comp (ECompEditorPageRecurrence *page_recurrence
                ii = 0;
 
                if (e_weekday_chooser_get_selected (chooser, G_DATE_SUNDAY))
-                       r.by_day[ii++] = ICAL_SUNDAY_WEEKDAY;
+                       i_cal_recurrence_set_by_day (recur, ii++, I_CAL_SUNDAY_WEEKDAY);
 
                if (e_weekday_chooser_get_selected (chooser, G_DATE_MONDAY))
-                       r.by_day[ii++] = ICAL_MONDAY_WEEKDAY;
+                       i_cal_recurrence_set_by_day (recur, ii++, I_CAL_MONDAY_WEEKDAY);
 
                if (e_weekday_chooser_get_selected (chooser, G_DATE_TUESDAY))
-                       r.by_day[ii++] = ICAL_TUESDAY_WEEKDAY;
+                       i_cal_recurrence_set_by_day (recur, ii++, I_CAL_TUESDAY_WEEKDAY);
 
                if (e_weekday_chooser_get_selected (chooser, G_DATE_WEDNESDAY))
-                       r.by_day[ii++] = ICAL_WEDNESDAY_WEEKDAY;
+                       i_cal_recurrence_set_by_day (recur, ii++, I_CAL_WEDNESDAY_WEEKDAY);
 
                if (e_weekday_chooser_get_selected (chooser, G_DATE_THURSDAY))
-                       r.by_day[ii++] = ICAL_THURSDAY_WEEKDAY;
+                       i_cal_recurrence_set_by_day (recur, ii++, I_CAL_THURSDAY_WEEKDAY);
 
                if (e_weekday_chooser_get_selected (chooser, G_DATE_FRIDAY))
-                       r.by_day[ii++] = ICAL_FRIDAY_WEEKDAY;
+                       i_cal_recurrence_set_by_day (recur, ii++, I_CAL_FRIDAY_WEEKDAY);
 
                if (e_weekday_chooser_get_selected (chooser, G_DATE_SATURDAY))
-                       r.by_day[ii] = ICAL_SATURDAY_WEEKDAY;
+                       i_cal_recurrence_set_by_day (recur, ii++, I_CAL_SATURDAY_WEEKDAY);
+
+               i_cal_recurrence_set_by_day (recur, ii, I_CAL_RECURRENCE_ARRAY_MAX);
 
                break;
        }
@@ -1327,47 +1339,47 @@ ecep_recurrence_simple_recur_to_comp (ECompEditorPageRecurrence *page_recurrence
                switch (month_day) {
                case MONTH_DAY_NTH:
                        if (month_num == MONTH_NUM_INVALID)
-                               r.by_month_day[0] = -1;
+                               i_cal_recurrence_set_by_month_day (recur, 0, -1);
                        else
-                               r.by_month_day[0] = page_recurrence->priv->month_index;
+                               i_cal_recurrence_set_by_month_day (recur, 0, 
page_recurrence->priv->month_index);
                        break;
 
                /* Outlook 2000 uses BYDAY=TU;BYSETPOS=2, and will not
                 * accept BYDAY=2TU. So we now use the same as Outlook
                 * by default. */
                case MONTH_DAY_MON:
-                       r.by_day[0] = ICAL_MONDAY_WEEKDAY;
-                       r.by_set_pos[0] = month_num;
+                       i_cal_recurrence_set_by_day (recur, 0, I_CAL_MONDAY_WEEKDAY);
+                       i_cal_recurrence_set_by_set_pos (recur, 0, month_num);
                        break;
 
                case MONTH_DAY_TUE:
-                       r.by_day[0] = ICAL_TUESDAY_WEEKDAY;
-                       r.by_set_pos[0] = month_num;
+                       i_cal_recurrence_set_by_day (recur, 0, I_CAL_TUESDAY_WEEKDAY);
+                       i_cal_recurrence_set_by_set_pos (recur, 0, month_num);
                        break;
 
                case MONTH_DAY_WED:
-                       r.by_day[0] = ICAL_WEDNESDAY_WEEKDAY;
-                       r.by_set_pos[0] = month_num;
+                       i_cal_recurrence_set_by_day (recur, 0, I_CAL_WEDNESDAY_WEEKDAY);
+                       i_cal_recurrence_set_by_set_pos (recur, 0, month_num);
                        break;
 
                case MONTH_DAY_THU:
-                       r.by_day[0] = ICAL_THURSDAY_WEEKDAY;
-                       r.by_set_pos[0] = month_num;
+                       i_cal_recurrence_set_by_day (recur, 0, I_CAL_THURSDAY_WEEKDAY);
+                       i_cal_recurrence_set_by_set_pos (recur, 0, month_num);
                        break;
 
                case MONTH_DAY_FRI:
-                       r.by_day[0] = ICAL_FRIDAY_WEEKDAY;
-                       r.by_set_pos[0] = month_num;
+                       i_cal_recurrence_set_by_day (recur, 0, I_CAL_FRIDAY_WEEKDAY);
+                       i_cal_recurrence_set_by_set_pos (recur, 0, month_num);
                        break;
 
                case MONTH_DAY_SAT:
-                       r.by_day[0] = ICAL_SATURDAY_WEEKDAY;
-                       r.by_set_pos[0] = month_num;
+                       i_cal_recurrence_set_by_day (recur, 0, I_CAL_SATURDAY_WEEKDAY);
+                       i_cal_recurrence_set_by_set_pos (recur, 0, month_num);
                        break;
 
                case MONTH_DAY_SUN:
-                       r.by_day[0] = ICAL_SUNDAY_WEEKDAY;
-                       r.by_set_pos[0] = month_num;
+                       i_cal_recurrence_set_by_day (recur, 0, I_CAL_SUNDAY_WEEKDAY);
+                       i_cal_recurrence_set_by_set_pos (recur, 0, month_num);
                        break;
 
                default:
@@ -1377,7 +1389,7 @@ ecep_recurrence_simple_recur_to_comp (ECompEditorPageRecurrence *page_recurrence
                break;
        }
 
-       case ICAL_YEARLY_RECURRENCE:
+       case I_CAL_YEARLY_RECURRENCE:
                /* Nothing else is required */
                break;
 
@@ -1394,8 +1406,8 @@ ecep_recurrence_simple_recur_to_comp (ECompEditorPageRecurrence *page_recurrence
                g_return_if_fail (page_recurrence->priv->ending_count_spin != NULL);
                g_return_if_fail (GTK_IS_SPIN_BUTTON (page_recurrence->priv->ending_count_spin));
 
-               r.count = gtk_spin_button_get_value_as_int (
-                       GTK_SPIN_BUTTON (page_recurrence->priv->ending_count_spin));
+               i_cal_recurrence_set_count (recur, gtk_spin_button_get_value_as_int (
+                       GTK_SPIN_BUTTON (page_recurrence->priv->ending_count_spin)));
                break;
 
        case ENDING_UNTIL:
@@ -1406,12 +1418,14 @@ ecep_recurrence_simple_recur_to_comp (ECompEditorPageRecurrence *page_recurrence
                 * since we don't support sub-day recurrences. */
                date_set = e_date_edit_get_date (
                        E_DATE_EDIT (page_recurrence->priv->ending_date_edit),
-                       &r.until.year,
-                       &r.until.month,
-                       &r.until.day);
+                       &year, &month, &day);
                g_return_if_fail (date_set);
 
-               r.until.is_date = 1;
+               until = i_cal_time_null_time ();
+               i_cal_time_set_date (until, year, month, day);
+               i_cal_time_set_is_date (until, 1);
+               i_cal_recurrence_set_until (recur, until);
+               g_clear_object (&until);
 
                break;
 
@@ -1426,8 +1440,6 @@ ecep_recurrence_simple_recur_to_comp (ECompEditorPageRecurrence *page_recurrence
        e_cal_util_component_remove_property_by_kind (component, I_CAL_RRULE_PROPERTY, TRUE);
 
        /* Set the recurrence */
-       recur = i_cal_object_construct (I_CAL_TYPE_RECURRENCE, &r, NULL, FALSE, NULL);
-
        prop = i_cal_property_new_rrule (recur);
        i_cal_component_take_property (component, prop);
 
@@ -1487,8 +1499,7 @@ ecep_recurrence_fill_widgets (ECompEditorPage *page,
                              ICalComponent *component)
 {
        ECompEditorPageRecurrence *page_recurrence;
-       struct icalrecurrencetype rrule;
-       ICalRecurrence *recur;
+       ICalRecurrence *rrule = NULL;
        ICalProperty *prop;
        GtkAdjustment *adj;
        gint n_by_second, n_by_minute, n_by_hour;
@@ -1560,13 +1571,8 @@ ecep_recurrence_fill_widgets (ECompEditorPage *page,
        prop = i_cal_component_get_first_property (component, I_CAL_RRULE_PROPERTY);
        g_return_if_fail (prop != NULL);
 
-       recur = i_cal_property_get_rrule (prop);
-       if (recur && i_cal_object_get_native (I_CAL_OBJECT (recur))) {
-               struct icalrecurrencetype *tmp_rrule;
-
-               tmp_rrule = i_cal_object_get_native (I_CAL_OBJECT (recur));
-               rrule = *tmp_rrule;
-       } else {
+       rrule = i_cal_property_get_rrule (prop);
+       if (!rrule) {
                g_clear_object (&prop);
 
                g_return_if_reached ();
@@ -1576,36 +1582,34 @@ ecep_recurrence_fill_widgets (ECompEditorPage *page,
 
        /* Any lower frequency? */
 
-       if (rrule.freq == ICAL_SECONDLY_RECURRENCE
-           || rrule.freq == ICAL_MINUTELY_RECURRENCE
-           || rrule.freq == ICAL_HOURLY_RECURRENCE)
+       if (i_cal_recurrence_get_freq (rrule) == I_CAL_SECONDLY_RECURRENCE ||
+           i_cal_recurrence_get_freq (rrule) == I_CAL_MINUTELY_RECURRENCE ||
+           i_cal_recurrence_get_freq (rrule) == I_CAL_HOURLY_RECURRENCE)
                goto custom;
 
        /* Any unusual values? */
 
-#define N_HAS_BY(field) (ecep_recurrence_count_by_xxx (field, G_N_ELEMENTS (field)))
-
-       n_by_second = N_HAS_BY (rrule.by_second);
-       n_by_minute = N_HAS_BY (rrule.by_minute);
-       n_by_hour = N_HAS_BY (rrule.by_hour);
-       n_by_day = N_HAS_BY (rrule.by_day);
-       n_by_month_day = N_HAS_BY (rrule.by_month_day);
-       n_by_year_day = N_HAS_BY (rrule.by_year_day);
-       n_by_week_no = N_HAS_BY (rrule.by_week_no);
-       n_by_month = N_HAS_BY (rrule.by_month);
-       n_by_set_pos = N_HAS_BY (rrule.by_set_pos);
-
-       if (n_by_second != 0
-           || n_by_minute != 0
-           || n_by_hour != 0)
+       n_by_second = ecep_recurrence_count_by_xxx_and_free (i_cal_recurrence_get_by_second_array (rrule));
+       n_by_minute = ecep_recurrence_count_by_xxx_and_free (i_cal_recurrence_get_by_minute_array (rrule));
+       n_by_hour = ecep_recurrence_count_by_xxx_and_free (i_cal_recurrence_get_by_hour_array (rrule));
+       n_by_day = ecep_recurrence_count_by_xxx_and_free (i_cal_recurrence_get_by_day_array (rrule));
+       n_by_month_day = ecep_recurrence_count_by_xxx_and_free (i_cal_recurrence_get_by_month_day_array 
(rrule));
+       n_by_year_day = ecep_recurrence_count_by_xxx_and_free (i_cal_recurrence_get_by_year_day_array 
(rrule));
+       n_by_week_no = ecep_recurrence_count_by_xxx_and_free (i_cal_recurrence_get_by_week_no_array (rrule));
+       n_by_month = ecep_recurrence_count_by_xxx_and_free (i_cal_recurrence_get_by_month_array (rrule));
+       n_by_set_pos = ecep_recurrence_count_by_xxx_and_free (i_cal_recurrence_get_by_set_pos_array (rrule));
+
+       if (n_by_second != 0 ||
+           n_by_minute != 0 ||
+           n_by_hour != 0)
                goto custom;
 
        /* Filter the funky shit based on the frequency; if there is nothing
         * weird we can actually set the widgets.
         */
 
-       switch (rrule.freq) {
-       case ICAL_DAILY_RECURRENCE:
+       switch (i_cal_recurrence_get_freq (rrule)) {
+       case I_CAL_DAILY_RECURRENCE:
                if (n_by_day != 0
                    || n_by_month_day != 0
                    || n_by_year_day != 0
@@ -1617,12 +1621,12 @@ ecep_recurrence_fill_widgets (ECompEditorPage *page,
                g_signal_handlers_block_matched (page_recurrence->priv->recr_interval_unit_combo, 
G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, page_recurrence);
                e_dialog_combo_box_set (
                        page_recurrence->priv->recr_interval_unit_combo,
-                       ICAL_DAILY_RECURRENCE,
+                       I_CAL_DAILY_RECURRENCE,
                        freq_map);
                g_signal_handlers_unblock_matched (page_recurrence->priv->recr_interval_unit_combo, 
G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, page_recurrence);
                break;
 
-       case ICAL_WEEKLY_RECURRENCE: {
+       case I_CAL_WEEKLY_RECURRENCE: {
                gint ii;
                guint8 day_mask;
 
@@ -1635,42 +1639,42 @@ ecep_recurrence_fill_widgets (ECompEditorPage *page,
 
                day_mask = 0;
 
-               for (ii = 0; ii < 8 && rrule.by_day[ii] != ICAL_RECURRENCE_ARRAY_MAX; ii++) {
-                       enum icalrecurrencetype_weekday weekday;
+               for (ii = 0; ii < 8 && i_cal_recurrence_get_by_day (rrule, ii) != I_CAL_RECURRENCE_ARRAY_MAX; 
ii++) {
+                       ICalRecurrenceWeekday weekday;
                        gint pos;
 
-                       weekday = icalrecurrencetype_day_day_of_week (rrule.by_day[ii]);
-                       pos = icalrecurrencetype_day_position (rrule.by_day[ii]);
+                       weekday = i_cal_recurrence_day_day_of_week (i_cal_recurrence_get_by_day (rrule, ii));
+                       pos = i_cal_recurrence_day_position (i_cal_recurrence_get_by_day (rrule, ii));
 
                        if (pos != 0)
                                goto custom;
 
                        switch (weekday) {
-                       case ICAL_SUNDAY_WEEKDAY:
+                       case I_CAL_SUNDAY_WEEKDAY:
                                day_mask |= 1 << 0;
                                break;
 
-                       case ICAL_MONDAY_WEEKDAY:
+                       case I_CAL_MONDAY_WEEKDAY:
                                day_mask |= 1 << 1;
                                break;
 
-                       case ICAL_TUESDAY_WEEKDAY:
+                       case I_CAL_TUESDAY_WEEKDAY:
                                day_mask |= 1 << 2;
                                break;
 
-                       case ICAL_WEDNESDAY_WEEKDAY:
+                       case I_CAL_WEDNESDAY_WEEKDAY:
                                day_mask |= 1 << 3;
                                break;
 
-                       case ICAL_THURSDAY_WEEKDAY:
+                       case I_CAL_THURSDAY_WEEKDAY:
                                day_mask |= 1 << 4;
                                break;
 
-                       case ICAL_FRIDAY_WEEKDAY:
+                       case I_CAL_FRIDAY_WEEKDAY:
                                day_mask |= 1 << 5;
                                break;
 
-                       case ICAL_SATURDAY_WEEKDAY:
+                       case I_CAL_SATURDAY_WEEKDAY:
                                day_mask |= 1 << 6;
                                break;
 
@@ -1684,13 +1688,13 @@ ecep_recurrence_fill_widgets (ECompEditorPage *page,
                g_signal_handlers_block_matched (page_recurrence->priv->recr_interval_unit_combo, 
G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, page_recurrence);
                e_dialog_combo_box_set (
                        page_recurrence->priv->recr_interval_unit_combo,
-                       ICAL_WEEKLY_RECURRENCE,
+                       I_CAL_WEEKLY_RECURRENCE,
                        freq_map);
                g_signal_handlers_unblock_matched (page_recurrence->priv->recr_interval_unit_combo, 
G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, page_recurrence);
                break;
        }
 
-       case ICAL_MONTHLY_RECURRENCE:
+       case I_CAL_MONTHLY_RECURRENCE:
                if (n_by_year_day != 0
                    || n_by_week_no != 0
                    || n_by_month != 0
@@ -1703,7 +1707,7 @@ ecep_recurrence_fill_widgets (ECompEditorPage *page,
                        if (n_by_set_pos != 0)
                                goto custom;
 
-                       nth = rrule.by_month_day[0];
+                       nth = i_cal_recurrence_get_by_month_day (rrule, 0);
                        if (nth < 1 && nth != -1)
                                goto custom;
 
@@ -1723,7 +1727,7 @@ ecep_recurrence_fill_widgets (ECompEditorPage *page,
                        page_recurrence->priv->month_day = MONTH_DAY_NTH;
 
                } else if (n_by_day == 1) {
-                       enum icalrecurrencetype_weekday weekday;
+                       ICalRecurrenceWeekday weekday;
                        gint pos;
                        enum month_day_options month_day;
 
@@ -1731,43 +1735,43 @@ ecep_recurrence_fill_widgets (ECompEditorPage *page,
                         * accept BYDAY=2TU. So we now use the same as Outlook
                         * by default. */
 
-                       weekday = icalrecurrencetype_day_day_of_week (rrule.by_day[0]);
-                       pos = icalrecurrencetype_day_position (rrule.by_day[0]);
+                       weekday = i_cal_recurrence_day_day_of_week (i_cal_recurrence_get_by_day (rrule, 0));
+                       pos = i_cal_recurrence_day_position (i_cal_recurrence_get_by_day (rrule, 0));
 
                        if (pos == 0) {
                                if (n_by_set_pos != 1)
                                        goto custom;
-                               pos = rrule.by_set_pos[0];
+                               pos = i_cal_recurrence_get_by_set_pos (rrule, 0);
                        } else if (pos < 0) {
                                goto custom;
                        }
 
                        switch (weekday) {
-                       case ICAL_MONDAY_WEEKDAY:
+                       case I_CAL_MONDAY_WEEKDAY:
                                month_day = MONTH_DAY_MON;
                                break;
 
-                       case ICAL_TUESDAY_WEEKDAY:
+                       case I_CAL_TUESDAY_WEEKDAY:
                                month_day = MONTH_DAY_TUE;
                                break;
 
-                       case ICAL_WEDNESDAY_WEEKDAY:
+                       case I_CAL_WEDNESDAY_WEEKDAY:
                                month_day = MONTH_DAY_WED;
                                break;
 
-                       case ICAL_THURSDAY_WEEKDAY:
+                       case I_CAL_THURSDAY_WEEKDAY:
                                month_day = MONTH_DAY_THU;
                                break;
 
-                       case ICAL_FRIDAY_WEEKDAY:
+                       case I_CAL_FRIDAY_WEEKDAY:
                                month_day = MONTH_DAY_FRI;
                                break;
 
-                       case ICAL_SATURDAY_WEEKDAY:
+                       case I_CAL_SATURDAY_WEEKDAY:
                                month_day = MONTH_DAY_SAT;
                                break;
 
-                       case ICAL_SUNDAY_WEEKDAY:
+                       case I_CAL_SUNDAY_WEEKDAY:
                                month_day = MONTH_DAY_SUN;
                                break;
 
@@ -1786,7 +1790,7 @@ ecep_recurrence_fill_widgets (ECompEditorPage *page,
                g_signal_handlers_block_matched (page_recurrence->priv->recr_interval_unit_combo, 
G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, page_recurrence);
                e_dialog_combo_box_set (
                        page_recurrence->priv->recr_interval_unit_combo,
-                       ICAL_MONTHLY_RECURRENCE,
+                       I_CAL_MONTHLY_RECURRENCE,
                        freq_map);
                g_signal_handlers_unblock_matched (page_recurrence->priv->recr_interval_unit_combo, 
G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, page_recurrence);
                break;
@@ -1803,7 +1807,7 @@ ecep_recurrence_fill_widgets (ECompEditorPage *page,
                g_signal_handlers_block_matched (page_recurrence->priv->recr_interval_unit_combo, 
G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, page_recurrence);
                e_dialog_combo_box_set (
                        page_recurrence->priv->recr_interval_unit_combo,
-                       ICAL_YEARLY_RECURRENCE,
+                       I_CAL_YEARLY_RECURRENCE,
                        freq_map);
                g_signal_handlers_unblock_matched (page_recurrence->priv->recr_interval_unit_combo, 
G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, page_recurrence);
                break;
@@ -1822,10 +1826,12 @@ ecep_recurrence_fill_widgets (ECompEditorPage *page,
 
        adj = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON 
(page_recurrence->priv->recr_interval_value_spin));
        g_signal_handlers_block_matched (adj, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, page_recurrence);
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON (page_recurrence->priv->recr_interval_value_spin), 
rrule.interval);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON (page_recurrence->priv->recr_interval_value_spin), 
i_cal_recurrence_get_interval (rrule));
        g_signal_handlers_unblock_matched (adj, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, page_recurrence);
 
-       ecep_recurrence_fill_ending_date (page_recurrence, &rrule, component);
+       ecep_recurrence_fill_ending_date (page_recurrence, rrule, component);
+
+       g_clear_object (&rrule);
 
        return;
 
@@ -1835,6 +1841,8 @@ ecep_recurrence_fill_widgets (ECompEditorPage *page,
        page_recurrence->priv->is_custom = TRUE;
        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (page_recurrence->priv->recr_check_box), TRUE);
        g_signal_handlers_unblock_matched (page_recurrence->priv->recr_check_box, G_SIGNAL_MATCH_DATA, 0, 0, 
NULL, NULL, page_recurrence);
+
+       g_clear_object (&rrule);
 }
 
 static gboolean
@@ -2353,6 +2361,7 @@ ecep_recurrence_dispose (GObject *object)
        }
 
        g_clear_object (&page_recurrence->priv->exceptions_store);
+       g_clear_object (&page_recurrence->priv->ending_date_tt);
 
        comp_editor = e_comp_editor_page_ref_editor (E_COMP_EDITOR_PAGE (page_recurrence));
        if (comp_editor) {


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