--- a/protocols/demo/purpledemoprotocolconversation.c Fri Nov 22 00:21:51 2024 -0600 +++ b/protocols/demo/purpledemoprotocolconversation.c Fri Nov 22 00:49:59 2024 -0600 @@ -151,11 +151,43 @@ for(guint i = 0; i < g_list_model_get_n_items(participants); i++) { PurpleContactInfo *info = NULL; + PurpleConversationMember *member = NULL; PurpleConversationMembers *members = NULL; + PurpleTags *tags = NULL; + const char *badge_id = NULL; info = g_list_model_get_item(participants, i); members = purple_conversation_get_members(conversation); - purple_conversation_members_add_member(members, info, FALSE, NULL); + member = purple_conversation_members_add_member(members, info, FALSE, + NULL); + + tags = purple_contact_info_get_tags(info); + badge_id = purple_tags_get(tags, "demo-badge"); + if(!purple_strempty(badge_id)) { + PurpleBadge *badge = NULL; + PurpleBadgeManager *manager = NULL; + PurpleBadges *badges = NULL; + + manager = purple_badge_manager_get_default(); + badge = purple_badge_manager_find(manager, badge_id); + if(!PURPLE_IS_BADGE(badge)) { + char *icon_name = NULL; + char *id = NULL; + + id = g_strdup_printf("demo-badge-%s", badge_id); + icon_name = g_strdup_printf("demo-badge-%s", badge_id); + badge = purple_badge_new(id, 0, icon_name, " "); + g_free(id); + g_free(icon_name); + + purple_badge_manager_add(manager, badge); + } + + badges = purple_conversation_member_get_badges(member); + purple_badges_add_badge(badges, badge); + g_clear_object(&badge); + } + g_clear_object(&info); } g_clear_object(&details);