TpfPersonaStore * empathy_dup_persona_store_for_connection (TpConnection *connection) { FolksBackendStore *backend_store; FolksBackend *backend; TpfPersonaStore *result = NULL; backend_store = folks_backend_store_dup (); backend = folks_backend_store_dup_backend_by_name (backend_store, "telepathy"); if (backend != NULL) { GeeMap *stores_map; GeeMapIterator *iter; stores_map = folks_backend_get_persona_stores (backend); iter = gee_map_map_iterator (stores_map); while (gee_map_iterator_next (iter)) { TpfPersonaStore *persona_store = gee_map_iterator_get_value (iter); TpAccount *account; TpConnection *conn_cur; account = tpf_persona_store_get_account (persona_store); conn_cur = tp_account_get_connection (account); if (conn_cur == connection) result = g_object_ref (persona_store); g_clear_object (&persona_store); } g_clear_object (&iter); } g_object_unref (backend); g_object_unref (backend_store); return result; }
void empathy_individual_manager_add_from_contact (EmpathyIndividualManager *self, EmpathyContact *contact) { EmpathyIndividualManagerPriv *priv; FolksBackendStore *backend_store; FolksBackend *backend; FolksPersonaStore *persona_store; GHashTable* details; GeeMap *persona_stores; TpAccount *account; const gchar *store_id; g_return_if_fail (EMPATHY_IS_INDIVIDUAL_MANAGER (self)); g_return_if_fail (EMPATHY_IS_CONTACT (contact)); priv = GET_PRIV (self); /* We need to ref the contact since otherwise its linked TpHandle will be * destroyed. */ g_object_ref (contact); DEBUG ("adding individual from contact %s (%s)", empathy_contact_get_id (contact), empathy_contact_get_alias (contact)); account = empathy_contact_get_account (contact); store_id = tp_proxy_get_object_path (TP_PROXY (account)); /* Get the persona store to use */ backend_store = folks_backend_store_dup (); backend = folks_backend_store_dup_backend_by_name (backend_store, "telepathy"); if (backend == NULL) { g_warning ("Failed to add individual from contact: couldn't get " "'telepathy' backend"); goto finish; } persona_stores = folks_backend_get_persona_stores (backend); persona_store = gee_map_get (persona_stores, store_id); if (persona_store == NULL) { g_warning ("Failed to add individual from contact: couldn't get persona " "store '%s'", store_id); goto finish; } details = tp_asv_new ( "contact", G_TYPE_STRING, empathy_contact_get_id (contact), NULL); folks_individual_aggregator_add_persona_from_details ( priv->aggregator, NULL, persona_store, details, aggregator_add_persona_from_details_cb, contact); g_hash_table_unref (details); g_object_unref (persona_store); finish: tp_clear_object (&backend); tp_clear_object (&backend_store); }