vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
--[[
Name: SpecialEvents-Mail-2.0
Revision: $Rev: 9518 $
Author: Tekkub Stoutwrithe (tekkub@gmail.com)
Website: http://wiki.wowace.com/index.php/SpecialEvents_Addon
Documentation: http://wiki.wowace.com/index.php/SpecialEvents-Mail-2.0
SVN: svn://svn.wowace.com/root/trunk/SpecialEventsEmbed/SpecialEvents-Mail-2.0
Description: Special events for mail (received, auction notices, etc)
Dependencies: AceLibrary, AceEvent-2.0
]]


local vmajor, vminor = "SpecialEvents-Mail-2.0", "$Revision: 9518 $"

if not AceLibrary then error(vmajor .. " requires AceLibrary.") end
if not AceLibrary:HasInstance("AceEvent-2.0") then error(vmajor .. " requires AceEvent-2.0.") end
if not AceLibrary:IsNewVersion(vmajor, vminor) then return end

local lib = {}
AceLibrary("AceEvent-2.0"):embed(lib)

local closedelay = 5


-- Activate a new instance of this library
function activate(self, oldLib, oldDeactivate)
        if oldLib then self.vars = oldLib.vars
        else self.vars = {} end

        self:RegisterEvent("PLAYER_ENTERING_WORLD")
        self:RegisterEvent("MAIL_CLOSED")
        self:RegisterEvent("UPDATE_PENDING_MAIL")
        self:RegisterEvent("CHAT_MSG_SYSTEM")

        if oldDeactivate then oldDeactivate(oldLib) end
end


--------------------------------
--      Tracking methods      --
--------------------------------

function lib:PLAYER_ENTERING_WORLD()
        self.vars.zoneevent = true
end


function lib:MAIL_CLOSED()
        self.vars.lastclose = GetTime()
end


function lib:UPDATE_PENDING_MAIL()
        if self.vars.lastclose and (self.vars.lastclose + closedelay) > GetTime() then self.vars.ignorenext = true end

        if self.vars.zoneevent then
                self.vars.zoneevent = nil
                self:TriggerEvent("SpecialEvents_MailInit")
                return
        end

        if self.vars.ignorenext then
                self.vars.ignorenext = nil
                return
        end

        self:TriggerEvent("SpecialEvents_MailReceived")
end


-- Events that don't fire UPDATE_PENDING_MAIL like they should
local brokenevents = {
        [ERR_AUCTION_WON_S]     = false,
        [ERR_AUCTION_SOLD_S]    = false,
        [ERR_AUCTION_OUTBID_S]  = true,
        [ERR_AUCTION_EXPIRED_S] = false,
        [ERR_AUCTION_REMOVED_S] = false,
}
local eventnames = {
        [ERR_AUCTION_WON_S]     = "WON",
        [ERR_AUCTION_SOLD_S]    = "SOLD",
        [ERR_AUCTION_OUTBID_S]  = "OUTBID",
        [ERR_AUCTION_EXPIRED_S] = "EXPIRED",
        [ERR_AUCTION_REMOVED_S] = "REMOVED",
}
local aucstr = {}
for i in pairs(brokenevents) do aucstr[i] = string.gsub(i, "%%[^%s]+", "(.+)") end

function lib:CHAT_MSG_SYSTEM(msg)
        if not msg then return end

        for i,searchstr in pairs(aucstr) do
                local _, _, item = string.find(msg, searchstr)
                if item then
                        self:TriggerEvent("SpecialEvents_AHAlert", eventnames[i], item)
                        if brokenevents[i] then
                                self:TriggerEvent("SpecialEvents_MailReceived")
                                return
                        end
                end
        end
end


--------------------------------
--      Load this bitch!      --
--------------------------------
AceLibrary:Register(lib, vmajor, vminor, activate)