eion/purple-hangouts

Parents 29830ca566a6
Children 0ebdcdad6e06
Workaround for infinite loop when setting the group chat alias/name
--- a/hangouts_events.c Fri Sep 23 11:37:28 2016 +1200
+++ b/hangouts_events.c Fri Sep 23 16:20:23 2016 +1200
@@ -756,7 +756,9 @@
if (g_hash_table_contains(ha->group_chats, conv_id)) {
chat = purple_blist_find_chat(ha->account, conv_id);
if (chat && g_strcmp0(purple_chat_get_alias(chat), conversation_rename->new_name)) {
+ g_dataset_set_data(ha, "ignore_set_alias", "true");
purple_chat_set_alias(chat, conversation_rename->new_name);
+ g_dataset_set_data(ha, "ignore_set_alias", NULL);
}
}
}
--- a/libhangouts.c Fri Sep 23 11:37:28 2016 +1200
+++ b/libhangouts.c Fri Sep 23 16:20:23 2016 +1200
@@ -145,6 +145,7 @@
const gchar *conv_id;
GHashTable *components;
HangoutsAccount *ha;
+ const gchar *new_alias;
if (PURPLE_IS_CHAT(node)) {
chat = PURPLE_CHAT(node);
@@ -165,14 +166,23 @@
}
ha = purple_connection_get_protocol_data(pc);
+ if (g_dataset_get_data(ha, "ignore_set_alias")) {
+ return;
+ }
+
if (chat != NULL) {
- components = purple_chat_get_components(chat);
- conv_id = g_hash_table_lookup(components, "conv_id");
- if (conv_id == NULL) {
- conv_id = purple_chat_get_name_only(chat);
+ new_alias = purple_chat_get_alias(chat);
+
+ // Don't send update to existing update
+ if (g_strcmp0(old_alias, new_alias)) {
+ components = purple_chat_get_components(chat);
+ conv_id = g_hash_table_lookup(components, "conv_id");
+ if (conv_id == NULL) {
+ conv_id = purple_chat_get_name_only(chat);
+ }
+
+ hangouts_rename_conversation(ha, conv_id, new_alias);
}
-
- hangouts_rename_conversation(ha, conv_id, purple_chat_get_alias(chat));
}
}