mirror of
https://github.com/mt-mods/mail.git
synced 2025-07-07 07:00:31 -04:00
refactor ui components
This commit is contained in:
parent
9b2883030a
commit
1a0f0d02ff
13 changed files with 981 additions and 966 deletions
95
ui/compose.lua
Normal file
95
ui/compose.lua
Normal file
|
@ -0,0 +1,95 @@
|
|||
local FORMNAME = "mail:compose"
|
||||
|
||||
function mail.show_compose(name, defaultto, defaultsubj, defaultbody, defaultcc, defaultbcc)
|
||||
local formspec = [[
|
||||
size[8,9]
|
||||
button[0,0;1,1;tocontacts;To:]
|
||||
field[1.1,0.3;3.2,1;to;;%s]
|
||||
button[4,0;1,1;cccontacts;CC:]
|
||||
field[5.1,0.3;3.1,1;cc;;%s]
|
||||
button[4,0.75;1,1;bcccontacts;BCC:]
|
||||
field[5.1,1.05;3.1,1;bcc;;%s]
|
||||
field[0.25,2;8,1;subject;Subject:;%s]
|
||||
textarea[0.25,2.5;8,6;body;;%s]
|
||||
button[0.5,8.5;3,1;cancel;Cancel]
|
||||
button[4.5,8.5;3,1;send;Send]
|
||||
]] .. mail.theme
|
||||
|
||||
defaultto = defaultto or ""
|
||||
defaultsubj = defaultsubj or ""
|
||||
defaultbody = defaultbody or ""
|
||||
defaultcc = defaultcc or ""
|
||||
defaultbcc = defaultbcc or ""
|
||||
|
||||
formspec = string.format(formspec,
|
||||
minetest.formspec_escape(defaultto),
|
||||
minetest.formspec_escape(defaultcc),
|
||||
minetest.formspec_escape(defaultbcc),
|
||||
minetest.formspec_escape(defaultsubj),
|
||||
minetest.formspec_escape(defaultbody))
|
||||
|
||||
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 error = mail.send({
|
||||
from = name,
|
||||
to = fields.to,
|
||||
cc = fields.cc,
|
||||
bcc = fields.bcc,
|
||||
subject = fields.subject,
|
||||
body = fields.body,
|
||||
})
|
||||
if error then
|
||||
minetest.chat_send_player(name, error)
|
||||
return
|
||||
end
|
||||
|
||||
-- add new contacts if some receivers aren't registered
|
||||
local contacts = mail.getPlayerContacts(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.addContact(name, {name = recipient, note = ""})
|
||||
end
|
||||
end
|
||||
|
||||
minetest.after(0.5, function()
|
||||
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)
|
||||
end
|
||||
|
||||
return true
|
||||
end)
|
Loading…
Add table
Add a link
Reference in a new issue