diff options
Diffstat (limited to 'libempathy')
-rw-r--r-- | libempathy/empathy-individual-manager.c | 52 | ||||
-rw-r--r-- | libempathy/empathy-individual-manager.h | 4 | ||||
-rw-r--r-- | libempathy/empathy-utils.c | 49 |
3 files changed, 33 insertions, 72 deletions
diff --git a/libempathy/empathy-individual-manager.c b/libempathy/empathy-individual-manager.c index 68b094ef1..a1ca269c6 100644 --- a/libempathy/empathy-individual-manager.c +++ b/libempathy/empathy-individual-manager.c @@ -763,55 +763,3 @@ 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 08a1faade..ec7603882 100644 --- a/libempathy/empathy-individual-manager.h +++ b/libempathy/empathy-individual-manager.h @@ -93,9 +93,5 @@ 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__ */ diff --git a/libempathy/empathy-utils.c b/libempathy/empathy-utils.c index 2f4c9edde..62c654428 100644 --- a/libempathy/empathy-utils.c +++ b/libempathy/empathy-utils.c @@ -1167,10 +1167,28 @@ empathy_sasl_channel_supports_mechanism (TpChannel *channel, return tp_strv_contains (available_mechanisms, mechanism); } +static FolksIndividual * +create_individual_from_persona (FolksPersona *persona) +{ + GeeSet *personas; + FolksIndividual *individual; + + personas = GEE_SET ( + gee_hash_set_new (FOLKS_TYPE_PERSONA, g_object_ref, g_object_unref, + g_direct_hash, g_direct_equal)); + + gee_collection_add (GEE_COLLECTION (personas), persona); + + individual = folks_individual_new (personas); + + g_clear_object (&personas); + + return individual; +} + FolksIndividual * empathy_create_individual_from_tp_contact (TpContact *contact) { - GeeSet *personas; TpfPersona *persona; FolksIndividual *individual; @@ -1182,17 +1200,9 @@ empathy_create_individual_from_tp_contact (TpContact *contact) return NULL; } - personas = GEE_SET ( - gee_hash_set_new (FOLKS_TYPE_PERSONA, g_object_ref, g_object_unref, - g_direct_hash, g_direct_equal)); - - gee_collection_add (GEE_COLLECTION (personas), persona); - - individual = folks_individual_new (personas); - - g_clear_object (&persona); - g_clear_object (&personas); + individual = create_individual_from_persona (FOLKS_PERSONA (persona)); + g_object_unref (persona); return individual; } @@ -1201,17 +1211,24 @@ empathy_create_individual_from_tp_contact (TpContact *contact) FolksIndividual * empathy_ensure_individual_from_tp_contact (TpContact *contact) { - EmpathyIndividualManager *mgr; + TpfPersona *persona; FolksIndividual *individual; - mgr = empathy_individual_manager_dup_singleton (); - individual = empathy_individual_manager_lookup_by_contact (mgr, contact); + persona = tpf_persona_dup_for_contact (contact); + if (persona == NULL) + { + DEBUG ("Failed to get a persona for %s", + tp_contact_get_identifier (contact)); + return NULL; + } + + individual = folks_persona_get_individual (FOLKS_PERSONA (persona)); if (individual != NULL) g_object_ref (individual); else - individual = empathy_create_individual_from_tp_contact (contact); + individual = create_individual_from_persona (FOLKS_PERSONA (persona)); - g_object_unref (mgr); + g_object_unref (persona); return individual; } |