Add insertion of messages into global storage mail.messages.json

This commit is contained in:
Athozus 2023-03-01 11:36:13 +01:00
parent 17b5f94fed
commit 0d69f0242b
No known key found for this signature in database
GPG key ID: B50895022E8484BF
4 changed files with 36 additions and 15 deletions

View file

@ -94,12 +94,8 @@ function mail.send(...)
time = os.time(), time = os.time(),
} }
-- send the mail to all recipients -- insert in global storage
for recipient in pairs(recipients) do mail.addMessage(msg)
local messages = mail.getMessages(recipient)
table.insert(messages, 1, msg)
mail.setMessages(recipient, messages)
end
-- notify recipients that happen to be online -- notify recipients that happen to be online
local mail_alert = f(mail.receive_mail_message, m.from, m.subject) local mail_alert = f(mail.receive_mail_message, m.from, m.subject)

10
gui.lua
View file

@ -97,7 +97,7 @@ end
function mail.show_inbox(name) function mail.show_inbox(name)
local formspec = { mail.inbox_formspec } local formspec = { mail.inbox_formspec }
local messages = mail.getMessages(name) local messages = mail.getPlayerMessages(name)
message_drafts[name] = nil message_drafts[name] = nil
@ -148,7 +148,7 @@ function mail.show_sent(name)
local playerContacts = mail.getContacts(name) local playerContacts = mail.getContacts(name)
local nbMails = 0 local nbMails = 0
for k, contact, i, l in mail.pairsByKeys(playerContacts) do for k, contact, i, l in mail.pairsByKeys(playerContacts) do
local contactMessages = mail.getMessages(contact.name) local contactMessages = mail.getPlayerMessages(contact.name)
message_drafts[name] = nil message_drafts[name] = nil
@ -317,7 +317,7 @@ function mail.compile_contact_list(name, selected, playernames)
end end
function mail.show_message(name, msgnumber) function mail.show_message(name, msgnumber)
local messages = mail.getMessages(name) local messages = mail.getPlayerMessages(name)
local message = messages[msgnumber] local message = messages[msgnumber]
local formspec = [[ local formspec = [[
size[8,9] size[8,9]
@ -444,7 +444,7 @@ function mail.handle_receivefields(player, formname, fields)
elseif formname == "mail:inbox" or formname == "mail:sent" then elseif formname == "mail:inbox" or formname == "mail:sent" then
local name = player:get_player_name() local name = player:get_player_name()
local messages = mail.getMessages(name) local messages = mail.getPlayerMessages(name)
if fields.messages then if fields.messages then
local evt = minetest.explode_table_event(fields.messages) local evt = minetest.explode_table_event(fields.messages)
@ -525,7 +525,7 @@ function mail.handle_receivefields(player, formname, fields)
elseif formname == "mail:message" then elseif formname == "mail:message" then
local name = player:get_player_name() local name = player:get_player_name()
local messages = mail.getMessages(name) local messages = mail.getPlayerMessages(name)
if fields.back then if fields.back then
if boxtab_index == 1 then if boxtab_index == 1 then

View file

@ -1,6 +1,6 @@
minetest.register_on_joinplayer(function(player) minetest.register_on_joinplayer(function(player)
minetest.after(2, function(name) minetest.after(2, function(name)
local messages = mail.getMessages(name) local messages = mail.getPlayerMessages(name)
local unreadcount = 0 local unreadcount = 0

View file

@ -1,4 +1,3 @@
function mail.getMailFile(playername) function mail.getMailFile(playername)
local saneplayername = string.gsub(playername, "[.|/]", "") local saneplayername = string.gsub(playername, "[.|/]", "")
return mail.maildir .. "/" .. saneplayername .. ".json" return mail.maildir .. "/" .. saneplayername .. ".json"
@ -9,8 +8,24 @@ function mail.getContactsFile(playername)
return mail.maildir .. "/contacts/" .. saneplayername .. ".json" return mail.maildir .. "/contacts/" .. saneplayername .. ".json"
end end
function mail.getMessages()
local messages = mail.read_json_file(mail.maildir .. "/mail.messages.json")
if messages then
for _, msg in ipairs(messages) do
if not msg.time then
-- add missing time field if not available (happens with old data)
msg.time = 0
end
end
function mail.getMessages(playername) -- sort by received date descending
table.sort(messages, function(a,b) return a.time > b.time end)
end
return messages
end
function mail.getPlayerMessages(playername)
local messages = mail.read_json_file(mail.getMailFile(playername)) local messages = mail.read_json_file(mail.getMailFile(playername))
if messages then if messages then
for _, msg in ipairs(messages) do for _, msg in ipairs(messages) do
@ -39,6 +54,16 @@ function mail.setMessages(playername, messages)
end end
end end
function mail.addMessage(message)
local messages = mail.getMessages()
table.insert(messages, 1, message)
if mail.write_json_file(mail.maildir .. "/mail.messages.json", messages) then
return true
else
minetest.log("error","[mail] Save failed - messages may be lost!")
return false
end
end
function mail.getContacts(playername) function mail.getContacts(playername)
return mail.read_json_file(mail.getContactsFile(playername)) return mail.read_json_file(mail.getContactsFile(playername))