93d1af947c
- introduce pairsByKeys() (from http://www.lua.org/pil/19.3.html but adding current index and total length as iterator return values) - use pairsByKeys() everywhere, where contacts are iterated over (for now only when displaying in gui.lua) so the order stays the same although the structure is a hashmap - correctly update selected position when adding/removing contacts to TO/CC/BCC fields - remove print statements in storage.lua
88 lines
2.0 KiB
Lua
88 lines
2.0 KiB
Lua
|
|
-- TODO: maybe local cache?
|
|
|
|
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 messages = mail.read_json_file(mail.getMailFile(playername))
|
|
if messages then
|
|
mail.hud_update(playername, messages)
|
|
end
|
|
|
|
return messages
|
|
end
|
|
|
|
mail.setMessages = function(playername, messages)
|
|
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! ("..playername..")")
|
|
return false
|
|
end
|
|
end
|
|
|
|
|
|
mail.getContacts = function(playername)
|
|
return mail.read_json_file(mail.getContactsFile(playername))
|
|
end
|
|
|
|
function pairsByKeys(t, f)
|
|
-- http://www.lua.org/pil/19.3.html
|
|
local a = {}
|
|
for n in pairs(t) do table.insert(a, n) end
|
|
table.sort(a, f)
|
|
local i = 0 -- iterator variable
|
|
local iter = function() -- iterator function
|
|
i = i + 1
|
|
if a[i] == nil then
|
|
return nil
|
|
else
|
|
--return a[i], t[a[i]]
|
|
-- add the current position and the length for convenience
|
|
return a[i], t[a[i]], i, #a
|
|
end
|
|
end
|
|
return iter
|
|
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")
|
|
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)
|
|
if file and file:write(json) and file:close() then
|
|
return true
|
|
else
|
|
return false
|
|
end
|
|
end
|