]> git.0d.be Git - empathy.git/commitdiff
Connected the aggregator to individuals-changed signal
authorLaurent Contzen <lcontzen@gmail.com>
Wed, 8 Aug 2012 10:29:11 +0000 (12:29 +0200)
committerLaurent Contzen <lcontzen@gmail.com>
Thu, 9 Aug 2012 10:51:41 +0000 (12:51 +0200)
libempathy-gtk/empathy-roster-model-aggregator.c

index 8aa20f93400dc21b7d94377c032cc23d9bea2fb6..f40b0259cd0cbb2af6d7e4fd635729107453c811 100644 (file)
@@ -82,6 +82,40 @@ struct _EmpathyRosterModelAggregatorPriv
   FolksIndividualAggregator *aggregator;
 };
 
+static void
+aggregator_individuals_changed_cb (FolksIndividualAggregator *aggregator,
+    GeeSet *added,
+    GeeSet *removed,
+    gchar *message,
+    FolksPersona *actor,
+    FolksGroupDetailsChangeReason reason,
+    EmpathyRosterModelAggregator *self)
+{
+  if (gee_collection_get_size (GEE_COLLECTION (added)) > 0)
+    {
+      GeeIterator *iter = gee_iterable_iterator (GEE_ITERABLE (added));
+
+      while (iter != NULL && gee_iterator_next (iter))
+        {
+          empathy_roster_model_fire_individual_added (
+              EMPATHY_ROSTER_MODEL (self), gee_iterator_get (iter));
+        }
+      g_clear_object (&iter);
+    }
+
+  if (gee_collection_get_size (GEE_COLLECTION (removed)) > 0)
+    {
+      GeeIterator *iter = gee_iterable_iterator (GEE_ITERABLE (removed));
+
+      while (iter != NULL && gee_iterator_next (iter))
+        {
+          empathy_roster_model_fire_individual_removed (
+              EMPATHY_ROSTER_MODEL (self), gee_iterator_get (iter));
+        }
+      g_clear_object (&iter);
+    }
+}
+
 static void
 empathy_roster_model_aggregator_get_property (GObject *object,
     guint property_id,
@@ -134,6 +168,11 @@ empathy_roster_model_aggregator_constructed (GObject *object)
   if (self->priv->aggregator == NULL)
     self->priv->aggregator = folks_individual_aggregator_new ();
 
+  tp_g_signal_connect_object (self->priv->aggregator, "individuals-changed",
+      G_CALLBACK (aggregator_individuals_changed_cb), self, 0);
+
+  folks_individual_aggregator_prepare (self->priv->aggregator, NULL, NULL);
+
   g_assert (FOLKS_IS_INDIVIDUAL_AGGREGATOR (self->priv->aggregator));
 }