137 lines
4 KiB
Lua
137 lines
4 KiB
Lua
-- translation
|
|
local S = minetest.get_translator("mail")
|
|
|
|
local FORMNAME = "mail:compose"
|
|
local msg_id = {}
|
|
|
|
function mail.show_compose(name, to, subject, body, cc, bcc, id)
|
|
local formspec = [[
|
|
size[8,9]
|
|
button[0,0;1,1;tocontacts;]] .. S("To") .. [[:]
|
|
field[1.1,0.3;3.2,1;to;;%s]
|
|
button[4,0;1,1;cccontacts;]] .. S("CC") .. [[:]
|
|
field[5.1,0.3;3.1,1;cc;;%s]
|
|
button[4,0.75;1,1;bcccontacts;]] .. S("BCC") .. [[:]
|
|
field[5.1,1.05;3.1,1;bcc;;%s]
|
|
field[0.25,2;8,1;subject;]] .. S("Subject") .. [[:;%s]
|
|
textarea[0.25,2.5;8,6;body;;%s]
|
|
button[0.1,8.5;2.5,1;cancel;]] .. S("Cancel") .. [[]
|
|
button[2.7,8.5;2.5,1;draft;]] .. S("Save draft") .. [[]
|
|
button[5.3,8.5;2.5,1;send;]] .. S("Send") .. [[]
|
|
]] .. mail.theme
|
|
|
|
formspec = string.format(formspec,
|
|
minetest.formspec_escape(to) or "",
|
|
minetest.formspec_escape(cc) or "",
|
|
minetest.formspec_escape(bcc) or "",
|
|
minetest.formspec_escape(subject) or "",
|
|
minetest.formspec_escape(body) or "")
|
|
|
|
if id then
|
|
msg_id[name] = id
|
|
else
|
|
msg_id[name] = nil
|
|
end
|
|
|
|
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()
|
|
if fields.send then
|
|
local id = mail.new_uuid()
|
|
if msg_id[name] then
|
|
id = msg_id[name]
|
|
end
|
|
if (fields.to == "" and fields.cc == "" and fields.bcc == "") or fields.body == "" then
|
|
-- if mail is invalid then store it as a draft
|
|
mail.save_draft({
|
|
id = id,
|
|
from = name,
|
|
to = fields.to,
|
|
cc = fields.cc,
|
|
bcc = fields.bcc,
|
|
subject = fields.subject,
|
|
body = fields.body
|
|
})
|
|
mail.show_mail_menu(name)
|
|
return
|
|
end
|
|
local success, err = mail.send({
|
|
id = id,
|
|
from = name,
|
|
to = fields.to,
|
|
cc = fields.cc,
|
|
bcc = fields.bcc,
|
|
subject = fields.subject,
|
|
body = fields.body,
|
|
})
|
|
if not success then
|
|
minetest.chat_send_player(name, err)
|
|
return
|
|
end
|
|
|
|
-- add new contacts if some receivers aren't registered
|
|
local contacts = mail.get_contacts(name)
|
|
local recipients = mail.parse_player_list(fields.to)
|
|
local isNew = true
|
|
for _,recipient in ipairs(recipients) do
|
|
if recipient:sub(1,1) == "@" then -- in case of maillist -- check if first char is @
|
|
isNew = false
|
|
else
|
|
for _,contact in ipairs(contacts) do
|
|
if contact.name == recipient then
|
|
isNew = false
|
|
break
|
|
end
|
|
end
|
|
end
|
|
if isNew then
|
|
mail.update_contact(name, {name = recipient, note = ""})
|
|
end
|
|
end
|
|
|
|
minetest.after(0.5, function()
|
|
mail.selected_idxs.drafts[name] = nil
|
|
mail.show_mail_menu(name)
|
|
end)
|
|
|
|
elseif fields.tocontacts or fields.cccontacts or fields.bcccontacts then
|
|
mail.message_drafts[name] = {
|
|
to = fields.to,
|
|
cc = fields.cc,
|
|
bcc = fields.bcc,
|
|
subject = fields.subject,
|
|
body = fields.body,
|
|
}
|
|
mail.show_select_contact(name, fields.to, fields.cc, fields.bcc)
|
|
|
|
elseif fields.cancel then
|
|
mail.message_drafts[name] = nil
|
|
|
|
mail.show_mail_menu(name)
|
|
|
|
elseif fields.draft then
|
|
local id = mail.new_uuid()
|
|
if msg_id[name] then
|
|
id = msg_id[name]
|
|
end
|
|
mail.save_draft({
|
|
id = id,
|
|
from = name,
|
|
to = fields.to,
|
|
cc = fields.cc,
|
|
bcc = fields.bcc,
|
|
subject = fields.subject,
|
|
body = fields.body
|
|
})
|
|
|
|
mail.show_mail_menu(name)
|
|
end
|
|
|
|
return true
|
|
end)
|