Diff

plugins/mod_blocklist.lua @ 10053:4b2cc8a60449

Merge 0.11->trunk
author Kim Alvefur <zash@zash.se>
date Thu, 20 Jun 2019 21:40:27 +0200
parent 9993:02a41315d275
parent 10052:0c35f353db68
child 10054:0656bd283fa2
line wrap: on
line diff
--- a/plugins/mod_blocklist.lua	Wed Jun 19 19:16:09 2019 +0200
+++ b/plugins/mod_blocklist.lua	Thu Jun 20 21:40:27 2019 +0200
@@ -128,6 +128,7 @@
 	-- > only if the contact is allowed to receive presence notifications [...]
 	-- So contacts we need to do that for are added to the set below.
 	local send_unavailable = is_blocking and {};
+	local send_available = not is_blocking and {};
 
 	-- Because blocking someone currently also blocks the ability to reject
 	-- subscription requests, we'll preemptively reject such
@@ -147,6 +148,8 @@
 			elseif is_contact_pending_in(username, module.host, jid) then
 				remove_pending[jid] = true;
 			end
+		elseif is_contact_subscribed(username, module.host, jid) then
+			send_available[jid] = true;
 		end
 	end
 
@@ -203,6 +206,11 @@
 			save_roster(username, module.host, roster);
 			-- Not much we can do about save failing here
 		end
+	else
+		local user_bare = username .. "@" .. module.host;
+		for jid in pairs(send_available) do
+			module:send(st.presence({ type = "probe", to = user_bare, from = jid }));
+		end
 	end
 
 	local blocklist_push = st.iq({ type = "set", id = "blocklist-push" })