117 lines
3.1 KiB
Lua
Executable File
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(...) |