diff options
author | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2010-12-22 18:44:57 +0800 |
---|---|---|
committer | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2011-02-24 17:19:48 +0800 |
commit | 33b6ee49a826c72e8a872bc9a98ef5015bca638a (patch) | |
tree | d65f7536a9e55ee75893a7506d895921ce449a24 /libempathy-gtk/empathy-chat.c | |
parent | c7112dca957e3c5fb4c318f2753b22e300960747 (diff) | |
download | gsoc2013-empathy-33b6ee49a826c72e8a872bc9a98ef5015bca638a.tar gsoc2013-empathy-33b6ee49a826c72e8a872bc9a98ef5015bca638a.tar.gz gsoc2013-empathy-33b6ee49a826c72e8a872bc9a98ef5015bca638a.tar.bz2 gsoc2013-empathy-33b6ee49a826c72e8a872bc9a98ef5015bca638a.tar.lz gsoc2013-empathy-33b6ee49a826c72e8a872bc9a98ef5015bca638a.tar.xz gsoc2013-empathy-33b6ee49a826c72e8a872bc9a98ef5015bca638a.tar.zst gsoc2013-empathy-33b6ee49a826c72e8a872bc9a98ef5015bca638a.zip |
re-implement /query and /msg (#623682)
Diffstat (limited to 'libempathy-gtk/empathy-chat.c')
-rw-r--r-- | libempathy-gtk/empathy-chat.c | 62 |
1 files changed, 38 insertions, 24 deletions
diff --git a/libempathy-gtk/empathy-chat.c b/libempathy-gtk/empathy-chat.c index 2f374cd62..cb9ceb31f 100644 --- a/libempathy-gtk/empathy-chat.c +++ b/libempathy-gtk/empathy-chat.c @@ -633,37 +633,45 @@ typedef struct { gchar *message; } ChatCommandMsgData; -#if 0 static void -chat_command_msg_cb (EmpathyDispatchOperation *dispatch, - const GError *error, +chat_command_msg_cb (GObject *source, + GAsyncResult *result, gpointer user_data) { ChatCommandMsgData *data = user_data; + GError *error = NULL; + TpChannel *channel; + + channel = tp_account_channel_request_ensure_and_observe_channel_finish ( + TP_ACCOUNT_CHANNEL_REQUEST (source), result, &error); + + if (channel == NULL) { + DEBUG ("Failed to get channel: %s", error->message); + g_error_free (error); - if (error != NULL) { empathy_chat_view_append_event (data->chat->view, _("Failed to open private chat")); goto OUT; } - if (!EMP_STR_EMPTY (data->message)) { - EmpathyTpChat *tpchat; - EmpathyMessage *message; + if (!EMP_STR_EMPTY (data->message) && TP_IS_TEXT_CHANNEL (channel)) { + TpTextChannel *text = (TpTextChannel *) channel; + TpMessage *msg; - tpchat = EMPATHY_TP_CHAT ( - empathy_dispatch_operation_get_channel_wrapper (dispatch)); + msg = tp_client_message_new_text (TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL, + data->message); - message = empathy_message_new (data->message); - empathy_tp_chat_send (tpchat, message); - g_object_unref (message); + tp_text_channel_send_message_async (text, msg, 0, NULL, NULL); + + g_object_unref (msg); } + g_object_unref (channel); + OUT: g_free (data->message); g_slice_free (ChatCommandMsgData, data); } -#endif static gboolean nick_command_supported (EmpathyChat *chat) @@ -736,26 +744,36 @@ chat_command_join (EmpathyChat *chat, g_strfreev (rooms); } -#if 0 static void chat_command_msg_internal (EmpathyChat *chat, const gchar *contact_id, const gchar *message) { EmpathyChatPriv *priv = GET_PRIV (chat); - TpConnection *connection; ChatCommandMsgData *data; + TpAccountChannelRequest *req; + GHashTable *request; + + request = tp_asv_new ( + TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING, TP_IFACE_CHANNEL_TYPE_TEXT, + TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT, TP_HANDLE_TYPE_CONTACT, + TP_PROP_CHANNEL_TARGET_ID, G_TYPE_STRING, contact_id, + NULL); + + req = tp_account_channel_request_new (priv->account, request, + tp_user_action_time_from_x11 (gtk_get_current_event_time ())); /* FIXME: We should probably search in members alias. But this * is enough for IRC */ data = g_slice_new (ChatCommandMsgData); data->chat = chat; data->message = g_strdup (message); - connection = empathy_tp_chat_get_connection (priv->tp_chat); - empathy_dispatcher_chat_with_contact_id (connection, contact_id, - gtk_get_current_event_time (), - chat_command_msg_cb, - data); + + tp_account_channel_request_ensure_and_observe_channel_async (req, NULL, NULL, + chat_command_msg_cb, data); + + g_object_unref (req); + g_hash_table_unref (request); } static void @@ -773,7 +791,6 @@ chat_command_msg (EmpathyChat *chat, { chat_command_msg_internal (chat, strv[1], strv[2]); } -#endif static void callback_for_request_rename (TpProxy *proxy, @@ -850,14 +867,11 @@ static ChatCommandItem commands[] = { {"j", 2, 2, chat_command_join, NULL, N_("/j <chat room ID>: join a new chat room")}, -#if 0 -/* FIXME: https://bugzilla.gnome.org/show_bug.cgi?id=623682 */ {"query", 2, 3, chat_command_query, NULL, N_("/query <contact ID> [<message>]: open a private chat")}, {"msg", 3, 3, chat_command_msg, NULL, N_("/msg <contact ID> <message>: open a private chat")}, -#endif {"nick", 2, 2, chat_command_nick, nick_command_supported, N_("/nick <nickname>: change your nickname on the current server")}, |