418cda1adc
* Fix maillist deletion * Fix duplicating of maillist while changing its name * Permit sub-lists * Fix messages with no mailing lists
114 lines
3.7 KiB
Lua
114 lines
3.7 KiB
Lua
-- translation
|
|
local S = minetest.get_translator("mail")
|
|
|
|
local FORMNAME = "mail:maillists"
|
|
|
|
local maillists_formspec = "size[8,9;]" .. mail.theme .. [[
|
|
button[6,0.10;2,0.5;new;]] .. S("New") .. [[]
|
|
button[6,0.85;2,0.5;edit;]] .. S("Edit") .. [[]
|
|
button[6,1.60;2,0.5;delete;]] .. S("Delete") .. [[]
|
|
button[6,8.25;2,0.5;back;]] .. S("Back") .. [[]
|
|
tablecolumns[color;text;text]
|
|
table[0,0;5.75,9;maillists;#999,]] .. S("Name") .. "," .. S("Note")
|
|
|
|
function mail.show_maillists(name)
|
|
local formspec = { maillists_formspec }
|
|
local maillists = mail.get_maillists(name)
|
|
|
|
if maillists[1] then
|
|
for _, maillist in ipairs(maillists) do
|
|
formspec[#formspec + 1] = ","
|
|
formspec[#formspec + 1] = ","
|
|
formspec[#formspec + 1] = "@" .. minetest.formspec_escape(maillist.name)
|
|
formspec[#formspec + 1] = ","
|
|
if maillist.desc ~= "" then
|
|
if string.len(maillist.desc) > 30 then
|
|
formspec[#formspec + 1] = minetest.formspec_escape(string.sub(maillist.desc, 1, 27))
|
|
formspec[#formspec + 1] = "..."
|
|
else
|
|
formspec[#formspec + 1] = minetest.formspec_escape(maillist.desc)
|
|
end
|
|
else
|
|
formspec[#formspec + 1] = S("(No description)")
|
|
end
|
|
end
|
|
if mail.selected_idxs.maillists[name] then
|
|
formspec[#formspec + 1] = ";"
|
|
formspec[#formspec + 1] = mail.selected_idxs.maillists[name]
|
|
end
|
|
formspec[#formspec + 1] = "]"
|
|
else
|
|
formspec[#formspec + 1] = "]label[2.25,4.5;" .. S("No maillist") .. "]"
|
|
end
|
|
minetest.show_formspec(name, FORMNAME, table.concat(formspec, ""))
|
|
end
|
|
|
|
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|
if formname ~= FORMNAME then
|
|
return
|
|
end
|
|
|
|
local name = player:get_player_name()
|
|
local maillists = mail.get_maillists(name)
|
|
|
|
if fields.maillists then
|
|
local evt = minetest.explode_table_event(fields.maillists)
|
|
mail.selected_idxs.maillists[name] = evt.row - 1
|
|
if evt.type == "DCL" and maillists[mail.selected_idxs.maillists[name]] then
|
|
local maillist = mail.get_maillist_by_name(name, maillists[mail.selected_idxs.maillists[name]].name)
|
|
local players_string = mail.concat_player_list(maillist.players)
|
|
mail.show_edit_maillist(
|
|
name,
|
|
maillists[mail.selected_idxs.maillists[name]].name,
|
|
maillists[mail.selected_idxs.maillists[name]].desc,
|
|
players_string
|
|
)
|
|
end
|
|
|
|
elseif fields.new then
|
|
mail.selected_idxs.maillists[name] = "#NEW#"
|
|
mail.show_edit_maillist(name, "", "", "Player1, Player2, Player3")
|
|
|
|
elseif fields.edit and maillists[mail.selected_idxs.maillists[name]] then
|
|
local maillist = mail.get_maillist_by_name(name, maillists[mail.selected_idxs.maillists[name]].name)
|
|
local players_string = mail.concat_player_list(maillist.players)
|
|
mail.show_edit_maillist(
|
|
name,
|
|
maillists[mail.selected_idxs.maillists[name]].name,
|
|
maillists[mail.selected_idxs.maillists[name]].desc,
|
|
players_string
|
|
)
|
|
|
|
elseif fields.delete then
|
|
if maillists[mail.selected_idxs.maillists[name]] then
|
|
-- delete the maillist and set the selected to the next in the list,
|
|
-- except if it was the last. Then determine the new last
|
|
local found = false
|
|
local last = nil
|
|
for k in mail.pairsByKeys(maillists) do
|
|
if found then
|
|
mail.selected_idxs.maillists[name] = k
|
|
break
|
|
elseif k == mail.selected_idxs.maillists[name] then
|
|
mail.delete_maillist(name, maillists[mail.selected_idxs.maillists[name]].name)
|
|
mail.selected_idxs.maillists[name] = nil
|
|
found = true
|
|
else
|
|
last = k
|
|
end
|
|
end
|
|
if found and not mail.selected_idxs.maillists[name] then
|
|
-- was the last in the list, so take the previous (new last)
|
|
mail.selected_idxs.maillists[name] = last
|
|
end
|
|
end
|
|
|
|
mail.show_maillists(name)
|
|
|
|
elseif fields.back then
|
|
mail.show_mail_menu(name)
|
|
end
|
|
|
|
return true
|
|
end)
|