]> git.0d.be Git - empathy.git/commitdiff
empathy-roster-model: New virtual method _get_groups_for_individual empathy-roster...
authorLaurent Contzen <lcontzen@gmail.com>
Wed, 4 Jul 2012 13:29:41 +0000 (15:29 +0200)
committerGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Mon, 23 Jul 2012 14:11:28 +0000 (16:11 +0200)
https://bugzilla.gnome.org/show_bug.cgi?id=680302

libempathy-gtk/empathy-roster-model-manager.c
libempathy-gtk/empathy-roster-model.c
libempathy-gtk/empathy-roster-model.h
libempathy-gtk/empathy-roster-view.c

index 2684d276597dda47bd35d783ffa376f387bcc715..7d747326aaa64c7e8477f23872403d8d3f36069e 100644 (file)
@@ -85,9 +85,7 @@ groups_changed_cb (EmpathyIndividualManager *manager,
     EmpathyRosterModelManager *self)
 {
   empathy_roster_model_fire_groups_changed (EMPATHY_ROSTER_MODEL (self),
-      individual,
-      group,
-      is_member);
+      individual, group, is_member);
 }
 
 static void
@@ -218,8 +216,31 @@ empathy_roster_model_manager_get_individuals (EmpathyRosterModel *model)
   return empathy_individual_manager_get_members (self->priv->manager);
 }
 
+static GList *
+empathy_roster_model_manager_get_groups_for_individual (EmpathyRosterModel *model,
+    FolksIndividual *individual)
+{
+  GList *groups_list = NULL;
+  GeeSet *groups_set;
+
+  groups_set = folks_group_details_get_groups (FOLKS_GROUP_DETAILS (individual));
+  if (gee_collection_get_size (GEE_COLLECTION (groups_set)) > 0)
+    {
+      GeeIterator *iter = gee_iterable_iterator (GEE_ITERABLE (groups_set));
+
+      while (iter != NULL && gee_iterator_next (iter))
+        {
+          groups_list = g_list_prepend (groups_list, gee_iterator_get (iter));
+        }
+      g_clear_object (&iter);
+    }
+
+  return groups_list;
+}
+
 static void
 roster_model_iface_init (EmpathyRosterModelInterface *iface)
 {
   iface->get_individuals = empathy_roster_model_manager_get_individuals;
+  iface->get_groups_for_individual = empathy_roster_model_manager_get_groups_for_individual;
 }
index eaceca5f7e835cc221377f6c2c760f381852c5da..d8671f2799cd096a5fdfe40726943d53d26fb3d3 100644 (file)
@@ -102,3 +102,17 @@ empathy_roster_model_get_individuals (EmpathyRosterModel *self)
 
   return (* iface->get_individuals) (self);
 }
+
+GList *
+empathy_roster_model_get_groups_for_individual (EmpathyRosterModel *self,
+    FolksIndividual *individual)
+{
+  EmpathyRosterModelInterface *iface;
+
+  g_return_val_if_fail (EMPATHY_IS_ROSTER_MODEL (self), NULL);
+
+  iface = EMPATHY_ROSTER_MODEL_GET_IFACE (self);
+  g_return_val_if_fail (iface->get_groups_for_individual != NULL, NULL);
+
+  return (* iface->get_groups_for_individual) (self, individual);
+}
index 59db96f0cd8e5826a4694e3ae5e59b2a3eef5bcc..9d600089362a86b9417d86759c5442d0c98cca27 100644 (file)
@@ -36,6 +36,8 @@ struct _EmpathyRosterModelInterface
 
   /* Virtual table */
   GList * (* get_individuals) (EmpathyRosterModel *self);
+  GList * (*get_groups_for_individual) (EmpathyRosterModel *self,
+      FolksIndividual *individual);
 };
 
 GType empathy_roster_model_get_type (void);
@@ -71,6 +73,9 @@ void empathy_roster_model_fire_groups_changed (EmpathyRosterModel *self,
 /* Public API */
 GList * empathy_roster_model_get_individuals (EmpathyRosterModel *self);
 
+GList * empathy_roster_model_get_groups_for_individual (EmpathyRosterModel *self,
+    FolksIndividual *individual);
+
 G_END_DECLS
 
 #endif /* #ifndef __EMPATHY_ROSTER_MODEL_H__*/
index b07a4b2524156bbc884cff9f4a4122b82b79b4b8..42b8afe6ab94f80913330a22ad255b3382a9cadd 100644 (file)
@@ -338,7 +338,7 @@ individual_added (EmpathyRosterView *self,
     }
   else
     {
-      GeeSet *groups;
+      GList *groups, *l;
       GList *tops;
 
       tops = empathy_individual_manager_get_top_individuals (
@@ -351,29 +351,23 @@ individual_added (EmpathyRosterView *self,
           add_to_group (self, individual, EMPATHY_ROSTER_VIEW_GROUP_TOP_GROUP);
         }
 
-      groups = folks_group_details_get_groups (
-          FOLKS_GROUP_DETAILS (individual));
+      groups = empathy_roster_model_get_groups_for_individual (self->priv->model,
+          individual);
 
-      if (gee_collection_get_size (GEE_COLLECTION (groups)) > 0)
+      if (g_list_length (groups) > 0)
         {
-          GeeIterator *iter = gee_iterable_iterator (GEE_ITERABLE (groups));
-
-          while (iter != NULL && gee_iterator_next (iter))
+          for (l = groups; l != NULL; l = g_list_next (l))
             {
-              gchar *group = gee_iterator_get (iter);
-
-              add_to_group (self, individual, group);
-
-              g_free (group);
+              add_to_group (self, individual, l->data);
             }
-
-          g_clear_object (&iter);
         }
       else
         {
           /* No group, adds to Ungrouped */
           add_to_group (self, individual, EMPATHY_ROSTER_VIEW_GROUP_UNGROUPED);
         }
+
+      g_list_free (groups);
     }
 }