comparison 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
comparison
equal deleted inserted replaced
38:e27d13095b49 39:003de902ae64
1 local addonName, addonTable = ...; 1 local addonName, addonTable = ...;
2 local addon = _G[addonName] 2 local addon = _G[addonName]
3
4 local utils = addonTable.utils
5 3
6 function addon:OnEnable() 4 function addon:OnEnable()
7 self:RegisterEvent("MAIL_SHOW") 5 self:RegisterEvent("MAIL_SHOW")
8 self:RegisterEvent("UNIT_SPELLCAST_START") 6 self:RegisterEvent("UNIT_SPELLCAST_START")
9 addon:UpdateCurrentInventory() 7 addon:UpdateCurrentInventory()
18 addon:HideAllFrames() 16 addon:HideAllFrames()
19 end 17 end
20 18
21 function addon:MAIL_SHOW() 19 function addon:MAIL_SHOW()
22 self:Debug("MAIL_SHOW") 20 self:Debug("MAIL_SHOW")
21 self:UnwatchBags()
23 addon:UpdateCurrentInventory() 22 addon:UpdateCurrentInventory()
24 self.lastMailScan = self:ScanMail() 23 self.lastMailScan = self:ScanMail()
25 24
26 self:UnregisterEvent("MAIL_SHOW") 25 self:UnregisterEvent("MAIL_SHOW")
27 self:RegisterEvent("MAIL_CLOSED") 26 self:RegisterEvent("MAIL_CLOSED")
28 self:RegisterEvent("MAIL_INBOX_UPDATE") 27 self:RegisterEvent("MAIL_INBOX_UPDATE")
28
29 self:GenerateBlankOutbox()
30
31 self:RegisterEvent("MAIL_SUCCESS")
32 end
33
34 function addon:GenerateBlankOutbox()
35 self.mailOutbox = {
36 from = UnitName("player"),
37 to = "",
38 subject = "",
39 link = '',
40 count = 0,
41 COD = 0,
42 key = random(10000),
43 sent = 0,
44 }
45
46 if self.db.factionrealm.outbound_cod[self.mailOutbox.key] ~= nil then
47 return self:GenerateBlankOutbox()
48 end
49 end
50
51 local Orig_SendMail = SendMail
52
53 function SendMail(recipient, subject, body, ...)
54 local self = ItemAuditor
55 self:GenerateBlankOutbox()
56
57 self:Debug(format("[To: %s] [Subject: %s]", recipient, subject))
58
59 self.mailOutbox.COD = GetSendMailCOD()
60
61 if self.mailOutbox.COD == 0 then
62 self:Debug("Non-COD mail")
63 return Orig_SendMail(recipient, subject, body, ...)
64 end
65
66 subject = format("[IA: %s] %s", self.mailOutbox.key, subject)
67 self.mailOutbox.subject = subject
68 self.mailOutbox.to = recipient
69
70 self.mailOutbox.count = 0
71 local link
72 for index = 1, 12 do
73 local itemName, _, itemCount = GetSendMailItem(index)
74 local newLink = GetSendMailItemLink(index)
75
76 if link == nil then
77 link = newLink
78 end
79
80 if newLink ~= nil and self:GetIDFromLink(newLink) ~= self:GetIDFromLink(link) then
81 self:Print(self:GetIDFromLink(newLink))
82 self:Print(self:GetIDFromLink(link))
83
84 self:Print("WARNING: ItemAuditor can't track COD mail with more than one item type.")
85 self:GenerateBlankOutbox()
86 return
87 end
88 self.mailOutbox.link = link
89 self.mailOutbox.count = self.mailOutbox.count + itemCount
90
91 end
92
93 -- self:MAIL_SUCCESS("Mock Success")
94 return Orig_SendMail(recipient, subject, body, ...)
95 end
96
97 function addon:MAIL_SUCCESS(event)
98
99 if self.mailOutbox.COD > 0 then
100 self:Debug(format("MAIL_SUCCESS %d [To: %s] [Subject: %s] [COD: %s]", self.mailOutbox.key, self.mailOutbox.to, self.mailOutbox.subject, self.mailOutbox.COD))
101
102 self.mailOutbox.sent = time()
103 self.db.factionrealm.outbound_cod[self.mailOutbox.key] = self.mailOutbox
104 end
105
106 self.mailOutbox = {
107 to = "",
108 subject = "",
109 items = {},
110 COD = 0,
111 }
29 end 112 end
30 113
31 function addon:MAIL_CLOSED() 114 function addon:MAIL_CLOSED()
32 self:Debug("MAIL_CLOSED") 115 self:Debug("MAIL_CLOSED")
33 addon:UnregisterEvent("MAIL_CLOSED") 116 addon:UnregisterEvent("MAIL_CLOSED")
34 self:MAIL_INBOX_UPDATE() 117 self:MAIL_INBOX_UPDATE()
35 self:UnregisterEvent("MAIL_INBOX_UPDATE") 118 self:UnregisterEvent("MAIL_INBOX_UPDATE")
36 self:RegisterEvent("MAIL_SHOW") 119 self:RegisterEvent("MAIL_SHOW")
120 self:WatchBags()
37 end 121 end
38 122
39 local storedCountDiff 123 local storedCountDiff
40 function addon:MAIL_INBOX_UPDATE() 124 function addon:MAIL_INBOX_UPDATE()
41 self:Debug("MAIL_INBOX_UPDATE") 125 self:Debug("MAIL_INBOX_UPDATE")
42 local newScan = addon:ScanMail() 126 local newScan = addon:ScanMail()
43 local diff 127 local diff
128
44 for mailType, collection in pairs(self.lastMailScan) do 129 for mailType, collection in pairs(self.lastMailScan) do
45 newScan[mailType] = (newScan[mailType] or {}) 130 newScan[mailType] = (newScan[mailType] or {})
46 for itemName, data in pairs(collection) do 131 for itemName, data in pairs(collection) do
47 newScan[mailType][itemName] = (newScan[mailType][itemName] or {total=0,count=0}) 132 newScan[mailType][itemName] = (newScan[mailType][itemName] or {total=0,count=0})
48 local totalDiff = data.total - newScan[mailType][itemName].total 133 local totalDiff = data.total - newScan[mailType][itemName].total
55 if countDiff ~= 0 then 140 if countDiff ~= 0 then
56 storedCountDiff = countDiff 141 storedCountDiff = countDiff
57 end 142 end
58 143
59 if totalDiff ~= 0 then 144 if totalDiff ~= 0 then
145 if mailType == "CODPayment" then
146 local trackID
147 trackID, itemName= strsplit("|", itemName, 2)
148 self.db.factionrealm.outbound_cod[tonumber(trackID)] = nil
149 self:Debug("Removing COD Tracker: " .. trackID)
150 end
60 self:SaveValue(itemName, totalDiff, storedCountDiff) 151 self:SaveValue(itemName, totalDiff, storedCountDiff)
61 storedCountDiff = 0 152 storedCountDiff = 0
62 end 153 end
63 154
64 end 155 end