c1_lua/lua/app/module/mail/mail_manager.lua
2025-09-28 16:09:37 +08:00

153 lines
4.3 KiB
Lua

local MailManager = class("MailManager", BaseModule)
function MailManager:showMailUI()
UIManager:showUI("app/ui/mail/mail_ui")
self:getMailList()
end
function MailManager:getMailList(force)
if not force and not DataManager.MailData:getNeedGetNewMail() then
return
end
if self.needUpdateMailSid then
self:unscheduleGlobal(self.needUpdateMailSid)
self.needUpdateMailSid = nil
end
self:sendMessage(ProtoMsgType.FromMsgEnum.MailListReq, {}, self.getMailListFinish)
end
function MailManager:getMailListFinish(result)
if self.needUpdateMailSid then
self:unscheduleGlobal(self.needUpdateMailSid)
self.needUpdateMailSid = nil
end
if result.status == 0 then
DataManager.MailData:init(result)
end
end
-- 触发服务器时间相关邮件
function MailManager:getTriggeredTimeMail()
self:sendMessage(ProtoMsgType.FromMsgEnum.MailCycleReq, {}, self.getTriggeredTimeMailFinish)
end
function MailManager:getTriggeredTimeMailFinish(result)
if result.status == 0 then
end
end
function MailManager:claimMail(ids)
if not ids then
for mailId, entity in pairs(DataManager.MailData:getMails()) do
if entity:getIsNormalMail() and entity:canClaim() then
if not ids then
ids = {}
end
table.insert(ids, mailId)
end
end
else
for _, id in ipairs(ids) do
local entity = DataManager.MailData:getMails()[id]
if not entity or not entity:canClaim() then
return
end
end
end
if not ids then
return
end
local reqData = {ids = ids}
self:sendMessage(ProtoMsgType.FromMsgEnum.MailExtractReq, reqData, self.claimMailFinish, BIReport.ITEM_GET_TYPE.MAIL)
end
function MailManager:claimMailFinish(result)
if result.status == 0 then
GFunc.showRewardBox(result.rewards)
local needDeleteIds = {}
for _, id in ipairs(result.ids) do
local entity = DataManager.MailData:getMails()[id]
entity:receivedThis()
if entity:getIsAdMail() or entity:getIsNormalMail() then
table.insert(needDeleteIds, id)
end
BIReport:postMailClaim(id)
end
if needDeleteIds[1] then
DataManager.MailData:deleteMail(needDeleteIds) -- 提前删除邮件,提升体验
self:deleteMail(needDeleteIds)
end
DataManager.MailData:refreshRedPoint()
DataManager.MailData:setDirty()
end
end
function MailManager:deleteMail(ids)
if not ids then
for mailId, entity in pairs(DataManager.MailData:getMails()) do
if entity:canDelete() then
if not ids then
ids = {}
end
table.insert(ids, mailId)
end
end
end
if not ids or not ids[1] then
return
end
local reqData = {ids = ids}
self:sendMessage(ProtoMsgType.FromMsgEnum.MailDeleteReq, reqData, self.deleteMailFinish)
end
function MailManager:deleteMailFinish(result)
if result.status then
DataManager.MailData:deleteMail(result.ids)
end
end
function MailManager:readMail(id)
local entity = DataManager.MailData:getMails()[id]
if not entity:notRead() then
UIManager:showUI("app/ui/mail/mail_detail_ui", {id = id})
return
end
local reqData = {ids = {id}}
self:sendMessage(ProtoMsgType.FromMsgEnum.MailReadReq, reqData, self.readMailFinish)
end
function MailManager:readMailFinish(result)
if result.status == 0 then
for _, id in ipairs(result.ids) do
DataManager.MailData:setMailRead(id)
BIReport:postMailOpen(id)
end
UIManager:showUI("app/ui/mail/mail_detail_ui", {id = result.ids[1]})
end
end
function MailManager:needUpdateMail()
if DataManager.MailData:getNeedGetNewMail() then
return
end
-- 收到推送后不一定是有新邮件,要去拉一下, 延迟是为了减轻服务器压力
if self.needUpdateMailSid then
self:unscheduleGlobal(self.needUpdateMailSid)
self.needUpdateMailSid = nil
end
self.needUpdateMailSid = self:performWithDelayGlobal(function()
self:getMailList(true)
end, math.random(1, 60))
end
return MailManager