From 74b18f38eb7676e940db46f2a928dac1485431a6 Mon Sep 17 00:00:00 2001 From: NatureFreshMilk Date: Mon, 16 Sep 2019 08:15:43 +0200 Subject: [PATCH] updated files --- .travis.yml | 12 ++++++ README.md | 10 ++++- api.lua | 41 ++++++++----------- api.md | 9 ++-- init.lua | 7 ++++ pics/ingame.png | Bin 0 -> 39670 bytes webmail.lua | 106 ++++++++++++++++++------------------------------ 7 files changed, 90 insertions(+), 95 deletions(-) create mode 100644 .travis.yml create mode 100644 pics/ingame.png diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..077e778 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,12 @@ +language: generic +sudo: false +addons: + apt: + packages: + - luarocks +before_install: + - luarocks install --local luacheck +script: +- $HOME/.luarocks/bin/luacheck --no-color . +notifications: + email: false diff --git a/README.md b/README.md index 37ce2b0..5d3a75d 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Mail mod for Minetest +Mail mod for Minetest (ingame mod) ====== This is a fork of cheapies mail mod @@ -33,6 +33,14 @@ Mails can be deleted, marked as read or unread, replied to and forwarded to anot See the "LICENSE" file +# Textures +* textures/email_mail.png (https://github.com/rubenwardy/email.git WTFPL) + +# Contributors + +* Cheapie (initial idea/project) +* Rubenwardy (lua/ui improvements) + # Old/Historic stuff * Old forum topic: https://forum.minetest.net/viewtopic.php?t=14464 * Old mod: https://cheapiesystems.com/git/mail/ diff --git a/api.lua b/api.lua index 1156ea3..a8d7e30 100644 --- a/api.lua +++ b/api.lua @@ -13,49 +13,44 @@ mail sending function, can be invoked with one object argument (new api) or all 4 parameters (old compat version) see: "Mail format" api.md --]] -function mail.send(sender, receiver, subject, body) +function mail.send(src, dst, subject, body) local m - if receiver == nil and subject == nil and body == nil then + if dst == nil and subject == nil and body == nil then -- new format (one object param) - m = sender - + m = src else -- old format - -- create mail from params - m = {} - m.sender = sender - m.receiver = receiver + m.src = src + m.dst = dst m.subject = subject m.body = body - - end - - m.unread = true - - if not m.time then - -- add timestamp - m.time = os.time() end - minetest.log("action", "[mail] '" .. m.sender .. "' sends mail to '" .. m.receiver .. + minetest.log("action", "[mail] '" .. m.src .. "' sends mail to '" .. m.dst .. "' with subject '" .. m.subject .. "' and body: '" .. m.body .. "'") - local messages = mail.getMessages(m.receiver) + local messages = mail.getMessages(m.dst) - table.insert(messages, 1, m) - mail.setMessages(m.receiver, messages) + table.insert(messages, 1, { + unread = true, + sender = m.src, + subject = m.subject, + body = m.body, + time = os.time(), + }) + mail.setMessages(m.dst, messages) for _, player in ipairs(minetest.get_connected_players()) do local name = player:get_player_name() - if name == m.receiver then + if name == m.dst then if m.subject == "" then m.subject = "(No subject)" end if string.len(m.subject) > 30 then m.subject = string.sub(m.subject,1,27) .. "..." end - minetest.chat_send_player(m.receiver, - string.format(mail.receive_mail_message, m.sender, m.subject)) + minetest.chat_send_player(m.dst, + string.format(mail.receive_mail_message, m.src, m.subject)) end end diff --git a/api.md b/api.md index dec0a70..5d059c2 100644 --- a/api.md +++ b/api.md @@ -4,8 +4,8 @@ The mail format in the api hooks ```lua mail = { - sender = "source name", - receiver = "destination name", + src = "source name", + dst = "destination name", subject = "subject line", body = "mail body", -- 8 attachments max @@ -22,8 +22,8 @@ mail.send("source name", "destination name", "subject line", "mail body") New variant (1.1+) ```lua mail.send({ - sender = "source name", - receiver = "destination name", + src = "source name", + dst = "destination name", subject = "subject line", body = "mail body" }) @@ -47,7 +47,6 @@ The mail format on-disk [{ "unread": true, "sender": "sender name", - "receiver": "receiver name", "subject": "subject name", "body": "main\nmultiline\nbody", "time": 1551258349, diff --git a/init.lua b/init.lua index c5c08e2..52e8141 100644 --- a/init.lua +++ b/init.lua @@ -1,4 +1,11 @@ mail = { + + -- mark webmail fork for other mods + fork = "webmail", + + -- api version + apiversion = 1.1, + -- mail directory maildir = minetest.get_worldpath().."/mails", diff --git a/pics/ingame.png b/pics/ingame.png new file mode 100644 index 0000000000000000000000000000000000000000..d8c2035e9c767fad53456ed3fb2ebff8de8c7176 GIT binary patch literal 39670 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 " .. data.params.receiver) - - mail.send(data.params) - - channel.send({ - method = data.method, - id = data.id, - result = { - success = true - } - }) + minetest.log("action", "[webmail] sending mail from webclient: " .. sendmail.src .. " -> " .. sendmail.dst) + mail.send(sendmail) end -- get player messages request from webmail -local function get_player_messages_handler(data) - local messages = mail.getMessages(data.params.playername) +local function get_player_messages_handler(playername) + local messages = mail.getMessages(playername) channel.send({ - method = data.method, - id = data.id, - result = messages + type = "player-messages", + playername = playername, + data = messages }) end -- remove mail -local function delete_mail_handler(data) - local index = data.params.index - local playername = data.params.playername - +local function delete_mail_handler(playername, index) local messages = mail.getMessages(playername) if messages[index] then table.remove(messages, index) end mail.setMessages(playername, messages) - -- TODO: check subject - - channel.send({ - method = data.method, - id = data.id, - result = { success = true } - }) end -- mark mail as read -local function mark_mail_read_handler(data) - local index = data.params.index - local playername = data.params.playername - local read = data.params.read - +local function mark_mail_read_handler(playername, index) local messages = mail.getMessages(playername) - if messages[index] then - messages[index].unread = not read + messages[index].unread = false end mail.setMessages(playername, messages) - -- TODO: check subject +end - channel.send({ - method = data.method, - id = data.id, - result = { success = true } - }) +-- mark mail as unread +local function mark_mail_unread_handler(playername, index) + local messages = mail.getMessages(playername) + if messages[index] then + messages[index].unread = true + end + mail.setMessages(playername, messages) end function mail.webmail_send_hook(m) @@ -135,21 +107,23 @@ function mail.webmail_init(http, url, key) }) channel.receive(function(data) - if data.method == "auth" then - auth_handler(data) + if data.type == "auth" then + auth_handler(data.data) - elseif data.method == "get-mails" then - get_player_messages_handler(data) + elseif data.type == "send" then + send_handler(data.data) -- { src, dst, subject, body } - elseif data.method == "mark-mail-read" then - mark_mail_read_handler(data) + elseif data.type == "delete-mail" then + delete_mail_handler(data.playername, data.index) -- index 1-based - elseif data.method == "delete-mail" then - delete_mail_handler(data) + elseif data.type == "mark-mail-read" then + mark_mail_read_handler(data.playername, data.index) -- index 1-based - elseif data.method == "send" then - send_handler(data) + elseif data.type == "mark-mail-unread" then + mark_mail_unread_handler(data.playername, data.index) -- index 1-based + elseif data.type == "player-messages" then + get_player_messages_handler(data.data) end end)