Mercurial > wow > itemauditor
diff Modules/Events.lua @ 39:003de902ae64
Implemented COD mail. This loses the ability to track postage, but that will be restored next.
author | Asa Ayers <Asa.Ayers@Gmail.com> |
---|---|
date | Mon, 19 Jul 2010 20:16:40 -0700 |
parents | e27d13095b49 |
children | 5273038322d7 |
line wrap: on
line diff
--- a/Modules/Events.lua Sun Jul 18 22:46:35 2010 -0700 +++ b/Modules/Events.lua Mon Jul 19 20:16:40 2010 -0700 @@ -1,8 +1,6 @@ local addonName, addonTable = ...; local addon = _G[addonName] -local utils = addonTable.utils - function addon:OnEnable() self:RegisterEvent("MAIL_SHOW") self:RegisterEvent("UNIT_SPELLCAST_START") @@ -20,12 +18,97 @@ function addon:MAIL_SHOW() self:Debug("MAIL_SHOW") + self:UnwatchBags() addon:UpdateCurrentInventory() self.lastMailScan = self:ScanMail() self:UnregisterEvent("MAIL_SHOW") self:RegisterEvent("MAIL_CLOSED") self:RegisterEvent("MAIL_INBOX_UPDATE") + + self:GenerateBlankOutbox() + + self:RegisterEvent("MAIL_SUCCESS") +end + +function addon:GenerateBlankOutbox() + self.mailOutbox = { + from = UnitName("player"), + to = "", + subject = "", + link = '', + count = 0, + COD = 0, + key = random(10000), + sent = 0, + } + + if self.db.factionrealm.outbound_cod[self.mailOutbox.key] ~= nil then + return self:GenerateBlankOutbox() + end +end + +local Orig_SendMail = SendMail + +function SendMail(recipient, subject, body, ...) + local self = ItemAuditor + self:GenerateBlankOutbox() + + self:Debug(format("[To: %s] [Subject: %s]", recipient, subject)) + + self.mailOutbox.COD = GetSendMailCOD() + + if self.mailOutbox.COD == 0 then + self:Debug("Non-COD mail") + return Orig_SendMail(recipient, subject, body, ...) + end + + subject = format("[IA: %s] %s", self.mailOutbox.key, subject) + self.mailOutbox.subject = subject + self.mailOutbox.to = recipient + + self.mailOutbox.count = 0 + local link + for index = 1, 12 do + local itemName, _, itemCount = GetSendMailItem(index) + local newLink = GetSendMailItemLink(index) + + if link == nil then + link = newLink + end + + if newLink ~= nil and self:GetIDFromLink(newLink) ~= self:GetIDFromLink(link) then + self:Print(self:GetIDFromLink(newLink)) + self:Print(self:GetIDFromLink(link)) + + self:Print("WARNING: ItemAuditor can't track COD mail with more than one item type.") + self:GenerateBlankOutbox() + return + end + self.mailOutbox.link = link + self.mailOutbox.count = self.mailOutbox.count + itemCount + + end + + -- self:MAIL_SUCCESS("Mock Success") + return Orig_SendMail(recipient, subject, body, ...) +end + +function addon:MAIL_SUCCESS(event) + + if self.mailOutbox.COD > 0 then + self:Debug(format("MAIL_SUCCESS %d [To: %s] [Subject: %s] [COD: %s]", self.mailOutbox.key, self.mailOutbox.to, self.mailOutbox.subject, self.mailOutbox.COD)) + + self.mailOutbox.sent = time() + self.db.factionrealm.outbound_cod[self.mailOutbox.key] = self.mailOutbox + end + + self.mailOutbox = { + to = "", + subject = "", + items = {}, + COD = 0, + } end function addon:MAIL_CLOSED() @@ -34,6 +117,7 @@ self:MAIL_INBOX_UPDATE() self:UnregisterEvent("MAIL_INBOX_UPDATE") self:RegisterEvent("MAIL_SHOW") + self:WatchBags() end local storedCountDiff @@ -41,6 +125,7 @@ self:Debug("MAIL_INBOX_UPDATE") local newScan = addon:ScanMail() local diff + for mailType, collection in pairs(self.lastMailScan) do newScan[mailType] = (newScan[mailType] or {}) for itemName, data in pairs(collection) do @@ -57,6 +142,12 @@ end if totalDiff ~= 0 then + if mailType == "CODPayment" then + local trackID + trackID, itemName= strsplit("|", itemName, 2) + self.db.factionrealm.outbound_cod[tonumber(trackID)] = nil + self:Debug("Removing COD Tracker: " .. trackID) + end self:SaveValue(itemName, totalDiff, storedCountDiff) storedCountDiff = 0 end