qulogic/pidgin

Parents 482ba61e5123
Children 93e9a1684be7
Automatically add accounts as a member when creating conversations

Testing Done:
Ran the unit tests and connected to twitch.

Reviewed at https://reviews.imfreedom.org/r/2831/
--- a/libpurple/purpleconversation.c Sun Nov 19 00:52:06 2023 -0600
+++ b/libpurple/purpleconversation.c Sun Nov 19 01:00:41 2023 -0600
@@ -126,13 +126,26 @@
purple_conversation_set_account(PurpleConversation *conv,
PurpleAccount *account)
{
+ PurpleConversationMember *member = NULL;
PurpleConversationPrivate *priv = NULL;
g_return_if_fail(PURPLE_IS_CONVERSATION(conv));
priv = purple_conversation_get_instance_private(conv);
+ /* Remove the account from the conversation if it's a member. */
+ if(PURPLE_IS_ACCOUNT(priv->account)) {
+ member = purple_conversation_find_member(conv,
+ PURPLE_CONTACT_INFO(priv->account));
+ if(PURPLE_IS_CONVERSATION_MEMBER(member)) {
+ purple_conversation_remove_member(conv, member, FALSE, NULL);
+ }
+ }
+
if(g_set_object(&priv->account, account)) {
if(PURPLE_IS_ACCOUNT(priv->account)) {
+ purple_conversation_add_member(conv, PURPLE_CONTACT_INFO(account),
+ FALSE, NULL);
+
g_signal_connect_object(account, "notify::connected",
G_CALLBACK(purple_conversation_account_connected_cb),
conv, 0);
--- a/libpurple/tests/test_conversation.c Sun Nov 19 00:52:06 2023 -0600
+++ b/libpurple/tests/test_conversation.c Sun Nov 19 01:00:41 2023 -0600
@@ -241,6 +241,7 @@
PurpleConversationManager *conversation_manager = NULL;
PurpleConversationMember *member = NULL;
PurpleConversationMember *member1 = NULL;
+ PurpleConversationMember *test_member = NULL;
gboolean removed = FALSE;
gint added_called = 0;
gint removed_called = 0;
@@ -254,6 +255,11 @@
"name", "test-conversation",
NULL);
+ /* Make sure the account got added as a member. */
+ test_member = purple_conversation_find_member(conversation,
+ PURPLE_CONTACT_INFO(account));
+ g_assert_nonnull(test_member);
+
/* Connect our signals. */
g_signal_connect(conversation, "member-added",
G_CALLBACK(test_purple_conversation_membership_signal_cb),
@@ -268,6 +274,9 @@
g_assert_cmpint(added_called, ==, 1);
g_assert_true(PURPLE_IS_CONVERSATION_MEMBER(member));
+ test_member = purple_conversation_find_member(conversation, info);
+ g_assert_true(member == test_member);
+
/* Add our own reference to the returned member as we use it later to
* verify that double remove doesn't do anything.
*/
@@ -288,6 +297,9 @@
g_assert_true(removed);
g_assert_cmpint(removed_called, ==, 1);
+ test_member = purple_conversation_find_member(conversation, info);
+ g_assert_null(test_member);
+
/* Try to remove the member again and verify that nothing was removed and
* that the signal wasn't emitted.
*/