# HG changeset patch # User Kim Alvefur # Date 1449365536 -3600 # Node ID 5bc229eb99d3eda6f834ce2f5a5157645082687f # Parent bdb216e0688a5cbdeee522a633adb43c185ab6bc mod_blocklist: Skip creating some tables and some processing if unblocking diff -r bdb216e0688a -r 5bc229eb99d3 plugins/mod_blocklist.lua --- a/plugins/mod_blocklist.lua Sun Dec 06 02:30:21 2015 +0100 +++ b/plugins/mod_blocklist.lua Sun Dec 06 02:32:16 2015 +0100 @@ -121,6 +121,7 @@ local origin, stanza = event.origin, event.stanza; local username = origin.username; local action = stanza.tags[1]; -- "block" or "unblock" + local is_blocking = action.name == "block" or nil; -- nil if unblocking local new = {}; -- JIDs to block depending or unblock on action -- XEP-0191 sayeth: @@ -128,11 +129,11 @@ -- > server MUST send unavailable presence information to the contact (but -- > 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 = {}; + local send_unavailable = is_blocking and {}; -- Because blocking someone currently also blocks the ability to reject -- subscription requests, we'll preemptively reject such - local remove_pending = {}; + local remove_pending = is_blocking and {}; for item in action:childtags("item") do local jid = jid_prep(item.attr.jid); @@ -142,15 +143,15 @@ end item.attr.jid = jid; -- echo back prepped new[jid] = true; - if is_contact_subscribed(username, module.host, jid) then - send_unavailable[jid] = true; - elseif is_contact_pending_in(username, module.host, jid) then - remove_pending[jid] = true; + if is_blocking then + if is_contact_subscribed(username, module.host, jid) then + send_unavailable[jid] = true; + elseif is_contact_pending_in(username, module.host, jid) then + remove_pending[jid] = true; + end end end - local is_blocking = action.name == "block" or nil; -- nil if unblocking - if is_blocking and not next(new) then -- element does not contain at least one child element origin.send(st_error_reply(stanza, "modify", "bad-request"));