mirror of
https://github.com/mt-mods/mail.git
synced 2025-07-04 21:50:28 -04:00
add contacts dir, leave mail files as is
- restructured storage.lua so reading/writing json is not duplicated - when a player joins and has no contacts file yet, automatically add all players he wrote to
This commit is contained in:
parent
498ef84026
commit
f82c3d2b82
4 changed files with 78 additions and 11 deletions
60
storage.lua
60
storage.lua
|
@ -1,32 +1,70 @@
|
|||
|
||||
-- TODO: maybe local cache?
|
||||
|
||||
function getMailFile(playername)
|
||||
function mail.getMailFile(playername)
|
||||
local saneplayername = string.gsub(playername, "[.|/]", "")
|
||||
return mail.maildir .. "/" .. saneplayername .. ".json"
|
||||
end
|
||||
|
||||
function mail.getContactsFile(playername)
|
||||
local saneplayername = string.gsub(playername, "[.|/]", "")
|
||||
return mail.maildir .. "/contacts/" .. saneplayername .. ".json"
|
||||
end
|
||||
|
||||
|
||||
mail.getMessages = function(playername)
|
||||
local file = io.open(getMailFile(playername), "r")
|
||||
local messages = {}
|
||||
if file then
|
||||
local json = file:read("*a")
|
||||
messages = minetest.parse_json(json or "[]") or {}
|
||||
local messages = mail.read_json_file(mail.getMailFile(playername))
|
||||
if messages then
|
||||
mail.hud_update(playername, messages)
|
||||
file:close()
|
||||
end
|
||||
|
||||
return messages
|
||||
end
|
||||
|
||||
mail.setMessages = function(playername, messages)
|
||||
local file = io.open(getMailFile(playername),"w")
|
||||
local json = minetest.write_json(messages)
|
||||
if file and file:write(json) and file:close() then
|
||||
if mail.write_json_file(mail.getMailFile(playername), messages) then
|
||||
mail.hud_update(playername, messages)
|
||||
return true
|
||||
else
|
||||
minetest.log("error","[mail] Save failed - messages may be lost!")
|
||||
minetest.log("error","[mail] Save failed - messages may be lost! ("..playername..")")
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
mail.getContacts = function(playername)
|
||||
return mail.read_json_file(mail.getContactsFile(playername))
|
||||
end
|
||||
|
||||
mail.setContacts = function(playername, contacts)
|
||||
if mail.write_json_file(mail.getContactsFile(playername), contacts) then
|
||||
return true
|
||||
else
|
||||
minetest.log("error","[mail] Save failed - contacts may be lost! ("..playername..")")
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function mail.read_json_file(path)
|
||||
local file = io.open(path, "r")
|
||||
local content = {}
|
||||
if file then
|
||||
local json = file:read("*a")
|
||||
print(string.format('read from %s: %s', path, json))
|
||||
content = minetest.parse_json(json or "[]") or {}
|
||||
file:close()
|
||||
end
|
||||
return content
|
||||
end
|
||||
|
||||
function mail.write_json_file(path, content)
|
||||
local file = io.open(path,"w")
|
||||
local json = minetest.write_json(content)
|
||||
print(string.format('writing to %s: %s', path, json))
|
||||
if file and file:write(json) and file:close() then
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue