zz_Mailbox/core.lua

117 lines
3.1 KiB
Lua
Executable File

local addonName, addon = ...
local childName = addon['childName']
local child = addon[childName]
local events = child['events']
local db, dbf, dbr,dbp, scanned, realm
LibStub("zzHelper"):Embed(child)
local function prepareDB()
local faction = UnitFactionGroup('player')
realm = GetRealmName()
local player = UnitName("player")
addon['db']['profile'][childName] = addon['db']['profile'][childName] or {}
db = addon['db']['profile'][childName]
db[faction] = db[faction] or {}
dbf = db[faction]
dbf[realm] = dbf[realm] or {}
dbr = dbf[realm]
dbr[player] = dbr[player] or {
['mail'] = 0,
['mailunread'] = 0
}
dbp = dbr[player]
child['db'] = db
addon['callbacks']:Fire(format("Init%s", childName))
end
local function mailupdate()
if(not scanned) then
return dbp['mailunread'], dbp['mail']
else
local cur, tot = GetInboxNumItems()
dbp['mail'] = tot
return dbp['mailunread'], tot
end
end
local function mail()
local packageIcon, stationeryIcon, sender, subject, money, CODAmount, daysLeft, hasItem, wasRead, wasReturned, textCreated, canReply, isGM
local index,newunread = 0,0
local unread, tot = mailupdate()
subject = "start"
while(subject) do
index = index + 1
packageIcon, stationeryIcon, sender, subject, money, CODAmount, daysLeft, hasItem, wasRead, wasReturned, textCreated, canReply, isGM = GetInboxHeaderInfo(index)
if(subject and not wasRead) then
newunread = newunread + 1
if(GetInboxNumItems() == 0 and scanned) then
newunread = 0
end
end
end
if(not(dbp['mail'] > 0 and GetInboxNumItems() == 0)) then
dbp['mailunread'] = newunread
end
if(dbp['newmail']) then
if(HasNewMail() and tot == 0) then
tot = #{GetLatestThreeSenders()}
if(scanned and select(2,GetInboxNumItems()) == 0) then
tot = 0
end
end
if(dbp['mailunread'] == 0) then
dbp['mailunread'] = 1
end
if(tot == 0) then
return tot
else
return (dbp['mailunread'] .. "/" .. tot)
end
else
return tot
end
end
local function iterateMail()
for i = 1, GetInboxNumItems() do
if(not select(9,GetInboxHeaderInfo(i))) then
return 1
end
end
return
end
function events:MAIL_SHOW(event)
dbp['newmail'] = HasNewMail()
if(MailFrame:IsVisible() and GetInboxNumItems() > 0) then
dbp['newmail'] = iterateMail()
end
child:OnText(childName, child:colorize(mail(),dbp['newmail'] and "00ff00" or "ffffff"))
if(event == "MAIL_SHOW") then
scanned = true
elseif(event == "UPDATE_PENDING_MAIL") then
scanned = false
end
end
events.MAIL_CLOSED = events.MAIL_SHOW
child['specs'] = {
['name'] = childName,
['sv'] = true,
['cfg'] = true,
['cfgReset'] = prepareDB,
['ldb'] = child['ldb'],
['defaults'] = {
['profile'] = {
[childName] = {}
}
}
}
local function MFrame(event, self, mode, num)
events:MAIL_SHOW("MAIL_SHOW")
end
function events:PLAYER_ENTERING_WORLD()
if(not realm) then
prepareDB()
else
child:UnregisterEvent('PLAYER_ENTERING_WORLD')
child:RegisterEvent({'MAIL_INBOX_UPDATE', 'UPDATE_PENDING_MAIL'}, events.MAIL_SHOW)
child:RegisterOpen(17, MFrame)
events.MAIL_SHOW()
end
end
child:NewAddOn(...)