aboutsummaryrefslogtreecommitdiffstats
path: root/src/empathy-new-chatroom-dialog.c
diff options
context:
space:
mode:
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>2012-04-26 20:54:44 +0800
committerGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>2012-05-10 20:17:03 +0800
commitdaad3ffce158a58f2c53e2502bb179b30392b7ec (patch)
tree39efe85feb1aa492c640e2a26e9766decdee787f /src/empathy-new-chatroom-dialog.c
parent4934dd5eeaa4c130350dd4dbb84859d09a27246b (diff)
downloadgsoc2013-empathy-daad3ffce158a58f2c53e2502bb179b30392b7ec.tar
gsoc2013-empathy-daad3ffce158a58f2c53e2502bb179b30392b7ec.tar.gz
gsoc2013-empathy-daad3ffce158a58f2c53e2502bb179b30392b7ec.tar.bz2
gsoc2013-empathy-daad3ffce158a58f2c53e2502bb179b30392b7ec.tar.lz
gsoc2013-empathy-daad3ffce158a58f2c53e2502bb179b30392b7ec.tar.xz
gsoc2013-empathy-daad3ffce158a58f2c53e2502bb179b30392b7ec.tar.zst
gsoc2013-empathy-daad3ffce158a58f2c53e2502bb179b30392b7ec.zip
new-chatroom-dialog: use TpRoomList
https://bugzilla.gnome.org/show_bug.cgi?id=673989
Diffstat (limited to 'src/empathy-new-chatroom-dialog.c')
-rw-r--r--src/empathy-new-chatroom-dialog.c179
1 files changed, 76 insertions, 103 deletions
diff --git a/src/empathy-new-chatroom-dialog.c b/src/empathy-new-chatroom-dialog.c
index 66d38da72..e8365184a 100644
--- a/src/empathy-new-chatroom-dialog.c
+++ b/src/empathy-new-chatroom-dialog.c
@@ -30,9 +30,8 @@
#include <glib/gi18n.h>
#include <glib/gprintf.h>
-#include <telepathy-glib/interfaces.h>
+#include <telepathy-glib/telepathy-glib.h>
-#include <libempathy/empathy-tp-roomlist.h>
#include <libempathy/empathy-chatroom.h>
#include <libempathy/empathy-utils.h>
#include <libempathy/empathy-request-util.h>
@@ -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 ("<b>%s</b>", empathy_chatroom_get_name (chatroom));
+ members = g_strdup_printf ("%d", tp_room_info_get_members_count (
+ room, NULL));
+ tmp = g_strdup_printf ("<b>%s</b>", 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);
@@ -481,28 +481,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)
{
GtkListStore *store;
@@ -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);
@@ -629,13 +610,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