mail/util/normalize.lua
Athozus 30a11784a9
Use builtin split func
Co-authored-by: SX <50966843+S-S-X@users.noreply.github.com>
2023-03-29 14:49:01 +02:00

71 lines
1.9 KiB
Lua

local has_canonical_name = minetest.get_modpath("canonical_name")
--[[
return the field normalized (comma separated, single space)
and add individual player names to recipient list
--]]
function mail.normalize_players_and_add_recipients(field, recipients, undeliverable)
local order = mail.parse_player_list(field)
for _, recipient_name in ipairs(order) do
if recipient_name:split("@")[1] == "" then -- in case of maillist
recipients[recipient_name] = true
else -- in case of playerˇ
if not minetest.player_exists(recipient_name) then
undeliverable[recipient_name] = true
else
recipients[recipient_name] = true
end
end
end
return mail.concat_player_list(order)
end
function mail.parse_player_list(field)
if not field then
return {}
end
local separator = ", "
local pattern = "([^" .. separator .. "]+)"
-- get individual players
local player_set = {}
local order = {}
field:gsub(pattern, function(player_name)
local lower = string.lower(player_name)
if not player_set[lower] then
if has_canonical_name then
player_name = canonical_name.get(player_name) or player_name
end
player_set[lower] = player_name
order[#order+1] = player_name
end
end)
return order
end
function mail.concat_player_list(order)
-- turn list of players back into normalized string
return table.concat(order, ", ")
end
function mail.player_in_list(name, list)
list = list or {}
if type(list) == "string" then
list = mail.parse_player_list(list)
end
for _, player_name in pairs(list) do
if name == player_name then
return true
end
end
return false
end
function mail.ensure_new_format(message, name)
if message.to == nil then
message.to = name
end
end