From: Guillaume Desmottes Date: Thu, 26 Apr 2012 12:54:44 +0000 (+0200) Subject: new-chatroom-dialog: use TpRoomList X-Git-Url: https://git.0d.be/?p=empathy.git;a=commitdiff_plain;h=daad3ffce158a58f2c53e2502bb179b30392b7ec new-chatroom-dialog: use TpRoomList https://bugzilla.gnome.org/show_bug.cgi?id=673989 --- diff --git a/src/empathy-new-chatroom-dialog.c b/src/empathy-new-chatroom-dialog.c index 66d38da7..e8365184 100644 --- a/src/empathy-new-chatroom-dialog.c +++ b/src/empathy-new-chatroom-dialog.c @@ -30,9 +30,8 @@ #include #include -#include +#include -#include #include #include #include @@ -51,7 +50,7 @@ G_DEFINE_TYPE (EmpathyNewChatroomDialog, empathy_new_chatroom_dialog, struct _EmpathyNewChatroomDialogPriv { - EmpathyTpRoomlist *room_list; + TpRoomList *room_list; /* Currently selected account */ TpAccount *account; /* Signal id of the "status-changed" signal connected on the currently @@ -403,16 +402,19 @@ new_chatroom_dialog_account_ready_cb (EmpathyAccountChooser *combobox, } static void -new_chatroom_dialog_roomlist_destroy_cb (EmpathyTpRoomlist *room_list, +listing_failed_cb (TpRoomList *room_list, + GError *error, EmpathyNewChatroomDialog *self) { - g_object_unref (self->priv->room_list); - self->priv->room_list = NULL; + gtk_label_set_text (GTK_LABEL (self->priv->label_error_message), + _("Failed to list rooms")); + gtk_widget_show_all (self->priv->viewport_error); + gtk_widget_set_sensitive (self->priv->treeview, FALSE); } static void -new_chatroom_dialog_new_room_cb (EmpathyTpRoomlist *room_list, - EmpathyChatroom *chatroom, +new_chatroom_dialog_got_room_cb (TpRoomList *room_list, + TpRoomInfo *room, EmpathyNewChatroomDialog *self) { GtkListStore *store; @@ -422,35 +424,37 @@ new_chatroom_dialog_new_room_cb (EmpathyTpRoomlist *room_list, const gchar *invite_only; gchar *tmp; - DEBUG ("New chatroom listed: %s (%s)", empathy_chatroom_get_name (chatroom), - empathy_chatroom_get_room (chatroom)); + DEBUG ("New room listed: %s (%s)", tp_room_info_get_name (room), + tp_room_info_get_handle_name (room)); /* Add to model */ store = GTK_LIST_STORE (self->priv->model); - members = g_strdup_printf ("%d", empathy_chatroom_get_members_count ( - chatroom)); - tmp = g_strdup_printf ("%s", empathy_chatroom_get_name (chatroom)); + members = g_strdup_printf ("%d", tp_room_info_get_members_count ( + room, NULL)); + tmp = g_strdup_printf ("%s", tp_room_info_get_name (room)); + /* Translators: Room/Join's roomlist tooltip. Parameters are a channel name, yes/no, yes/no and a number. */ tooltip = g_strdup_printf ( _("%s\nInvite required: %s\nPassword required: %s\nMembers: %s"), tmp, - empathy_chatroom_get_invite_only (chatroom) ? _("Yes") : _("No"), - empathy_chatroom_get_need_password (chatroom) ? _("Yes") : _("No"), + tp_room_info_get_invite_only (room, NULL) ? _("Yes") : _("No"), + tp_room_info_get_requires_password (room, NULL) ? _("Yes") : _("No"), members); g_free (tmp); - invite_only = (empathy_chatroom_get_invite_only (chatroom) ? + + invite_only = (tp_room_info_get_invite_only (room, NULL) ? GTK_STOCK_INDEX : NULL); - need_password = (empathy_chatroom_get_need_password (chatroom) ? + need_password = (tp_room_info_get_requires_password (room, NULL) ? GTK_STOCK_DIALOG_AUTHENTICATION : NULL); gtk_list_store_insert_with_values (store, NULL, -1, COL_NEED_PASSWORD, need_password, COL_INVITE_ONLY, invite_only, - COL_NAME, empathy_chatroom_get_name (chatroom), - COL_ROOM, empathy_chatroom_get_room (chatroom), + COL_NAME, tp_room_info_get_name (room), + COL_ROOM, tp_room_info_get_handle_name (room), COL_MEMBERS, members, - COL_MEMBERS_INT, empathy_chatroom_get_members_count (chatroom), + COL_MEMBERS_INT, tp_room_info_get_members_count (room, NULL), COL_TOOLTIP, tooltip, -1); @@ -459,16 +463,12 @@ new_chatroom_dialog_new_room_cb (EmpathyTpRoomlist *room_list, } static void -new_chatroom_dialog_listing_cb (EmpathyTpRoomlist *room_list, - gpointer unused, +new_chatroom_dialog_listing_cb (TpRoomList *room_list, + GParamSpec *spec, EmpathyNewChatroomDialog *self) { - gboolean listing; - - listing = empathy_tp_roomlist_is_listing (room_list); - /* Update the throbber */ - if (listing) + if (tp_room_list_is_listing (room_list)) { gtk_spinner_start (GTK_SPINNER (self->priv->throbber)); gtk_widget_show (self->priv->throbber); @@ -480,28 +480,6 @@ new_chatroom_dialog_listing_cb (EmpathyTpRoomlist *room_list, } } -static void -start_listing_error_cb (EmpathyTpRoomlist *room_list, - GError *error, - EmpathyNewChatroomDialog *self) -{ - gtk_label_set_text (GTK_LABEL (self->priv->label_error_message), - _("Could not start room listing")); - gtk_widget_show_all (self->priv->viewport_error); - gtk_widget_set_sensitive (self->priv->treeview, FALSE); -} - -static void -stop_listing_error_cb (EmpathyTpRoomlist *room_list, - GError *error, - EmpathyNewChatroomDialog *self) -{ - gtk_label_set_text (GTK_LABEL (self->priv->label_error_message), - _("Could not stop room listing")); - gtk_widget_show_all (self->priv->viewport_error); - gtk_widget_set_sensitive (self->priv->treeview, FALSE); -} - static void new_chatroom_dialog_model_clear (EmpathyNewChatroomDialog *self) { @@ -515,8 +493,51 @@ static void new_chatroom_dialog_browse_start (EmpathyNewChatroomDialog *self) { new_chatroom_dialog_model_clear (self); - if (self->priv->room_list) - empathy_tp_roomlist_start (self->priv->room_list); + + if (self->priv->room_list != NULL) + tp_room_list_start (self->priv->room_list); +} + +static void +new_room_list_cb (GObject *source, + GAsyncResult *result, + gpointer user_data) +{ + EmpathyNewChatroomDialog *self = user_data; + GError *error = NULL; + + self->priv->room_list = tp_room_list_new_finish (result, &error); + if (self->priv->room_list == NULL) + { + DEBUG ("Failed to create TpRoomList: %s\n", error->message); + g_error_free (error); + return; + } + + g_signal_connect (self->priv->room_list, "got-room", + G_CALLBACK (new_chatroom_dialog_got_room_cb), self); + g_signal_connect (self->priv->room_list, "failed", + G_CALLBACK (listing_failed_cb), self); + g_signal_connect (self->priv->room_list, "notify::listing", + G_CALLBACK (new_chatroom_dialog_listing_cb), self); + + if (gtk_expander_get_expanded (GTK_EXPANDER (self->priv->expander_browse))) + { + gtk_widget_hide (self->priv->viewport_error); + gtk_widget_set_sensitive (self->priv->treeview, TRUE); + new_chatroom_dialog_browse_start (self); + } + + if (tp_room_list_is_listing (self->priv->room_list)) + { + gtk_spinner_start (GTK_SPINNER (self->priv->throbber)); + gtk_widget_show (self->priv->throbber); + } + + gtk_widget_set_sensitive (self->priv->expander_browse, TRUE); + + new_chatroom_dialog_update_widgets (self); + } static void @@ -524,16 +545,10 @@ new_chatroom_dialog_account_changed_cb (GtkComboBox *combobox, EmpathyNewChatroomDialog *self) { EmpathyAccountChooser *account_chooser; - gboolean listing = FALSE; - gboolean expanded = FALSE; TpConnection *connection; TpCapabilities *caps; - if (self->priv->room_list) - { - g_object_unref (self->priv->room_list); - self->priv->room_list = NULL; - } + g_clear_object (&self->priv->room_list); gtk_spinner_stop (GTK_SPINNER (self->priv->throbber)); gtk_widget_hide (self->priv->throbber); @@ -565,45 +580,11 @@ new_chatroom_dialog_account_changed_cb (GtkComboBox *combobox, if (tp_capabilities_supports_room_list (caps, NULL)) { /* Roomlist channels are supported */ - self->priv->room_list = empathy_tp_roomlist_new (self->priv->account); - } - else - { - self->priv->room_list = NULL; + tp_room_list_new_async (self->priv->account, NULL, new_room_list_cb, + self); } - if (self->priv->room_list) - { - g_signal_connect (self->priv->room_list, "destroy", - G_CALLBACK (new_chatroom_dialog_roomlist_destroy_cb), self); - g_signal_connect (self->priv->room_list, "new-room", - G_CALLBACK (new_chatroom_dialog_new_room_cb), self); - g_signal_connect (self->priv->room_list, "notify::is-listing", - G_CALLBACK (new_chatroom_dialog_listing_cb), self); - g_signal_connect (self->priv->room_list, "error::start", - G_CALLBACK (start_listing_error_cb), self); - g_signal_connect (self->priv->room_list, "error::stop", - G_CALLBACK (stop_listing_error_cb), self); - - expanded = gtk_expander_get_expanded ( - GTK_EXPANDER (self->priv->expander_browse)); - if (expanded) - { - gtk_widget_hide (self->priv->viewport_error); - gtk_widget_set_sensitive (self->priv->treeview, TRUE); - new_chatroom_dialog_browse_start (self); - } - - listing = empathy_tp_roomlist_is_listing (self->priv->room_list); - if (listing) - { - gtk_spinner_start (GTK_SPINNER (self->priv->throbber)); - gtk_widget_show (self->priv->throbber); - } - } - - gtk_widget_set_sensitive (self->priv->expander_browse, - self->priv->room_list != NULL); + gtk_widget_set_sensitive (self->priv->expander_browse, FALSE); out: new_chatroom_dialog_update_widgets (self); @@ -628,13 +609,6 @@ new_chatroom_dialog_entry_changed_cb (GtkWidget *entry, } } -static void -new_chatroom_dialog_browse_stop (EmpathyNewChatroomDialog *self) -{ - if (self->priv->room_list) - empathy_tp_roomlist_stop (self->priv->room_list); -} - static void new_chatroom_dialog_entry_server_activate_cb (GtkWidget *widget, EmpathyNewChatroomDialog *self) @@ -651,7 +625,6 @@ new_chatroom_dialog_expander_browse_activate_cb (GtkWidget *widget, expanded = gtk_expander_get_expanded (GTK_EXPANDER (widget)); if (expanded) { - new_chatroom_dialog_browse_stop (self); gtk_window_set_resizable (GTK_WINDOW (self), FALSE); } else