Diff

plugins/mod_roster.lua @ 6613:2aae36312eb9

rostermanager, mod_roster, mod_presence: Move pending roster items to roster metadata field
author Kim Alvefur <zash@zash.se>
date Fri, 03 Apr 2015 06:38:22 +0200
parent 5776:bd0ff8ae98a8
child 7331:c8ad387aab1c
line wrap: on
line diff
--- a/plugins/mod_roster.lua	Thu Apr 02 14:31:41 2015 +0200
+++ b/plugins/mod_roster.lua	Fri Apr 03 06:38:22 2015 +0200
@@ -44,7 +44,7 @@
 			roster:query("jabber:iq:roster");
 			-- Client does not support versioning, or has stale roster
 			for jid, item in pairs(session.roster) do
-				if jid ~= "pending" and jid then
+				if jid then
 					roster:tag("item", {
 						jid = jid,
 						subscription = item.subscription,
@@ -64,9 +64,7 @@
 	else -- stanza.attr.type == "set"
 		local query = stanza.tags[1];
 		if #query.tags == 1 and query.tags[1].name == "item"
-				and query.tags[1].attr.xmlns == "jabber:iq:roster" and query.tags[1].attr.jid
-				-- Protection against overwriting roster.pending, until we move it
-				and query.tags[1].attr.jid ~= "pending" then
+				and query.tags[1].attr.xmlns == "jabber:iq:roster" and query.tags[1].attr.jid then
 			local item = query.tags[1];
 			local from_node, from_host = jid_split(stanza.attr.from);
 			local jid = jid_prep(item.attr.jid);
@@ -78,7 +76,7 @@
 						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.pending and roster.pending[jid]) then
+							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
@@ -144,8 +142,8 @@
 	local bare = username .. "@" .. host;
 	local roster = rm_load_roster(username, host);
 	for jid, item in pairs(roster) do
-		if jid and jid ~= "pending" then
-			if item.subscription == "both" or item.subscription == "from" or (roster.pending and roster.pending[jid]) then
+		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