diff mod_groups_internal/mod_groups_internal.lua @ 5800:8566a423da88

mod_groups_internal: Set group names as roster groups
author Kim Alvefur <zash@zash.se>
date Sat, 23 Dec 2023 17:27:35 +0100
parents 5533c577dd02
children 742142f9771e
line wrap: on
line diff
--- a/mod_groups_internal/mod_groups_internal.lua	Sat Dec 23 00:06:35 2023 +0100
+++ b/mod_groups_internal/mod_groups_internal.lua	Sat Dec 23 17:27:35 2023 +0100
@@ -18,7 +18,7 @@
 
 -- Make a *one-way* subscription. User will see when contact is online,
 -- contact will not see when user is online.
-local function subscribe(user, user_jid, contact, contact_jid)
+local function subscribe(user, user_jid, contact, contact_jid, group_name)
 	-- Update user's roster to say subscription request is pending...
 	rostermanager.set_contact_pending_out(user, host, contact_jid);
 	-- Update contact's roster to say subscription request is pending...
@@ -28,6 +28,11 @@
 	-- Update user's roster to say subscription request approved...
 	rostermanager.process_inbound_subscription_approval(user, host, contact_jid);
 
+	if group_name then
+		local user_roster = rostermanager.load_roster(user, host);
+		user_roster[contact_jid].groups[group_name] = true;
+	end
+
 	-- Push updates to both rosters
 	rostermanager.roster_push(user, host, contact_jid);
 	rostermanager.roster_push(contact, host, user_jid);
@@ -40,17 +45,18 @@
 local function do_single_group_subscriptions(username, group_id)
 	local members = group_members_store:get(group_id);
 	if not members then return; end
+	local group_name = group_info_store:get_key(group_id, "name");
 	local user_jid = jid_join(username, host);
 	for membername in pairs(members) do
 		if membername ~= username then
 			local member_jid = jid_join(membername, host);
 			if not is_contact_subscribed(username, host, member_jid) then
 				module:log("debug", "[group %s] Subscribing %s to %s", member_jid, user_jid);
-				subscribe(membername, member_jid, username, user_jid);
+				subscribe(membername, member_jid, username, user_jid, group_name);
 			end
 			if not is_contact_subscribed(membername, host, user_jid) then
 				module:log("debug", "[group %s] Subscribing %s to %s", user_jid, member_jid);
-				subscribe(username, user_jid, membername, member_jid);
+				subscribe(username, user_jid, membername, member_jid, group_name);
 			end
 		end
 	end