Fix maillists issues (#49)
* Fix maillist deletion * Fix duplicating of maillist while changing its name * Permit sub-lists * Fix messages with no mailing lists
This commit is contained in:
parent
2f996b59cd
commit
418cda1adc
42
storage.lua
42
storage.lua
@ -148,21 +148,17 @@ function mail.get_maillist_by_name(playername, listname)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- updates or creates a maillist
|
-- updates or creates a maillist
|
||||||
function mail.update_maillist(playername, list)
|
function mail.update_maillist(playername, list, old_list_name)
|
||||||
local entry = mail.get_storage_entry(playername)
|
local entry = mail.get_storage_entry(playername)
|
||||||
local existing_updated = false
|
|
||||||
for i, existing_list in ipairs(entry.lists) do
|
for i, existing_list in ipairs(entry.lists) do
|
||||||
if existing_list.name == list.name then
|
if existing_list.name == old_list_name then
|
||||||
-- update
|
-- delete
|
||||||
entry.lists[i] = list
|
table.remove(entry.lists, i)
|
||||||
existing_updated = true
|
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if not existing_updated then
|
-- insert
|
||||||
-- insert
|
table.insert(entry.lists, list)
|
||||||
table.insert(entry.lists, list)
|
|
||||||
end
|
|
||||||
mail.set_storage_entry(playername, entry)
|
mail.set_storage_entry(playername, entry)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -179,22 +175,26 @@ function mail.delete_maillist(playername, listname)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function mail.extractMaillists(receivers_string, maillists_owner)
|
function mail.extractMaillists(receivers_string, maillists_owner)
|
||||||
local globalReceivers = mail.parse_player_list(receivers_string) -- receivers including maillists
|
local receivers = mail.parse_player_list(receivers_string) -- extracted receivers
|
||||||
local receivers = {} -- extracted receivers
|
|
||||||
|
|
||||||
-- extract players from mailing lists
|
-- extract players from mailing lists
|
||||||
for _, receiver in ipairs(globalReceivers) do
|
while string.find(receivers_string, "@") do
|
||||||
local receiverInfo = receiver:split("@") -- @maillist
|
local globalReceivers = mail.parse_player_list(receivers_string) -- receivers including maillists
|
||||||
if receiverInfo[1] and receiver == "@" .. receiverInfo[1] then
|
receivers = {}
|
||||||
local maillist = mail.get_maillist_by_name(maillists_owner, receiverInfo[1])
|
for _, receiver in ipairs(globalReceivers) do
|
||||||
if maillist then
|
local receiverInfo = receiver:split("@") -- @maillist
|
||||||
for _, playername in ipairs(maillist.players) do
|
if receiverInfo[1] and receiver == "@" .. receiverInfo[1] then
|
||||||
table.insert(receivers, playername)
|
local maillist = mail.get_maillist_by_name(maillists_owner, receiverInfo[1])
|
||||||
|
if maillist then
|
||||||
|
for _, playername in ipairs(maillist.players) do
|
||||||
|
table.insert(receivers, playername)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
else -- in case of player
|
||||||
|
table.insert(receivers, receiver)
|
||||||
end
|
end
|
||||||
else -- in case of player
|
|
||||||
table.insert(receivers, receiver)
|
|
||||||
end
|
end
|
||||||
|
receivers_string = mail.concat_player_list(receivers)
|
||||||
end
|
end
|
||||||
|
|
||||||
return receivers
|
return receivers
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
-- translation
|
-- translation
|
||||||
local S = minetest.get_translator("mail")
|
local S = minetest.get_translator("mail")
|
||||||
|
local old_lists_names = {}
|
||||||
|
|
||||||
local FORMNAME = "mail:editmaillist"
|
local FORMNAME = "mail:editmaillist"
|
||||||
|
|
||||||
function mail.show_edit_maillist(playername, maillist_name, desc, players, illegal_name_hint)
|
function mail.show_edit_maillist(playername, maillist_name, desc, players, illegal_name_hint)
|
||||||
|
old_lists_names[playername] = maillist_name
|
||||||
local formspec = [[
|
local formspec = [[
|
||||||
size[6,7]
|
size[6,7]
|
||||||
button[4,6.25;2,0.5;back;]] .. S("Back") .. [[]
|
button[4,6.25;2,0.5;back;]] .. S("Back") .. [[]
|
||||||
@ -45,7 +47,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|||||||
name = fields.name,
|
name = fields.name,
|
||||||
desc = fields.desc,
|
desc = fields.desc,
|
||||||
players = mail.parse_player_list(fields.players)
|
players = mail.parse_player_list(fields.players)
|
||||||
})
|
}, old_lists_names[name])
|
||||||
mail.show_maillists(name)
|
mail.show_maillists(name)
|
||||||
|
|
||||||
elseif fields.back then
|
elseif fields.back then
|
||||||
|
@ -90,7 +90,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|||||||
mail.selected_idxs.maillists[name] = k
|
mail.selected_idxs.maillists[name] = k
|
||||||
break
|
break
|
||||||
elseif k == mail.selected_idxs.maillists[name] then
|
elseif k == mail.selected_idxs.maillists[name] then
|
||||||
mail.delete_maillist(maillists[mail.selected_idxs.maillists[name]].name)
|
mail.delete_maillist(name, maillists[mail.selected_idxs.maillists[name]].name)
|
||||||
mail.selected_idxs.maillists[name] = nil
|
mail.selected_idxs.maillists[name] = nil
|
||||||
found = true
|
found = true
|
||||||
else
|
else
|
||||||
|
Loading…
x
Reference in New Issue
Block a user