From c670d486227f8fbaec8af32395293ee458a16269 Mon Sep 17 00:00:00 2001 From: Athozus Date: Tue, 2 May 2023 10:38:08 +0200 Subject: [PATCH] Update selection list after an action (fix #80, #81, #83) --- ui/events.lua | 3 +++ ui/inbox.lua | 16 ++++++++++++++++ ui/outbox.lua | 16 ++++++++++++++++ 3 files changed, 35 insertions(+) diff --git a/ui/events.lua b/ui/events.lua index ad7dec8..3091ae5 100644 --- a/ui/events.lua +++ b/ui/events.lua @@ -188,10 +188,13 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) elseif fields.delete then if formname == "mail:inbox" and mail.selected_idxs.inbox[name] then -- inbox table mail.delete_mail(name, mail.selected_idxs.inbox[name]) + mail.selected_idxs.inbox[name] = {} elseif formname == "mail:sent" and mail.selected_idxs.sent[name] then -- sent table mail.delete_mail(name, mail.selected_idxs.sent[name]) + mail.selected_idxs.sent[name] = {} elseif formname == "mail:drafts" and messagesDrafts[mail.selected_idxs.drafts[name]] then -- drafts table mail.delete_mail(name, messagesDrafts[mail.selected_idxs.drafts[name]].id) + mail.selected_idxs.drafts[name] = nil end mail.show_mail_menu(name, sortfieldindex, sortdirection, filter) diff --git a/ui/inbox.lua b/ui/inbox.lua index 58000d6..dfecf49 100644 --- a/ui/inbox.lua +++ b/ui/inbox.lua @@ -104,5 +104,21 @@ function mail.show_inbox(name, sortfieldindex, sortdirection, filter) else formspec[#formspec + 1] = "]label[2.25,4.5;" .. S("No mail") .. "]" end + + if mail.selected_idxs.inbox[name] and #mail.selected_idxs.inbox[name] > 0 then + for i, selected_msg in ipairs(mail.selected_idxs.inbox[name]) do + local is_present = false + for _, msg in ipairs(messages) do + if msg.id == selected_msg then + is_present = true + break + end + end + if not is_present then + table.remove(mail.selected_idxs.inbox[name], i) + end + end + end + minetest.show_formspec(name, "mail:inbox", table.concat(formspec, "")) end diff --git a/ui/outbox.lua b/ui/outbox.lua index 17a4757..bf282be 100644 --- a/ui/outbox.lua +++ b/ui/outbox.lua @@ -83,5 +83,21 @@ function mail.show_sent(name, sortfieldindex, sortdirection, filter) else formspec[#formspec + 1] = "]label[2.25,4.5;" .. S("No mail") .. "]" end + + if mail.selected_idxs.sent[name] and #mail.selected_idxs.sent[name] > 0 then + for i, selected_msg in ipairs(mail.selected_idxs.sent[name]) do + local is_present = false + for _, msg in ipairs(messages) do + if msg.id == selected_msg then + is_present = true + break + end + end + if not is_present then + table.remove(mail.selected_idxs.sent[name], i) + end + end + end + minetest.show_formspec(name, "mail:sent", table.concat(formspec, "")) end