Mercurial > wow > itemauditor
changeset 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 |
files | Core.lua Modules/Debug.lua Modules/Events.lua Modules/Options.lua Modules/Tooltip.lua Modules/Utils.lua |
diffstat | 6 files changed, 145 insertions(+), 35 deletions(-) [+] |
line wrap: on
line diff
--- a/Core.lua Sun Jul 18 22:46:35 2010 -0700 +++ b/Core.lua Mon Jul 19 20:16:40 2010 -0700 @@ -3,9 +3,6 @@ local addon = _G[addonName] addonTable.ItemAuditor = addon -local utils = addonTable.utils - - local WHITE = "|cFFFFFFFF" local RED = "|cFFFF0000" local GREEN = "|cFF00FF00" @@ -34,6 +31,7 @@ factionrealm = { item_account = {}, items = {}, + outbound_cod = {}, }, } self.db = LibStub("AceDB-3.0"):New("ItemAuditorDB", DB_defaults, true) @@ -169,20 +167,23 @@ return {items = diff, money = moneyDiff} end - - +local inboundCOD = {} +local skipMail = {} function addon:ScanMail() local results = {} + local CODPaymentRegex = gsub(COD_PAYMENT, "%%s", "(.*)") + for mailIndex = 1, GetInboxNumItems() or 0 do - local sender, msgSubject, msgMoney, msgCOD, _, msgItem, _, _, msgText, _, isGM = select(3, GetInboxHeaderInfo(mailIndex)) + local sender, msgSubject, msgMoney, msgCOD, daysLeft, msgItem, _, _, msgText, _, isGM = select(3, GetInboxHeaderInfo(mailIndex)) local mailType = self:GetMailType(msgSubject) + local mailSignature = msgSubject .. '-' .. msgMoney .. '-' .. msgCOD .. '-' .. daysLeft + results[mailType] = (results[mailType] or {}) - if mailType == "NonAHMail" then - --[[ - and msgCOD > 0 - + if skipMail[mailSignature] ~= nil then + -- do nothing + elseif mailType == "NonAHMail" and msgCOD > 0 then mailType = 'COD' results[mailType] = (results[mailType] or {}) @@ -190,23 +191,58 @@ for itemIndex = 1, ATTACHMENTS_MAX_RECEIVE do local itemName, _, count, _, _= GetInboxItem(mailIndex, itemIndex) if itemName ~= nil then - itemTypdes[itemName] = (itemTypes[itemName] or 0) + count + itemTypes[itemName] = (itemTypes[itemName] or 0) + count end end if self:tcount(itemTypes) == 1 then for itemName, count in pairs(itemTypes) do - results[mailType][itemName] = (results[mailType][itemName] or 0) - msgCOD + results[mailType][itemName] = (results[mailType][itemName] or {total=0,count=0}) + results[mailType][itemName].total = results[mailType][itemName].total + msgCOD + + if inboundCOD[mailSignature] == nil then + results[mailType][itemName].count = results[mailType][itemName].count + count + inboundCOD[mailSignature] = (inboundCOD[mailSignature] or 0) + count + else + results[mailType][itemName].count = inboundCOD[mailSignature] + end + + end else self:Debug("Don't know what to do with more than one item type on COD mail.") end - ]] elseif mailType == "CODPayment" then - itemName = msgSubject:gsub(utils.SubjectPatterns[mailType], function(item) return item end) + -- /dump ItemAuditor.db.factionrealm.outbound_cod + self:Debug(msgSubject) + self:Debug(CODPaymentRegex) + local outboundSubject = select(3, msgSubject:find(CODPaymentRegex)) + local trackID + if outboundSubject ~= nil then + self:Debug(outboundSubject) + trackID = tonumber(select(3, outboundSubject:find('[[]IA: (%d*)[]]'))) + + self:Debug('COD ID: %s', trackID) + if trackID ~= nil then + local cod = self.db.factionrealm.outbound_cod[trackID] + if cod == nil then + skipMail[mailSignature] = true + self:Print("WARNING: {%s} has an invalid ItemAuditor tracking number.", msgSubject) + else + itemName = trackID .. "|" .. cod['link'] + + + results[mailType][itemName] = (results[mailType][itemName] or {total=0,count=0}) + results[mailType][itemName].total = results[mailType][itemName].total - msgMoney + results[mailType][itemName].count = results[mailType][itemName].count - cod.count + end + end + end - results[mailType][itemName] = (results[mailType][itemName] or {total=0,count=0}) - results[mailType][itemName].total = results[mailType][itemName].total - msgMoney + if trackID == nil then + skipMail[mailSignature] = true + self:Print("WARNING: {%s} is a COD payment but doesn't have an ItemAuditor tracking number.", msgSubject) + end elseif mailType == "AHSuccess" then local invoiceType, itemName, playerName, bid, buyout, deposit, consignment = GetInboxInvoiceInfo(mailIndex);
--- a/Modules/Debug.lua Sun Jul 18 22:46:35 2010 -0700 +++ b/Modules/Debug.lua Mon Jul 19 20:16:40 2010 -0700 @@ -1,9 +1,6 @@ local addonName, addonTable = ...; local addon = _G[addonName] -local utils = addonTable.utils - - function addon:Debug(msg, ...) msg = format(msg, ...) self:Log(msg, " |cffffff00DEBUG")
--- 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
--- a/Modules/Options.lua Sun Jul 18 22:46:35 2010 -0700 +++ b/Modules/Options.lua Mon Jul 19 20:16:40 2010 -0700 @@ -1,8 +1,6 @@ local addonName, addonTable = ...; local addon = _G[addonName] -local utils = addonTable.utils - local currentFaction = UnitFactionGroup("player") local AHFactions = { currentFaction, 'Neutral' } @@ -227,13 +225,6 @@ return AHFactions[ItemAuditor.db.char.ah] end -function addon:DumpInfo() - for itemName, value in pairsByKeys(self.db.factionrealm.item_account) do - self:Print(itemName .. ": " .. self:FormatMoney(value)) - end -end - - function addon:ShowOptionsGUI() InterfaceOptionsFrame_OpenToCategory(self.optionsFrame) end
--- a/Modules/Tooltip.lua Sun Jul 18 22:46:35 2010 -0700 +++ b/Modules/Tooltip.lua Mon Jul 19 20:16:40 2010 -0700 @@ -1,8 +1,6 @@ local addonName, addonTable = ...; local addon = _G[addonName] -local utils = addonTable.utils - local function ShowTipWithPricing(tip, link, num) if (link == nil) then return;
--- a/Modules/Utils.lua Sun Jul 18 22:46:35 2010 -0700 +++ b/Modules/Utils.lua Mon Jul 19 20:16:40 2010 -0700 @@ -1,9 +1,6 @@ local addonName, addonTable = ...; local addon = _G[addonName] -addonTable.utils = addon -IAUtils = addon - function addon:FormatMoney(copper, color, textOnly) color = color or "|cFFFFFFFF" local prefix = ""