[gnome-calendar] timeline: Queue one event per subscriber
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-calendar] timeline: Queue one event per subscriber
- Date: Wed, 15 Apr 2020 21:50:03 +0000 (UTC)
commit db668a0b906c621aaac259c3636343f2673de44e
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date: Wed Apr 15 18:41:03 2020 -0300
timeline: Queue one event per subscriber
Right now, GcalTimeline queues one event per N subscribers. Queue
one event per subscriber instead.
src/core/gcal-timeline.c | 83 +++++++++++++++++++++++-------------------------
1 file changed, 39 insertions(+), 44 deletions(-)
---
diff --git a/src/core/gcal-timeline.c b/src/core/gcal-timeline.c
index 9040585d..f4db58f1 100644
--- a/src/core/gcal-timeline.c
+++ b/src/core/gcal-timeline.c
@@ -47,7 +47,8 @@ typedef struct
QueueEvent queue_event;
- GPtrArray *subscribers;
+
+ GcalTimelineSubscriber *subscriber;
GcalEvent *event;
GcalEvent *old_event;
gboolean update_range_tree;
@@ -104,26 +105,26 @@ static GParamSpec *properties [N_PROPS] = { NULL, };
static void
queue_data_free (QueueData *queue_data)
{
- g_clear_pointer (&queue_data->subscribers, g_ptr_array_unref);
+ g_clear_object (&queue_data->subscriber);
g_clear_object (&queue_data->old_event);
g_clear_object (&queue_data->event);
g_free (queue_data);
}
static void
-queue_event_data (GcalTimeline *self,
- QueueEvent queue_event,
- GPtrArray *subscribers,
- GcalEvent *event,
- GcalEvent *old_event,
- gboolean update_range_tree)
+queue_event_data (GcalTimeline *self,
+ QueueEvent queue_event,
+ GcalTimelineSubscriber *subscriber,
+ GcalEvent *event,
+ GcalEvent *old_event,
+ gboolean update_range_tree)
{
QueueData *queue_data;
queue_data = g_new0 (QueueData, 1);
queue_data->timeline = self;
queue_data->queue_event = queue_event;
- queue_data->subscribers = subscribers ? g_ptr_array_ref (subscribers) : NULL;
+ queue_data->subscriber = g_object_ref (subscriber);
queue_data->event = event ? g_object_ref (event) : NULL;
queue_data->old_event = old_event ? g_object_ref (old_event) : NULL;
queue_data->update_range_tree = update_range_tree;
@@ -264,7 +265,6 @@ calculate_changed_events (GcalTimeline *self,
GcalRange *old_range,
GcalRange *new_range)
{
- g_autoptr (GPtrArray) subscriber_array = NULL;
g_autoptr (GPtrArray) events_to_remove = NULL;
g_autoptr (GPtrArray) events_to_add = NULL;
g_autoptr (GDateTime) old_range_start = NULL;
@@ -332,9 +332,6 @@ calculate_changed_events (GcalTimeline *self,
}
}
- subscriber_array = g_ptr_array_new ();
- g_ptr_array_add (subscriber_array, subscriber);
-
for (i = 0; i < events_to_remove->len; i++)
{
GcalEvent *event = g_ptr_array_index (events_to_remove, i);
@@ -357,7 +354,7 @@ calculate_changed_events (GcalTimeline *self,
gcal_event_get_summary (event),
gcal_event_get_uid (event));
- queue_event_data (self, ADD_EVENT, subscriber_array, event, NULL, FALSE);
+ queue_event_data (self, ADD_EVENT, subscriber, event, NULL, FALSE);
}
}
@@ -366,7 +363,6 @@ add_cached_events_to_subscriber (GcalTimeline *self,
GcalTimelineSubscriber *subscriber)
{
g_autoptr (GcalRange) subscriber_range = NULL;
- g_autoptr (GPtrArray) subscriber_array = NULL;
g_autoptr (GPtrArray) events_to_add = NULL;
gint i;
@@ -376,9 +372,6 @@ add_cached_events_to_subscriber (GcalTimeline *self,
events_to_add = gcal_range_tree_get_data_at_range (self->events, subscriber_range);
- 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);
@@ -388,7 +381,7 @@ add_cached_events_to_subscriber (GcalTimeline *self,
gcal_event_get_summary (event),
gcal_event_get_uid (event));
- queue_event_data (self, ADD_EVENT, subscriber_array, event, NULL, FALSE);
+ queue_event_data (self, ADD_EVENT, subscriber, event, NULL, FALSE);
}
GCAL_EXIT;
@@ -446,6 +439,7 @@ on_calendar_monitor_event_added_cb (GcalCalendarMonitor *monitor,
{
g_autoptr (GPtrArray) subscribers_at_range = NULL;
GcalRange *event_range;
+ gint i;
GCAL_ENTRY;
@@ -454,8 +448,11 @@ on_calendar_monitor_event_added_cb (GcalCalendarMonitor *monitor,
/* Add to all subscribers within the event range */
subscribers_at_range = gcal_range_tree_get_data_at_range (self->subscriber_ranges, event_range);
- if (subscribers_at_range)
- queue_event_data (self, ADD_EVENT, subscribers_at_range, event, NULL, TRUE);
+ for (i = 0; subscribers_at_range && i < subscribers_at_range->len; i++)
+ {
+ GcalTimelineSubscriber *subscriber = g_ptr_array_index (subscribers_at_range, i);
+ queue_event_data (self, ADD_EVENT, subscriber, event, NULL, TRUE);
+ }
GCAL_EXIT;
}
@@ -468,6 +465,7 @@ on_calendar_monitor_event_updated_cb (GcalCalendarMonitor *monitor,
{
g_autoptr (GPtrArray) subscribers_at_range = NULL;
GcalRange *event_range;
+ gint i;
GCAL_ENTRY;
@@ -477,8 +475,11 @@ on_calendar_monitor_event_updated_cb (GcalCalendarMonitor *monitor,
/* Add to all subscribers within the event range */
subscribers_at_range = gcal_range_tree_get_data_at_range (self->subscriber_ranges, event_range);
- if (subscribers_at_range)
- queue_event_data (self, UPDATE_EVENT, subscribers_at_range, event, old_event, TRUE);
+ for (i = 0; subscribers_at_range && i < subscribers_at_range->len; i++)
+ {
+ GcalTimelineSubscriber *subscriber = g_ptr_array_index (subscribers_at_range, i);
+ queue_event_data (self, UPDATE_EVENT, subscriber, event, old_event, TRUE);
+ }
GCAL_EXIT;
}
@@ -490,6 +491,7 @@ on_calendar_monitor_event_removed_cb (GcalCalendarMonitor *monitor,
{
g_autoptr (GPtrArray) subscribers_at_range = NULL;
GcalRange *event_range;
+ gint i;
GCAL_ENTRY;
@@ -498,8 +500,11 @@ on_calendar_monitor_event_removed_cb (GcalCalendarMonitor *monitor,
/* Add to all subscribers within the event range */
subscribers_at_range = gcal_range_tree_get_data_at_range (self->subscriber_ranges, event_range);
- if (subscribers_at_range)
- queue_event_data (self, REMOVE_EVENT, subscribers_at_range, event, NULL, TRUE);
+ for (i = 0; subscribers_at_range && i < subscribers_at_range->len; i++)
+ {
+ GcalTimelineSubscriber *subscriber = g_ptr_array_index (subscribers_at_range, i);
+ queue_event_data (self, REMOVE_EVENT, subscriber, event, NULL, TRUE);
+ }
GCAL_EXIT;
}
@@ -573,14 +578,15 @@ timeline_source_dispatch (GSource *source,
while (processed_events < BATCH_SIZE && !g_queue_is_empty (self->event_queue))
{
+ GcalTimelineSubscriber *subscriber;
GcalRange *event_range;
QueueData *queue_data;
GcalEvent *event;
- gint i;
queue_data = g_queue_pop_head (self->event_queue);
event = queue_data->event;
+ subscriber = queue_data->subscriber;
event_range = gcal_event_get_range (event);
switch (queue_data->queue_event)
@@ -593,12 +599,7 @@ timeline_source_dispatch (GSource *source,
if (queue_data->update_range_tree)
gcal_range_tree_add_range (self->events, event_range, g_object_ref (event));
- for (i = 0; queue_data->subscribers && i < queue_data->subscribers->len; i++)
- {
- GcalTimelineSubscriber *subscriber = g_ptr_array_index (queue_data->subscribers, i);
-
- add_event_to_subscriber (subscriber, event);
- }
+ add_event_to_subscriber (subscriber, event);
break;
case UPDATE_EVENT:
@@ -618,12 +619,7 @@ timeline_source_dispatch (GSource *source,
gcal_range_tree_add_range (self->events, event_range, g_object_ref (event));
}
- for (i = 0; queue_data->subscribers && i < queue_data->subscribers->len; i++)
- {
- GcalTimelineSubscriber *subscriber = g_ptr_array_index (queue_data->subscribers, i);
-
- update_subscriber_event (subscriber, event);
- }
+ update_subscriber_event (subscriber, event);
}
break;
@@ -632,11 +628,7 @@ timeline_source_dispatch (GSource *source,
gcal_event_get_summary (event),
gcal_event_get_uid (event));
- for (i = 0; queue_data->subscribers && i < queue_data->subscribers->len; i++)
- {
- GcalTimelineSubscriber *subscriber = g_ptr_array_index (queue_data->subscribers, i);
- remove_event_from_subscriber (subscriber, event);
- }
+ remove_event_from_subscriber (subscriber, event);
if (queue_data->update_range_tree)
gcal_range_tree_remove_range (self->events, event_range, event);
@@ -935,7 +927,10 @@ gcal_timeline_remove_subscriber (GcalTimeline *self,
/* If all subscribers were removed, reset the complete counter */
if (g_hash_table_size (self->subscribers) == 0)
- reset_completed_calendars (self);
+ {
+ g_queue_clear_full (self->event_queue, (GDestroyNotify) queue_data_free);
+ reset_completed_calendars (self);
+ }
update_range (self);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]