diff options
author | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2012-02-10 21:40:28 +0800 |
---|---|---|
committer | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2012-02-15 17:48:22 +0800 |
commit | 894ce49de11658ae2b66907bf609f0e6810acb3e (patch) | |
tree | 9df42ec7a301b50e9aa776771f05b19d3bda91a2 /libempathy | |
parent | 5fd8bf412017f07d25459b0efd72c88a420bd50f (diff) | |
download | gsoc2013-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.c | 52 | ||||
-rw-r--r-- | libempathy/empathy-individual-manager.h | 4 |
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__ */ |