mirror of
https://github.com/mt-mods/mail.git
synced 2025-04-30 08:21:44 -04:00
Compare commits
9 commits
Author | SHA1 | Date | |
---|---|---|---|
|
f7cc435f6b | ||
|
9fe6885f90 | ||
|
1cc18b840c | ||
|
87b24bae5d | ||
|
0d8f7cc445 | ||
|
030a7a3fe8 | ||
|
8a992b7a29 | ||
|
1bffd98132 | ||
|
59667bd35c |
35 changed files with 412 additions and 161 deletions
2
.github/workflows/test.yml
vendored
2
.github/workflows/test.yml
vendored
|
@ -9,7 +9,7 @@ jobs:
|
|||
timeout-minutes: 10
|
||||
strategy:
|
||||
matrix:
|
||||
ENGINE_VERSION: [5.0.1, 5.1.1, 5.2.0, 5.3.0, 5.4.1, 5.5.1, 5.6.1, 5.7.0, 5.8.0, latest]
|
||||
ENGINE_VERSION: [5.0.1, 5.1.1, 5.2.0, 5.3.0, 5.4.1, 5.5.1, 5.6.1, 5.7.0, 5.8.0, 5.9.1, 5.10.0, latest]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
|
|
@ -8,8 +8,8 @@ read_globals = {
|
|||
table = {fields = {"copy", "getn", "indexof", "insert_all"}},
|
||||
beerchat = {fields = {"has_player_muted_player", "execute_callbacks"}},
|
||||
|
||||
-- Minetest
|
||||
"minetest",
|
||||
-- Luanti
|
||||
"core",
|
||||
"vector", "ItemStack",
|
||||
"dump",
|
||||
|
||||
|
|
6
api.lua
6
api.lua
|
@ -1,7 +1,7 @@
|
|||
-- see: mail.md
|
||||
|
||||
-- translation
|
||||
local S = minetest.get_translator("mail")
|
||||
local S = mail.S
|
||||
|
||||
local f = string.format
|
||||
|
||||
|
@ -69,7 +69,7 @@ function mail.send(m)
|
|||
extra_log = ""
|
||||
end
|
||||
|
||||
minetest.log("action", f("[mail] %q send mail to %q%s with subject %q and body %q",
|
||||
core.log("action", f("[mail] %q send mail to %q%s with subject %q and body %q",
|
||||
m.from, m.to, extra_log, m.subject, m.body
|
||||
))
|
||||
|
||||
|
@ -122,7 +122,7 @@ function mail.save_draft(m)
|
|||
-- defaults
|
||||
m.subject = m.subject or "(No subject)"
|
||||
|
||||
minetest.log("verbose", f("[mail] %q saves draft with subject %q and body %q",
|
||||
core.log("verbose", f("[mail] %q saves draft with subject %q and body %q",
|
||||
m.from, m.subject, m.body
|
||||
))
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
minetest.register_chatcommand("mail",{
|
||||
core.register_chatcommand("mail",{
|
||||
description = "Open the mail interface",
|
||||
func = function(name, param)
|
||||
if #param > 0 then -- if param is not empty
|
||||
|
|
4
gui.lua
4
gui.lua
|
@ -1,5 +1,5 @@
|
|||
|
||||
if minetest.get_modpath("unified_inventory") then
|
||||
if core.get_modpath("unified_inventory") then
|
||||
|
||||
unified_inventory.register_button("mail", {
|
||||
type = "image",
|
||||
|
@ -11,7 +11,7 @@ if minetest.get_modpath("unified_inventory") then
|
|||
})
|
||||
end
|
||||
|
||||
if minetest.get_modpath("sfinv_buttons") then
|
||||
if core.get_modpath("sfinv_buttons") then
|
||||
sfinv_buttons.register_button("mail", {
|
||||
title = "Mail",
|
||||
image = "mail_button.png",
|
||||
|
|
10
hud.lua
10
hud.lua
|
@ -1,12 +1,12 @@
|
|||
|
||||
local huddata = {}
|
||||
|
||||
minetest.register_on_joinplayer(function(player)
|
||||
core.register_on_joinplayer(function(player)
|
||||
local name = player:get_player_name()
|
||||
local data = {}
|
||||
|
||||
data.imageid = player:hud_add({
|
||||
hud_elem_type = "image",
|
||||
type = "image",
|
||||
name = "MailIcon",
|
||||
position = {x=0.52, y=0.52},
|
||||
text="",
|
||||
|
@ -15,7 +15,7 @@ minetest.register_on_joinplayer(function(player)
|
|||
})
|
||||
|
||||
data.textid = player:hud_add({
|
||||
hud_elem_type = "text",
|
||||
type = "text",
|
||||
name = "MailText",
|
||||
position = {x=0.55, y=0.52},
|
||||
text= "",
|
||||
|
@ -27,7 +27,7 @@ minetest.register_on_joinplayer(function(player)
|
|||
huddata[name] = data
|
||||
end)
|
||||
|
||||
minetest.register_on_leaveplayer(function(player)
|
||||
core.register_on_leaveplayer(function(player)
|
||||
local name = player:get_player_name()
|
||||
huddata[name] = nil
|
||||
end)
|
||||
|
@ -35,7 +35,7 @@ end)
|
|||
|
||||
function mail.hud_update(playername, messages)
|
||||
local data = huddata[playername]
|
||||
local player = minetest.get_player_by_name(playername)
|
||||
local player = core.get_player_by_name(playername)
|
||||
|
||||
if not data or not player then
|
||||
return
|
||||
|
|
11
init.lua
11
init.lua
|
@ -3,7 +3,10 @@ mail = {
|
|||
version = 3,
|
||||
|
||||
-- mod storage
|
||||
storage = minetest.get_mod_storage(),
|
||||
storage = core.get_mod_storage(),
|
||||
|
||||
-- translation
|
||||
S = core.get_translator(core.get_current_modname()),
|
||||
|
||||
-- ui theme prepend
|
||||
theme = "",
|
||||
|
@ -36,12 +39,12 @@ mail = {
|
|||
message_drafts = {}
|
||||
}
|
||||
|
||||
if minetest.get_modpath("default") then
|
||||
if core.get_modpath("default") then
|
||||
mail.theme = default.gui_bg .. default.gui_bg_img
|
||||
end
|
||||
|
||||
-- sub files
|
||||
local MP = minetest.get_modpath(minetest.get_current_modname())
|
||||
local MP = core.get_modpath(core.get_current_modname())
|
||||
dofile(MP .. "/util/init.lua")
|
||||
dofile(MP .. "/chatcommands.lua")
|
||||
dofile(MP .. "/migrate.lua")
|
||||
|
@ -57,7 +60,7 @@ dofile(MP .. "/ui/init.lua")
|
|||
-- migrate storage
|
||||
mail.migrate()
|
||||
|
||||
if minetest.get_modpath("mtt") then
|
||||
if core.get_modpath("mtt") then
|
||||
dofile(MP .. "/mtt.lua")
|
||||
dofile(MP .. "/api.spec.lua")
|
||||
dofile(MP .. "/migrate.spec.lua")
|
||||
|
|
123
locale/mail.ru.tr
Normal file
123
locale/mail.ru.tr
Normal file
|
@ -0,0 +1,123 @@
|
|||
# textdomain: mail
|
||||
The mail could not be sent:=Невозможно отправить почту:
|
||||
You did not specify any valid recipient.=Вы не указали получателя.
|
||||
You have mail! Type /mail to read=У вас есть почта! Наберите /mail, чтобы прочитать
|
||||
You have a new message from @1! Subject: @2=У вас новое сообщение от @1! Тема: @2
|
||||
To view it, type /mail=Чтобы посмотреть, наберите /mail
|
||||
You could also use the button in your inventory.=Вы также можете использовать кнопку в Вашем инвентаре.
|
||||
Original author=Автор оригинала
|
||||
Code=Код
|
||||
Internationalization=Перевод
|
||||
Textures=Текстуры
|
||||
Audio=Аудио
|
||||
Provided by mt-mods=Предоставлено mt-mods
|
||||
Version: @1=Версия: @1
|
||||
Licenses=Лицензии
|
||||
Expat (code), WTFPL (textures)=Expat (код), WTFPL (текстуры)
|
||||
Communication using this system is NOT guaranteed to be private!=Конфиденциальность общения с использованием этой системы НЕ гарантируется!
|
||||
Admins are able to view the messages of any player.=Админ может читать сообщения любых игроков.
|
||||
Contributors=Участники
|
||||
Group by name=Группировать по имени
|
||||
Group by contribution=Группировать по участию
|
||||
Note=Заметка
|
||||
Settings=Настройки
|
||||
About=О...
|
||||
BCC=С.копия
|
||||
Cancel=Отмена
|
||||
Save draft=Сохр. черновик
|
||||
Send=Отправить
|
||||
Subject=Тема
|
||||
To=Кому
|
||||
CC=Копия
|
||||
Delete=Удалить
|
||||
New=Новое
|
||||
Edit=Изменить
|
||||
Back=Назад
|
||||
Name=Имя
|
||||
No drafts=Нет черновиков
|
||||
Trash=Корзина
|
||||
Inbox=Входящие
|
||||
Outbox=Исходящие
|
||||
Drafts=Черновики
|
||||
Contacts=Контакты
|
||||
Mail lists=Списки рассылки
|
||||
Options=Опции
|
||||
Close=Закрыть
|
||||
(No subject)=(без темы)
|
||||
Player name=Имя игрока
|
||||
That name is already in your contacts=Это имя уже есть в Ваших контактах
|
||||
The contact name cannot be empty.=Имя контакта не может быть пустым.
|
||||
Save=Сохранить
|
||||
Maillist name=Название списка
|
||||
Desc=Описание
|
||||
Players=Игроки
|
||||
That name is already in your mailing lists.=Это имя уже есть в ваших списках рассылки.
|
||||
The mailing list name cannot be empty.=Название списка не может быть пустым.
|
||||
Mark Read=Отм. прочитано
|
||||
Mark Unread=Отм. непрочитано
|
||||
Mark Spam=Отм. спам
|
||||
Unmark Spam=Снять отм. спам
|
||||
Reply=Ответить
|
||||
Reply all=Ответить всем
|
||||
Forward=Переслать
|
||||
Reply only to the sender=Ответить только отправителю
|
||||
Reply to all involved people=Ответить всем участникам
|
||||
Transfer message to other people=Переслать сообщение другим игрокам
|
||||
Date=Дата
|
||||
From=От
|
||||
Filter=Фильтр
|
||||
Allow multiple selection=Разрешить выбор нескольких
|
||||
@1 of @2 selected=@1 из @2 выбраны
|
||||
(Un)select all=Снять выбор со всех
|
||||
No mail=Нет почты
|
||||
Read=Прочитано
|
||||
Ascending=Возрастание
|
||||
Descending=Убывание
|
||||
(No description)=(Нет описания)
|
||||
No maillist=Не список рассылки
|
||||
Receivers=Получатели
|
||||
(Un)mute sender=Вкл. звук для отправителя
|
||||
Add=Добавить
|
||||
Remove=Удалить
|
||||
Reset=Сбросить
|
||||
Restore=Восстановить
|
||||
Empty=Очистить
|
||||
Trash is empty=Корзина пуста
|
||||
From/To=От/Кому
|
||||
No contacts=Нет контактов
|
||||
The method of delivery to @1 is invalid.=Метод доставки для @1 не действителен.
|
||||
The recipient @1 could not be identified.=Невозможно идентифицировать получателя @1.
|
||||
@1 rejected your mail.=@1 отклонил ваше письмо.
|
||||
Chat notifications=Уведомления в чате
|
||||
Receive a message in the chat when there is a new message=Получать сообщение в чате, когда приходит новое сообщение
|
||||
On join notifications=Уведомления при присоединении
|
||||
Receive a message at login when inbox isn't empty=Получать сообщение при входе, когда есть письма во Входящих
|
||||
HUD notifications=HUD уведомления
|
||||
Show an HUD notification when inbox isn't empty=Показывать уведомление HUD, если папка «Входящие» не пуста
|
||||
Sound notifications=Звуковые уведомления
|
||||
Play a sound when there is a new message=Проигрывать звук, когда приходит новое сообщение
|
||||
Show unread in different color=Показывать не прочтенные други цветом
|
||||
Show CC/BCC in different color=Показывать Копию/Скрытую копию другим цветом
|
||||
Default sorting field=Поле для сортировки по умолчанию
|
||||
Default sorting direction=Направление сортировки по умолчанию
|
||||
Move deleted messages to trash=Перемещать удаленные сообщения в корзину
|
||||
Automatic marking read=Автоматически отмечать прочтение
|
||||
Mark a message as read when opened=Отмечать сообщение как прочитанное при открытии
|
||||
Date format=Формат даты
|
||||
Timezone offset=Временная зона
|
||||
Offset to add to server time.=Добавлять ко времени сервера
|
||||
Mute list=Заглушить список
|
||||
Notifications=Уведомления
|
||||
Message list=Список сообщений
|
||||
Fields=Поля
|
||||
Spam=Спам
|
||||
Other=Другое
|
||||
Date and Time=Дата и Время
|
||||
years=лет
|
||||
months=месяцев
|
||||
weeks=недель
|
||||
days=дней
|
||||
hours=часов
|
||||
minuts=минут
|
||||
seconds=секунд
|
||||
@1 ago=@1 назад
|
123
locale/mail.uk.tr
Normal file
123
locale/mail.uk.tr
Normal file
|
@ -0,0 +1,123 @@
|
|||
# textdomain: mail
|
||||
The mail could not be sent:=Неможливо відправити пошту:
|
||||
You did not specify any valid recipient.=Ви не вказали отримувача.
|
||||
You have mail! Type /mail to read=У вас є пошта! Введіть /mail для прочитання
|
||||
You have a new message from @1! Subject: @2=У вас нове повідомлення від @1! Тема: @2
|
||||
To view it, type /mail=Введіть /mail аби прочитати це
|
||||
You could also use the button in your inventory.=Також ви можете використовувати кнопку в вашому інвентарі.
|
||||
Original author=Автор оригіналу
|
||||
Code=Код
|
||||
Internationalization=Переклад
|
||||
Textures=Текстури
|
||||
Audio=Аудіо
|
||||
Provided by mt-mods=Надано mt-mods
|
||||
Version: @1=Версія: @1
|
||||
Licenses=Ліцензії
|
||||
Expat (code), WTFPL (textures)=Expat (код), WTFPL (текстури)
|
||||
Communication using this system is NOT guaranteed to be private!=Конфіденційність використання цієї системи НЕ гарантовано є приватною!
|
||||
Admins are able to view the messages of any player.=Адмін може читати повідомлення всіх гравців.
|
||||
Contributors=Учасники
|
||||
Group by name=Групувати по імені
|
||||
Group by contribution=Групувати по участю
|
||||
Note=Замітка
|
||||
Settings=Налаштування
|
||||
About=Про...
|
||||
BCC=ВСС
|
||||
Cancel=Скасувати
|
||||
Save draft=Збер.чернетку
|
||||
Send=Відправити
|
||||
Subject=Тема
|
||||
To=Кому
|
||||
CC=Копія
|
||||
Delete=Видалити
|
||||
New=Створити
|
||||
Edit=Редагувати
|
||||
Back=Назад
|
||||
Name=Ім'я
|
||||
No drafts=Немає чернеток
|
||||
Trash=Кошик
|
||||
Inbox=Вхідні
|
||||
Outbox=Вихідні
|
||||
Drafts=Чернетки
|
||||
Contacts=Контакти
|
||||
Mail lists=Списки розсилки
|
||||
Options=Опції
|
||||
Close=Закрити
|
||||
(No subject)=(без теми)
|
||||
Player name=Ім'я гравця
|
||||
That name is already in your contacts=Це ім'я вже збережено у ваших контактах
|
||||
The contact name cannot be empty.=Ім'я контакта не може бути пустим.
|
||||
Save=Зберегти
|
||||
Maillist name=Назва списку
|
||||
Desc=Опис
|
||||
Players=Гравці
|
||||
That name is already in your mailing lists.=Це ім'я вже є у ваших списках розсилки.
|
||||
The mailing list name cannot be empty.=Назва списка не може бути пустою.
|
||||
Mark Read=Прочитано
|
||||
Mark Unread=Непрочитано
|
||||
Mark Spam=Відм. спам
|
||||
Unmark Spam=Скас. спам
|
||||
Reply=Відповісти
|
||||
Reply all=Відповісти усім
|
||||
Forward=Переслати
|
||||
Reply only to the sender=Відповісти лише відправнику
|
||||
Reply to all involved people=Відповісти усім учасникам
|
||||
Transfer message to other people=Переслати це повідомлення іншим людям
|
||||
Date=Дата
|
||||
From=Від
|
||||
Filter=Фільтр
|
||||
Allow multiple selection=Дозволити вибір декількох
|
||||
@1 of @2 selected=@1 з @2 вибрані
|
||||
(Un)select all=Зняти вибір з усіх
|
||||
No mail=Немає пошти
|
||||
Read=Прочитано
|
||||
Ascending=Зростання
|
||||
Descending=Зменшення
|
||||
(No description)=(Немає опису)
|
||||
No maillist=Немає списків розсилки
|
||||
Receivers=Отримувачі
|
||||
(Un)mute sender=Увімк. звук для відправника
|
||||
Add=Додати
|
||||
Remove=Видалити
|
||||
Reset=Скинути
|
||||
Restore=Відновити
|
||||
Empty=Очистити
|
||||
Trash is empty=Кошик пустий
|
||||
From/To=Від/До
|
||||
No contacts=Немає контактів
|
||||
The method of delivery to @1 is invalid.=Метод доставки для @1 не дійсний.
|
||||
The recipient @1 could not be identified.=Не знайдено @1.
|
||||
@1 rejected your mail.=@1 відхилив ваше лист.
|
||||
Chat notifications=Повідомлення у чаті
|
||||
Receive a message in the chat when there is a new message=Отримувати повідомленння у чаті при отриманні нового повідомлення
|
||||
On join notifications=Повідомлення при приєднанні
|
||||
Receive a message at login when inbox isn't empty=Отримувати повідомлення при приєднанні коли у теці «Вхідні» є нові листи
|
||||
HUD notifications=HUD повідомлення
|
||||
Show an HUD notification when inbox isn't empty=Показувати HUD повідомлення коли у теці «Вхідні» є нові листи
|
||||
Sound notifications=Звукові повідомлення
|
||||
Play a sound when there is a new message=Програвати звук при новому повідомленні
|
||||
Show unread in different color=Показувати непрочитані іншим кольором
|
||||
Show CC/BCC in different color=Показувати копію/приховану копію іншим кольором
|
||||
Default sorting field=Поле для сортування за замовч.
|
||||
Default sorting direction=Напрям сортування за замовч.
|
||||
Move deleted messages to trash=Переміщати видалені повідомлення до кошика
|
||||
Automatic marking read=Автоматично відмічати прочитані
|
||||
Mark a message as read when opened=Відмічати повідомлення як прочитане, коли відкрито
|
||||
Date format=Формат дати
|
||||
Timezone offset=Часовий пояс
|
||||
Offset to add to server time.=Додавати до часу сервера.
|
||||
Mute list=Заглушити список
|
||||
Notifications=Повідомлення
|
||||
Message list=Список повідомлень
|
||||
Fields=Поля
|
||||
Spam=Спам
|
||||
Other=Інше
|
||||
Date and Time=Дата й час
|
||||
years=років
|
||||
months=місяців
|
||||
weeks=тижнів
|
||||
days=днів
|
||||
hours=годин
|
||||
minuts=хвилин
|
||||
seconds=секунд
|
||||
@1 ago=@1 тому
|
26
migrate.lua
26
migrate.lua
|
@ -2,12 +2,12 @@ local STORAGE_VERSION_KEY = "@@version"
|
|||
local CURRENT_VERSION = 3.1
|
||||
|
||||
local function migrate_v1_to_v3()
|
||||
local file = io.open(minetest.get_worldpath().."/mail.db", "r")
|
||||
local file = io.open(core.get_worldpath().."/mail.db", "r")
|
||||
assert(file)
|
||||
print("[mail] Migration from v1 to v3 database")
|
||||
|
||||
local data = file:read("*a")
|
||||
local oldmails = minetest.deserialize(data)
|
||||
local oldmails = core.deserialize(data)
|
||||
file:close()
|
||||
|
||||
for name, oldmessages in pairs(oldmails) do
|
||||
|
@ -28,7 +28,7 @@ local function migrate_v1_to_v3()
|
|||
|
||||
-- rename file
|
||||
print("[mail,v1] migration done, renaming old mail.db")
|
||||
os.rename(minetest.get_worldpath().."/mail.db", minetest.get_worldpath().."/mail.db.old")
|
||||
os.rename(core.get_worldpath().."/mail.db", core.get_worldpath().."/mail.db.old")
|
||||
end
|
||||
|
||||
local function read_json_file(path)
|
||||
|
@ -36,7 +36,7 @@ local function read_json_file(path)
|
|||
local content = {}
|
||||
if file then
|
||||
local json = file:read("*a")
|
||||
content = minetest.parse_json(json or "[]") or {}
|
||||
content = core.parse_json(json or "[]") or {}
|
||||
file:close()
|
||||
end
|
||||
return content
|
||||
|
@ -44,13 +44,13 @@ end
|
|||
|
||||
-- migrate from v2 to v3 database
|
||||
local function migrate_v2_to_v3()
|
||||
local maildir = minetest.get_worldpath().."/mails"
|
||||
minetest.mkdir(maildir) -- if necessary (eg. first login)
|
||||
local maildir = core.get_worldpath().."/mails"
|
||||
core.mkdir(maildir) -- if necessary (eg. first login)
|
||||
print("[mail] Migration from v2 to v3 database")
|
||||
|
||||
-- defer execution until auth-handler ready (first server-step)
|
||||
minetest.after(0, function()
|
||||
for playername, _ in minetest.get_auth_handler().iterate() do
|
||||
core.after(0, function()
|
||||
for playername, _ in core.get_auth_handler().iterate() do
|
||||
local entry = mail.get_storage_entry(playername)
|
||||
|
||||
local player_contacts = read_json_file(maildir .. "/contacts/" .. playername .. ".json")
|
||||
|
@ -110,7 +110,7 @@ local function is_uuid_existing(uuid)
|
|||
end
|
||||
end
|
||||
else
|
||||
for p, _ in minetest.get_auth_handler().iterate() do
|
||||
for p, _ in core.get_auth_handler().iterate() do
|
||||
local result = search_boxes(p, boxes, uuid)
|
||||
if result then return result end
|
||||
end
|
||||
|
@ -168,7 +168,7 @@ local function fix_box_duplicate_uuids(playername, box)
|
|||
end
|
||||
end
|
||||
else
|
||||
for p, _ in minetest.get_auth_handler().iterate() do
|
||||
for p, _ in core.get_auth_handler().iterate() do
|
||||
replace_other_player_message_uuid(p, m, uuid, new_uuid)
|
||||
end
|
||||
end
|
||||
|
@ -195,8 +195,8 @@ local function repair_storage()
|
|||
end
|
||||
end
|
||||
else
|
||||
minetest.after(0, function()
|
||||
for p, _ in minetest.get_auth_handler().iterate() do
|
||||
core.after(0, function()
|
||||
for p, _ in core.get_auth_handler().iterate() do
|
||||
fix_player_duplicate_uuids(p)
|
||||
end
|
||||
end)
|
||||
|
@ -213,7 +213,7 @@ function mail.migrate()
|
|||
end
|
||||
|
||||
-- check for v1 storage
|
||||
local v1_file = io.open(minetest.get_worldpath().."/mail.db", "r")
|
||||
local v1_file = io.open(core.get_worldpath().."/mail.db", "r")
|
||||
if v1_file then
|
||||
-- v1 to v3
|
||||
migrate_v1_to_v3()
|
||||
|
|
2
mtt.lua
2
mtt.lua
|
@ -1,7 +1,7 @@
|
|||
|
||||
mtt.register("setup", function(callback)
|
||||
-- create test players
|
||||
local auth_handler = minetest.get_auth_handler()
|
||||
local auth_handler = core.get_auth_handler()
|
||||
auth_handler.set_password("player1", "")
|
||||
auth_handler.set_password("player2", "")
|
||||
auth_handler.set_password("player3", "")
|
||||
|
|
10
onjoin.lua
10
onjoin.lua
|
@ -1,8 +1,8 @@
|
|||
-- translation
|
||||
local S = minetest.get_translator("mail")
|
||||
local S = mail.S
|
||||
|
||||
minetest.register_on_joinplayer(function(player)
|
||||
minetest.after(2, function(name)
|
||||
core.register_on_joinplayer(function(player)
|
||||
core.after(2, function(name)
|
||||
local entry = mail.get_storage_entry(name)
|
||||
local messages = entry.inbox
|
||||
mail.hud_update(name, messages)
|
||||
|
@ -16,8 +16,8 @@ minetest.register_on_joinplayer(function(player)
|
|||
end
|
||||
|
||||
if unreadcount > 0 and mail.get_setting(name, "onjoin_notifications") then
|
||||
minetest.chat_send_player(name,
|
||||
minetest.colorize(mail.get_color("new"), "(" .. unreadcount .. ") " .. S("You have mail! Type /mail to read")))
|
||||
core.chat_send_player(name,
|
||||
core.colorize(mail.get_color("new"), "(" .. unreadcount .. ") " .. S("You have mail! Type /mail to read")))
|
||||
end
|
||||
end, player:get_player_name())
|
||||
end)
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
local S = minetest.get_translator("mail")
|
||||
local has_canonical_name = minetest.get_modpath("canonical_name")
|
||||
-- translation
|
||||
local S = mail.S
|
||||
|
||||
local has_canonical_name = core.get_modpath("canonical_name")
|
||||
|
||||
mail.register_on_player_receive(function(name, msg)
|
||||
-- add to inbox
|
||||
|
@ -11,16 +13,16 @@ mail.register_on_player_receive(function(name, msg)
|
|||
local mail_alert = S("You have a new message from @1! Subject: @2", msg.from, msg.subject) ..
|
||||
"\n" .. S("To view it, type /mail")
|
||||
local inventory_alert = S("You could also use the button in your inventory.")
|
||||
local player = minetest.get_player_by_name(name)
|
||||
local player = core.get_player_by_name(name)
|
||||
if player then
|
||||
if mail.get_setting(name, "chat_notifications") == true then
|
||||
minetest.chat_send_player(name, mail_alert)
|
||||
if minetest.get_modpath("unified_inventory") or minetest.get_modpath("sfinv_buttons") then
|
||||
minetest.chat_send_player(name, inventory_alert)
|
||||
core.chat_send_player(name, mail_alert)
|
||||
if core.get_modpath("unified_inventory") or core.get_modpath("sfinv_buttons") then
|
||||
core.chat_send_player(name, inventory_alert)
|
||||
end
|
||||
end
|
||||
if mail.get_setting(name, "sound_notifications") == true then
|
||||
minetest.sound_play("mail_notif", {to_player=name})
|
||||
core.sound_play("mail_notif", {to_player=name})
|
||||
end
|
||||
local receiver_entry = mail.get_storage_entry(name)
|
||||
local receiver_messages = receiver_entry.inbox
|
||||
|
@ -29,7 +31,7 @@ mail.register_on_player_receive(function(name, msg)
|
|||
end)
|
||||
|
||||
mail.register_recipient_handler(function(_, pname)
|
||||
if not minetest.player_exists(pname) then
|
||||
if not core.player_exists(pname) then
|
||||
return nil
|
||||
end
|
||||
return true, function(msg)
|
||||
|
|
14
storage.lua
14
storage.lua
|
@ -31,7 +31,7 @@ function mail.get_storage_entry(playername)
|
|||
entry = populate_entry()
|
||||
else
|
||||
-- deserialize existing entry
|
||||
local e = minetest.parse_json(str)
|
||||
local e = core.parse_json(str)
|
||||
entry = populate_entry(e)
|
||||
end
|
||||
|
||||
|
@ -55,7 +55,7 @@ end
|
|||
local function save_worker()
|
||||
for key, entry in pairs(save_queued_entries) do
|
||||
-- write to backend
|
||||
mail.storage:set_string(key, minetest.write_json(entry))
|
||||
mail.storage:set_string(key, core.write_json(entry))
|
||||
end
|
||||
|
||||
-- clear queue
|
||||
|
@ -65,13 +65,13 @@ local function save_worker()
|
|||
cache = {}
|
||||
|
||||
-- save every second
|
||||
minetest.after(1, save_worker)
|
||||
core.after(1, save_worker)
|
||||
end
|
||||
|
||||
-- start save-worker loop
|
||||
save_worker()
|
||||
-- save on shutdown
|
||||
minetest.register_on_shutdown(save_worker)
|
||||
core.register_on_shutdown(save_worker)
|
||||
|
||||
-- get a mail by id from the players in- or outbox
|
||||
function mail.get_message(playername, msg_id)
|
||||
|
@ -392,20 +392,20 @@ local function extract_maillists_main(receivers, maillists_owner, expanded_recei
|
|||
for _, receiver in pairs(receivers) do
|
||||
if seen[receiver] then
|
||||
-- Do not add/expand this receiver as it is already seen
|
||||
minetest.log("verbose", ("mail: ignoring duplicate receiver %q during maillist expansion"):format(receiver))
|
||||
core.log("verbose", ("mail: ignoring duplicate receiver %q during maillist expansion"):format(receiver))
|
||||
elseif string.find(receiver, "^@") then
|
||||
seen[receiver] = true
|
||||
local listname = string.sub(receiver, 2)
|
||||
local maillist = mail.get_maillist_by_name(maillists_owner, listname)
|
||||
if maillist then
|
||||
minetest.log("verbose", ("mail: expanding maillist %q"):format(listname))
|
||||
core.log("verbose", ("mail: expanding maillist %q"):format(listname))
|
||||
for _, entry in ipairs(maillist.players) do
|
||||
extract_maillists_main(entry, maillists_owner, expanded_receivers, seen)
|
||||
end
|
||||
end
|
||||
else
|
||||
seen[receiver] = true
|
||||
minetest.log("verbose", ("mail: adding %q to receiver list during maillist expansion"):format(receiver))
|
||||
core.log("verbose", ("mail: adding %q to receiver list during maillist expansion"):format(receiver))
|
||||
table.insert(expanded_receivers, receiver)
|
||||
end
|
||||
end
|
||||
|
|
12
ui/about.lua
12
ui/about.lua
|
@ -1,5 +1,5 @@
|
|||
-- translation
|
||||
local S = minetest.get_translator("mail")
|
||||
local S = mail.S
|
||||
|
||||
local FORMNAME = "mail:about"
|
||||
|
||||
|
@ -55,7 +55,7 @@ function mail.show_about(name)
|
|||
label[0.2,0;Mail]
|
||||
|
||||
label[0.2,0.5;]] .. S("Provided by mt-mods") .. [[]
|
||||
label[0.2,0.9;]] .. S("Version: @1", "1.4.1") .. [[]
|
||||
label[0.2,0.9;]] .. S("Version: @1", "1.5.0-dev") .. [[]
|
||||
|
||||
box[0,1.5;3,0.45;]] .. mail.get_color("highlighted") .. [[]
|
||||
label[0.2,1.5;]] .. S("Licenses") .. [[]
|
||||
|
@ -119,10 +119,10 @@ function mail.show_about(name)
|
|||
|
||||
formspec = formspec .. mail.theme
|
||||
|
||||
minetest.show_formspec(name, FORMNAME, formspec)
|
||||
core.show_formspec(name, FORMNAME, formspec)
|
||||
end
|
||||
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
core.register_on_player_receive_fields(function(player, formname, fields)
|
||||
if formname ~= FORMNAME then
|
||||
return
|
||||
end
|
||||
|
@ -141,10 +141,10 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|||
mail.show_about(playername)
|
||||
|
||||
elseif fields.github then
|
||||
minetest.chat_send_player(playername, "https://github.com/mt-mods/mail")
|
||||
core.chat_send_player(playername, "https://github.com/mt-mods/mail")
|
||||
|
||||
elseif fields.contentdb then
|
||||
minetest.chat_send_player(playername, "https://content.minetest.net/packages/mt-mods/mail")
|
||||
core.chat_send_player(playername, "https://content.minetest.net/packages/mt-mods/mail")
|
||||
elseif fields.contributor_grouping then
|
||||
mail.selected_idxs.contributor_grouping[playername] = fields.contributor_grouping
|
||||
mail.show_about(playername)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
-- translation
|
||||
local S = minetest.get_translator("mail")
|
||||
local S = mail.S
|
||||
|
||||
local FORMNAME = "mail:compose"
|
||||
|
||||
|
@ -20,18 +20,18 @@ function mail.show_compose(name, to, subject, body, cc, bcc, id)
|
|||
]] .. mail.theme
|
||||
|
||||
formspec = string.format(formspec,
|
||||
minetest.formspec_escape(to) or "",
|
||||
minetest.formspec_escape(cc) or "",
|
||||
minetest.formspec_escape(bcc) or "",
|
||||
minetest.formspec_escape(subject) or "",
|
||||
minetest.formspec_escape(body) or "")
|
||||
core.formspec_escape(to) or "",
|
||||
core.formspec_escape(cc) or "",
|
||||
core.formspec_escape(bcc) or "",
|
||||
core.formspec_escape(subject) or "",
|
||||
core.formspec_escape(body) or "")
|
||||
|
||||
mail.selected_idxs.message[name] = id or mail.new_uuid()
|
||||
|
||||
minetest.show_formspec(name, FORMNAME, formspec)
|
||||
core.show_formspec(name, FORMNAME, formspec)
|
||||
end
|
||||
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
core.register_on_player_receive_fields(function(player, formname, fields)
|
||||
if formname ~= FORMNAME then
|
||||
return
|
||||
end
|
||||
|
@ -63,7 +63,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|||
body = fields.body,
|
||||
})
|
||||
if not success then
|
||||
minetest.chat_send_player(name, err)
|
||||
core.chat_send_player(name, err)
|
||||
return
|
||||
end
|
||||
|
||||
|
@ -87,7 +87,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|||
end
|
||||
end
|
||||
|
||||
minetest.after(0.5, function()
|
||||
core.after(0.5, function()
|
||||
mail.selected_idxs.drafts[name] = nil
|
||||
mail.show_mail_menu(name)
|
||||
end)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
-- translation
|
||||
local S = minetest.get_translator("mail")
|
||||
local S = mail.S
|
||||
|
||||
local FORMNAME = "mail:contacts"
|
||||
|
||||
|
@ -14,10 +14,10 @@ local contacts_formspec = "size[8,9;]" .. mail.theme .. [[
|
|||
|
||||
function mail.show_contacts(name)
|
||||
local formspec = contacts_formspec .. mail.compile_contact_list(name, mail.selected_idxs.contacts[name])
|
||||
minetest.show_formspec(name, FORMNAME, formspec)
|
||||
core.show_formspec(name, FORMNAME, formspec)
|
||||
end
|
||||
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
core.register_on_player_receive_fields(function(player, formname, fields)
|
||||
if formname ~= FORMNAME then
|
||||
return
|
||||
end
|
||||
|
@ -26,7 +26,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|||
local contacts = mail.get_contacts(name)
|
||||
|
||||
if fields.contacts then
|
||||
local evt = minetest.explode_table_event(fields.contacts)
|
||||
local evt = core.explode_table_event(fields.contacts)
|
||||
for k, _, i in mail.pairs_by_keys(contacts) do
|
||||
if i == evt.row - 1 then
|
||||
mail.selected_idxs.contacts[name] = tonumber(k)
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
-- translation
|
||||
local S = minetest.get_translator("mail")
|
||||
|
||||
local S = mail.S
|
||||
|
||||
function mail.show_drafts(name)
|
||||
local trash_tab = ""
|
||||
|
@ -33,14 +32,14 @@ function mail.show_drafts(name)
|
|||
for _, message in ipairs(messages) do
|
||||
formspec[#formspec + 1] = ","
|
||||
formspec[#formspec + 1] = ","
|
||||
formspec[#formspec + 1] = minetest.formspec_escape(message.to)
|
||||
formspec[#formspec + 1] = core.formspec_escape(message.to)
|
||||
formspec[#formspec + 1] = ","
|
||||
if message.subject ~= "" then
|
||||
if string.len(message.subject) > 30 then
|
||||
formspec[#formspec + 1] = minetest.formspec_escape(string.sub(message.subject, 1, 27))
|
||||
formspec[#formspec + 1] = core.formspec_escape(string.sub(message.subject, 1, 27))
|
||||
formspec[#formspec + 1] = "..."
|
||||
else
|
||||
formspec[#formspec + 1] = minetest.formspec_escape(message.subject)
|
||||
formspec[#formspec + 1] = core.formspec_escape(message.subject)
|
||||
end
|
||||
else
|
||||
formspec[#formspec + 1] = S("(No subject)")
|
||||
|
@ -54,5 +53,5 @@ function mail.show_drafts(name)
|
|||
else
|
||||
formspec[#formspec + 1] = "]label[2.25,4.5;" .. S("No drafts") .. "]"
|
||||
end
|
||||
minetest.show_formspec(name, "mail:drafts", table.concat(formspec, ""))
|
||||
core.show_formspec(name, "mail:drafts", table.concat(formspec, ""))
|
||||
end
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
-- translation
|
||||
local S = minetest.get_translator("mail")
|
||||
local S = mail.S
|
||||
|
||||
local FORMNAME = "mail:editcontact"
|
||||
|
||||
|
@ -24,12 +24,12 @@ function mail.show_edit_contact(name, contact_name, note, illegal_name_hint)
|
|||
end
|
||||
formspec = formspec .. mail.theme
|
||||
formspec = string.format(formspec,
|
||||
minetest.formspec_escape(contact_name or ""),
|
||||
minetest.formspec_escape(note or ""))
|
||||
minetest.show_formspec(name, FORMNAME, formspec)
|
||||
core.formspec_escape(contact_name or ""),
|
||||
core.formspec_escape(note or ""))
|
||||
core.show_formspec(name, FORMNAME, formspec)
|
||||
end
|
||||
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
core.register_on_player_receive_fields(function(player, formname, fields)
|
||||
if formname ~= FORMNAME then
|
||||
return
|
||||
end
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
-- translation
|
||||
local S = minetest.get_translator("mail")
|
||||
local S = mail.S
|
||||
|
||||
local FORMNAME = "mail:editmaillist"
|
||||
|
||||
|
@ -25,13 +25,13 @@ function mail.show_edit_maillist(playername, maillist_name, desc, players, illeg
|
|||
end
|
||||
formspec = formspec .. mail.theme
|
||||
formspec = string.format(formspec,
|
||||
minetest.formspec_escape(maillist_name or ""),
|
||||
minetest.formspec_escape(desc or ""),
|
||||
minetest.formspec_escape(players or ""))
|
||||
minetest.show_formspec(playername, FORMNAME, formspec)
|
||||
core.formspec_escape(maillist_name or ""),
|
||||
core.formspec_escape(desc or ""),
|
||||
core.formspec_escape(players or ""))
|
||||
core.show_formspec(playername, FORMNAME, formspec)
|
||||
end
|
||||
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
core.register_on_player_receive_fields(function(player, formname, fields)
|
||||
if formname ~= FORMNAME then
|
||||
return
|
||||
end
|
||||
|
|
|
@ -14,7 +14,7 @@ local function nonempty(x)
|
|||
return ((type(x)=="table")and(#x>0))
|
||||
end
|
||||
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
core.register_on_player_receive_fields(function(player, formname, fields)
|
||||
if formname ~= "mail:inbox" and formname ~= "mail:outbox"
|
||||
and formname ~= "mail:drafts" and formname ~= "mail:trash" then
|
||||
return
|
||||
|
@ -59,7 +59,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|||
|
||||
-- Hanmdle formspec event
|
||||
if fields.inbox then -- inbox table
|
||||
local evt = minetest.explode_table_event(fields.inbox)
|
||||
local evt = core.explode_table_event(fields.inbox)
|
||||
if evt.row == 1 then -- header
|
||||
if mail.selected_idxs.sortfield[name] == evt.column-1 then -- if already this field, then change direction
|
||||
mail.selected_idxs.sortdirection[name] = mail.selected_idxs.sortdirection[name] == "2" and "1" or "2"
|
||||
|
@ -105,7 +105,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|||
end
|
||||
|
||||
if fields.outbox then -- outbox table
|
||||
local evt = minetest.explode_table_event(fields.outbox)
|
||||
local evt = core.explode_table_event(fields.outbox)
|
||||
if evt.row == 1 then -- header
|
||||
if mail.selected_idxs.sortfield[name] == evt.column-1 then -- if already this field, then change direction
|
||||
mail.selected_idxs.sortdirection[name] = mail.selected_idxs.sortdirection[name] == "2" and "1" or "2"
|
||||
|
@ -151,7 +151,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|||
end
|
||||
|
||||
if fields.drafts then -- drafts table
|
||||
local evt = minetest.explode_table_event(fields.drafts)
|
||||
local evt = core.explode_table_event(fields.drafts)
|
||||
if evt.row == 1 then -- header
|
||||
if mail.selected_idxs.sortfield[name] == evt.column-1 then -- if already this field, then change direction
|
||||
mail.selected_idxs.sortdirection[name] = mail.selected_idxs.sortdirection[name] == "2" and "1" or "2"
|
||||
|
@ -176,7 +176,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|||
end
|
||||
|
||||
if fields.trash then -- trash table
|
||||
local evt = minetest.explode_table_event(fields.trash)
|
||||
local evt = core.explode_table_event(fields.trash)
|
||||
if evt.row == 1 then -- header
|
||||
if mail.selected_idxs.sortfield[name] == evt.column-1 then -- if already this field, then change direction
|
||||
mail.selected_idxs.sortdirection[name] = mail.selected_idxs.sortdirection[name] == "2" and "1" or "2"
|
||||
|
|
10
ui/inbox.lua
10
ui/inbox.lua
|
@ -1,5 +1,5 @@
|
|||
-- translation
|
||||
local S = minetest.get_translator("mail")
|
||||
local S = mail.S
|
||||
|
||||
function mail.show_inbox(name, sortfieldindex, sortdirection, filter)
|
||||
sortfieldindex = tonumber(sortfieldindex or mail.selected_idxs.sortfield[name])
|
||||
|
@ -109,14 +109,14 @@ function mail.show_inbox(name, sortfieldindex, sortdirection, filter)
|
|||
end
|
||||
formspec[#formspec + 1] = "," .. mail.get_color(displayed_color)
|
||||
formspec[#formspec + 1] = ","
|
||||
formspec[#formspec + 1] = minetest.formspec_escape(message.from)
|
||||
formspec[#formspec + 1] = core.formspec_escape(message.from)
|
||||
formspec[#formspec + 1] = ","
|
||||
if message.subject ~= "" then
|
||||
if string.len(message.subject) > 30 then
|
||||
formspec[#formspec + 1] = minetest.formspec_escape(string.sub(message.subject, 1, 27))
|
||||
formspec[#formspec + 1] = core.formspec_escape(string.sub(message.subject, 1, 27))
|
||||
formspec[#formspec + 1] = "..."
|
||||
else
|
||||
formspec[#formspec + 1] = minetest.formspec_escape(message.subject)
|
||||
formspec[#formspec + 1] = core.formspec_escape(message.subject)
|
||||
end
|
||||
else
|
||||
formspec[#formspec + 1] = S("(No subject)")
|
||||
|
@ -127,5 +127,5 @@ function mail.show_inbox(name, sortfieldindex, sortdirection, filter)
|
|||
formspec[#formspec + 1] = "]label[2.25,4.5;" .. S("No mail") .. "]"
|
||||
end
|
||||
|
||||
minetest.show_formspec(name, "mail:inbox", table.concat(formspec, ""))
|
||||
core.show_formspec(name, "mail:inbox", table.concat(formspec, ""))
|
||||
end
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
-- sub files
|
||||
local MP = minetest.get_modpath(minetest.get_current_modname())
|
||||
local MP = core.get_modpath(core.get_current_modname())
|
||||
|
||||
dofile(MP .. "/ui/inbox.lua")
|
||||
dofile(MP .. "/ui/outbox.lua")
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
-- translation
|
||||
local S = minetest.get_translator("mail")
|
||||
local S = mail.S
|
||||
|
||||
local FORMNAME = "mail:maillists"
|
||||
|
||||
|
@ -19,14 +19,14 @@ function mail.show_maillists(name)
|
|||
for _, maillist in ipairs(maillists) do
|
||||
formspec[#formspec + 1] = ","
|
||||
formspec[#formspec + 1] = ","
|
||||
formspec[#formspec + 1] = "@" .. minetest.formspec_escape(maillist.name)
|
||||
formspec[#formspec + 1] = "@" .. core.formspec_escape(maillist.name)
|
||||
formspec[#formspec + 1] = ","
|
||||
if maillist.desc ~= "" then
|
||||
if string.len(maillist.desc or "") > 30 then
|
||||
formspec[#formspec + 1] = minetest.formspec_escape(string.sub(maillist.desc, 1, 27))
|
||||
formspec[#formspec + 1] = core.formspec_escape(string.sub(maillist.desc, 1, 27))
|
||||
formspec[#formspec + 1] = "..."
|
||||
else
|
||||
formspec[#formspec + 1] = minetest.formspec_escape(maillist.desc)
|
||||
formspec[#formspec + 1] = core.formspec_escape(maillist.desc)
|
||||
end
|
||||
else
|
||||
formspec[#formspec + 1] = S("(No description)")
|
||||
|
@ -40,10 +40,10 @@ function mail.show_maillists(name)
|
|||
else
|
||||
formspec[#formspec + 1] = "]label[2.25,4.5;" .. S("No maillist") .. "]"
|
||||
end
|
||||
minetest.show_formspec(name, FORMNAME, table.concat(formspec, ""))
|
||||
core.show_formspec(name, FORMNAME, table.concat(formspec, ""))
|
||||
end
|
||||
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
core.register_on_player_receive_fields(function(player, formname, fields)
|
||||
if formname ~= FORMNAME then
|
||||
return
|
||||
end
|
||||
|
@ -52,7 +52,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|||
local maillists = mail.get_maillists(name)
|
||||
|
||||
if fields.maillists then
|
||||
local evt = minetest.explode_table_event(fields.maillists)
|
||||
local evt = core.explode_table_event(fields.maillists)
|
||||
mail.selected_idxs.maillists[name] = evt.row - 1
|
||||
if evt.type == "DCL" and maillists[mail.selected_idxs.maillists[name]] then
|
||||
local maillist = mail.get_maillist_by_name(name, maillists[mail.selected_idxs.maillists[name]].name)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
-- translation
|
||||
local S = minetest.get_translator("mail")
|
||||
local S = mail.S
|
||||
|
||||
local FORMNAME = "mail:message"
|
||||
|
||||
|
@ -52,16 +52,16 @@ function mail.show_message(name, id)
|
|||
tooltip[forward;]] .. S("Transfer message to other people") .. [[]
|
||||
]] .. mail.theme
|
||||
|
||||
local from = minetest.formspec_escape(message.from) or ""
|
||||
local to = minetest.formspec_escape(message.to) or ""
|
||||
local from = core.formspec_escape(message.from) or ""
|
||||
local to = core.formspec_escape(message.to) or ""
|
||||
if string.len(to) > 70 then to = string.sub(to, 1, 67) .. "..." end
|
||||
local cc = minetest.formspec_escape(message.cc) or ""
|
||||
local cc = core.formspec_escape(message.cc) or ""
|
||||
if string.len(cc) > 50 then cc = string.sub(cc, 1, 47) .. "..." end
|
||||
local date = type(message.time) == "number"
|
||||
and minetest.formspec_escape(os.date(mail.get_setting(name, "date_format"),
|
||||
and core.formspec_escape(os.date(mail.get_setting(name, "date_format"),
|
||||
message.time+3600*mail.get_setting(name, "timezone_offset"))) or ""
|
||||
local subject = minetest.formspec_escape(message.subject) or ""
|
||||
local body = minetest.formspec_escape(message.body) or ""
|
||||
local subject = core.formspec_escape(message.subject) or ""
|
||||
local body = core.formspec_escape(message.body) or ""
|
||||
formspec = string.format(formspec, from, to, cc, date, subject, body)
|
||||
|
||||
if not message.read and mail.get_setting(name, "auto_marking_read") then
|
||||
|
@ -69,14 +69,14 @@ function mail.show_message(name, id)
|
|||
mail.mark_read(name, id)
|
||||
end
|
||||
|
||||
minetest.show_formspec(name, FORMNAME, formspec)
|
||||
core.show_formspec(name, FORMNAME, formspec)
|
||||
end
|
||||
|
||||
function mail.reply(name, message)
|
||||
if not message then
|
||||
-- TODO: workaround for https://github.com/mt-mods/mail/issues/84
|
||||
minetest.log("error", "[mail] reply called with nil message for player: " .. name)
|
||||
minetest.log("error", "[mail] current mail-context: " .. dump(mail.selected_idxs))
|
||||
core.log("error", "[mail] reply called with nil message for player: " .. name)
|
||||
core.log("error", "[mail] current mail-context: " .. dump(mail.selected_idxs))
|
||||
return
|
||||
end
|
||||
mail.show_compose(name, message.from, "Re: "..message.subject, interleave_msg(message.body))
|
||||
|
@ -85,8 +85,8 @@ end
|
|||
function mail.replyall(name, message)
|
||||
if not message then
|
||||
-- TODO: workaround for https://github.com/mt-mods/mail/issues/84
|
||||
minetest.log("error", "[mail] replyall called with nil message for player: " .. name)
|
||||
minetest.log("error", "[mail] current mail-context: " .. dump(mail.selected_idxs))
|
||||
core.log("error", "[mail] replyall called with nil message for player: " .. name)
|
||||
core.log("error", "[mail] current mail-context: " .. dump(mail.selected_idxs))
|
||||
return
|
||||
end
|
||||
|
||||
|
@ -121,7 +121,7 @@ function mail.forward(name, message)
|
|||
mail.show_compose(name, "", "Fw: " .. (message.subject or ""), interleave_msg(message.body))
|
||||
end
|
||||
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
core.register_on_player_receive_fields(function(player, formname, fields)
|
||||
if formname ~= FORMNAME then
|
||||
return
|
||||
end
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
-- translation
|
||||
local S = minetest.get_translator("mail")
|
||||
local S = mail.S
|
||||
|
||||
function mail.show_outbox(name, sortfieldindex, sortdirection, filter)
|
||||
sortfieldindex = tonumber(sortfieldindex or mail.selected_idxs.sortfield[name])
|
||||
|
@ -90,18 +90,18 @@ function mail.show_outbox(name, sortfieldindex, sortdirection, filter)
|
|||
formspec[#formspec + 1] = "," .. mail.get_color(displayed_color)
|
||||
formspec[#formspec + 1] = ","
|
||||
if string.len(message.to) > 20 then
|
||||
formspec[#formspec + 1] = minetest.formspec_escape(string.sub(message.to, 1, 17))
|
||||
formspec[#formspec + 1] = core.formspec_escape(string.sub(message.to, 1, 17))
|
||||
formspec[#formspec + 1] = "..."
|
||||
else
|
||||
formspec[#formspec + 1] = minetest.formspec_escape(message.to)
|
||||
formspec[#formspec + 1] = core.formspec_escape(message.to)
|
||||
end
|
||||
formspec[#formspec + 1] = ","
|
||||
if message.subject ~= "" then
|
||||
if string.len(message.subject) > 30 then
|
||||
formspec[#formspec + 1] = minetest.formspec_escape(string.sub(message.subject, 1, 27))
|
||||
formspec[#formspec + 1] = core.formspec_escape(string.sub(message.subject, 1, 27))
|
||||
formspec[#formspec + 1] = "..."
|
||||
else
|
||||
formspec[#formspec + 1] = minetest.formspec_escape(message.subject)
|
||||
formspec[#formspec + 1] = core.formspec_escape(message.subject)
|
||||
end
|
||||
else
|
||||
formspec[#formspec + 1] = S("(No subject)")
|
||||
|
@ -112,5 +112,5 @@ function mail.show_outbox(name, sortfieldindex, sortdirection, filter)
|
|||
formspec[#formspec + 1] = "]label[2.25,4.5;" .. S("No mail") .. "]"
|
||||
end
|
||||
|
||||
minetest.show_formspec(name, "mail:outbox", table.concat(formspec, ""))
|
||||
core.show_formspec(name, "mail:outbox", table.concat(formspec, ""))
|
||||
end
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
-- translation
|
||||
local S = minetest.get_translator("mail")
|
||||
local S = core.get_translator("mail")
|
||||
|
||||
local FORMNAME = "mail:receivers"
|
||||
|
||||
|
@ -23,7 +23,7 @@ function mail.show_receivers(name, id)
|
|||
table[4,1.5;3.8,4.5;cc;%s]
|
||||
]] .. mail.theme
|
||||
|
||||
local from = minetest.formspec_escape(message.from) or ""
|
||||
local from = core.formspec_escape(message.from) or ""
|
||||
local to = mail.parse_player_list(message.to or "")
|
||||
local to_str = mail.get_color("header") .. "," .. S("To") .. ",,"
|
||||
to_str = to_str .. table.concat(to, ",,")
|
||||
|
@ -31,13 +31,13 @@ function mail.show_receivers(name, id)
|
|||
local cc_str = mail.get_color("header") .. "," .. S("CC") .. ",,"
|
||||
cc_str = cc_str .. table.concat(cc, ",,")
|
||||
local date = type(message.time) == "number"
|
||||
and minetest.formspec_escape(os.date(mail.get_setting(name, "date_format"), message.time)) or ""
|
||||
and core.formspec_escape(os.date(mail.get_setting(name, "date_format"), message.time)) or ""
|
||||
formspec = string.format(formspec, from, date, to_str, cc_str)
|
||||
|
||||
minetest.show_formspec(name, FORMNAME, formspec)
|
||||
core.show_formspec(name, FORMNAME, formspec)
|
||||
end
|
||||
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
core.register_on_player_receive_fields(function(player, formname, fields)
|
||||
if formname ~= FORMNAME then
|
||||
return
|
||||
end
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
-- translation
|
||||
local S = minetest.get_translator("mail")
|
||||
local S = mail.S
|
||||
|
||||
local FORMNAME = "mail:selectcontact"
|
||||
|
||||
|
@ -39,10 +39,10 @@ function mail.show_select_contact(name, to, cc)
|
|||
bcc = ""
|
||||
end]]--
|
||||
formspec = string.format(formspec, contacts, to, cc)--, bcc()
|
||||
minetest.show_formspec(name, FORMNAME, formspec)
|
||||
core.show_formspec(name, FORMNAME, formspec)
|
||||
end
|
||||
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
core.register_on_player_receive_fields(function(player, formname, fields)
|
||||
if formname ~= FORMNAME then
|
||||
return
|
||||
end
|
||||
|
@ -60,7 +60,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|||
bcc = "bccremove"
|
||||
}) do
|
||||
if fields[k] then
|
||||
local evt = minetest.explode_table_event(fields[k])
|
||||
local evt = core.explode_table_event(fields[k])
|
||||
mail.selected_idxs[k][name] = evt.row - 1
|
||||
if evt.type == "DCL" and mail.selected_idxs[k][name] then
|
||||
fields[action] = true
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
-- translation
|
||||
local S = minetest.get_translator("mail")
|
||||
local S = mail.S
|
||||
|
||||
local FORMNAME = "mail:settings"
|
||||
|
||||
|
@ -184,10 +184,10 @@ function mail.show_settings(name)
|
|||
end
|
||||
end
|
||||
formspec = formspec .. mail.theme
|
||||
minetest.show_formspec(name, FORMNAME, formspec)
|
||||
core.show_formspec(name, FORMNAME, formspec)
|
||||
end
|
||||
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
core.register_on_player_receive_fields(function(player, formname, fields)
|
||||
if formname ~= FORMNAME then
|
||||
return
|
||||
end
|
||||
|
@ -215,7 +215,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|||
mail.selected_idxs[setting][playername] = mail.selected_idxs[setting][playername] or
|
||||
mail.get_setting(playername, setting)
|
||||
if fields[setting] then
|
||||
local evt = minetest.explode_table_event(fields[setting])
|
||||
local evt = core.explode_table_event(fields[setting])
|
||||
mail.selected_idxs["index_" .. setting][playername] = evt.row-1
|
||||
elseif fields["add_" .. setting] then
|
||||
table.insert(mail.selected_idxs[setting][playername], fields["field_" .. setting])
|
||||
|
@ -233,7 +233,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|||
return
|
||||
|
||||
elseif fields.groups then
|
||||
local evt = minetest.explode_table_event(fields.groups)
|
||||
local evt = core.explode_table_event(fields.groups)
|
||||
mail.selected_idxs.settings_group[playername] = mail.settings_groups[tonumber(evt.row)].name
|
||||
mail.show_settings(playername)
|
||||
elseif fields.optionstab == "1" then
|
||||
|
|
10
ui/trash.lua
10
ui/trash.lua
|
@ -1,5 +1,5 @@
|
|||
-- translation
|
||||
local S = minetest.get_translator("mail")
|
||||
local S = mail.S
|
||||
|
||||
local trash_formspec = "size[8.5,11;]" .. mail.theme .. [[
|
||||
tabheader[0.3,1;boxtab;]] ..
|
||||
|
@ -28,14 +28,14 @@ function mail.show_trash(name)
|
|||
for _, message in ipairs(messages) do
|
||||
formspec[#formspec + 1] = ","
|
||||
formspec[#formspec + 1] = ","
|
||||
formspec[#formspec + 1] = minetest.formspec_escape(message.to)
|
||||
formspec[#formspec + 1] = core.formspec_escape(message.to)
|
||||
formspec[#formspec + 1] = ","
|
||||
if message.subject ~= "" then
|
||||
if string.len(message.subject) > 30 then
|
||||
formspec[#formspec + 1] = minetest.formspec_escape(string.sub(message.subject, 1, 27))
|
||||
formspec[#formspec + 1] = core.formspec_escape(string.sub(message.subject, 1, 27))
|
||||
formspec[#formspec + 1] = "..."
|
||||
else
|
||||
formspec[#formspec + 1] = minetest.formspec_escape(message.subject)
|
||||
formspec[#formspec + 1] = core.formspec_escape(message.subject)
|
||||
end
|
||||
else
|
||||
formspec[#formspec + 1] = S("(No subject)")
|
||||
|
@ -49,5 +49,5 @@ function mail.show_trash(name)
|
|||
else
|
||||
formspec[#formspec + 1] = "]label[2.25,4.5;" .. S("Trash is empty") .. "]"
|
||||
end
|
||||
minetest.show_formspec(name, "mail:trash", table.concat(formspec, ""))
|
||||
core.show_formspec(name, "mail:trash", table.concat(formspec, ""))
|
||||
end
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
-- translation
|
||||
local S = minetest.get_translator("mail")
|
||||
local S = mail.S
|
||||
|
||||
function mail.compile_contact_list(name, selected, playernames)
|
||||
-- TODO: refactor this - not just compiles *a* list, but *the* list for the contacts screen (too inflexible)
|
||||
|
@ -12,7 +12,7 @@ function mail.compile_contact_list(name, selected, playernames)
|
|||
if i == 1 then length = l end
|
||||
formspec[#formspec + 1] = ","
|
||||
formspec[#formspec + 1] = ","
|
||||
formspec[#formspec + 1] = minetest.formspec_escape(contact.name)
|
||||
formspec[#formspec + 1] = core.formspec_escape(contact.name)
|
||||
formspec[#formspec + 1] = ","
|
||||
local note = contact.note
|
||||
-- display an ellipsis if the note spans multiple lines
|
||||
|
@ -20,7 +20,7 @@ function mail.compile_contact_list(name, selected, playernames)
|
|||
if idx ~= nil then
|
||||
note = string.sub(note, 1, idx-1) .. ' ...'
|
||||
end
|
||||
formspec[#formspec + 1] = minetest.formspec_escape(note)
|
||||
formspec[#formspec + 1] = core.formspec_escape(note)
|
||||
if type(selected) == "string" then
|
||||
if string.lower(selected) == k then
|
||||
selected = i
|
||||
|
@ -43,7 +43,7 @@ function mail.compile_contact_list(name, selected, playernames)
|
|||
for i,c in ipairs(playernames) do
|
||||
formspec[#formspec + 1] = ","
|
||||
formspec[#formspec + 1] = ","
|
||||
formspec[#formspec + 1] = minetest.formspec_escape(c)
|
||||
formspec[#formspec + 1] = core.formspec_escape(c)
|
||||
formspec[#formspec + 1] = ","
|
||||
if contacts[string.lower(c)] == nil then
|
||||
formspec[#formspec + 1] = ""
|
||||
|
@ -54,7 +54,7 @@ function mail.compile_contact_list(name, selected, playernames)
|
|||
if idx ~= nil then
|
||||
note = string.sub(note, 1, idx-1) .. ' ...'
|
||||
end
|
||||
formspec[#formspec + 1] = minetest.formspec_escape(note)
|
||||
formspec[#formspec + 1] = core.formspec_escape(note)
|
||||
end
|
||||
if not selected then
|
||||
if type(selected) == "string" then
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
-- sub files
|
||||
local MP = minetest.get_modpath(minetest.get_current_modname())
|
||||
local MP = core.get_modpath(core.get_current_modname())
|
||||
dofile(MP .. "/util/normalize.lua")
|
||||
dofile(MP .. "/util/colors.lua")
|
||||
dofile(MP .. "/util/contact.lua")
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
local S = minetest.get_translator("mail")
|
||||
-- translation
|
||||
local S = mail.S
|
||||
|
||||
local function recursive_expand_recipient_names(sender, list, is_toplevel, recipients, undeliverable)
|
||||
for _, name in ipairs(list) do
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
-- translation
|
||||
local S = minetest.get_translator("mail")
|
||||
local S = mail.S
|
||||
|
||||
mail.settings = {
|
||||
chat_notifications = {
|
||||
|
@ -74,7 +74,7 @@ end
|
|||
function mail.settings.mute_list.check(name, value)
|
||||
local valid_players = {}
|
||||
for _, p in ipairs(value) do
|
||||
if p ~= name and minetest.player_exists(p) then
|
||||
if p ~= name and core.player_exists(p) then
|
||||
table.insert(valid_players, p)
|
||||
end
|
||||
end
|
||||
|
@ -82,9 +82,9 @@ function mail.settings.mute_list.check(name, value)
|
|||
end
|
||||
|
||||
function mail.settings.mute_list.sync(name)
|
||||
if minetest.get_modpath("beerchat") then
|
||||
if core.get_modpath("beerchat") then
|
||||
local players = {}
|
||||
for other_player, _ in minetest.get_auth_handler().iterate() do
|
||||
for other_player, _ in core.get_auth_handler().iterate() do
|
||||
if beerchat.has_player_muted_player(name, other_player) then
|
||||
table.insert(players, other_player)
|
||||
end
|
||||
|
@ -95,16 +95,16 @@ function mail.settings.mute_list.sync(name)
|
|||
end
|
||||
|
||||
function mail.settings.mute_list.transfer(name, value)
|
||||
if minetest.get_modpath("beerchat") then
|
||||
for other_player, _ in minetest.get_auth_handler().iterate() do -- unmute all
|
||||
if core.get_modpath("beerchat") then
|
||||
for other_player, _ in core.get_auth_handler().iterate() do -- unmute all
|
||||
if not beerchat.execute_callbacks("before_mute", name, other_player) then
|
||||
return false
|
||||
end
|
||||
minetest.get_player_by_name(name):get_meta():set_string(
|
||||
core.get_player_by_name(name):get_meta():set_string(
|
||||
"beerchat:muted:" .. other_player, "")
|
||||
end
|
||||
for _, other_player in ipairs(value) do -- then mute only players in table
|
||||
minetest.get_player_by_name(name):get_meta():set_string(
|
||||
core.get_player_by_name(name):get_meta():set_string(
|
||||
"beerchat:muted:" .. other_player, "true")
|
||||
end
|
||||
return true
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
-- translation
|
||||
local S = minetest.get_translator("mail")
|
||||
local S = mail.S
|
||||
|
||||
function mail.time_ago(t)
|
||||
local elapsed = os.time() - t
|
||||
|
|
Loading…
Add table
Reference in a new issue