static void setup (Test *test, gconstpointer data) { GError *error = NULL; GQuark features[] = { TP_CONNECTION_FEATURE_CONNECTED, 0 }; tp_debug_set_flags ("all"); test->dbus = tp_tests_dbus_daemon_dup_or_die (); test->mainloop = g_main_loop_new (NULL, FALSE); test->error = NULL; test->client_libdbus = dbus_bus_get_private (DBUS_BUS_STARTER, NULL); g_assert (test->client_libdbus != NULL); dbus_connection_setup_with_g_main (test->client_libdbus, NULL); dbus_connection_set_exit_on_disconnect (test->client_libdbus, FALSE); test->client_dbusglib = dbus_connection_get_g_connection ( test->client_libdbus); dbus_g_connection_ref (test->client_dbusglib); test->client_bus = tp_dbus_daemon_new (test->client_dbusglib); g_assert (test->client_bus != NULL); test->service_conn = tp_tests_object_new_static_class ( EXAMPLE_TYPE_CONTACT_LIST_CONNECTION, "account", "*****@*****.**", "protocol", "simple-protocol", NULL); test->service_conn_as_base = TP_BASE_CONNECTION (test->service_conn); g_assert (test->service_conn != NULL); g_assert (test->service_conn_as_base != NULL); g_assert (tp_base_connection_register (test->service_conn_as_base, "simple", &test->conn_name, &test->conn_path, &error)); g_assert_no_error (error); test->cwr_ready = FALSE; test->cwr_error = NULL; test->conn = tp_connection_new (test->client_bus, test->conn_name, test->conn_path, &error); g_assert (test->conn != NULL); g_assert_no_error (error); tp_cli_connection_call_connect (test->conn, -1, NULL, NULL, NULL, NULL); g_assert (!tp_proxy_is_prepared (test->conn, TP_CONNECTION_FEATURE_CORE)); g_assert (!tp_proxy_is_prepared (test->conn, TP_CONNECTION_FEATURE_CONNECTED)); g_assert (!tp_proxy_is_prepared (test->conn, TP_CONNECTION_FEATURE_BALANCE)); tp_tests_proxy_run_until_prepared (test->conn, features); }
static void test_user_set (Test *test, gconstpointer nil G_GNUC_UNUSED) { GQuark features[] = { TP_CONNECTION_FEATURE_ALIASING, 0 }; g_assert (!tp_proxy_is_prepared (test->conn, TP_CONNECTION_FEATURE_ALIASING)); g_assert (!tp_connection_can_set_contact_alias (test->conn)); tp_tests_proxy_run_until_prepared (test->conn, features); g_assert (tp_proxy_is_prepared (test->conn, TP_CONNECTION_FEATURE_ALIASING)); g_assert (tp_connection_can_set_contact_alias (test->conn)); }
gboolean empathy_account_manager_get_accounts_connected (gboolean *connecting) { TpAccountManager *manager; GList *accounts, *l; gboolean out_connecting = FALSE; gboolean out_connected = FALSE; manager = tp_account_manager_dup (); if (G_UNLIKELY (!tp_proxy_is_prepared (manager, TP_ACCOUNT_MANAGER_FEATURE_CORE))) g_critical (G_STRLOC ": %s called before AccountManager ready", G_STRFUNC); accounts = tp_account_manager_dup_valid_accounts (manager); for (l = accounts; l != NULL; l = l->next) { TpConnectionStatus s = tp_account_get_connection_status ( TP_ACCOUNT (l->data), NULL); if (s == TP_CONNECTION_STATUS_CONNECTING) out_connecting = TRUE; else if (s == TP_CONNECTION_STATUS_CONNECTED) out_connected = TRUE; if (out_connecting && out_connected) break; } g_list_free_full (accounts, g_object_unref); g_object_unref (manager); if (connecting != NULL) *connecting = out_connecting; return out_connected; }
static void empathy_connection_managers_listed_cb (TpConnectionManager * const *cms, gsize n_cms, const GError *error, gpointer user_data, GObject *weak_object) { EmpathyConnectionManagers *self = EMPATHY_CONNECTION_MANAGERS (weak_object); EmpathyConnectionManagersPriv *priv = GET_PRIV (self); TpConnectionManager * const *iter; empathy_connection_managers_free_cm_list (self); if (error != NULL) { DEBUG ("Failed to get connection managers: %s", error->message); goto out; } for (iter = cms ; iter != NULL && *iter != NULL; iter++) { /* only list cms that didn't hit errors */ if (tp_proxy_is_prepared (*iter, TP_CONNECTION_MANAGER_FEATURE_CORE)) priv->cms = g_list_prepend (priv->cms, g_object_ref (*iter)); } out: g_object_ref (weak_object); if (!priv->ready) { priv->ready = TRUE; g_object_notify (weak_object, "ready"); } g_signal_emit (weak_object, signals[UPDATED], 0); g_object_unref (weak_object); }
static void new_chatroom_dialog_account_changed_cb (GtkComboBox *combobox, EmpathyNewChatroomDialog *dialog) { EmpathyAccountChooser *account_chooser; gboolean listing = FALSE; gboolean expanded = FALSE; TpConnection *connection; TpCapabilities *caps; if (dialog->room_list) { g_object_unref (dialog->room_list); dialog->room_list = NULL; } gtk_spinner_stop (GTK_SPINNER (dialog->throbber)); gtk_widget_hide (dialog->throbber); new_chatroom_dialog_model_clear (dialog); if (dialog->account != NULL) { g_signal_handler_disconnect (dialog->account, dialog->status_changed_id); g_object_unref (dialog->account); } account_chooser = EMPATHY_ACCOUNT_CHOOSER (dialog->account_chooser); dialog->account = empathy_account_chooser_dup_account (account_chooser); connection = empathy_account_chooser_get_connection (account_chooser); if (dialog->account == NULL) goto out; dialog->status_changed_id = g_signal_connect (dialog->account, "status-changed", G_CALLBACK (account_status_changed_cb), dialog); /* empathy_account_chooser_filter_supports_chatrooms ensures that the * account has a connection and CAPABILITIES has been prepared. */ g_assert (connection != NULL); g_assert (tp_proxy_is_prepared (connection, TP_CONNECTION_FEATURE_CAPABILITIES)); caps = tp_connection_get_capabilities (connection); if (tp_capabilities_supports_room_list (caps, NULL)) { /* Roomlist channels are supported */ dialog->room_list = empathy_tp_roomlist_new (dialog->account); } else { dialog->room_list = NULL; } if (dialog->room_list) { g_signal_connect (dialog->room_list, "destroy", G_CALLBACK (new_chatroom_dialog_roomlist_destroy_cb), dialog); g_signal_connect (dialog->room_list, "new-room", G_CALLBACK (new_chatroom_dialog_new_room_cb), dialog); g_signal_connect (dialog->room_list, "notify::is-listing", G_CALLBACK (new_chatroom_dialog_listing_cb), dialog); g_signal_connect (dialog->room_list, "error::start", G_CALLBACK (start_listing_error_cb), dialog); g_signal_connect (dialog->room_list, "error::stop", G_CALLBACK (stop_listing_error_cb), dialog); expanded = gtk_expander_get_expanded (GTK_EXPANDER (dialog->expander_browse)); if (expanded) { gtk_widget_hide (dialog->viewport_error); gtk_widget_set_sensitive (dialog->treeview, TRUE); new_chatroom_dialog_browse_start (dialog); } listing = empathy_tp_roomlist_is_listing (dialog->room_list); if (listing) { gtk_spinner_start (GTK_SPINNER (dialog->throbber)); gtk_widget_show (dialog->throbber); } } gtk_widget_set_sensitive (dialog->expander_browse, dialog->room_list != NULL); out: new_chatroom_dialog_update_widgets (dialog); }
static void reload_contact_info (TpawUserInfo *self) { TpConnection *connection; TpContact *contact = NULL; TpContactInfoFlags flags; /* Cancel previous RequestContactInfo, if any */ if (self->priv->details_cancellable != NULL) g_cancellable_cancel (self->priv->details_cancellable); g_clear_object (&self->priv->details_cancellable); /* Remove current contact info widgets, if any */ gtk_container_foreach (GTK_CONTAINER (self), grid_foreach_cb, NULL); gtk_widget_hide (self->priv->details_label); gtk_widget_hide (self->priv->details_spinner); tp_clear_pointer (&self->priv->details_to_set, tp_contact_info_list_free); self->priv->details_changed = FALSE; connection = tp_account_get_connection (self->priv->account); if (connection != NULL) { contact = tp_connection_get_self_contact (connection); /* FIXME: we should rely on the factory to do this, see bgo#706892 */ if (!tp_proxy_is_prepared (connection, TP_CONNECTION_FEATURE_CONTACT_INFO) && !self->priv->tried_preparing_contact_info) { GQuark features[] = { TP_CONNECTION_FEATURE_CONTACT_INFO, 0 }; /* Prevent an infinite loop if the connection doesn't implement * ContactInfo, see bgo#709677 */ self->priv->tried_preparing_contact_info = TRUE; tp_proxy_prepare_async (connection, features, connection_contact_info_prepared_cb, g_object_ref (self)); } } /* Display infobar if we don't have a self contact (probably offline) */ if (contact == NULL) { GtkWidget *infobar; GtkWidget *content; GtkWidget *label; infobar = gtk_info_bar_new (); gtk_info_bar_set_message_type (GTK_INFO_BAR (infobar), GTK_MESSAGE_INFO); content = gtk_info_bar_get_content_area (GTK_INFO_BAR (infobar)); label = gtk_label_new (_("Go online to edit your personal information.")); gtk_container_add (GTK_CONTAINER (content), label); gtk_widget_show (label); gtk_grid_attach_next_to ((GtkGrid *) self, infobar, NULL, GTK_POS_BOTTOM, 3, 1); gtk_widget_show (infobar); g_object_set_data (G_OBJECT (infobar), DATA_IS_CONTACT_INFO, (gpointer) TRUE); return; } if (!tp_proxy_has_interface_by_id (connection, TP_IFACE_QUARK_CONNECTION_INTERFACE_CONTACT_INFO)) return; flags = tp_connection_get_contact_info_flags (connection); if ((flags & TP_CONTACT_INFO_FLAG_CAN_SET) == 0) return; /* Request the contact's info */ gtk_widget_show (self->priv->details_spinner); gtk_spinner_start (GTK_SPINNER (self->priv->details_spinner)); g_assert (self->priv->details_cancellable == NULL); self->priv->details_cancellable = g_cancellable_new (); tp_contact_request_contact_info_async (contact, self->priv->details_cancellable, request_contact_info_cb, self); }