Mercurial > prosody-hg
comparison plugins/mod_presence.lua @ 3083:cb15fa9242f9
Merge with backout
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Fri, 21 May 2010 19:45:33 +0100 |
| parents | 692b3c6c5bd2 920cd9667c7b |
| children | 9b17449fb5f4 |
comparison
equal
deleted
inserted
replaced
| 3071:39a870ae75d9 | 3083:cb15fa9242f9 |
|---|---|
| 36 end | 36 end |
| 37 end | 37 end |
| 38 _core_route_stanza(origin, stanza); | 38 _core_route_stanza(origin, stanza); |
| 39 end | 39 end |
| 40 | 40 |
| 41 local select_top_resources; | 41 local function select_top_resources(user) |
| 42 local bare_message_delivery_policy = module:get_option("bare_message_delivery_policy") or "priority"; | 42 local priority = 0; |
| 43 if bare_message_delivery_policy == "broadcast" then | 43 local recipients = {}; |
| 44 function select_top_resources(user) | 44 for _, session in pairs(user.sessions) do -- find resource with greatest priority |
| 45 local recipients = {}; | 45 if session.presence then |
| 46 for _, session in pairs(user.sessions) do -- find resources with non-negative priority | 46 -- TODO check active privacy list for session |
| 47 local p = session.priority; | 47 local p = session.priority; |
| 48 if p and p >= 0 then | 48 if p > priority then |
| 49 priority = p; | |
| 50 recipients = {session}; | |
| 51 elseif p == priority then | |
| 49 t_insert(recipients, session); | 52 t_insert(recipients, session); |
| 50 end | 53 end |
| 51 end | 54 end |
| 52 return recipients; | 55 end |
| 53 end | 56 return recipients; |
| 54 else | 57 end |
| 55 if bare_message_delivery_policy ~= "priority" then | |
| 56 module:log("warn", "Invalid value for config option bare_message_delivery_policy"); | |
| 57 end | |
| 58 function select_top_resources(user) | |
| 59 local priority = 0; | |
| 60 local recipients = {}; | |
| 61 for _, session in pairs(user.sessions) do -- find resource with greatest priority | |
| 62 if session.presence then | |
| 63 -- TODO check active privacy list for session | |
| 64 local p = session.priority; | |
| 65 if p > priority then | |
| 66 priority = p; | |
| 67 recipients = {session}; | |
| 68 elseif p == priority then | |
| 69 t_insert(recipients, session); | |
| 70 end | |
| 71 end | |
| 72 end | |
| 73 return recipients; | |
| 74 end | |
| 75 end | |
| 76 | |
| 77 local function recalc_resource_map(user) | 58 local function recalc_resource_map(user) |
| 78 if user then | 59 if user then |
| 79 user.top_resources = select_top_resources(user); | 60 user.top_resources = select_top_resources(user); |
| 80 if #user.top_resources == 0 then user.top_resources = nil; end | 61 if #user.top_resources == 0 then user.top_resources = nil; end |
| 81 end | 62 end |
