From 8cdfd64e38179644e94487c045b8eca1b3a49502 Mon Sep 17 00:00:00 2001 From: "Jan Alexander Steffens (heftig)" Date: Sun, 10 May 2026 02:42:16 +0200 Subject: [PATCH] Support libical 4.0.0 --- src/core/gcal-recurrence.c | 18 ++++++++++++++++++ src/gui/importer/gcal-importer.c | 4 ++++ src/utils/gcal-utils.h | 2 ++ 3 files changed, 24 insertions(+) diff --git a/src/core/gcal-recurrence.c b/src/core/gcal-recurrence.c index 3d2710366..a28f9acdc 100644 --- a/src/core/gcal-recurrence.c +++ b/src/core/gcal-recurrence.c @@ -185,6 +185,14 @@ gcal_recurrence_parse_recurrence_rules (ECalComponent *comp) case I_CAL_WEEKLY_RECURRENCE: { +#if ICAL_CHECK_VERSION(4, 0, 0) + if (i_cal_recurrence_get_by_array_size (rrule, I_CAL_BY_DAY) == 5 && + i_cal_recurrence_get_by (rrule, I_CAL_BY_DAY, 0) == I_CAL_MONDAY_WEEKDAY && + i_cal_recurrence_get_by (rrule, I_CAL_BY_DAY, 1) == I_CAL_TUESDAY_WEEKDAY && + i_cal_recurrence_get_by (rrule, I_CAL_BY_DAY, 2) == I_CAL_WEDNESDAY_WEEKDAY && + i_cal_recurrence_get_by (rrule, I_CAL_BY_DAY, 3) == I_CAL_THURSDAY_WEEKDAY && + i_cal_recurrence_get_by (rrule, I_CAL_BY_DAY, 4) == I_CAL_FRIDAY_WEEKDAY) +#else if (i_cal_recurrence_get_by_day (rrule, 0) == I_CAL_MONDAY_WEEKDAY && i_cal_recurrence_get_by_day (rrule, 1) == I_CAL_TUESDAY_WEEKDAY && i_cal_recurrence_get_by_day (rrule, 2) == I_CAL_WEDNESDAY_WEEKDAY && @@ -192,6 +200,7 @@ gcal_recurrence_parse_recurrence_rules (ECalComponent *comp) i_cal_recurrence_get_by_day (rrule, 4) == I_CAL_FRIDAY_WEEKDAY && i_cal_recurrence_get_by_day (rrule, 5) != I_CAL_SATURDAY_WEEKDAY && i_cal_recurrence_get_by_day (rrule, 6) != I_CAL_SUNDAY_WEEKDAY) +#endif { recur->frequency = GCAL_RECURRENCE_MON_FRI; } @@ -289,11 +298,20 @@ gcal_recurrence_to_rrule (GcalRecurrence *recur) case GCAL_RECURRENCE_MON_FRI: { i_cal_recurrence_set_freq (rrule, I_CAL_WEEKLY_RECURRENCE); +#if ICAL_CHECK_VERSION(4, 0, 0) + i_cal_recurrence_resize_by_array (rrule, I_CAL_BY_DAY, 5); + i_cal_recurrence_set_by (rrule, I_CAL_BY_DAY, 0, I_CAL_MONDAY_WEEKDAY); + i_cal_recurrence_set_by (rrule, I_CAL_BY_DAY, 1, I_CAL_TUESDAY_WEEKDAY); + i_cal_recurrence_set_by (rrule, I_CAL_BY_DAY, 2, I_CAL_WEDNESDAY_WEEKDAY); + i_cal_recurrence_set_by (rrule, I_CAL_BY_DAY, 3, I_CAL_THURSDAY_WEEKDAY); + i_cal_recurrence_set_by (rrule, I_CAL_BY_DAY, 4, I_CAL_FRIDAY_WEEKDAY); +#else i_cal_recurrence_set_by_day (rrule, 0, I_CAL_MONDAY_WEEKDAY); i_cal_recurrence_set_by_day (rrule, 1, I_CAL_TUESDAY_WEEKDAY); i_cal_recurrence_set_by_day (rrule, 2, I_CAL_WEDNESDAY_WEEKDAY); i_cal_recurrence_set_by_day (rrule, 3, I_CAL_THURSDAY_WEEKDAY); i_cal_recurrence_set_by_day (rrule, 4, I_CAL_FRIDAY_WEEKDAY); +#endif break; } diff --git a/src/gui/importer/gcal-importer.c b/src/gui/importer/gcal-importer.c index 7b0bbf105..ec2b27419 100644 --- a/src/gui/importer/gcal-importer.c +++ b/src/gui/importer/gcal-importer.c @@ -147,7 +147,11 @@ read_file_in_thread (GTask *task, g_assert (g_utf8_validate (contents, length, NULL)); component = i_cal_parser_parse_string (contents); +#if ICAL_CHECK_VERSION(4, 0, 0) + ical_error = i_cal_error_icalerrno (); +#else ical_error = i_cal_errno_return (); +#endif if (ical_error != I_CAL_NO_ERROR) { diff --git a/src/utils/gcal-utils.h b/src/utils/gcal-utils.h index 2c7d47e3e..d2b31e843 100644 --- a/src/utils/gcal-utils.h +++ b/src/utils/gcal-utils.h @@ -51,7 +51,9 @@ typedef void (*GcalAskRecurrenceCallback) (GcalEvent *event, GcalRecurrenceModType modtype, gpointer user_data); +#if !ICAL_CHECK_VERSION(4, 0, 0) G_DEFINE_AUTOPTR_CLEANUP_FUNC (ICalTime, g_object_unref) +#endif gchar* gcal_get_weekday (gint i); -- GitLab