153 lines
4.3 KiB
Lua
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 |