Thu, 05 Sep 2024 04:19:48 -0500
Add a badges property to Purple.ConversationMember
Testing Done:
Ran the tests under valgrind and called in the turtles for the rest.
Bugs closed: PIDGIN-17914
Reviewed at https://reviews.imfreedom.org/r/3466/
--- a/libpurple/purpleconversationmember.c Wed Sep 04 00:27:44 2024 -0500 +++ b/libpurple/purpleconversationmember.c Thu Sep 05 04:19:48 2024 -0500 @@ -28,6 +28,7 @@ struct _PurpleConversationMember { GObject parent; + PurpleBadges *badges; PurpleContactInfo *contact_info; PurpleTags *tags; @@ -38,6 +39,7 @@ enum { PROP_0, + PROP_BADGES, PROP_CONTACT_INFO, PROP_TAGS, PROP_TYPING_STATE, @@ -120,6 +122,10 @@ PurpleConversationMember *member = PURPLE_CONVERSATION_MEMBER(obj); switch(param_id) { + case PROP_BADGES: + g_value_set_object(value, + purple_conversation_member_get_badges(member)); + break; case PROP_CONTACT_INFO: g_value_set_object(value, purple_conversation_member_get_contact_info(member)); @@ -187,6 +193,7 @@ purple_conversation_member_finalize(GObject *obj) { PurpleConversationMember *member = PURPLE_CONVERSATION_MEMBER(obj); + g_clear_object(&member->badges); g_clear_object(&member->tags); g_clear_pointer(&member->nickname, g_free); @@ -195,6 +202,7 @@ static void purple_conversation_member_init(PurpleConversationMember *member) { + member->badges = purple_badges_new(); member->tags = purple_tags_new(); } @@ -208,6 +216,18 @@ obj_class->set_property = purple_conversation_member_set_property; /** + * PurpleConversationMember:badges: + * + * The badges for the member. + * + * Since: 3.0 + */ + properties[PROP_BADGES] = g_param_spec_object( + "badges", NULL, NULL, + PURPLE_TYPE_BADGES, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); + + /** * PurpleConversationMember:contact-info: * * The contact info that this member is for. @@ -289,6 +309,13 @@ NULL); } +PurpleBadges * +purple_conversation_member_get_badges(PurpleConversationMember *member) { + g_return_val_if_fail(PURPLE_IS_CONVERSATION_MEMBER(member), NULL); + + return member->badges; +} + PurpleContactInfo * purple_conversation_member_get_contact_info(PurpleConversationMember *member) { g_return_val_if_fail(PURPLE_IS_CONVERSATION_MEMBER(member), NULL);
--- a/libpurple/purpleconversationmember.h Wed Sep 04 00:27:44 2024 -0500 +++ b/libpurple/purpleconversationmember.h Thu Sep 05 04:19:48 2024 -0500 @@ -30,6 +30,7 @@ #include <glib.h> #include <glib-object.h> +#include "purplebadges.h" #include "purplecontactinfo.h" #include "purpletags.h" #include "purpletyping.h" @@ -74,6 +75,23 @@ PurpleConversationMember *purple_conversation_member_new(PurpleContactInfo *info); /** + * purple_conversation_member_get_badges: + * @member: The instance. + * + * Gets the [class@Badges] from @member. + * + * This is generally used by user interfaces to display the badges, and + * protocols will update the badges as necessary. That said, nothing is + * stopping plugins from adding their own. + * + * Returns: (transfer none): The badges. + * + * Since: 3.0 + */ +PURPLE_AVAILABLE_IN_3_0 +PurpleBadges *purple_conversation_member_get_badges(PurpleConversationMember *member); + +/** * purple_conversation_member_get_contact_info: * @conversation_member: The instance. *
--- a/libpurple/tests/test_conversation_member.c Wed Sep 04 00:27:44 2024 -0500 +++ b/libpurple/tests/test_conversation_member.c Thu Sep 05 04:19:48 2024 -0500 @@ -55,6 +55,7 @@ static void test_purple_conversation_member_properties(void) { + PurpleBadges *badges = NULL; PurpleContactInfo *info = NULL; PurpleContactInfo *info1 = NULL; PurpleConversationMember *member = NULL; @@ -78,6 +79,7 @@ /* Now use g_object_get to read all of the properties. */ g_object_get(member, + "badges", &badges, "contact-info", &info1, "name-for-display", &name_for_display, "nickname", &nickname, @@ -85,6 +87,9 @@ "typing-state", &typing_state, NULL); + g_assert_true(PURPLE_IS_BADGES(badges)); + g_clear_object(&badges); + g_assert_true(info1 == info); g_clear_object(&info1);