[gnome-calendar/gnome-3-36] timeline: Add already cached events to new subscribers



commit 0d62a57111f5c4c994dfa9b5096b885cbf764175
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Wed Apr 1 22:29:49 2020 -0300

    timeline: Add already cached events to new subscribers

 src/core/gcal-timeline.c | 39 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)
---
diff --git a/src/core/gcal-timeline.c b/src/core/gcal-timeline.c
index 97ba7e01..f8a5ec87 100644
--- a/src/core/gcal-timeline.c
+++ b/src/core/gcal-timeline.c
@@ -399,6 +399,44 @@ calculate_changed_events (GcalTimeline            *self,
     }
 }
 
+static void
+add_cached_events_to_subscriber (GcalTimeline           *self,
+                                 GcalTimelineSubscriber *subscriber)
+{
+  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;
+
+  GCAL_ENTRY;
+
+  subscriber_start = gcal_timeline_subscriber_get_range_start (subscriber);
+  subscriber_end = gcal_timeline_subscriber_get_range_end (subscriber);
+
+  events_to_add = gcal_range_tree_get_data_at_range (self->events, subscriber_start, subscriber_end);
+
+  subscriber_array = g_ptr_array_new ();
+  g_ptr_array_add (subscriber_array, subscriber);
+
+  for (i = 0; events_to_add && i < events_to_add->len; i++)
+    {
+      GcalEvent *event = g_ptr_array_index (events_to_add, i);
+
+      if (!gcal_event_is_within_range (event, subscriber_start, subscriber_end))
+        continue;
+
+      GCAL_TRACE_MSG ("Queueing event addition for subscriber %s (event: '%s' (%s))",
+                      G_OBJECT_TYPE_NAME (subscriber),
+                      gcal_event_get_summary (event),
+                      gcal_event_get_uid (event));
+
+      queue_event_data (self, ADD_EVENT, subscriber_array, event, NULL, FALSE);
+    }
+
+  GCAL_EXIT;
+}
+
 static void
 update_subscriber_range (GcalTimeline           *self,
                          GcalTimelineSubscriber *subscriber)
@@ -931,6 +969,7 @@ gcal_timeline_add_subscriber (GcalTimeline           *self,
                            self,
                            0);
 
+  add_cached_events_to_subscriber (self, subscriber);
   update_subscriber_range (self, subscriber);
   update_range (self);
 


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