aboutsummaryrefslogtreecommitdiffstats
path: root/libempathy
diff options
context:
space:
mode:
Diffstat (limited to 'libempathy')
-rw-r--r--libempathy/empathy-individual-manager.c52
-rw-r--r--libempathy/empathy-individual-manager.h4
-rw-r--r--libempathy/empathy-utils.c49
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;
}