mirror of
https://github.com/mt-mods/mail.git
synced 2025-04-30 08:21:44 -04:00
Add insertion of messages into global storage mail.messages.json
This commit is contained in:
parent
17b5f94fed
commit
0d69f0242b
4 changed files with 36 additions and 15 deletions
8
api.lua
8
api.lua
|
@ -94,12 +94,8 @@ function mail.send(...)
|
|||
time = os.time(),
|
||||
}
|
||||
|
||||
-- send the mail to all recipients
|
||||
for recipient in pairs(recipients) do
|
||||
local messages = mail.getMessages(recipient)
|
||||
table.insert(messages, 1, msg)
|
||||
mail.setMessages(recipient, messages)
|
||||
end
|
||||
-- insert in global storage
|
||||
mail.addMessage(msg)
|
||||
|
||||
-- notify recipients that happen to be online
|
||||
local mail_alert = f(mail.receive_mail_message, m.from, m.subject)
|
||||
|
|
10
gui.lua
10
gui.lua
|
@ -97,7 +97,7 @@ end
|
|||
|
||||
function mail.show_inbox(name)
|
||||
local formspec = { mail.inbox_formspec }
|
||||
local messages = mail.getMessages(name)
|
||||
local messages = mail.getPlayerMessages(name)
|
||||
|
||||
message_drafts[name] = nil
|
||||
|
||||
|
@ -148,7 +148,7 @@ function mail.show_sent(name)
|
|||
local playerContacts = mail.getContacts(name)
|
||||
local nbMails = 0
|
||||
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
|
||||
|
||||
|
@ -317,7 +317,7 @@ function mail.compile_contact_list(name, selected, playernames)
|
|||
end
|
||||
|
||||
function mail.show_message(name, msgnumber)
|
||||
local messages = mail.getMessages(name)
|
||||
local messages = mail.getPlayerMessages(name)
|
||||
local message = messages[msgnumber]
|
||||
local formspec = [[
|
||||
size[8,9]
|
||||
|
@ -444,7 +444,7 @@ function mail.handle_receivefields(player, formname, fields)
|
|||
|
||||
elseif formname == "mail:inbox" or formname == "mail:sent" then
|
||||
local name = player:get_player_name()
|
||||
local messages = mail.getMessages(name)
|
||||
local messages = mail.getPlayerMessages(name)
|
||||
|
||||
if fields.messages then
|
||||
local evt = minetest.explode_table_event(fields.messages)
|
||||
|
@ -525,7 +525,7 @@ function mail.handle_receivefields(player, formname, fields)
|
|||
|
||||
elseif formname == "mail:message" then
|
||||
local name = player:get_player_name()
|
||||
local messages = mail.getMessages(name)
|
||||
local messages = mail.getPlayerMessages(name)
|
||||
|
||||
if fields.back then
|
||||
if boxtab_index == 1 then
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
minetest.register_on_joinplayer(function(player)
|
||||
minetest.after(2, function(name)
|
||||
local messages = mail.getMessages(name)
|
||||
local messages = mail.getPlayerMessages(name)
|
||||
|
||||
local unreadcount = 0
|
||||
|
||||
|
|
29
storage.lua
29
storage.lua
|
@ -1,4 +1,3 @@
|
|||
|
||||
function mail.getMailFile(playername)
|
||||
local saneplayername = string.gsub(playername, "[.|/]", "")
|
||||
return mail.maildir .. "/" .. saneplayername .. ".json"
|
||||
|
@ -9,8 +8,24 @@ function mail.getContactsFile(playername)
|
|||
return mail.maildir .. "/contacts/" .. saneplayername .. ".json"
|
||||
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))
|
||||
if messages then
|
||||
for _, msg in ipairs(messages) do
|
||||
|
@ -39,6 +54,16 @@ function mail.setMessages(playername, messages)
|
|||
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)
|
||||
return mail.read_json_file(mail.getContactsFile(playername))
|
||||
|
|
Loading…
Add table
Reference in a new issue