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 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,10 +175,12 @@ 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
while string.find(receivers_string, "@") do
local globalReceivers = mail.parse_player_list(receivers_string) -- receivers including maillists
receivers = {}
for _, receiver in ipairs(globalReceivers) do for _, receiver in ipairs(globalReceivers) do
local receiverInfo = receiver:split("@") -- @maillist local receiverInfo = receiver:split("@") -- @maillist
if receiverInfo[1] and receiver == "@" .. receiverInfo[1] then if receiverInfo[1] and receiver == "@" .. receiverInfo[1] then
@ -196,6 +194,8 @@ function mail.extractMaillists(receivers_string, maillists_owner)
table.insert(receivers, receiver) table.insert(receivers, receiver)
end end
end end
receivers_string = mail.concat_player_list(receivers)
end
return receivers return receivers
end end

View File

@ -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

View File

@ -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