From 9f6ac546e1dc284d5c25b9994534302e897d6484 Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Mon, 4 Apr 2016 17:15:10 +0200 Subject: mod_presence, mod_roster: Move responsibility for sending presence on roster removal to mod_presence --- plugins/mod_roster.lua | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) (limited to 'plugins/mod_roster.lua') diff --git a/plugins/mod_roster.lua b/plugins/mod_roster.lua index a674740c..0af088cb 100644 --- a/plugins/mod_roster.lua +++ b/plugins/mod_roster.lua @@ -75,13 +75,9 @@ module:hook("iq/self/jabber:iq:roster:query", function(event) local roster = session.roster; local r_item = roster[jid]; if r_item then - local to_bare = node and (node.."@"..host) or host; -- bare JID - if r_item.subscription == "both" or r_item.subscription == "from" or roster[false].pending[jid] then - core_post_stanza(session, st.presence({type="unsubscribed", from=session.full_jid, to=to_bare})); - end - if r_item.subscription == "both" or r_item.subscription == "to" or r_item.ask then - core_post_stanza(session, st.presence({type="unsubscribe", from=session.full_jid, to=to_bare})); - end + module:fire_event("roster-item-removed", { + username = node, jid = jid, item = r_item, origin = session, roster = roster, + }); local success, err_type, err_cond, err_msg = rm_remove_from_roster(session, jid); if success then session.send(st.reply(stanza)); -- cgit v1.2.3 From cc487c8b9d4694e2474dc11b33555b1eaac17527 Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Mon, 4 Apr 2016 17:18:27 +0200 Subject: mod_roster: Handle roster item removal with event on user deletion --- plugins/mod_roster.lua | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'plugins/mod_roster.lua') diff --git a/plugins/mod_roster.lua b/plugins/mod_roster.lua index 0af088cb..0e3fdc4e 100644 --- a/plugins/mod_roster.lua +++ b/plugins/mod_roster.lua @@ -134,17 +134,15 @@ end); module:hook_global("user-deleted", function(event) local username, host = event.username, event.host; + local origin = event.origin or prosody.hosts[host]; if host ~= module.host then return end local bare = username .. "@" .. host; local roster = rm_load_roster(username, host); for jid, item in pairs(roster) do if jid then - if item.subscription == "both" or item.subscription == "from" or roster[false].pending[jid] then - module:send(st.presence({type="unsubscribed", from=bare, to=jid})); - end - if item.subscription == "both" or item.subscription == "to" or item.ask then - module:send(st.presence({type="unsubscribe", from=bare, to=jid})); - end + module:fire_event("roster-item-removed", { + username = username, jid = jid, item = item, roster = roster, origin = origin, + }); end end end, 300); -- cgit v1.2.3 From afcc8898695dd49b60998369e55be70d1a266a82 Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Mon, 4 Apr 2016 21:48:42 +0200 Subject: mod_roster: Fire event for pending items for good measure --- plugins/mod_roster.lua | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'plugins/mod_roster.lua') diff --git a/plugins/mod_roster.lua b/plugins/mod_roster.lua index 0e3fdc4e..454acebb 100644 --- a/plugins/mod_roster.lua +++ b/plugins/mod_roster.lua @@ -143,6 +143,12 @@ module:hook_global("user-deleted", function(event) module:fire_event("roster-item-removed", { username = username, jid = jid, item = item, roster = roster, origin = origin, }); + else + for jid in pairs(item.pending) do + module:fire_event("roster-item-removed", { + username = username, jid = jid, roster = roster, origin = origin, + }); + end end end end, 300); -- cgit v1.2.3