fix unified inventory integration (#23)

This commit is contained in:
fluxionary 2022-09-23 18:26:36 -07:00 committed by GitHub
parent d1254a7c5b
commit 8062173a5a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

52
gui.lua
View File

@ -1,12 +1,16 @@
-- refactor these to some proper management thing -- refactor these to some proper management thing
selected_idxs = { mail.selected_idxs = {
messages = {}, messages = {},
contacts = {}, contacts = {},
to = {}, to = {},
cc = {}, cc = {},
bcc = {}, bcc = {},
} }
message_drafts = {}
mail.message_drafts = {}
local selected_idxs = mail.selected_idxs
local message_drafts = mail.message_drafts
local theme local theme
if minetest.get_modpath("default") then if minetest.get_modpath("default") then
@ -72,6 +76,7 @@ function mail.show_about(name)
end end
function mail.show_inbox(name) function mail.show_inbox(name)
selected_idxs.messages[name] = nil
local formspec = { mail.inbox_formspec } local formspec = { mail.inbox_formspec }
local messages = mail.getMessages(name) local messages = mail.getMessages(name)
@ -354,14 +359,11 @@ function mail.forward(name, message)
end end
function mail.handle_receivefields(player, formname, fields) function mail.handle_receivefields(player, formname, fields)
if formname == "" and fields and fields.quit and minetest.get_modpath("unified_inventory") then
unified_inventory.set_inventory_formspec(player, "craft")
end
if formname == "mail:about" then if formname == "mail:about" then
minetest.after(0.5, function() minetest.after(0.5, function()
mail.show_inbox(player:get_player_name()) mail.show_inbox(player:get_player_name())
end) end)
return true
elseif formname == "mail:inbox" then elseif formname == "mail:inbox" then
local name = player:get_player_name() local name = player:get_player_name()
@ -375,6 +377,7 @@ function mail.handle_receivefields(player, formname, fields)
end end
return true return true
end end
if fields.read then if fields.read then
if messages[selected_idxs.messages[name]] then if messages[selected_idxs.messages[name]] then
mail.show_message(name, selected_idxs.messages[name]) mail.show_message(name, selected_idxs.messages[name])
@ -387,6 +390,7 @@ function mail.handle_receivefields(player, formname, fields)
end end
mail.show_inbox(name) mail.show_inbox(name)
elseif fields.reply and messages[selected_idxs.messages[name]] then elseif fields.reply and messages[selected_idxs.messages[name]] then
local message = messages[selected_idxs.messages[name]] local message = messages[selected_idxs.messages[name]]
mail.reply(name, message) mail.reply(name, message)
@ -406,7 +410,6 @@ function mail.handle_receivefields(player, formname, fields)
mail.setMessages(name, messages) mail.setMessages(name, messages)
end end
mail.show_inbox(name) mail.show_inbox(name)
return true
elseif fields.markunread then elseif fields.markunread then
if messages[selected_idxs.messages[name]] then if messages[selected_idxs.messages[name]] then
@ -415,7 +418,6 @@ function mail.handle_receivefields(player, formname, fields)
mail.setMessages(name, messages) mail.setMessages(name, messages)
end end
mail.show_inbox(name) mail.show_inbox(name)
return true
elseif fields.new then elseif fields.new then
mail.show_compose(name) mail.show_compose(name)
@ -423,17 +425,13 @@ function mail.handle_receivefields(player, formname, fields)
elseif fields.contacts then elseif fields.contacts then
mail.show_contacts(name) mail.show_contacts(name)
elseif fields.quit then
if minetest.get_modpath("unified_inventory") then
unified_inventory.set_inventory_formspec(player, "craft")
end
elseif fields.about then elseif fields.about then
mail.show_about(name) mail.show_about(name)
end end
return true return true
elseif formname == "mail:message" then elseif formname == "mail:message" then
local name = player:get_player_name() local name = player:get_player_name()
local messages = mail.getMessages(name) local messages = mail.getMessages(name)
@ -441,15 +439,19 @@ function mail.handle_receivefields(player, formname, fields)
if fields.back then if fields.back then
mail.show_inbox(name) mail.show_inbox(name)
return true -- don't uselessly set messages return true -- don't uselessly set messages
elseif fields.reply then elseif fields.reply then
local message = messages[selected_idxs.messages[name]] local message = messages[selected_idxs.messages[name]]
mail.reply(name, message) mail.reply(name, message)
elseif fields.replyall then elseif fields.replyall then
local message = messages[selected_idxs.messages[name]] local message = messages[selected_idxs.messages[name]]
mail.replyall(name, message) mail.replyall(name, message)
elseif fields.forward then elseif fields.forward then
local message = messages[selected_idxs.messages[name]] local message = messages[selected_idxs.messages[name]]
mail.forward(name, message.subject) mail.forward(name, message.subject)
elseif fields.delete then elseif fields.delete then
if messages[selected_idxs.messages[name]] then if messages[selected_idxs.messages[name]] then
table.remove(messages,selected_idxs.messages[name]) table.remove(messages,selected_idxs.messages[name])
@ -457,6 +459,7 @@ function mail.handle_receivefields(player, formname, fields)
end end
mail.show_inbox(name) mail.show_inbox(name)
end end
return true return true
elseif formname == "mail:compose" then elseif formname == "mail:compose" then
@ -499,10 +502,12 @@ function mail.handle_receivefields(player, formname, fields)
body = fields.body, body = fields.body,
} }
mail.show_select_contact(name, fields.to, fields.cc, fields.bcc) mail.show_select_contact(name, fields.to, fields.cc, fields.bcc)
elseif fields.cancel then elseif fields.cancel then
message_drafts[name] = nil message_drafts[name] = nil
mail.show_inbox(name) mail.show_inbox(name)
end end
return true return true
elseif formname == "mail:selectcontact" then elseif formname == "mail:selectcontact" then
@ -560,6 +565,7 @@ function mail.handle_receivefields(player, formname, fields)
end end
end end
end end
if update then if update then
mail.show_select_contact(name, draft.to, draft.cc, draft.bcc) mail.show_select_contact(name, draft.to, draft.cc, draft.bcc)
return true return true
@ -569,7 +575,9 @@ function mail.handle_receivefields(player, formname, fields)
for _,v in ipairs({"contacts","to","cc","bcc"}) do for _,v in ipairs({"contacts","to","cc","bcc"}) do
selected_idxs[v][name] = nil selected_idxs[v][name] = nil
end end
mail.show_compose(name, draft.to, draft.subject, draft.body, draft.cc, draft.bcc) mail.show_compose(name, draft.to, draft.subject, draft.body, draft.cc, draft.bcc)
return true return true
elseif formname == "mail:contacts" then elseif formname == "mail:contacts" then
@ -591,16 +599,18 @@ function mail.handle_receivefields(player, formname, fields)
contacts[selected_idxs.contacts[name]].note contacts[selected_idxs.contacts[name]].note
) )
end end
return true
elseif fields.new then elseif fields.new then
selected_idxs.contacts[name] = "#NEW#" selected_idxs.contacts[name] = "#NEW#"
mail.show_edit_contact(name, "", "") mail.show_edit_contact(name, "", "")
elseif fields.edit and selected_idxs.contacts[name] and contacts[selected_idxs.contacts[name]] then elseif fields.edit and selected_idxs.contacts[name] and contacts[selected_idxs.contacts[name]] then
mail.show_edit_contact( mail.show_edit_contact(
name, name,
contacts[selected_idxs.contacts[name]].name, contacts[selected_idxs.contacts[name]].name,
contacts[selected_idxs.contacts[name]].note contacts[selected_idxs.contacts[name]].note
) )
elseif fields.delete then elseif fields.delete then
if contacts[selected_idxs.contacts[name]] then if contacts[selected_idxs.contacts[name]] then
-- delete the contact and set the selected to the next in the list, -- delete the contact and set the selected to the next in the list,
@ -631,8 +641,10 @@ function mail.handle_receivefields(player, formname, fields)
elseif fields.back then elseif fields.back then
mail.show_inbox(name) mail.show_inbox(name)
end end
return true
elseif formname == "mail:editcontact" then elseif formname == "mail:editcontact" then
local name = player:get_player_name() local name = player:get_player_name()
local contacts = mail.getContacts(name) local contacts = mail.getContacts(name)
@ -645,9 +657,11 @@ function mail.handle_receivefields(player, formname, fields)
if #fields.name == 0 then if #fields.name == 0 then
mail.show_edit_contact(name, contact.name, fields.note, "empty") mail.show_edit_contact(name, contact.name, fields.note, "empty")
return true return true
elseif contacts[string.lower(fields.name)] ~= nil then elseif contacts[string.lower(fields.name)] ~= nil then
mail.show_edit_contact(name, contact.name, fields.note, "collision") mail.show_edit_contact(name, contact.name, fields.note, "collision")
return true return true
else else
contacts[string.lower(fields.name)] = contact contacts[string.lower(fields.name)] = contact
contacts[selected_idxs.contacts[name]] = nil contacts[selected_idxs.contacts[name]] = nil
@ -655,6 +669,7 @@ function mail.handle_receivefields(player, formname, fields)
end end
contact.name = fields.name contact.name = fields.name
contact.note = fields.note contact.note = fields.note
else else
local contact = { local contact = {
name = fields.name, name = fields.name,
@ -662,18 +677,19 @@ function mail.handle_receivefields(player, formname, fields)
} }
contacts[string.lower(contact.name)] = contact contacts[string.lower(contact.name)] = contact
end end
mail.setContacts(name, contacts) mail.setContacts(name, contacts)
mail.show_contacts(name) mail.show_contacts(name)
elseif fields.back then elseif fields.back then
mail.show_contacts(name) mail.show_contacts(name)
end end
return true
elseif fields.mail then elseif fields.mail then
mail.show_inbox(player:get_player_name()) mail.show_inbox(player:get_player_name())
else return true
return false
end end
end end