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:
Athozus 2023-04-02 10:37:58 +02:00 committed by GitHub
parent 2f996b59cd
commit 418cda1adc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 25 additions and 23 deletions

View File

@ -148,21 +148,17 @@ function mail.get_maillist_by_name(playername, listname)
end
-- 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 existing_updated = false
for i, existing_list in ipairs(entry.lists) do
if existing_list.name == list.name then
-- update
entry.lists[i] = list
existing_updated = true
if existing_list.name == old_list_name then
-- delete
table.remove(entry.lists, i)
break
end
end
if not existing_updated then
-- insert
table.insert(entry.lists, list)
end
-- insert
table.insert(entry.lists, list)
mail.set_storage_entry(playername, entry)
end
@ -179,22 +175,26 @@ function mail.delete_maillist(playername, listname)
end
function mail.extractMaillists(receivers_string, maillists_owner)
local globalReceivers = mail.parse_player_list(receivers_string) -- receivers including maillists
local receivers = {} -- extracted receivers
local receivers = mail.parse_player_list(receivers_string) -- extracted receivers
-- extract players from mailing lists
for _, receiver in ipairs(globalReceivers) do
local receiverInfo = receiver:split("@") -- @maillist
if receiverInfo[1] and receiver == "@" .. receiverInfo[1] then
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)
while string.find(receivers_string, "@") do
local globalReceivers = mail.parse_player_list(receivers_string) -- receivers including maillists
receivers = {}
for _, receiver in ipairs(globalReceivers) do
local receiverInfo = receiver:split("@") -- @maillist
if receiverInfo[1] and receiver == "@" .. receiverInfo[1] then
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
else -- in case of player
table.insert(receivers, receiver)
end
else -- in case of player
table.insert(receivers, receiver)
end
receivers_string = mail.concat_player_list(receivers)
end
return receivers

View File

@ -1,9 +1,11 @@
-- translation
local S = minetest.get_translator("mail")
local old_lists_names = {}
local FORMNAME = "mail:editmaillist"
function mail.show_edit_maillist(playername, maillist_name, desc, players, illegal_name_hint)
old_lists_names[playername] = maillist_name
local formspec = [[
size[6,7]
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,
desc = fields.desc,
players = mail.parse_player_list(fields.players)
})
}, old_lists_names[name])
mail.show_maillists(name)
elseif fields.back then

View File

@ -90,7 +90,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
mail.selected_idxs.maillists[name] = k
break
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
found = true
else