mod_presence: Move function for selecting "top resources" into a new util.presence

This commit is contained in:
Kim Alvefur 2016-03-14 17:26:27 +01:00
parent d1578059cb
commit ab4f0cf7c4
2 changed files with 40 additions and 24 deletions

View file

@ -10,7 +10,7 @@ local log = module._log;
local require = require;
local pairs = pairs;
local t_concat, t_insert = table.concat, table.insert;
local t_concat = table.concat;
local s_find = string.find;
local tonumber = tonumber;
@ -27,29 +27,7 @@ local NULL = {};
local rostermanager = require "core.rostermanager";
local sessionmanager = require "core.sessionmanager";
local function select_top_resources(user)
local priority = 0;
local recipients = {};
for _, session in pairs(user.sessions) do -- find resource with greatest priority
if session.presence then
-- TODO check active privacy list for session
local p = session.priority;
if p > priority then
priority = p;
recipients = {session};
elseif p == priority then
t_insert(recipients, session);
end
end
end
return recipients;
end
local function recalc_resource_map(user)
if user then
user.top_resources = select_top_resources(user);
if #user.top_resources == 0 then user.top_resources = nil; end
end
end
local recalc_resource_map = require "util.presencepriority".recalc_resource_map;
local ignore_presence_priority = module:get_option_boolean("ignore_presence_priority", false);

38
util/presence.lua Normal file
View file

@ -0,0 +1,38 @@
-- Prosody IM
-- Copyright (C) 2008-2010 Matthew Wild
-- Copyright (C) 2008-2010 Waqas Hussain
--
-- This project is MIT/X11 licensed. Please see the
-- COPYING file in the source package for more information.
--
local t_insert = table.insert;
local function select_top_resources(user)
local priority = 0;
local recipients = {};
for _, session in pairs(user.sessions) do -- find resource with greatest priority
if session.presence then
-- TODO check active privacy list for session
local p = session.priority;
if p > priority then
priority = p;
recipients = {session};
elseif p == priority then
t_insert(recipients, session);
end
end
end
return recipients;
end
local function recalc_resource_map(user)
if user then
user.top_resources = select_top_resources(user);
if #user.top_resources == 0 then user.top_resources = nil; end
end
end
return {
select_top_resources = select_top_resources;
recalc_resource_map = recalc_resource_map;
}