diff --git a/src/core/gcal-calendar-monitor.c b/src/core/gcal-calendar-monitor.c index f45ad148..8bea3c07 100644 --- a/src/core/gcal-calendar-monitor.c +++ b/src/core/gcal-calendar-monitor.c @@ -167,20 +167,16 @@ maybe_init_event_arrays (GcalCalendarMonitor *self) } } -static void -get_monitor_ranges (GcalCalendarMonitor *self, - GDateTime **out_range_start, - GDateTime **out_range_end) +static GcalRange* +get_monitor_ranges (GcalCalendarMonitor *self) { + g_autoptr (GcalRange) range = NULL; + g_mutex_lock (&self->shared.mutex); - - if (out_range_start) - *out_range_start = g_date_time_ref (self->shared.range_start); - - if (out_range_end) - *out_range_end = g_date_time_ref (self->shared.range_end); - + range = gcal_range_new (self->shared.range_start, self->shared.range_end, GCAL_RANGE_DEFAULT); g_mutex_unlock (&self->shared.mutex); + + return g_steal_pointer (&range); } static void @@ -307,14 +303,13 @@ on_client_view_objects_added_cb (ECalClientView *view, GcalCalendarMonitor *self) { g_autoptr (GPtrArray) components_to_expand = NULL; - g_autoptr (GDateTime) range_start = NULL; - g_autoptr (GDateTime) range_end = NULL; + g_autoptr (GcalRange) range = NULL; const GSList *l; gint i; GCAL_ENTRY; - get_monitor_ranges (self, &range_start, &range_end); + range = get_monitor_ranges (self); maybe_init_event_arrays (self); components_to_expand = g_ptr_array_new (); @@ -360,7 +355,7 @@ on_client_view_objects_added_cb (ECalClientView *view, continue; } - if (!gcal_event_is_within_range (event, range_start, range_end)) + if (!gcal_event_is_within_range (event, range)) continue; event_id = g_strdup (gcal_event_get_uid (event)); @@ -381,6 +376,8 @@ on_client_view_objects_added_cb (ECalClientView *view, if (components_to_expand->len > 0) { g_autoptr (GPtrArray) expanded_events = NULL; + g_autoptr (GDateTime) range_start = NULL; + g_autoptr (GDateTime) range_end = NULL; ECalClient *client; time_t range_start_time; time_t range_end_time; @@ -389,8 +386,10 @@ on_client_view_objects_added_cb (ECalClientView *view, client = gcal_calendar_get_client (self->calendar); + range_start = gcal_range_get_start (range); + range_end = gcal_range_get_end (range); range_start_time = g_date_time_to_unix (range_start); - range_end_time = g_date_time_to_unix (range_end); + range_end_time = g_date_time_to_unix (range_end) - 1; expanded_events = g_ptr_array_new_with_free_func (g_object_unref); @@ -425,15 +424,13 @@ on_client_view_objects_added_cb (ECalClientView *view, #if GCAL_ENABLE_TRACE { - g_autofree gchar *range_start_str = g_date_time_format_iso8601 (range_start); - g_autofree gchar *range_end_str = g_date_time_format_iso8601 (range_end); + g_autofree gchar *range_str = gcal_range_to_string (range); - GCAL_TRACE_MSG ("Component %s (%s) added %d instance(s) between %s and %s", + GCAL_TRACE_MSG ("Component %s (%s) added %d instance(s) between %s", i_cal_component_get_summary (icomponent), i_cal_component_get_uid (icomponent), expanded_events->len - old_size, - range_start_str, - range_end_str); + range_str); } #endif } @@ -447,7 +444,7 @@ on_client_view_objects_added_cb (ECalClientView *view, if (g_cancellable_is_cancelled (self->cancellable)) return; - if (!gcal_event_is_within_range (event, range_start, range_end)) + if (!gcal_event_is_within_range (event, range)) continue; event_id = g_strdup (gcal_event_get_uid (event)); @@ -473,8 +470,6 @@ on_client_view_objects_modified_cb (ECalClientView *view, const GSList *objects, GcalCalendarMonitor *self) { - g_autoptr (GDateTime) range_start = NULL; - g_autoptr (GDateTime) range_end = NULL; const GSList *l; GCAL_ENTRY; @@ -485,8 +480,6 @@ on_client_view_objects_modified_cb (ECalClientView *view, return; } - get_monitor_ranges (self, &range_start, &range_end); - for (l = objects; l; l = l->next) { g_autoptr (GcalEvent) event = NULL; @@ -834,15 +827,19 @@ remove_events_outside_range (GcalCalendarMonitor *self, GDateTime *range_start, GDateTime *range_end) { + g_autoptr (GcalRange) range = NULL; GHashTableIter iter; GcalEvent *event; GCAL_TRACE_MSG ("Removing events outside range from monitor"); + if (range_start && range_end) + range = gcal_range_new (range_start, range_end, GCAL_RANGE_DEFAULT); + g_hash_table_iter_init (&iter, self->events); while (g_hash_table_iter_next (&iter, NULL, (gpointer*) &event)) { - if (range_start && range_end && gcal_event_is_within_range (event, range_start, range_end)) + if (range && gcal_event_is_within_range (event, range)) continue; g_object_ref (event); diff --git a/src/core/gcal-event.c b/src/core/gcal-event.c index 98335816..1960bd33 100644 --- a/src/core/gcal-event.c +++ b/src/core/gcal-event.c @@ -1879,21 +1879,13 @@ gcal_event_format_date (GcalEvent *self) gboolean gcal_event_is_within_range (GcalEvent *self, - GDateTime *range_start, - GDateTime *range_end) + GcalRange *range) { - GDateTime *event_start; - GDateTime *event_end; + GcalRange *event_range; - event_start = gcal_event_get_date_start (self); - event_end = gcal_event_get_date_end (self); + g_return_val_if_fail (GCAL_IS_EVENT (self), FALSE); + g_return_val_if_fail (range != NULL, FALSE); - if (gcal_event_get_all_day (self)) - { - return gcal_date_time_compare_date (range_end, event_start) > 0 && - gcal_date_time_compare_date (event_end, range_start) > 0; - } - - return g_date_time_compare (range_end, event_start) > 0 && - g_date_time_compare (event_end, range_start) > 0; + event_range = gcal_event_get_range (self); + return gcal_range_calculate_overlap (event_range, range, NULL) != GCAL_RANGE_NO_OVERLAP; } diff --git a/src/core/gcal-event.h b/src/core/gcal-event.h index bd036d5e..1f4b4d4c 100644 --- a/src/core/gcal-event.h +++ b/src/core/gcal-event.h @@ -135,8 +135,7 @@ void gcal_event_get_original_timezones (GcalEvent gchar* gcal_event_format_date (GcalEvent *self); gboolean gcal_event_is_within_range (GcalEvent *self, - GDateTime *range_start, - GDateTime *range_end); + GcalRange *range); G_END_DECLS diff --git a/src/core/gcal-timeline.c b/src/core/gcal-timeline.c index 6f1c703f..160eb0eb 100644 --- a/src/core/gcal-timeline.c +++ b/src/core/gcal-timeline.c @@ -195,15 +195,11 @@ static gboolean subscriber_contains_event (GcalTimelineSubscriber *subscriber, GcalEvent *event) { - g_autoptr (GDateTime) subscriber_range_start = NULL; - g_autoptr (GDateTime) subscriber_range_end = NULL; g_autoptr (GcalRange) subscriber_range = NULL; subscriber_range = gcal_timeline_subscriber_get_range (subscriber); - subscriber_range_start = gcal_range_get_start (subscriber_range); - subscriber_range_end = gcal_range_get_end (subscriber_range); - return gcal_event_is_within_range (event, subscriber_range_start, subscriber_range_end); + return gcal_event_is_within_range (event, subscriber_range); } static void @@ -364,7 +360,7 @@ calculate_changed_events (GcalTimeline *self, { GcalEvent *event = g_ptr_array_index (events_to_remove, i); - if (!gcal_event_is_within_range (event, old_range_start, old_range_end)) + if (!gcal_event_is_within_range (event, old_range)) continue; GCAL_TRACE_MSG ("Removing event from subscriber %s due to time range change (event: '%s' (%s))", @@ -380,7 +376,7 @@ calculate_changed_events (GcalTimeline *self, { GcalEvent *event = g_ptr_array_index (events_to_add, i); - if (!gcal_event_is_within_range (event, new_range_start, new_range_end)) + if (!gcal_event_is_within_range (event, new_range)) continue; GCAL_TRACE_MSG ("Queueing event addition for subscriber %s (event: '%s' (%s))", @@ -397,8 +393,6 @@ add_cached_events_to_subscriber (GcalTimeline *self, GcalTimelineSubscriber *subscriber) { g_autoptr (GcalRange) subscriber_range = NULL; - g_autoptr (GDateTime) subscriber_start = NULL; - g_autoptr (GDateTime) subscriber_end = NULL; g_autoptr (GPtrArray) subscriber_array = NULL; g_autoptr (GPtrArray) events_to_add = NULL; gint i; @@ -406,8 +400,6 @@ add_cached_events_to_subscriber (GcalTimeline *self, GCAL_ENTRY; subscriber_range = gcal_timeline_subscriber_get_range (subscriber); - subscriber_start = gcal_range_get_start (subscriber_range); - subscriber_end = gcal_range_get_end (subscriber_range); events_to_add = gcal_range_tree_get_data_at_range (self->events, subscriber_range); @@ -418,7 +410,7 @@ add_cached_events_to_subscriber (GcalTimeline *self, { GcalEvent *event = g_ptr_array_index (events_to_add, i); - if (!gcal_event_is_within_range (event, subscriber_start, subscriber_end)) + if (!gcal_event_is_within_range (event, subscriber_range)) continue; GCAL_TRACE_MSG ("Queueing event addition for subscriber %s (event: '%s' (%s))",