--- a/hangouts_connection.h Tue Sep 20 07:43:11 2016 +1200
+++ b/hangouts_connection.h Wed Sep 21 23:54:03 2016 +1200
@@ -83,6 +83,7 @@
HANGOUTS_DEFINE_PBLITE_REQUEST_FUNC(get_conversation, GetConversation, "conversations/getconversation");
HANGOUTS_DEFINE_PBLITE_REQUEST_FUNC(create_conversation, CreateConversation, "conversations/createconversation");
HANGOUTS_DEFINE_PBLITE_REQUEST_FUNC(delete_conversation, DeleteConversation, "conversations/deleteconversation");
+HANGOUTS_DEFINE_PBLITE_REQUEST_FUNC(rename_conversation, RenameConversation, "conversations/renameconversation"); HANGOUTS_DEFINE_PBLITE_REQUEST_FUNC(modify_conversation_view, ModifyConversationView, "conversations/modifyconversationview");
HANGOUTS_DEFINE_PBLITE_REQUEST_FUNC(add_user, AddUser, "conversations/adduser");
HANGOUTS_DEFINE_PBLITE_REQUEST_FUNC(remove_user, RemoveUser, "conversations/removeuser");
--- a/hangouts_conversation.c Tue Sep 20 07:43:11 2016 +1200
+++ b/hangouts_conversation.c Wed Sep 21 23:54:03 2016 +1200
@@ -2067,4 +2067,20 @@
+hangouts_rename_conversation(HangoutsAccount *ha, const gchar *conv_id, const gchar *alias) + RenameConversationRequest request; + rename_conversation_request__init(&request); + request.request_header = hangouts_get_request_header(ha); + request.event_request_header = hangouts_get_event_request_header(ha, conv_id); + request.new_name = (gchar *) alias; + hangouts_pblite_rename_conversation(ha, &request, NULL, NULL); + hangouts_request_header_free(request.request_header); + hangouts_event_request_header_free(request.event_request_header); --- a/hangouts_conversation.h Tue Sep 20 07:43:11 2016 +1200
+++ b/hangouts_conversation.h Wed Sep 21 23:54:03 2016 +1200
@@ -70,6 +70,7 @@
void hangouts_chat_invite(PurpleConnection *pc, int id, const char *message, const char *who);
void hangouts_create_conversation(HangoutsAccount *ha, gboolean is_one_to_one, const char *who, const gchar *optional_message);
void hangouts_archive_conversation(HangoutsAccount *ha, const gchar *conv_id);
+void hangouts_rename_conversation(HangoutsAccount *ha, const gchar *conv_id, const gchar *alias); void hangouts_initiate_chat_from_node(PurpleBlistNode *node, gpointer userdata);
void hangouts_mark_conversation_seen(PurpleConversation *conv, PurpleConversationUpdateType type);
--- a/libhangouts.c Tue Sep 20 07:43:11 2016 +1200
+++ b/libhangouts.c Wed Sep 21 23:54:03 2016 +1200
@@ -136,6 +136,64 @@
+hangouts_blist_node_aliased(PurpleBlistNode *node, const char *old_alias) + PurpleChat *chat = NULL; + PurpleAccount *account = NULL; + GHashTable *components; + if (PURPLE_IS_CHAT(node)) { + chat = PURPLE_CHAT(node); + account = purple_chat_get_account(chat); + if (g_strcmp0(purple_account_get_protocol_id(account), HANGOUTS_PLUGIN_ID)) { + pc = purple_account_get_connection(account); + ha = purple_connection_get_protocol_data(pc); + components = purple_chat_get_components(chat); + conv_id = g_hash_table_lookup(components, "conv_id"); + conv_id = purple_chat_get_name_only(chat); + hangouts_rename_conversation(ha, conv_id, purple_chat_get_alias(chat)); +hangouts_chat_set_topic(PurpleConnection *pc, int id, const char *topic) + PurpleChatConversation *chatconv; + ha = purple_connection_get_protocol_data(pc); + chatconv = purple_conversations_find_chat(pc, id); + conv_id = purple_conversation_get_data(PURPLE_CONVERSATION(chatconv), "conv_id"); + // Fix for a race condition around the chat data and serv_got_joined_chat() + conv_id = purple_conversation_get_name(PURPLE_CONVERSATION(chatconv)); + return hangouts_rename_conversation(ha, conv_id, topic); hangouts_cmd_leave(PurpleConversation *conv, const gchar *cmd, gchar **args, gchar **error, void *data)
@@ -285,6 +343,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);
ha->active_client_timeout = purple_timeout_add_seconds(HANGOUTS_ACTIVE_CLIENT_TIMEOUT, ((GSourceFunc) hangouts_set_active_client), pc);
@@ -454,7 +513,7 @@
info->id = HANGOUTS_PLUGIN_ID;
- prpl_info->options = OPT_PROTO_NO_PASSWORD;
+ prpl_info->options = OPT_PROTO_NO_PASSWORD | OPT_PROTO_CHAT_TOPIC; prpl_info->account_options = hangouts_add_account_options(prpl_info->account_options);
purple_signal_register(plugin, "hangouts-received-stateupdate",
@@ -514,6 +573,7 @@
prpl_info->join = hangouts_join_chat;
prpl_info->get_name = hangouts_get_chat_name;
prpl_info->invite = hangouts_chat_invite;
+ prpl_info->set_topic = hangouts_chat_set_topic; @@ -672,7 +732,7 @@
plugin->info = info = g_new0(PurplePluginInfo, 1);
- prpl_info->options = OPT_PROTO_NO_PASSWORD | OPT_PROTO_IM_IMAGE;
+ prpl_info->options = OPT_PROTO_NO_PASSWORD | OPT_PROTO_IM_IMAGE | OPT_PROTO_CHAT_TOPIC; prpl_info->protocol_options = hangouts_add_account_options(prpl_info->protocol_options);
purple_signal_register(plugin, "hangouts-received-stateupdate",
@@ -703,6 +763,7 @@
prpl_info->join_chat = hangouts_join_chat;
prpl_info->get_chat_name = hangouts_get_chat_name;
prpl_info->chat_invite = hangouts_chat_invite;
+ prpl_info->set_chat_topic = hangouts_chat_set_topic; prpl_info->get_media_caps = hangouts_get_media_caps;
prpl_info->initiate_media = hangouts_initiate_media;
--- a/purplecompat.h Tue Sep 20 07:43:11 2016 +1200
+++ b/purplecompat.h Wed Sep 21 23:54:03 2016 +1200
@@ -20,6 +20,7 @@
#define purple_protocol_action_get_connection(action) ((action)->connection)
#define purple_chat_user_set_alias(cb, alias) g_object_set((cb), "alias", (alias), NULL)
+#define purple_chat_get_alias(chat) g_object_get_data(G_OBJECT(chat), "alias") #else /*!PURPLE_VERSION_CHECK(3, 0, 0)*/
@@ -31,6 +32,7 @@
#define PURPLE_IS_CHAT PURPLE_BLIST_NODE_IS_CHAT
#define purple_chat_get_name_only purple_chat_get_name
#define purple_chat_set_alias purple_blist_alias_chat
+#define purple_chat_get_alias(chat) ((chat)->alias) #define purple_buddy_set_server_alias purple_blist_server_alias_buddy
purple_blist_node_set_transient(PurpleBlistNode *node, gboolean transient)