calendar-monitor: Use a GPtrArray for accumulated events
This will ease future changes.
This commit is contained in:
@@ -65,7 +65,7 @@ struct _GcalCalendarMonitor
|
|||||||
*/
|
*/
|
||||||
struct {
|
struct {
|
||||||
gboolean populated;
|
gboolean populated;
|
||||||
GHashTable *events_to_add;
|
GPtrArray *events_to_add;
|
||||||
ECalClientView *view;
|
ECalClientView *view;
|
||||||
} monitor_thread;
|
} monitor_thread;
|
||||||
|
|
||||||
@@ -164,12 +164,7 @@ maybe_init_event_arrays (GcalCalendarMonitor *self)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
if (!self->monitor_thread.events_to_add)
|
if (!self->monitor_thread.events_to_add)
|
||||||
{
|
self->monitor_thread.events_to_add = g_ptr_array_new_with_free_func (g_object_unref);
|
||||||
self->monitor_thread.events_to_add = g_hash_table_new_full (g_str_hash,
|
|
||||||
g_str_equal,
|
|
||||||
g_free,
|
|
||||||
g_object_unref);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static GcalRange*
|
static GcalRange*
|
||||||
@@ -362,19 +357,9 @@ on_client_view_objects_added_cb (ECalClientView *view,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!self->monitor_thread.populated)
|
if (!self->monitor_thread.populated)
|
||||||
{
|
g_ptr_array_add (self->monitor_thread.events_to_add, g_object_ref (event));
|
||||||
g_autofree gchar *event_id = NULL;
|
|
||||||
|
|
||||||
event_id = g_strdup (gcal_event_get_uid (event));
|
|
||||||
|
|
||||||
g_hash_table_insert (self->monitor_thread.events_to_add,
|
|
||||||
g_steal_pointer (&event_id),
|
|
||||||
g_object_ref (event));
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
add_event_in_idle (self, event);
|
||||||
add_event_in_idle (self, event);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Recurrent events */
|
/* Recurrent events */
|
||||||
@@ -449,19 +434,9 @@ on_client_view_objects_added_cb (ECalClientView *view,
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
if (!self->monitor_thread.populated)
|
if (!self->monitor_thread.populated)
|
||||||
{
|
g_ptr_array_add (self->monitor_thread.events_to_add, g_object_ref (event));
|
||||||
g_autofree gchar *event_id = NULL;
|
|
||||||
|
|
||||||
event_id = g_strdup (gcal_event_get_uid (event));
|
|
||||||
|
|
||||||
g_hash_table_insert (self->monitor_thread.events_to_add,
|
|
||||||
g_steal_pointer (&event_id),
|
|
||||||
g_object_ref (event));
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
add_event_in_idle (self, event);
|
||||||
add_event_in_idle (self, event);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -485,7 +460,7 @@ on_client_view_objects_modified_cb (ECalClientView *view,
|
|||||||
|
|
||||||
if (!self->monitor_thread.populated && self->monitor_thread.events_to_add)
|
if (!self->monitor_thread.populated && self->monitor_thread.events_to_add)
|
||||||
{
|
{
|
||||||
g_clear_pointer (&self->monitor_thread.events_to_add, g_hash_table_destroy);
|
g_clear_pointer (&self->monitor_thread.events_to_add, g_ptr_array_unref);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -718,7 +693,7 @@ on_client_view_complete_cb (ECalClientView *view,
|
|||||||
const GError *error,
|
const GError *error,
|
||||||
GcalCalendarMonitor *self)
|
GcalCalendarMonitor *self)
|
||||||
{
|
{
|
||||||
g_autoptr (GHashTable) events_to_add = NULL;
|
g_autoptr (GPtrArray) events_to_add = NULL;
|
||||||
|
|
||||||
GCAL_ENTRY;
|
GCAL_ENTRY;
|
||||||
|
|
||||||
@@ -727,23 +702,20 @@ on_client_view_complete_cb (ECalClientView *view,
|
|||||||
events_to_add = g_steal_pointer (&self->monitor_thread.events_to_add);
|
events_to_add = g_steal_pointer (&self->monitor_thread.events_to_add);
|
||||||
|
|
||||||
/* Process all these instances */
|
/* Process all these instances */
|
||||||
if (events_to_add)
|
for (guint i = 0; events_to_add && i < events_to_add->len; i++)
|
||||||
{
|
{
|
||||||
GHashTableIter iter;
|
|
||||||
GcalEvent *event;
|
GcalEvent *event;
|
||||||
|
|
||||||
g_hash_table_iter_init (&iter, events_to_add);
|
if (g_cancellable_is_cancelled (self->cancellable))
|
||||||
while (g_hash_table_iter_next (&iter, NULL, (gpointer*) &event))
|
return;
|
||||||
{
|
|
||||||
if (g_cancellable_is_cancelled (self->cancellable))
|
|
||||||
return;
|
|
||||||
|
|
||||||
GCAL_TRACE_MSG ("Sending event '%s' (%s) to main thead's idle",
|
event = g_ptr_array_index (events_to_add, i);
|
||||||
gcal_event_get_summary (event),
|
|
||||||
gcal_event_get_uid (event));
|
|
||||||
|
|
||||||
add_event_in_idle (self, event);
|
GCAL_TRACE_MSG ("Sending event '%s' (%s) to main thead's idle",
|
||||||
}
|
gcal_event_get_summary (event),
|
||||||
|
gcal_event_get_uid (event));
|
||||||
|
|
||||||
|
add_event_in_idle (self, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
self->monitor_thread.populated = TRUE;
|
self->monitor_thread.populated = TRUE;
|
||||||
|
|||||||
Reference in New Issue
Block a user