eion/purple-hangouts

Parents 0ebdcdad6e06
Children 0ff1a93a9f96
Support sending typing notifications in a group chat with the https://github.com/EionRobb/pidgin-groupchat-typing-notifications plugin
--- a/hangouts_conversation.c Sat Sep 24 15:02:34 2016 -0300
+++ b/hangouts_conversation.c Mon Sep 26 20:46:16 2016 +1300
@@ -1470,12 +1470,30 @@
hangouts_send_typing(PurpleConnection *pc, const gchar *who, PurpleIMTypingState state)
{
HangoutsAccount *ha;
+ PurpleConversation *conv;
+
+ ha = purple_connection_get_protocol_data(pc);
+ conv = PURPLE_CONVERSATION(purple_conversations_find_im_with_account(who, purple_connection_get_account(pc)));
+ g_return_val_if_fail(conv, -1);
+
+ return hangouts_conv_send_typing(conv, state, ha);
+}
+
+guint
+hangouts_conv_send_typing(PurpleConversation *conv, PurpleIMTypingState state, HangoutsAccount *ha)
+{
const gchar *conv_id;
SetTypingRequest request;
ConversationId conversation_id;
- ha = purple_connection_get_protocol_data(pc);
- conv_id = g_hash_table_lookup(ha->one_to_ones_rev, who);
+ conv_id = purple_conversation_get_data(conv, "conv_id");
+ if (conv_id == NULL) {
+ if (PURPLE_IS_IM_CONVERSATION(conv)) {
+ conv_id = g_hash_table_lookup(ha->one_to_ones_rev, purple_conversation_get_name(conv));
+ } else {
+ conv_id = purple_conversation_get_name(conv);
+ }
+ }
g_return_val_if_fail(conv_id, -1); //TODO create new conversation for this new person
set_typing_request__init(&request);
--- a/hangouts_conversation.h Sat Sep 24 15:02:34 2016 -0300
+++ b/hangouts_conversation.h Mon Sep 26 20:46:16 2016 +1300
@@ -58,6 +58,7 @@
);
guint hangouts_send_typing(PurpleConnection *pc, const gchar *name, PurpleIMTypingState state);
+guint hangouts_conv_send_typing(PurpleConversation *conv, PurpleIMTypingState state, HangoutsAccount *ha);
void hangouts_get_users_presence(HangoutsAccount *ha, GList *user_ids);
--- a/libhangouts.c Sat Sep 24 15:02:34 2016 -0300
+++ b/libhangouts.c Mon Sep 26 20:46:16 2016 +1300
@@ -355,6 +355,7 @@
purple_signal_connect(purple_blist_get_handle(), "blist-node-removed", account, PURPLE_CALLBACK(hangouts_blist_node_removed), NULL);
purple_signal_connect(purple_blist_get_handle(), "blist-node-aliased", account, PURPLE_CALLBACK(hangouts_blist_node_aliased), NULL);
purple_signal_connect(purple_conversations_get_handle(), "conversation-updated", account, PURPLE_CALLBACK(hangouts_mark_conversation_seen), NULL);
+ purple_signal_connect(purple_conversations_get_handle(), "chat-conversation-typing", account, PURPLE_CALLBACK(hangouts_conv_send_typing), ha);
ha->active_client_timeout = purple_timeout_add_seconds(HANGOUTS_ACTIVE_CLIENT_TIMEOUT, ((GSourceFunc) hangouts_set_active_client), pc);
}