From aaab4af2822b1880addaa4c7394e14ffa8e24ecf Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Wed, 1 Apr 2020 23:08:54 -0300 Subject: [PATCH] timeline: Respond well to subscriber removal --- src/core/gcal-calendar-monitor.c | 13 +++++++------ src/core/gcal-timeline.c | 5 ++++- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/core/gcal-calendar-monitor.c b/src/core/gcal-calendar-monitor.c index 8055eead..f45ad148 100644 --- a/src/core/gcal-calendar-monitor.c +++ b/src/core/gcal-calendar-monitor.c @@ -615,8 +615,11 @@ create_view (GcalCalendarMonitor *self) g_assert (self->cancellable == NULL); self->cancellable = g_cancellable_new (); - g_assert (self->shared.range_start != NULL); - g_assert (self->shared.range_end != NULL); + if (!self->shared.range_start || !self->shared.range_end) + { + g_mutex_unlock (&self->shared.mutex); + GCAL_RETURN (); + } filter = build_subscriber_filter (self->shared.range_start, self->shared.range_end, self->shared.filter); @@ -839,7 +842,7 @@ remove_events_outside_range (GcalCalendarMonitor *self, g_hash_table_iter_init (&iter, self->events); while (g_hash_table_iter_next (&iter, NULL, (gpointer*) &event)) { - if (gcal_event_is_within_range (event, range_start, range_end)) + if (range_start && range_end && gcal_event_is_within_range (event, range_start, range_end)) continue; g_object_ref (event); @@ -1140,9 +1143,7 @@ gcal_calendar_monitor_set_range (GcalCalendarMonitor *self, gboolean range_changed; g_return_if_fail (GCAL_IS_CALENDAR_MONITOR (self)); - g_return_if_fail (range_start != NULL); - g_return_if_fail (range_end != NULL); - g_return_if_fail (g_date_time_compare (range_start, range_end) < 0); + g_return_if_fail ((!range_start && !range_end) || g_date_time_compare (range_start, range_end) < 0); GCAL_ENTRY; diff --git a/src/core/gcal-timeline.c b/src/core/gcal-timeline.c index f8a5ec87..d630e6a4 100644 --- a/src/core/gcal-timeline.c +++ b/src/core/gcal-timeline.c @@ -981,7 +981,6 @@ gcal_timeline_remove_subscriber (GcalTimeline *self, GcalTimelineSubscriber *subscriber) { g_return_if_fail (GCAL_IS_TIMELINE (self)); - g_return_if_fail (GCAL_IS_TIMELINE_SUBSCRIBER (subscriber)); GCAL_ENTRY; @@ -993,6 +992,10 @@ gcal_timeline_remove_subscriber (GcalTimeline *self, g_signal_handlers_disconnect_by_func (subscriber, on_subscriber_range_changed_cb, self); g_hash_table_remove (self->subscribers, subscriber); + /* If all subscribers were removed, reset the complete counter */ + if (g_hash_table_size (self->subscribers) == 0) + reset_completed_calendars (self); + update_range (self); GCAL_EXIT;