diff --git a/src/gcal-utils.c b/src/gcal-utils.c index e48979ac..8a635425 100644 --- a/src/gcal-utils.c +++ b/src/gcal-utils.c @@ -409,6 +409,43 @@ icaltime_compare_date (const icaltimetype *date1, time_day_of_year (date2->day, date2->month - 1, date2->year); } +gint +icaltime_compare_with_current (const icaltimetype *date1, + const icaltimetype *date2, + time_t *current_time_t) +{ + gint result; + + time_t start1, start2, diff1, diff2; + start1 = icaltime_as_timet_with_zone (*date1, date1->zone != NULL ? date1->zone : e_cal_util_get_system_timezone ()); + start2 = icaltime_as_timet_with_zone (*date2, date2->zone != NULL ? date2->zone : e_cal_util_get_system_timezone ()); + diff1 = start1 - *current_time_t; + diff2 = start2 - *current_time_t; + + if (diff1 == diff2) + { + result = 0; + } + else + { + if (diff1 == 0) + result = -1; + else if (diff2 == 0) + result = 1; + + if (diff1 > 0 && diff2 < 0) + result = -1; + else if (diff2 > 0 && diff1 < 0) + result = 1; + else if (diff1 < 0 && diff2 < 0) + result = ABS (diff1) - ABS (diff2); + else if (diff1 > 0 && diff2 > 0) + result = diff1 - diff2; + } + + return result; +} + /* Function to do a last minute fixup of the AM/PM stuff if the locale * and gettext haven't done it right. Most English speaking countries * except the USA use the 24 hour clock (UK, Australia etc). However diff --git a/src/gcal-utils.h b/src/gcal-utils.h index 72d810c4..08f58f32 100644 --- a/src/gcal-utils.h +++ b/src/gcal-utils.h @@ -83,6 +83,10 @@ ECalComponent* build_component_from_details (const gchar gint icaltime_compare_date (const icaltimetype *date1, const icaltimetype *date2); +gint icaltime_compare_with_current (const icaltimetype *date1, + const icaltimetype *date2, + time_t *current_time_t); + /* code brought from evolution */ gsize e_strftime_fix_am_pm (gchar *str, gsize max,