Add message id in player selections storage (fix #110, fix #114)

This commit is contained in:
Athozus 2023-10-16 20:32:06 +02:00
parent 8d7c8c63cf
commit 80ae9c3342
No known key found for this signature in database
GPG Key ID: B50895022E8484BF
5 changed files with 21 additions and 29 deletions

View File

@ -20,6 +20,7 @@ mail = {
outbox = {}, outbox = {},
drafts = {}, drafts = {},
trash = {}, trash = {},
message = {},
contacts = {}, contacts = {},
maillists = {}, maillists = {},
to = {}, to = {},

View File

@ -2,7 +2,6 @@
local S = minetest.get_translator("mail") local S = minetest.get_translator("mail")
local FORMNAME = "mail:compose" local FORMNAME = "mail:compose"
local msg_id = {}
function mail.show_compose(name, to, subject, body, cc, bcc, id) function mail.show_compose(name, to, subject, body, cc, bcc, id)
local formspec = [[ local formspec = [[
@ -28,9 +27,7 @@ function mail.show_compose(name, to, subject, body, cc, bcc, id)
minetest.formspec_escape(body) or "") minetest.formspec_escape(body) or "")
if id then if id then
msg_id[name] = id mail.selected_idxs.message[name] = id
else
msg_id[name] = nil
end end
minetest.show_formspec(name, FORMNAME, formspec) minetest.show_formspec(name, FORMNAME, formspec)
@ -44,8 +41,8 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
local name = player:get_player_name() local name = player:get_player_name()
if fields.send then if fields.send then
local id = mail.new_uuid() local id = mail.new_uuid()
if msg_id[name] then if mail.selected_idxs.message[name] then
id = msg_id[name] id = mail.selected_idxs.message[name]
end end
if (fields.to == "" and fields.cc == "" and fields.bcc == "") or fields.body == "" then if (fields.to == "" and fields.cc == "" and fields.bcc == "") or fields.body == "" then
-- if mail is invalid then store it as a draft -- if mail is invalid then store it as a draft
@ -117,8 +114,8 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
elseif fields.draft then elseif fields.draft then
local id = mail.new_uuid() local id = mail.new_uuid()
if msg_id[name] then if mail.selected_idxs.message[name] then
id = msg_id[name] id = mail.selected_idxs.message[name]
end end
mail.save_draft({ mail.save_draft({
id = id, id = id,

View File

@ -89,11 +89,14 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
end end
if selected_id == 0 then if selected_id == 0 then
table.insert(mail.selected_idxs.inbox[name], inbox.id) table.insert(mail.selected_idxs.inbox[name], inbox.id)
mail.selected_idxs.message[name] = inbox.id
end end
else else
mail.selected_idxs.inbox[name] = { inbox.id } mail.selected_idxs.inbox[name] = { inbox.id }
mail.selected_idxs.message[name] = inbox.id
end end
if evt.type == "DCL" then if evt.type == "DCL" then
mail.selected_idxs.message[name] = inbox.id
mail.show_message(name, inbox.id) mail.show_message(name, inbox.id)
else else
mail.show_mail_menu(name) mail.show_mail_menu(name)
@ -132,11 +135,14 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
end end
if selected_id == 0 then if selected_id == 0 then
table.insert(mail.selected_idxs.outbox[name], outbox.id) table.insert(mail.selected_idxs.outbox[name], outbox.id)
mail.selected_idxs.message[name] = outbox.id
end end
else else
mail.selected_idxs.outbox[name] = { outbox.id } mail.selected_idxs.outbox[name] = { outbox.id }
mail.selected_idxs.message[name] = outbox.id
end end
if evt.type == "DCL" then if evt.type == "DCL" then
mail.selected_idxs.message[name] = outbox.id
mail.show_message(name, outbox.id) mail.show_message(name, outbox.id)
else else
mail.show_mail_menu(name) mail.show_mail_menu(name)
@ -156,6 +162,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
end end
mail.selected_idxs.drafts[name] = evt.row - 1 mail.selected_idxs.drafts[name] = evt.row - 1
if evt.type == "DCL" and messagesDrafts[mail.selected_idxs.drafts[name]] then if evt.type == "DCL" and messagesDrafts[mail.selected_idxs.drafts[name]] then
mail.selected_idxs.message[name] = messagesDrafts[mail.selected_idxs.drafts[name]].id
mail.show_compose(name, mail.show_compose(name,
messagesDrafts[mail.selected_idxs.drafts[name]].to, messagesDrafts[mail.selected_idxs.drafts[name]].to,
messagesDrafts[mail.selected_idxs.drafts[name]].subject, messagesDrafts[mail.selected_idxs.drafts[name]].subject,
@ -180,6 +187,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
end end
mail.selected_idxs.trash[name] = evt.row - 1 mail.selected_idxs.trash[name] = evt.row - 1
if evt.type == "DCL" and messagesTrash[mail.selected_idxs.trash[name]] then if evt.type == "DCL" and messagesTrash[mail.selected_idxs.trash[name]] then
mail.selected_idxs.message[name] = messagesTrash[mail.selected_idxs.trash[name]].id
mail.show_message(name, messagesTrash[mail.selected_idxs.trash[name]].id) mail.show_message(name, messagesTrash[mail.selected_idxs.trash[name]].id)
end end
return true return true
@ -203,12 +211,13 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
elseif fields.read then elseif fields.read then
if formname == "mail:inbox" and nonempty(mail.selected_idxs.inbox[name]) then -- inbox table if formname == "mail:inbox" and nonempty(mail.selected_idxs.inbox[name]) then -- inbox table
mail.show_message(name, mail.selected_idxs.inbox[name][#mail.selected_idxs.inbox[name]]) mail.selected_idxs.message[name] = mail.selected_idxs.inbox[name][#mail.selected_idxs.inbox[name]]
elseif formname == "mail:outbox" and nonempty(mail.selected_idxs.outbox[name]) then -- outbox table elseif formname == "mail:outbox" and nonempty(mail.selected_idxs.outbox[name]) then -- outbox table
mail.show_message(name, mail.selected_idxs.outbox[name][#mail.selected_idxs.outbox[name]]) mail.selected_idxs.message[name] = mail.selected_idxs.outbox[name][#mail.selected_idxs.outbox[name]]
elseif formname == "mail:trash" and messagesTrash[mail.selected_idxs.trash[name]] then elseif formname == "mail:trash" and messagesTrash[mail.selected_idxs.trash[name]] then
mail.show_message(name, messagesTrash[mail.selected_idxs.trash[name]].id) mail.selected_idxs.message[name] = messagesTrash[mail.selected_idxs.trash[name]].id
end end
mail.show_message(name, mail.selected_idxs.message[name])
elseif fields.edit then elseif fields.edit then
if formname == "mail:drafts" and messagesDrafts[mail.selected_idxs.drafts[name]] then if formname == "mail:drafts" and messagesDrafts[mail.selected_idxs.drafts[name]] then

View File

@ -5,6 +5,7 @@ local FORMNAME = "mail:message"
function mail.show_message(name, id) function mail.show_message(name, id)
local message = mail.get_message(name, id) local message = mail.get_message(name, id)
mail.selected_idxs.message[name] = id
local formspec = [[ local formspec = [[
size[8,9] size[8,9]
@ -111,16 +112,8 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
end end
local name = player:get_player_name() local name = player:get_player_name()
local entry = mail.get_storage_entry(name)
local message = "" local message = mail.get_message(name, mail.selected_idxs.message[name])
if mail.selected_idxs.inbox[name] and mail.selected_idxs.boxtab[name] == 1 then
message = mail.get_message(name, mail.selected_idxs.inbox[name][#mail.selected_idxs.inbox[name]])
elseif mail.selected_idxs.outbox[name] and mail.selected_idxs.boxtab[name] == 2 then
message = mail.get_message(name, mail.selected_idxs.outbox[name][#mail.selected_idxs.outbox[name]])
elseif mail.selected_idxs.trash[name] and mail.selected_idxs.boxtab[name] == 4 then
message = mail.get_message(name, entry.trash[mail.selected_idxs.trash[name]].id)
end
if fields.back then if fields.back then
mail.show_mail_menu(name) mail.show_mail_menu(name)

View File

@ -43,16 +43,8 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
end end
local name = player:get_player_name() local name = player:get_player_name()
local entry = mail.get_storage_entry(name)
local message_id = "" local message_id = mail.selected_idxs.message[name]
if mail.selected_idxs.inbox[name] and mail.selected_idxs.boxtab[name] == 1 then
message_id = mail.selected_idxs.inbox[name][#mail.selected_idxs.inbox[name]]
elseif mail.selected_idxs.outbox[name] and mail.selected_idxs.boxtab[name] == 2 then
message_id = mail.selected_idxs.outbox[name][#mail.selected_idxs.outbox[name]]
elseif mail.selected_idxs.trash[name] and mail.selected_idxs.boxtab[name] == 4 then
message_id = entry.trash[mail.selected_idxs.trash[name]].id
end
if fields.back then if fields.back then
mail.show_message(name, message_id) mail.show_message(name, message_id)