static void check_connection (EmpathyConnectionAggregator *self, TpConnection *conn) { GPtrArray *contacts; if (g_list_find (self->priv->conns, conn) != NULL) return; self->priv->conns = g_list_prepend (self->priv->conns, g_object_ref (conn)); tp_g_signal_connect_object (conn, "contact-list-changed", G_CALLBACK (contact_list_changed_cb), self, 0); contacts = tp_connection_dup_contact_list (conn); if (contacts != NULL) { GPtrArray *empty; empty = g_ptr_array_new (); contact_list_changed_cb (conn, contacts, empty, self); g_ptr_array_unref (empty); } tp_g_signal_connect_object (conn, "invalidated", G_CALLBACK (conn_invalidated_cb), self, 0); }
GPtrArray * empathy_connection_aggregator_dup_all_contacts ( EmpathyConnectionAggregator *self) { GPtrArray *result; GList *l; result = g_ptr_array_new_with_free_func (g_object_unref); for (l = self->priv->conns; l != NULL; l = g_list_next (l)) { TpConnection *conn = l->data; GPtrArray *contacts; contacts = tp_connection_dup_contact_list (conn); if (contacts == NULL) continue; tp_g_ptr_array_extend (result, contacts); /* tp_g_ptr_array_extend() doesn't give us an extra ref */ g_ptr_array_foreach (contacts, (GFunc) g_object_ref, NULL); g_ptr_array_unref (contacts); } return result; }
static void contact_blocking_dialog_account_changed (GtkWidget *account_chooser, EmpathyContactBlockingDialog *self) { TpConnection *conn = empathy_account_chooser_get_connection ( EMPATHY_ACCOUNT_CHOOSER (account_chooser)); GPtrArray *blocked; GPtrArray *members; guint i; if (self->priv->block_account_changed > 0) return; if (conn == self->priv->current_conn) return; /* clear the lists of contacts */ gtk_list_store_clear (self->priv->blocked_contacts); gtk_list_store_clear (self->priv->completion_contacts); if (self->priv->current_conn != NULL) { g_signal_handlers_disconnect_by_func (self->priv->current_conn, blocked_contacts_changed_cb, self); g_clear_object (&self->priv->current_conn); } if (conn == NULL) return; DEBUG ("Account changed: %s", get_pretty_conn_name (conn)); self->priv->current_conn = g_object_ref (conn); tp_g_signal_connect_object (conn, "blocked-contacts-changed", G_CALLBACK (blocked_contacts_changed_cb), self, 0); blocked = tp_connection_get_blocked_contacts (conn); DEBUG ("%u contacts blocked on %s", blocked != NULL ? blocked->len : 0, get_pretty_conn_name (conn)); contact_blocking_dialog_add_blocked (self, blocked); DEBUG ("Loading contacts"); members = tp_connection_dup_contact_list (conn); for (i = 0; i < members->len; i++) { TpContact *contact = g_ptr_array_index (members, i); gchar *tmpstr; tmpstr = g_strdup_printf ("%s (%s)", tp_contact_get_alias (contact), tp_contact_get_identifier (contact)); gtk_list_store_insert_with_values (self->priv->completion_contacts, NULL, -1, COL_COMPLETION_IDENTIFIER, tp_contact_get_identifier (contact), COL_COMPLETION_TEXT, tmpstr, -1); g_free (tmpstr); } g_ptr_array_unref (members); }
static void chat_conversations_list_connection_prepare (GObject *source_object, GAsyncResult *res, gpointer user_data) { ChatConversationsList *self = CHAT_CONVERSATIONS_LIST (user_data); ChatConversationsListPrivate *priv = self->priv; GError *error; GList *contacts = NULL; GPtrArray *contact_list = NULL; TpAccount *account; TpConnection *conn = TP_CONNECTION (source_object); TpContactListState state; guint i; error = NULL; if (!tp_proxy_prepare_finish (source_object, res, &error)) { g_warning ("Unable to prepare the connection: %s", error->message); g_error_free (error); goto out; } state = tp_connection_get_contact_list_state (conn); if (state != TP_CONTACT_LIST_STATE_SUCCESS) { g_warning ("Value of connection:contact-list-state %p was %d", conn, state); goto out; } account = tp_connection_get_account (conn); contact_list = tp_connection_dup_contact_list (conn); for (i = 0; i < contact_list->len; i++) { ChatConversationsListGetFilteredEventsData *data; TpContact *contact; TplEntity *entity; contact = TP_CONTACT (g_ptr_array_index (contact_list, i)); entity = tpl_entity_new_from_tp_contact (contact, TPL_ENTITY_CONTACT); if (tpl_log_manager_exists (priv->lm, account, entity, TPL_EVENT_MASK_TEXT)) { g_message ("%s", tp_contact_get_alias (contact)); contacts = g_list_prepend (contacts, g_object_ref (contact)); data = chat_conversations_list_get_filtered_events_data_new (self, contact); tpl_log_manager_get_filtered_events_async (priv->lm, account, entity, TPL_EVENT_MASK_TEXT, 1, NULL, NULL, chat_conversations_list_get_filtered_events, data); } g_object_unref (entity); } g_hash_table_insert (priv->accounts, g_object_ref (account), contacts); out: if (contact_list != NULL) g_ptr_array_unref (contact_list); g_object_unref (self); }