Comparison

plugins/mod_presence.lua @ 2593:06995c8bfe80

mod_presence: Don't depend on user being online when calculating top resources.
author Waqas Hussain <waqas20@gmail.com>
date Fri, 12 Feb 2010 00:55:06 +0500
parent 2592:3af266f7037f
child 2643:21eb99b06f4d
comparison
equal deleted inserted replaced
2592:3af266f7037f 2593:06995c8bfe80
53 end 53 end
54 end 54 end
55 end 55 end
56 return recipients; 56 return recipients;
57 end 57 end
58 local function recalc_resource_map(origin) 58 local function recalc_resource_map(user)
59 local user = hosts[origin.host].sessions[origin.username]; 59 if user then
60 user.top_resources = select_top_resources(user); 60 user.top_resources = select_top_resources(user);
61 if #user.top_resources == 0 then user.top_resources = nil; end 61 if #user.top_resources == 0 then user.top_resources = nil; end
62 end
62 end 63 end
63 64
64 function handle_normal_presence(origin, stanza, core_route_stanza) 65 function handle_normal_presence(origin, stanza, core_route_stanza)
65 local roster = origin.roster; 66 local roster = origin.roster;
66 local node, host = origin.username, origin.host; 67 local node, host = origin.username, origin.host;
115 end 116 end
116 if stanza.attr.type == "unavailable" then 117 if stanza.attr.type == "unavailable" then
117 origin.presence = nil; 118 origin.presence = nil;
118 if origin.priority then 119 if origin.priority then
119 origin.priority = nil; 120 origin.priority = nil;
120 recalc_resource_map(origin); 121 recalc_resource_map(user);
121 end 122 end
122 if origin.directed then 123 if origin.directed then
123 for jid in pairs(origin.directed) do 124 for jid in pairs(origin.directed) do
124 stanza.attr.to = jid; 125 stanza.attr.to = jid;
125 core_route_stanza(origin, stanza); 126 core_route_stanza(origin, stanza);
137 if priority > 127 then priority = 127 end 138 if priority > 127 then priority = 127 end
138 else priority = 0; end 139 else priority = 0; end
139 else priority = 0; end 140 else priority = 0; end
140 if origin.priority ~= priority then 141 if origin.priority ~= priority then
141 origin.priority = priority; 142 origin.priority = priority;
142 recalc_resource_map(origin); 143 recalc_resource_map(user);
143 end 144 end
144 end 145 end
145 stanza.attr.to = nil; -- reset it 146 stanza.attr.to = nil; -- reset it
146 end 147 end
147 148