From 9af7aa38f78900eeafe53dfe0deed5968fbbd7f9 Mon Sep 17 00:00:00 2001 From: Athozus Date: Wed, 29 Mar 2023 13:26:05 +0200 Subject: [PATCH] Ui improvements & fixes Move events code (if fields.x then) to events.lua (instead of inbox.lua), fix tab selection when going backward --- init.lua | 1 + ui/events.lua | 116 +++++++++++++++++++++++++++++++++++++++++++++++++ ui/inbox.lua | 118 -------------------------------------------------- 3 files changed, 117 insertions(+), 118 deletions(-) create mode 100644 ui/events.lua diff --git a/init.lua b/init.lua index 446e7fc..43ffd1b 100644 --- a/init.lua +++ b/init.lua @@ -44,6 +44,7 @@ dofile(MP .. "/ui/mail.lua") dofile(MP .. "/ui/inbox.lua") dofile(MP .. "/ui/outbox.lua") dofile(MP .. "/ui/message.lua") +dofile(MP .. "/ui/events.lua") dofile(MP .. "/ui/contacts.lua") dofile(MP .. "/ui/edit_contact.lua") dofile(MP .. "/ui/select_contact.lua") diff --git a/ui/events.lua b/ui/events.lua new file mode 100644 index 0000000..04fc878 --- /dev/null +++ b/ui/events.lua @@ -0,0 +1,116 @@ +minetest.register_on_player_receive_fields(function(player, formname, fields) + if formname ~= "mail:inbox" and formname ~= "mail:sent" then + return + end + + local name = player:get_player_name() + + -- split inbox and sent msgs for different tests + local entry = mail.get_storage_entry(name) + + local messagesInbox = entry.inbox + local messagesSent = entry.outbox + + if fields.inbox then -- inbox table + local evt = minetest.explode_table_event(fields.inbox) + mail.selected_idxs.inbox[name] = evt.row - 1 + if evt.type == "DCL" and messagesInbox[mail.selected_idxs.inbox[name]] then + mail.show_message(name, messagesInbox[mail.selected_idxs.inbox[name]].id) + end + return true + end + + if fields.sent then -- sent table + local evt = minetest.explode_table_event(fields.sent) + mail.selected_idxs.sent[name] = evt.row - 1 + if evt.type == "DCL" and messagesSent[mail.selected_idxs.sent[name]] then + mail.show_message(name, messagesSent[mail.selected_idxs.sent[name]].id) + end + return true + end + + if fields.boxtab == "1" then + mail.selected_idxs.boxtab[name] = 1 + mail.show_inbox(name) + + elseif fields.boxtab == "2" then + mail.selected_idxs.boxtab[name] = 2 + mail.show_sent(name) + + elseif fields.read then + if formname == "mail:inbox" and messagesInbox[mail.selected_idxs.inbox[name]] then -- inbox table + mail.show_message(name, messagesInbox[mail.selected_idxs.inbox[name]].id) + elseif formname == "mail:sent" and messagesSent[mail.selected_idxs.sent[name]] then -- sent table + mail.show_message(name, messagesSent[mail.selected_idxs.sent[name]].id) + end + + elseif fields.delete then + if formname == "mail:inbox" and messagesInbox[mail.selected_idxs.inbox[name]] then -- inbox table + mail.delete_mail(name, messagesInbox[mail.selected_idxs.inbox[name]].id) + elseif formname == "mail:sent" and messagesSent[mail.selected_idxs.sent[name]] then -- sent table + mail.delete_mail(name, messagesSent[mail.selected_idxs.sent[name]].id) + end + + mail.show_mail_menu(name) + + elseif fields.reply then + if formname == "mail:inbox" and messagesInbox[mail.selected_idxs.inbox[name]] then + local message = messagesInbox[mail.selected_idxs.inbox[name]] + mail.reply(name, message) + elseif formname == "mail:sent" and messagesSent[mail.selected_idxs.sent[name]] then + local message = messagesSent[mail.selected_idxs.sent[name]] + mail.reply(name, message) + end + + elseif fields.replyall then + if formname == "mail:inbox" and messagesInbox[mail.selected_idxs.inbox[name]] then + local message = messagesInbox[mail.selected_idxs.inbox[name]] + mail.replyall(name, message) + elseif formname == "mail:sent" and messagesSent[mail.selected_idxs.sent[name]] then + local message = messagesSent[mail.selected_idxs.sent[name]] + mail.replyall(name, message) + end + + elseif fields.forward then + if formname == "mail:inbox" and messagesInbox[mail.selected_idxs.inbox[name]] then + local message = messagesInbox[mail.selected_idxs.inbox[name]] + mail.forward(name, message) + elseif formname == "mail:sent" and messagesSent[mail.selected_idxs.sent[name]] then + local message = messagesSent[mail.selected_idxs.sent[name]] + mail.forward(name, message) + end + + elseif fields.markread then + if formname == "mail:inbox" and messagesInbox[mail.selected_idxs.inbox[name]] then + mail.mark_read(name, messagesInbox[mail.selected_idxs.inbox[name]].id) + elseif formname == "mail:sent" and messagesSent[mail.selected_idxs.sent[name]] then + mail.mark_read(name, messagesSent[mail.selected_idxs.sent[name]].id) + end + + mail.show_mail_menu(name) + + elseif fields.markunread then + if formname == "mail:inbox" and messagesInbox[mail.selected_idxs.inbox[name]] then + mail.mark_unread(name, messagesInbox[mail.selected_idxs.inbox[name]].id) + elseif formname == "mail:sent" and messagesSent[mail.selected_idxs.sent[name]] then + mail.mark_unread(name, messagesSent[mail.selected_idxs.sent[name]].id) + end + + mail.show_mail_menu(name) + + elseif fields.new then + mail.show_compose(name) + + elseif fields.contacts then + mail.show_contacts(name) + + elseif fields.maillists then + mail.show_maillists(name) + + elseif fields.about then + mail.show_about(name) + + end + + return true +end) diff --git a/ui/inbox.lua b/ui/inbox.lua index dfcb28f..5851003 100644 --- a/ui/inbox.lua +++ b/ui/inbox.lua @@ -1,4 +1,3 @@ - local inbox_formspec = "size[8,10;]" .. mail.theme .. [[ tabheader[0.3,1;boxtab;Inbox,Sent messages;1;false;false] @@ -65,120 +64,3 @@ function mail.show_inbox(name) end minetest.show_formspec(name, "mail:inbox", table.concat(formspec, "")) end - -minetest.register_on_player_receive_fields(function(player, formname, fields) - if formname ~= "mail:inbox" and formname ~= "mail:sent" then - return - end - - local name = player:get_player_name() - - -- split inbox and sent msgs for different tests - local entry = mail.get_storage_entry(name) - - local messagesInbox = entry.inbox - local messagesSent = entry.outbox - - if fields.inbox then -- inbox table - local evt = minetest.explode_table_event(fields.inbox) - mail.selected_idxs.inbox[name] = evt.row - 1 - if evt.type == "DCL" and messagesInbox[mail.selected_idxs.inbox[name]] then - mail.show_message(name, messagesInbox[mail.selected_idxs.inbox[name]].id) - end - return true - end - - if fields.sent then -- sent table - local evt = minetest.explode_table_event(fields.sent) - mail.selected_idxs.sent[name] = evt.row - 1 - if evt.type == "DCL" and messagesSent[mail.selected_idxs.sent[name]] then - mail.show_message(name, messagesSent[mail.selected_idxs.sent[name]].id) - end - return true - end - - if fields.boxtab == "1" then - mail.selected_idxs.boxtab[name] = 1 - mail.show_inbox(name) - - elseif fields.boxtab == "2" then - mail.selected_idxs.boxtab[name] = 1 - mail.show_sent(name) - - elseif fields.read then - if formname == "mail:inbox" and messagesInbox[mail.selected_idxs.inbox[name]] then -- inbox table - mail.show_message(name, messagesInbox[mail.selected_idxs.inbox[name]].id) - elseif formname == "mail:sent" and messagesSent[mail.selected_idxs.sent[name]] then -- sent table - mail.show_message(name, messagesSent[mail.selected_idxs.sent[name]].id) - end - - elseif fields.delete then - if formname == "mail:inbox" and messagesInbox[mail.selected_idxs.inbox[name]] then -- inbox table - mail.delete_mail(name, messagesInbox[mail.selected_idxs.inbox[name]].id) - elseif formname == "mail:sent" and messagesSent[mail.selected_idxs.sent[name]] then -- sent table - mail.delete_mail(name, messagesSent[mail.selected_idxs.sent[name]].id) - end - - mail.show_mail_menu(name) - - elseif fields.reply then - if formname == "mail:inbox" and messagesInbox[mail.selected_idxs.inbox[name]] then - local message = messagesInbox[mail.selected_idxs.inbox[name]] - mail.reply(name, message) - elseif formname == "mail:sent" and messagesSent[mail.selected_idxs.sent[name]] then - local message = messagesSent[mail.selected_idxs.sent[name]] - mail.reply(name, message) - end - - elseif fields.replyall then - if formname == "mail:inbox" and messagesInbox[mail.selected_idxs.inbox[name]] then - local message = messagesInbox[mail.selected_idxs.inbox[name]] - mail.replyall(name, message) - elseif formname == "mail:sent" and messagesSent[mail.selected_idxs.sent[name]] then - local message = messagesSent[mail.selected_idxs.sent[name]] - mail.replyall(name, message) - end - - elseif fields.forward then - if formname == "mail:inbox" and messagesInbox[mail.selected_idxs.inbox[name]] then - local message = messagesInbox[mail.selected_idxs.inbox[name]] - mail.forward(name, message) - elseif formname == "mail:sent" and messagesSent[mail.selected_idxs.sent[name]] then - local message = messagesSent[mail.selected_idxs.sent[name]] - mail.forward(name, message) - end - - elseif fields.markread then - if formname == "mail:inbox" and messagesInbox[mail.selected_idxs.inbox[name]] then - mail.mark_read(name, messagesInbox[mail.selected_idxs.inbox[name]].id) - elseif formname == "mail:sent" and messagesSent[mail.selected_idxs.sent[name]] then - mail.mark_read(name, messagesSent[mail.selected_idxs.sent[name]].id) - end - - mail.show_mail_menu(name) - - elseif fields.markunread then - if formname == "mail:inbox" and messagesInbox[mail.selected_idxs.inbox[name]] then - mail.mark_unread(name, messagesInbox[mail.selected_idxs.inbox[name]].id) - elseif formname == "mail:sent" and messagesSent[mail.selected_idxs.sent[name]] then - mail.mark_unread(name, messagesSent[mail.selected_idxs.sent[name]].id) - end - - mail.show_mail_menu(name) - - elseif fields.new then - mail.show_compose(name) - - elseif fields.contacts then - mail.show_contacts(name) - - elseif fields.maillists then - mail.show_maillists(name) - - elseif fields.about then - mail.show_about(name) - - end - - return true -end) \ No newline at end of file