Fri, 27 Sep 2024 01:44:31 -0500
Add some basic event messages for membership changes
Testing Done:
Ran with /r/3538 then connected to my local ergo and had another client join and part the conversation.
Also called in the turtles for good measure.
Bugs closed: PIDGIN-17976
Reviewed at https://reviews.imfreedom.org/r/3539/
| libpurple/purpleconversation.c | file | annotate | diff | comparison | revisions |
--- a/libpurple/purpleconversation.c Fri Sep 27 00:21:49 2024 -0500 +++ b/libpurple/purpleconversation.c Fri Sep 27 01:44:31 2024 -0500 @@ -349,6 +349,76 @@ } static void +purple_conversation_members_member_added_cb(G_GNUC_UNUSED PurpleConversationMembers *members, + PurpleConversationMember *member, + gboolean announce, + const char *join_message, + gpointer data) +{ + PurpleConversation *conversation = data; + PurpleMessage *message = NULL; + char *contents = NULL; + + if(!announce) { + return; + } + + if(purple_strempty(join_message)) { + contents = g_strdup_printf(_("%s has joined the conversation"), + purple_conversation_member_get_name_for_display(member)); + } else { + contents = g_strdup_printf(_("%s has joined the conversation: %s"), + purple_conversation_member_get_name_for_display(member), + join_message); + } + + message = g_object_new( + PURPLE_TYPE_MESSAGE, + "contents", contents, + "event", TRUE, + NULL); + + g_free(contents); + + purple_conversation_write_message(conversation, message); +} + +static void +purple_conversation_members_member_removed_cb(G_GNUC_UNUSED PurpleConversationMembers *members, + PurpleConversationMember *member, + gboolean announce, + const char *part_message, + gpointer data) +{ + PurpleConversation *conversation = data; + PurpleMessage *message = NULL; + char *contents = NULL; + + if(!announce) { + return; + } + + if(purple_strempty(part_message)) { + contents = g_strdup_printf(_("%s has left the conversation"), + purple_conversation_member_get_name_for_display(member)); + } else { + contents = g_strdup_printf(_("%s has left the conversation: %s"), + purple_conversation_member_get_name_for_display(member), + part_message); + } + + message = g_object_new( + PURPLE_TYPE_MESSAGE, + "contents", contents, + "event", TRUE, + NULL); + + g_free(contents); + + purple_conversation_write_message(conversation, message); +} + +static void purple_conversation_account_connected_cb(GObject *obj, G_GNUC_UNUSED GParamSpec *pspec, gpointer data) @@ -653,6 +723,12 @@ g_signal_connect_object(conversation->members, "items-changed", G_CALLBACK(purple_conversation_members_item_changed_cb), conversation, G_CONNECT_DEFAULT); + g_signal_connect_object(conversation->members, "member-added", + G_CALLBACK(purple_conversation_members_member_added_cb), + conversation, G_CONNECT_DEFAULT); + g_signal_connect_object(conversation->members, "member-removed", + G_CALLBACK(purple_conversation_members_member_removed_cb), + conversation, G_CONNECT_DEFAULT); } static void