MattiasBuelens

MCMail mailbox

Jul 24th, 2012
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.54 KB | None | 0 0
  1. --[[
  2.  
  3.     MCNet Mail
  4.     Mail boxes
  5.  
  6. --]]
  7.  
  8. mcmail = mcmail or {}
  9.  
  10. --[[
  11.  
  12.     Mail box
  13.  
  14. ]]--
  15.  
  16. local MailBox = common.newClass({
  17.     -- Parent mail
  18.     parent = nil,
  19.     -- Mailbox name
  20.     name = "",
  21.     -- Messages
  22.     messages = nil
  23. })
  24. mcmail.MailBox = MailBox
  25.  
  26. function MailBox:init()
  27.     self.messages = self.messages or {}
  28. end
  29.  
  30. function MailBox:load()
  31.     -- Load messages
  32.     local messages = self.parent:get(self.name) or {}
  33.     -- Unpack messages
  34.     local unpacked = {}
  35.     for i,msg in ipairs(messages) do
  36.         unpacked[i] = mcnet.message.unpack(msg)
  37.     end
  38.     -- Store messages
  39.     self.messages = unpacked
  40. end
  41.  
  42. function MailBox:save()
  43.     -- Pack messages
  44.     local packed = {}
  45.     for i,msg in ipairs(self.messages) do
  46.         packed[i] = mcnet.message.pack(msg)
  47.     end
  48.     -- Store box
  49.     self.parent:set(self.name, packed)
  50.     self.parent:save()
  51. end
  52.  
  53. function MailBox:add(message)
  54.     local i = common.ifind(self.messages, message)
  55.     assert(i == nil, "message already stored")
  56.     table.insert(self.messages, message)
  57.     self:save()
  58. end
  59.  
  60. function MailBox:remove(message)
  61.     local i = common.ifind(self.messages, message)
  62.     assert(i ~= nil, "message not found")
  63.     table.remove(self.messages, i)
  64.     self:save()
  65. end
  66.  
  67. --[[
  68.  
  69.     Mail
  70.  
  71. ]]--
  72.  
  73. local Mail = common.newClass(common.Store)
  74. mcmail.Mail = Mail
  75.  
  76. function mcmail.newMail(path, defaults)
  77.     assert(type(path) == "string", "path must be a string")
  78.     return Mail:new{
  79.         ___path = path,
  80.         ___data = {},
  81.         ___defaults = defaults or {}
  82.     }
  83. end
  84.  
  85. function Mail:getBox(boxName)
  86.     return MailBox:new{
  87.         parent = self,
  88.         name = boxName
  89.     }
  90. end
Advertisement
Add Comment
Please, Sign In to add comment