add empathy_individual_manager_lookup_by_contact()
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Fri, 10 Feb 2012 13:40:28 +0000 (14:40 +0100)
committerGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Wed, 15 Feb 2012 09:48:22 +0000 (10:48 +0100)
https://bugzilla.gnome.org/show_bug.cgi?id=669676

libempathy/empathy-individual-manager.c
libempathy/empathy-individual-manager.h

index a1ca269c6771628f5e283be42e9f57dc5e367518..68b094ef1be14d492ba8ceeab466b905a8b21bf7 100644 (file)
@@ -763,3 +763,55 @@ empathy_individual_manager_get_contacts_loaded (EmpathyIndividualManager *self)
 
   return priv->contacts_loaded;
 }
+
+static gboolean
+individual_has_contact (FolksIndividual *individual,
+    TpContact *contact)
+{
+  GeeSet *personas;
+  GeeIterator *iter;
+  gboolean found = FALSE;
+
+  personas = folks_individual_get_personas (individual);
+  iter = gee_iterable_iterator (GEE_ITERABLE (personas));
+
+  while (!found && gee_iterator_next (iter))
+    {
+      TpfPersona *persona = gee_iterator_get (iter);
+
+      if (TPF_IS_PERSONA (persona))
+        {
+          TpContact *c = tpf_persona_get_contact (persona);
+
+          if (c == contact)
+            found = TRUE;
+        }
+
+      g_clear_object (&persona);
+    }
+
+  g_clear_object (&iter);
+
+  return found;
+}
+
+/* Try finding a FolksIndividual containing @contact as one of his persona */
+FolksIndividual *
+empathy_individual_manager_lookup_by_contact (EmpathyIndividualManager *self,
+    TpContact *contact)
+{
+  EmpathyIndividualManagerPriv *priv = GET_PRIV (self);
+  GHashTableIter iter;
+  gpointer value;
+
+  g_hash_table_iter_init (&iter, priv->individuals);
+  while (g_hash_table_iter_next (&iter, NULL, &value))
+    {
+      FolksIndividual *individual = value;
+
+      if (individual_has_contact (individual, contact))
+        return individual;
+    }
+
+  return NULL;
+}
index ec760388272ec87bc390dba713f7103e2b2ab983..08a1faade155136f328e56211ecbad4d9bf6e458 100644 (file)
@@ -93,5 +93,9 @@ void empathy_individual_manager_set_blocked (EmpathyIndividualManager *self,
 gboolean empathy_individual_manager_get_contacts_loaded (
     EmpathyIndividualManager *self);
 
+FolksIndividual * empathy_individual_manager_lookup_by_contact (
+    EmpathyIndividualManager *self,
+    TpContact *contact);
+
 G_END_DECLS
 #endif /* __EMPATHY_INDIVIDUAL_MANAGER_H__ */