87 lines
2.6 KiB
Lua
87 lines
2.6 KiB
Lua
|
-- translation
|
||
|
local S = minetest.get_translator("mail")
|
||
|
|
||
|
local FORMNAME = "mail:contacts"
|
||
|
|
||
|
local contacts_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;contacts;]] .. mail.colors.header .. "," .. S("Name") .. "," .. S("Note")
|
||
|
|
||
|
|
||
|
function mail.show_contacts(name)
|
||
|
local formspec = contacts_formspec .. mail.compile_contact_list(name, mail.selected_idxs.contacts[name])
|
||
|
minetest.show_formspec(name, FORMNAME, 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 contacts = mail.get_contacts(name)
|
||
|
|
||
|
if fields.contacts then
|
||
|
local evt = minetest.explode_table_event(fields.contacts)
|
||
|
for k, _, i in mail.pairsByKeys(contacts) do
|
||
|
if i == evt.row - 1 then
|
||
|
mail.selected_idxs.contacts[name] = tonumber(k)
|
||
|
break
|
||
|
end
|
||
|
end
|
||
|
if evt.type == "DCL" and contacts[mail.selected_idxs.contacts[name]] then
|
||
|
mail.show_edit_contact(
|
||
|
name,
|
||
|
contacts[mail.selected_idxs.contacts[name]].name,
|
||
|
contacts[mail.selected_idxs.contacts[name]].note
|
||
|
)
|
||
|
end
|
||
|
|
||
|
elseif fields.new then
|
||
|
mail.selected_idxs.contacts[name] = "#NEW#"
|
||
|
mail.show_edit_contact(name, "", "")
|
||
|
|
||
|
elseif fields.edit and mail.selected_idxs.contacts[name] and contacts[mail.selected_idxs.contacts[name]] then
|
||
|
mail.show_edit_contact(
|
||
|
name,
|
||
|
contacts[mail.selected_idxs.contacts[name]].name,
|
||
|
contacts[mail.selected_idxs.contacts[name]].note
|
||
|
)
|
||
|
|
||
|
elseif fields.delete then
|
||
|
if contacts[mail.selected_idxs.contacts[name]] then
|
||
|
-- delete the contact 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(contacts) do
|
||
|
if found then
|
||
|
mail.selected_idxs.contacts[name] = tonumber(k)
|
||
|
break
|
||
|
elseif k == mail.selected_idxs.contacts[name] then
|
||
|
mail.delete_contact(name, contacts[mail.selected_idxs.contacts[name]].name)
|
||
|
mail.selected_idxs.contacts[name] = nil
|
||
|
found = true
|
||
|
else
|
||
|
last = tonumber(k)
|
||
|
end
|
||
|
end
|
||
|
if found and not mail.selected_idxs.contacts[name] then
|
||
|
-- was the last in the list, so take the previous (new last)
|
||
|
mail.selected_idxs.contacts[name] = last
|
||
|
end
|
||
|
end
|
||
|
|
||
|
mail.show_contacts(name)
|
||
|
|
||
|
elseif fields.back then
|
||
|
mail.show_mail_menu(name)
|
||
|
end
|
||
|
|
||
|
return true
|
||
|
end)
|