aboutsummaryrefslogtreecommitdiffstats
path: root/libempathy
diff options
context:
space:
mode:
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>2012-02-10 21:40:28 +0800
committerGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>2012-02-15 17:48:22 +0800
commit894ce49de11658ae2b66907bf609f0e6810acb3e (patch)
tree9df42ec7a301b50e9aa776771f05b19d3bda91a2 /libempathy
parent5fd8bf412017f07d25459b0efd72c88a420bd50f (diff)
downloadgsoc2013-empathy-894ce49de11658ae2b66907bf609f0e6810acb3e.tar.gz
gsoc2013-empathy-894ce49de11658ae2b66907bf609f0e6810acb3e.tar.zst
gsoc2013-empathy-894ce49de11658ae2b66907bf609f0e6810acb3e.zip
add empathy_individual_manager_lookup_by_contact()
https://bugzilla.gnome.org/show_bug.cgi?id=669676
Diffstat (limited to 'libempathy')
-rw-r--r--libempathy/empathy-individual-manager.c52
-rw-r--r--libempathy/empathy-individual-manager.h4
2 files changed, 56 insertions, 0 deletions
diff --git a/libempathy/empathy-individual-manager.c b/libempathy/empathy-individual-manager.c
index a1ca269c6..68b094ef1 100644
--- a/libempathy/empathy-individual-manager.c
+++ b/libempathy/empathy-individual-manager.c
@@ -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;
+}
diff --git a/libempathy/empathy-individual-manager.h b/libempathy/empathy-individual-manager.h
index ec7603882..08a1faade 100644
--- a/libempathy/empathy-individual-manager.h
+++ b/libempathy/empathy-individual-manager.h
@@ -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__ */