|
Zerotorescue@0
|
1 local MailOpener = LibStub("AceAddon-3.0"):GetAddon("MailOpener");
|
|
Zerotorescue@31
|
2 local mod = MailOpener:NewModule("OpenAll", "AceEvent-3.0", "AceTimer-3.0");
|
|
Zerotorescue@31
|
3
|
|
Zerotorescue@31
|
4 mod.moduleDescription = "The actual mail opening initiated by the core.";
|
|
Zerotorescue@31
|
5 mod.moduleRequired = true;
|
|
Zerotorescue@0
|
6
|
|
Zerotorescue@3
|
7 --[[
|
|
Zerotorescue@3
|
8 Dev notes:
|
|
Zerotorescue@3
|
9 When shift clicking the Open All button it should override all filters.
|
|
Zerotorescue@3
|
10 ]]
|
|
Zerotorescue@3
|
11
|
|
Zerotorescue@42
|
12 local MAIL_ITEM_INDEX, mailTimer, inventoryFull, inventoryFullSoundPlayed, inventoryFullSoundPlayedThisVisit, opening, lastSync, numCurrentMail, numHiddenMail, continue;
|
|
Zerotorescue@0
|
13
|
|
Zerotorescue@31
|
14 function mod:OnInitialize()
|
|
Zerotorescue@0
|
15 local defaults = {
|
|
Zerotorescue@0
|
16 profile = {
|
|
Zerotorescue@0
|
17 speed = 0.05,
|
|
Zerotorescue@0
|
18 keepFreeSpace = 0,
|
|
Zerotorescue@0
|
19 filter = {
|
|
Zerotorescue@0
|
20 AH = {
|
|
Zerotorescue@0
|
21 canceled = true,
|
|
Zerotorescue@0
|
22 expired = true,
|
|
Zerotorescue@0
|
23 outbid = true,
|
|
Zerotorescue@0
|
24 success = true,
|
|
Zerotorescue@0
|
25 won = true,
|
|
Zerotorescue@0
|
26 },
|
|
Zerotorescue@0
|
27 normalAttachments = false,
|
|
Zerotorescue@0
|
28 normalMoney = true,
|
|
Zerotorescue@0
|
29 },
|
|
Zerotorescue@0
|
30 },
|
|
Zerotorescue@0
|
31 };
|
|
Zerotorescue@0
|
32
|
|
Zerotorescue@0
|
33 -- Register our saved variables NameSpace
|
|
Zerotorescue@0
|
34 self.db = MailOpener.db:RegisterNamespace("OpenAll", defaults);
|
|
Zerotorescue@0
|
35 end
|
|
Zerotorescue@0
|
36
|
|
Zerotorescue@31
|
37 function mod:OnEnable()
|
|
Zerotorescue@0
|
38 self:RegisterEvent("MAIL_SHOW");
|
|
Zerotorescue@42
|
39
|
|
Zerotorescue@0
|
40 if not self.btnOpenAll then
|
|
Zerotorescue@0
|
41 -- Open all button
|
|
Zerotorescue@0
|
42 local button = CreateFrame("Button", "btnMailOpenerOpenAll", InboxFrame, "UIPanelButtonTemplate")
|
|
Zerotorescue@0
|
43 button:SetText("Open all")
|
|
Zerotorescue@0
|
44 button:SetHeight(26)
|
|
Zerotorescue@0
|
45 button:SetWidth(120)
|
|
Zerotorescue@0
|
46 button:SetPoint("BOTTOM", InboxFrame, "CENTER", -10, -165)
|
|
Zerotorescue@31
|
47 button:SetScript("OnClick", function() mod:Open(true) end)
|
|
Zerotorescue@0
|
48
|
|
Zerotorescue@0
|
49 self.btnOpenAll = button;
|
|
Zerotorescue@0
|
50 end
|
|
Zerotorescue@0
|
51
|
|
Zerotorescue@0
|
52 self.btnOpenAll:Show();
|
|
Zerotorescue@0
|
53
|
|
Zerotorescue@0
|
54 if not self.timeLeftFrame then
|
|
Zerotorescue@0
|
55 -- If the timeLeftFrame doesn't exist we will have to build it
|
|
Zerotorescue@0
|
56
|
|
Zerotorescue@0
|
57 self:Debug("Building text frame");
|
|
Zerotorescue@0
|
58
|
|
Zerotorescue@0
|
59 local frame = CreateFrame("Button", "MailOpenerTimeLeftButton", InboxFrame);
|
|
Zerotorescue@0
|
60
|
|
Zerotorescue@0
|
61 -- Mail counter
|
|
Zerotorescue@0
|
62 frame.text = frame:CreateFontString("MailOpenerTimeLeftFrameMailCount", "OVERLAY", "GameFontHighlight");
|
|
Zerotorescue@0
|
63 frame.text:SetPoint("CENTER", MailFrame, "TOPLEFT", 40, -35);
|
|
Zerotorescue@0
|
64
|
|
Zerotorescue@0
|
65 -- Long time left indicator
|
|
Zerotorescue@0
|
66 frame.smallText = frame:CreateFontString("MailOpenerTimeLeftFrameTimeRemaining", "OVERLAY", "GameFontNormal");
|
|
Zerotorescue@0
|
67 frame.smallText:SetFont(GameFontHighlight:GetFont(), 11, "OUTLINE");
|
|
Zerotorescue@0
|
68 frame.smallText:SetPoint("TOPLEFT", MailFrame, "TOPLEFT", 75, -38);
|
|
Zerotorescue@0
|
69 frame.smallText:SetWidth(270);
|
|
Zerotorescue@0
|
70 frame.smallText:SetJustifyH("LEFT");
|
|
Zerotorescue@0
|
71 frame.smallText:SetJustifyV("MIDDLE");
|
|
Zerotorescue@0
|
72
|
|
Zerotorescue@0
|
73 frame:SetPoint("TOPLEFT", MailFrame, "TOPLEFT", 75, -38);
|
|
Zerotorescue@0
|
74 frame:SetWidth(270);
|
|
Zerotorescue@0
|
75 frame:SetHeight(35);
|
|
Zerotorescue@0
|
76 frame:SetScript("OnClick", function(self)
|
|
Zerotorescue@0
|
77 local timeRemainingUntillOpened = frame.smallText:GetText();
|
|
Zerotorescue@0
|
78 if timeRemainingUntillOpened then
|
|
Zerotorescue@0
|
79 MailOpener.currentPopupContents = "|cffffd700" .. timeRemainingUntillOpened .. "|r";
|
|
Zerotorescue@0
|
80
|
|
Zerotorescue@0
|
81 StaticPopup_Show("MailOpenerCopyWindow");
|
|
Zerotorescue@0
|
82 end
|
|
Zerotorescue@0
|
83 end);
|
|
Zerotorescue@0
|
84
|
|
Zerotorescue@0
|
85 self.timeLeftFrame = frame;
|
|
Zerotorescue@0
|
86 end
|
|
Zerotorescue@0
|
87
|
|
Zerotorescue@0
|
88 self.timeLeftFrame:Show();
|
|
Zerotorescue@0
|
89
|
|
Zerotorescue@3
|
90 -- Go through all children of the mail frame to find QA's element and hide it
|
|
Zerotorescue@42
|
91 -- There's no other way to do this because QuickAuctions has a local referrence to it (not as a property of the object like most other frames)
|
|
Zerotorescue@0
|
92 local kids = { MailFrame:GetChildren() };
|
|
Zerotorescue@0
|
93
|
|
Zerotorescue@0
|
94 for _, child in ipairs(kids) do
|
|
Zerotorescue@0
|
95 if child and child.text then
|
|
Zerotorescue@0
|
96 child.text:Hide();
|
|
Zerotorescue@0
|
97 end
|
|
Zerotorescue@0
|
98 end
|
|
Zerotorescue@0
|
99
|
|
Zerotorescue@0
|
100 -- If we were toggling this module on while the mailbox is opened we must register all events again
|
|
Zerotorescue@0
|
101 if MailFrame:IsVisible() then
|
|
Zerotorescue@0
|
102 self:MAIL_SHOW();
|
|
Zerotorescue@0
|
103 end
|
|
Zerotorescue@0
|
104 end
|
|
Zerotorescue@0
|
105
|
|
Zerotorescue@31
|
106 function mod:OnDisable()
|
|
Zerotorescue@0
|
107 self:UnregisterEvent("MAIL_SHOW");
|
|
Zerotorescue@0
|
108
|
|
Zerotorescue@0
|
109 if self.btnOpenAll then
|
|
Zerotorescue@0
|
110 self.btnOpenAll:Hide();
|
|
Zerotorescue@0
|
111 end
|
|
Zerotorescue@0
|
112
|
|
Zerotorescue@0
|
113 if self.timeLeftFrame then
|
|
Zerotorescue@0
|
114 self.timeLeftFrame:Hide();
|
|
Zerotorescue@0
|
115 end
|
|
Zerotorescue@0
|
116
|
|
Zerotorescue@0
|
117 if MailOpener.PostalEnabled then
|
|
Zerotorescue@0
|
118 -- Enable Postal's openers again
|
|
Zerotorescue@0
|
119
|
|
Zerotorescue@0
|
120 MailOpener:TogglePostalModule("OpenAll", true);
|
|
Zerotorescue@0
|
121 MailOpener:TogglePostalModule("Select", true);
|
|
Zerotorescue@0
|
122 end
|
|
Zerotorescue@0
|
123
|
|
Zerotorescue@0
|
124 -- Go through all children of the mail frame to find QA's elements and SHOW these
|
|
Zerotorescue@42
|
125 -- There's no other way to do this because QuickAuctions has a local referrence to it (not as a property of the object like most other frames)
|
|
Zerotorescue@0
|
126 local kids = { MailFrame:GetChildren() };
|
|
Zerotorescue@0
|
127
|
|
Zerotorescue@0
|
128 for _, child in ipairs(kids) do
|
|
Zerotorescue@0
|
129 if child and child.text then
|
|
Zerotorescue@0
|
130 child.text:Show();
|
|
Zerotorescue@0
|
131 end
|
|
Zerotorescue@0
|
132 end
|
|
Zerotorescue@0
|
133
|
|
Zerotorescue@0
|
134 self:Stop();
|
|
Zerotorescue@0
|
135 end
|
|
Zerotorescue@0
|
136
|
|
Zerotorescue@31
|
137 function mod:MAIL_SHOW()
|
|
Zerotorescue@0
|
138 self:Debug("MAIL_SHOW");
|
|
Zerotorescue@0
|
139
|
|
Zerotorescue@0
|
140 self:StopOpening(false);
|
|
Zerotorescue@42
|
141
|
|
Zerotorescue@42
|
142 inventoryFullSoundPlayedThisVisit = nil;
|
|
Zerotorescue@0
|
143
|
|
Zerotorescue@0
|
144 if MailOpener.PostalEnabled then
|
|
Zerotorescue@0
|
145 -- Disable Postal's openers so we can do it ourselves
|
|
Zerotorescue@0
|
146
|
|
Zerotorescue@0
|
147 MailOpener:TogglePostalModule("OpenAll", false);
|
|
Zerotorescue@0
|
148 MailOpener:TogglePostalModule("Select", false);
|
|
Zerotorescue@0
|
149 end
|
|
Zerotorescue@0
|
150
|
|
Zerotorescue@0
|
151 -- Keep an eye for closing of the mailbox
|
|
Zerotorescue@0
|
152 self:RegisterEvent("MAIL_CLOSED", "Stop");
|
|
Zerotorescue@0
|
153 self:RegisterEvent("PLAYER_LEAVING_WORLD", "Stop");
|
|
Zerotorescue@0
|
154
|
|
Zerotorescue@0
|
155 -- Look if the mailbox is full
|
|
Zerotorescue@0
|
156 self:RegisterEvent("UI_ERROR_MESSAGE");
|
|
Zerotorescue@0
|
157 -- Only look again after bags updated
|
|
Zerotorescue@0
|
158 self:RegisterEvent("BAG_UPDATE");
|
|
Zerotorescue@0
|
159
|
|
Zerotorescue@0
|
160 -- We need to know when to start opening
|
|
Zerotorescue@0
|
161 self:RegisterMessage("MO_OPEN_MAIL", "Open");
|
|
Zerotorescue@0
|
162 self:RegisterMessage("MO_SERVER_SYNCED");
|
|
Zerotorescue@3
|
163 self:RegisterMessage("MO_MAIL_EMPTIED");
|
|
Zerotorescue@0
|
164
|
|
Zerotorescue@0
|
165 self:CancelTimer(self.tmrTimeRemaining, true);
|
|
Zerotorescue@0
|
166 self.tmrTimeRemaining = self:ScheduleRepeatingTimer("UpdateTimer", 1);
|
|
Zerotorescue@0
|
167 self:UpdateTimer();
|
|
Zerotorescue@0
|
168 end
|
|
Zerotorescue@0
|
169
|
|
Zerotorescue@31
|
170 function mod:Stop()
|
|
Zerotorescue@0
|
171 self:Debug("Stop");
|
|
Zerotorescue@0
|
172
|
|
Zerotorescue@0
|
173 -- We shutdown, so nothing to do when the mailbox is closed anymore
|
|
Zerotorescue@0
|
174 self:UnregisterEvent("MAIL_CLOSED");
|
|
Zerotorescue@0
|
175 self:UnregisterEvent("PLAYER_LEAVING_WORLD");
|
|
Zerotorescue@0
|
176
|
|
Zerotorescue@0
|
177 -- We care about a full inventory just a little
|
|
Zerotorescue@0
|
178 self:UnregisterEvent("UI_ERROR_MESSAGE");
|
|
Zerotorescue@0
|
179 self:UnregisterEvent("BAG_UPDATE");
|
|
Zerotorescue@0
|
180
|
|
Zerotorescue@0
|
181 -- We no longer care
|
|
Zerotorescue@0
|
182 self:UnregisterMessage("MO_OPEN_MAIL");
|
|
Zerotorescue@0
|
183 self:UnregisterMessage("MO_SERVER_SYNCED");
|
|
Zerotorescue@3
|
184 self:UnregisterMessage("MO_MAIL_EMPTIED");
|
|
Zerotorescue@0
|
185
|
|
Zerotorescue@0
|
186 self:CancelTimer(self.tmrMailOpener, true);
|
|
Zerotorescue@0
|
187 self:CancelTimer(self.tmrTimeRemaining, true);
|
|
Zerotorescue@0
|
188
|
|
Zerotorescue@0
|
189 self:SetOpeningStatus(false);
|
|
Zerotorescue@0
|
190 end
|
|
Zerotorescue@0
|
191
|
|
Zerotorescue@31
|
192 function mod:MO_SERVER_SYNCED()
|
|
Zerotorescue@0
|
193 self:Debug("MO_SERVER_SYNCED");
|
|
Zerotorescue@0
|
194
|
|
Zerotorescue@31
|
195 -- Stop opening now to prevent the opener from continueing while BeanCounter is counting
|
|
Zerotorescue@2
|
196 self:StopOpening(false);
|
|
Zerotorescue@2
|
197
|
|
Zerotorescue@0
|
198 lastSync = GetTime();
|
|
Zerotorescue@0
|
199
|
|
Zerotorescue@2
|
200 self:UpdateMailCount();
|
|
Zerotorescue@2
|
201 end
|
|
Zerotorescue@2
|
202
|
|
Zerotorescue@31
|
203 function mod:MO_MAIL_EMPTIED()
|
|
Zerotorescue@3
|
204 -- A mail has been processed so we can process the next
|
|
Zerotorescue@2
|
205 continue = true;
|
|
Zerotorescue@2
|
206
|
|
Zerotorescue@3
|
207 self:UpdateTimer();
|
|
Zerotorescue@2
|
208 end
|
|
Zerotorescue@2
|
209
|
|
Zerotorescue@31
|
210 function mod:UpdateMailCount()
|
|
Zerotorescue@0
|
211 local numItems, totalItems = GetInboxNumItems();
|
|
Zerotorescue@0
|
212
|
|
Zerotorescue@0
|
213 numCurrentMail = numItems;
|
|
Zerotorescue@0
|
214 numHiddenMail = ( totalItems - numItems );
|
|
Zerotorescue@0
|
215 end
|
|
Zerotorescue@0
|
216
|
|
Zerotorescue@31
|
217 function mod:BAG_UPDATE()
|
|
Zerotorescue@0
|
218 -- If the bags are updated we should check if the inventory is full again
|
|
Zerotorescue@0
|
219 inventoryFull = false;
|
|
Zerotorescue@1
|
220 -- Replay sound
|
|
Zerotorescue@1
|
221 inventoryFullSoundPlayed = nil;
|
|
Zerotorescue@0
|
222 end
|
|
Zerotorescue@0
|
223
|
|
Zerotorescue@0
|
224 -- We registered this event to look for the inventory full error message because this is faster than counting the amount of items in the inventory all the time
|
|
Zerotorescue@31
|
225 function mod:UI_ERROR_MESSAGE(e, errorMessage)
|
|
Zerotorescue@0
|
226 if errorMessage == ERR_INV_FULL then
|
|
Zerotorescue@0
|
227 -- Inventory is full.
|
|
Zerotorescue@0
|
228
|
|
Zerotorescue@0
|
229 if not inventoryFull then
|
|
Zerotorescue@0
|
230 inventoryFull = true;
|
|
Zerotorescue@0
|
231
|
|
Zerotorescue@0
|
232 -- Play the sound
|
|
Zerotorescue@42
|
233 if MailOpener.db.profile.notifications.bagsFullSound and (not MailOpener.db.profile.notifications.bagsFullSoundOnlyOnce or not inventoryFullSoundPlayed) and (not MailOpener.db.profile.notifications.bagsFullSoundOnlyOncePerMailboxVisit or not inventoryFullSoundPlayedThisVisit) then
|
|
Zerotorescue@0
|
234 PlaySoundFile(MailOpener.db.profile.notifications.bagsFullSoundFile);
|
|
Zerotorescue@0
|
235 inventoryFullSoundPlayed = true;
|
|
Zerotorescue@42
|
236 inventoryFullSoundPlayedThisVisit = true;
|
|
Zerotorescue@0
|
237 end
|
|
Zerotorescue@0
|
238 end
|
|
Zerotorescue@0
|
239
|
|
Zerotorescue@0
|
240 -- Continue opening mail (we still want to open gold mail)
|
|
Zerotorescue@0
|
241 continue = true;
|
|
Zerotorescue@0
|
242 elseif errorMessage == ERR_ITEM_MAX_COUNT or errorMessage == ERR_MAIL_DATABASE_ERROR then
|
|
Zerotorescue@0
|
243 -- Can't carry more of this item OR mail database error
|
|
Zerotorescue@0
|
244
|
|
Zerotorescue@0
|
245 -- Continue opening mail (we still want to retrieve other items or gold)
|
|
Zerotorescue@0
|
246 continue = true;
|
|
Zerotorescue@0
|
247 end
|
|
Zerotorescue@0
|
248 end
|
|
Zerotorescue@0
|
249
|
|
Zerotorescue@31
|
250 function mod:Open(forced)
|
|
Zerotorescue@0
|
251 self:Debug("Open");
|
|
Zerotorescue@0
|
252
|
|
Zerotorescue@0
|
253 if not opening or forced == true then
|
|
Zerotorescue@0
|
254 local numItems, totalItems = GetInboxNumItems();
|
|
Zerotorescue@0
|
255 -- Start at the end, add one because OpenNext will take it away again
|
|
Zerotorescue@0
|
256 local newMailItemIndex = ( ( numItems or 0 ) + 1 );
|
|
Zerotorescue@0
|
257
|
|
Zerotorescue@0
|
258 if newMailItemIndex > 1 then
|
|
Zerotorescue@0
|
259 self:Debug("Open succes");
|
|
Zerotorescue@0
|
260
|
|
Zerotorescue@0
|
261 -- Stop the previous opening and restart
|
|
Zerotorescue@0
|
262 if forced == true then
|
|
Zerotorescue@0
|
263 self:StopOpening(false); -- this is not a "simple" stop, so also reset inventory full warning
|
|
Zerotorescue@0
|
264 else
|
|
Zerotorescue@0
|
265 self:StopOpening(true); -- forced is false - automated action - simple reset, skip inventory full reset to avoid sound spam
|
|
Zerotorescue@0
|
266 end
|
|
Zerotorescue@0
|
267
|
|
Zerotorescue@0
|
268 -- Update the caret
|
|
Zerotorescue@0
|
269 MAIL_ITEM_INDEX = newMailItemIndex;
|
|
Zerotorescue@0
|
270
|
|
Zerotorescue@0
|
271 -- We're now going to be busy again
|
|
Zerotorescue@0
|
272 self:SetOpeningStatus(true);
|
|
Zerotorescue@0
|
273
|
|
Zerotorescue@0
|
274 -- Open the next mail in line
|
|
Zerotorescue@0
|
275 self:OpenNext();
|
|
Zerotorescue@0
|
276 else
|
|
Zerotorescue@0
|
277 if MailOpener.db.profile.notifications.mailboxIsEmpty then
|
|
Zerotorescue@0
|
278 print("|cffff0000There is currently no mail available.|r");
|
|
Zerotorescue@0
|
279 end
|
|
Zerotorescue@0
|
280
|
|
Zerotorescue@0
|
281 self:Debug("MO_OPEN_COMPLETE");
|
|
Zerotorescue@0
|
282
|
|
Zerotorescue@0
|
283 -- Report that we're all done
|
|
Zerotorescue@0
|
284 self:SendMessage("MO_OPEN_COMPLETE");
|
|
Zerotorescue@0
|
285 end
|
|
Zerotorescue@0
|
286 end
|
|
Zerotorescue@0
|
287 end
|
|
Zerotorescue@0
|
288
|
|
Zerotorescue@0
|
289 -- Return the type of mail a message subject is
|
|
Zerotorescue@0
|
290 local knownAHSubjectPatterns = {
|
|
Zerotorescue@0
|
291 canceled = AUCTION_REMOVED_MAIL_SUBJECT:replace("%s", ""),
|
|
Zerotorescue@0
|
292 expired = AUCTION_EXPIRED_MAIL_SUBJECT:replace("%s", ""),
|
|
Zerotorescue@0
|
293 outbid = AUCTION_OUTBID_MAIL_SUBJECT:replace("%s", ""),
|
|
Zerotorescue@0
|
294 success = AUCTION_SOLD_MAIL_SUBJECT:replace("%s", ""),
|
|
Zerotorescue@0
|
295 won = AUCTION_WON_MAIL_SUBJECT:replace("%s", ""),
|
|
Zerotorescue@0
|
296 };
|
|
Zerotorescue@31
|
297 function mod:GetAuctionMailType(subject)
|
|
Zerotorescue@0
|
298 if subject then
|
|
Zerotorescue@0
|
299 -- Check if any of our patterns match, sorted by most likely matches first (if one is true the rest shouldn't be evaluated)
|
|
Zerotorescue@0
|
300 if subject:find(knownAHSubjectPatterns.expired) then
|
|
Zerotorescue@0
|
301 return "expired";
|
|
Zerotorescue@0
|
302 elseif subject:find(knownAHSubjectPatterns.success) then
|
|
Zerotorescue@0
|
303 return "success";
|
|
Zerotorescue@0
|
304 elseif subject:find(knownAHSubjectPatterns.won) then
|
|
Zerotorescue@0
|
305 return "won";
|
|
Zerotorescue@0
|
306 elseif subject:find(knownAHSubjectPatterns.canceled) then
|
|
Zerotorescue@0
|
307 return "canceled";
|
|
Zerotorescue@0
|
308 elseif subject:find(knownAHSubjectPatterns.outbid) then
|
|
Zerotorescue@0
|
309 return "outbid";
|
|
Zerotorescue@0
|
310 end
|
|
Zerotorescue@0
|
311 end
|
|
Zerotorescue@0
|
312
|
|
Zerotorescue@0
|
313 return; -- not auction mail
|
|
Zerotorescue@0
|
314 end
|
|
Zerotorescue@0
|
315
|
|
Zerotorescue@31
|
316 function mod:OpenMail(index)
|
|
Zerotorescue@0
|
317 if index > 0 then
|
|
Zerotorescue@0
|
318 -- LUA arrays start at 1, so mail with index 0 doesn't exist, so we're finished
|
|
Zerotorescue@0
|
319
|
|
Zerotorescue@0
|
320 local sender, subject, gold, cod, _, items, _, _, _, _, isGM = select(3, GetInboxHeaderInfo(index));
|
|
Zerotorescue@0
|
321 local auctionMailType = self:GetAuctionMailType(subject);
|
|
Zerotorescue@0
|
322
|
|
Zerotorescue@0
|
323 if isGM then
|
|
Zerotorescue@0
|
324 -- GM Mail
|
|
Zerotorescue@0
|
325 if MailOpener.db.profile.notifications.skipped.all and MailOpener.db.profile.notifications.skipped.GMMail then
|
|
Zerotorescue@0
|
326 print("Skipping " .. index .. ": " .. subject .. " (GM mail)");
|
|
Zerotorescue@0
|
327 end
|
|
Zerotorescue@0
|
328
|
|
Zerotorescue@0
|
329 self:OpenNext();
|
|
Zerotorescue@0
|
330
|
|
Zerotorescue@0
|
331 return;
|
|
Zerotorescue@0
|
332 elseif cod and cod > 0 then
|
|
Zerotorescue@0
|
333 -- Cost on delivery
|
|
Zerotorescue@0
|
334 if MailOpener.db.profile.notifications.skipped.all and MailOpener.db.profile.notifications.skipped.COD then
|
|
Zerotorescue@0
|
335 print("Skipping " .. index .. ": " .. subject .. " (C.O.D.)");
|
|
Zerotorescue@0
|
336 end
|
|
Zerotorescue@0
|
337
|
|
Zerotorescue@0
|
338 self:OpenNext();
|
|
Zerotorescue@0
|
339
|
|
Zerotorescue@0
|
340 return;
|
|
Zerotorescue@0
|
341 elseif ((gold and gold > 0) or (items and items > 0)) then
|
|
Zerotorescue@0
|
342 -- Mail with some sort of attachments
|
|
Zerotorescue@0
|
343
|
|
Zerotorescue@0
|
344 local slotsAvailable = 0;
|
|
Zerotorescue@0
|
345 if self.db.profile.keepFreeSpace > 0 then
|
|
Zerotorescue@0
|
346 for bag = 0, 4 do
|
|
Zerotorescue@0
|
347 local numberOfFreeSlots = GetContainerNumFreeSlots(bag);
|
|
Zerotorescue@0
|
348 slotsAvailable = ( slotsAvailable + numberOfFreeSlots );
|
|
Zerotorescue@0
|
349 end
|
|
Zerotorescue@0
|
350 end
|
|
Zerotorescue@0
|
351
|
|
Zerotorescue@0
|
352 if inventoryFull and not MailOpener.db.profile.general.continueOpeningStackableItems and items and items > 0 then
|
|
Zerotorescue@0
|
353 if MailOpener.db.profile.notifications.skipped.all and MailOpener.db.profile.notifications.skipped.inventoryFull then
|
|
Zerotorescue@0
|
354 print("Skipping " .. index .. ": " .. subject .. " (inventory is full)");
|
|
Zerotorescue@0
|
355 end
|
|
Zerotorescue@0
|
356
|
|
Zerotorescue@0
|
357 self:OpenNext();
|
|
Zerotorescue@0
|
358
|
|
Zerotorescue@0
|
359 return;
|
|
Zerotorescue@0
|
360 elseif self.db.profile.keepFreeSpace > 0 and items and ( slotsAvailable - items ) < self.db.profile.keepFreeSpace then
|
|
Zerotorescue@0
|
361 if MailOpener.db.profile.notifications.skipped.all and MailOpener.db.profile.notifications.skipped.keepFreeSpaceLimit then
|
|
Zerotorescue@0
|
362 print("Skipping " .. index .. ": " .. subject .. " (keep free space limit)");
|
|
Zerotorescue@0
|
363 end
|
|
Zerotorescue@0
|
364
|
|
Zerotorescue@0
|
365 self:OpenNext();
|
|
Zerotorescue@0
|
366
|
|
Zerotorescue@0
|
367 return;
|
|
Zerotorescue@0
|
368 else
|
|
Zerotorescue@0
|
369 -- This string will hold the mailtype, MailOpener.db.profile.notifications.skipped/processed[mailType] will be checked if this should be announced
|
|
Zerotorescue@0
|
370 local mailType = "other";
|
|
Zerotorescue@0
|
371
|
|
Zerotorescue@0
|
372 if not auctionMailType then
|
|
Zerotorescue@0
|
373 -- This is a normal mail
|
|
Zerotorescue@0
|
374
|
|
Zerotorescue@0
|
375 if gold and gold > 0 then
|
|
Zerotorescue@0
|
376 mailType = "normalGoldMail";
|
|
Zerotorescue@0
|
377 elseif items and items > 0 then
|
|
Zerotorescue@0
|
378 mailType = "normalItemsMail";
|
|
Zerotorescue@0
|
379 end
|
|
Zerotorescue@0
|
380 else
|
|
Zerotorescue@0
|
381 -- This is an auction house mail
|
|
Zerotorescue@0
|
382
|
|
Zerotorescue@0
|
383 mailType = "AH" .. auctionMailType;
|
|
Zerotorescue@0
|
384 end
|
|
Zerotorescue@0
|
385
|
|
Zerotorescue@0
|
386 if not self.db.profile.filter.normalMoney and mailType == "normalGoldMail" then
|
|
Zerotorescue@0
|
387 if MailOpener.db.profile.notifications.skipped.all and MailOpener.db.profile.notifications.skipped[mailType] then
|
|
Zerotorescue@0
|
388 print("Skipping " .. index .. ": " .. subject .. " (normal mail with gold)");
|
|
Zerotorescue@0
|
389 end
|
|
Zerotorescue@0
|
390
|
|
Zerotorescue@0
|
391 self:OpenNext();
|
|
Zerotorescue@0
|
392
|
|
Zerotorescue@0
|
393 return;
|
|
Zerotorescue@0
|
394 elseif not self.db.profile.filter.normalAttachments and mailType == "normalItemsMail" then
|
|
Zerotorescue@0
|
395 if MailOpener.db.profile.notifications.skipped.all and MailOpener.db.profile.notifications.skipped[mailType] then
|
|
Zerotorescue@0
|
396 print("Skipping " .. index .. ": " .. subject .. " (normal mail with attachments)");
|
|
Zerotorescue@0
|
397 end
|
|
Zerotorescue@0
|
398
|
|
Zerotorescue@0
|
399 self:OpenNext();
|
|
Zerotorescue@0
|
400
|
|
Zerotorescue@0
|
401 return;
|
|
Zerotorescue@0
|
402 elseif not self.db.profile.filter.AH.expired and mailType == "AHexpired" then
|
|
Zerotorescue@0
|
403 if MailOpener.db.profile.notifications.skipped.all and MailOpener.db.profile.notifications.skipped[mailType] then
|
|
Zerotorescue@0
|
404 print("Skipping " .. index .. ": " .. subject .. " (expired auction)");
|
|
Zerotorescue@0
|
405 end
|
|
Zerotorescue@0
|
406
|
|
Zerotorescue@0
|
407 self:OpenNext();
|
|
Zerotorescue@0
|
408
|
|
Zerotorescue@0
|
409 return;
|
|
Zerotorescue@0
|
410 elseif not self.db.profile.filter.AH.success and mailType == "AHsuccess" then
|
|
Zerotorescue@0
|
411 if MailOpener.db.profile.notifications.skipped.all and MailOpener.db.profile.notifications.skipped[mailType] then
|
|
Zerotorescue@0
|
412 print("Skipping " .. index .. ": " .. subject .. " (successful auction)");
|
|
Zerotorescue@0
|
413 end
|
|
Zerotorescue@0
|
414
|
|
Zerotorescue@0
|
415 self:OpenNext();
|
|
Zerotorescue@0
|
416
|
|
Zerotorescue@0
|
417 return;
|
|
Zerotorescue@0
|
418 elseif not self.db.profile.filter.AH.won and mailType == "AHwon" then
|
|
Zerotorescue@0
|
419 if MailOpener.db.profile.notifications.skipped.all and MailOpener.db.profile.notifications.skipped[mailType] then
|
|
Zerotorescue@0
|
420 print("Skipping " .. index .. ": " .. subject .. " (auction won)");
|
|
Zerotorescue@0
|
421 end
|
|
Zerotorescue@0
|
422
|
|
Zerotorescue@0
|
423 self:OpenNext();
|
|
Zerotorescue@0
|
424
|
|
Zerotorescue@0
|
425 return;
|
|
Zerotorescue@0
|
426 elseif not self.db.profile.filter.AH.canceled and mailType == "AHcanceled" then
|
|
Zerotorescue@0
|
427 if MailOpener.db.profile.notifications.skipped.all and MailOpener.db.profile.notifications.skipped[mailType] then
|
|
Zerotorescue@0
|
428 print("Skipping " .. index .. ": " .. subject .. " (canceled auction)");
|
|
Zerotorescue@0
|
429 end
|
|
Zerotorescue@0
|
430
|
|
Zerotorescue@0
|
431 self:OpenNext();
|
|
Zerotorescue@0
|
432
|
|
Zerotorescue@0
|
433 return;
|
|
Zerotorescue@0
|
434 elseif not self.db.profile.filter.AH.outbid and mailType == "AHoutbid" then
|
|
Zerotorescue@0
|
435 if MailOpener.db.profile.notifications.skipped.all and MailOpener.db.profile.notifications.skipped[mailType] then
|
|
Zerotorescue@0
|
436 print("Skipping " .. index .. ": " .. subject .. " (outbid on auction)");
|
|
Zerotorescue@0
|
437 end
|
|
Zerotorescue@0
|
438
|
|
Zerotorescue@0
|
439 self:OpenNext();
|
|
Zerotorescue@0
|
440
|
|
Zerotorescue@0
|
441 return;
|
|
Zerotorescue@0
|
442 else
|
|
Zerotorescue@0
|
443 continue = false;
|
|
Zerotorescue@3
|
444
|
|
Zerotorescue@11
|
445 self:Debug("MO_OPENING_MAIL (#" .. index .. ")");
|
|
Zerotorescue@0
|
446
|
|
Zerotorescue@2
|
447 -- Notifiy other modules of opening
|
|
Zerotorescue@2
|
448 self:SendMessage("MO_OPENING_MAIL");
|
|
Zerotorescue@2
|
449
|
|
Zerotorescue@0
|
450 -- Open current mail
|
|
Zerotorescue@0
|
451 AutoLootMailItem(index);
|
|
Zerotorescue@0
|
452
|
|
Zerotorescue@0
|
453 if MailOpener.db.profile.notifications.processed.all and MailOpener.db.profile.notifications.processed[mailType] then
|
|
Zerotorescue@0
|
454 if gold and gold > 0 then
|
|
Zerotorescue@0
|
455 print("Processing " .. index .. ": " .. subject .. " (" .. MailOpener:FormatMoney(gold) .. ")");
|
|
Zerotorescue@0
|
456 else
|
|
Zerotorescue@0
|
457 print("Processing " .. index .. ": " .. subject);
|
|
Zerotorescue@0
|
458 end
|
|
Zerotorescue@0
|
459 end
|
|
Zerotorescue@0
|
460
|
|
Zerotorescue@0
|
461 -- And prepare for the next
|
|
Zerotorescue@0
|
462 self.tmrMailOpener = self:ScheduleTimer("OpenNext", self.db.profile.speed);
|
|
Zerotorescue@0
|
463 end
|
|
Zerotorescue@0
|
464 end
|
|
Zerotorescue@0
|
465 else
|
|
Zerotorescue@0
|
466 -- Unknown, probably just text
|
|
Zerotorescue@0
|
467 if MailOpener.db.profile.notifications.skipped.all and MailOpener.db.profile.notifications.skipped.other then
|
|
Zerotorescue@0
|
468 if subject then
|
|
Zerotorescue@0
|
469 print("Skipping " .. index .. ": " .. subject);
|
|
Zerotorescue@0
|
470 else
|
|
Zerotorescue@0
|
471 print("Skipping " .. index);
|
|
Zerotorescue@0
|
472 end
|
|
Zerotorescue@0
|
473 end
|
|
Zerotorescue@0
|
474
|
|
Zerotorescue@0
|
475 self:OpenNext();
|
|
Zerotorescue@0
|
476 end
|
|
Zerotorescue@0
|
477 else
|
|
Zerotorescue@0
|
478 -- Finished!
|
|
Zerotorescue@0
|
479 if MailOpener.db.profile.notifications.finishedCurrentBatch then
|
|
Zerotorescue@0
|
480 print("Finished opening the current batch.");
|
|
Zerotorescue@0
|
481 end
|
|
Zerotorescue@0
|
482
|
|
Zerotorescue@0
|
483 self:SetOpeningStatus(false);
|
|
Zerotorescue@3
|
484
|
|
Zerotorescue@0
|
485 self:Debug("MO_OPEN_COMPLETE");
|
|
Zerotorescue@0
|
486
|
|
Zerotorescue@0
|
487 -- Report that we're all done
|
|
Zerotorescue@0
|
488 self:SendMessage("MO_OPEN_COMPLETE");
|
|
Zerotorescue@0
|
489 end
|
|
Zerotorescue@0
|
490 end
|
|
Zerotorescue@0
|
491
|
|
Zerotorescue@31
|
492 function mod:OpenNext()
|
|
Zerotorescue@0
|
493 if continue then
|
|
Zerotorescue@0
|
494 -- If the previous mail was opened successful, open the next
|
|
Zerotorescue@0
|
495
|
|
Zerotorescue@0
|
496 -- Next mail in line
|
|
Zerotorescue@0
|
497 MAIL_ITEM_INDEX = ( MAIL_ITEM_INDEX - 1 );
|
|
Zerotorescue@0
|
498
|
|
Zerotorescue@0
|
499 -- Open it
|
|
Zerotorescue@0
|
500 self:OpenMail(MAIL_ITEM_INDEX);
|
|
Zerotorescue@0
|
501 else
|
|
Zerotorescue@0
|
502 -- Try again at the next interval
|
|
Zerotorescue@0
|
503
|
|
Zerotorescue@0
|
504 self.tmrMailOpener = self:ScheduleTimer("OpenNext", self.db.profile.speed);
|
|
Zerotorescue@0
|
505 end
|
|
Zerotorescue@0
|
506 end
|
|
Zerotorescue@0
|
507
|
|
Zerotorescue@31
|
508 function mod:Continue()
|
|
Zerotorescue@2
|
509 continue = true;
|
|
Zerotorescue@2
|
510 self:OpenNext();
|
|
Zerotorescue@2
|
511 end
|
|
Zerotorescue@2
|
512
|
|
Zerotorescue@0
|
513 local mailRemainingPatterns = {
|
|
Zerotorescue@3
|
514 minutesSeconds = "|cffffffff%d|r/|cffffffff%d|r mail remaining, opening everything will take about |cffffffff%d|r minutes and |cffffffff%d|r seconds (next refresh in |cffffffff%d|r seconds).";
|
|
Zerotorescue@3
|
515 minutes = "|cffffffff%d|r/|cffffffff%d|r mail remaining, opening everything will take about |cffffffff%d|r minutes (next refresh in |cffffffff%d|r seconds).";
|
|
Zerotorescue@3
|
516 seconds = "|cffffffff%d|r/|cffffffff%d|r mail remaining, opening everything will take about |cffffffff%d|r seconds (next refresh in |cffffffff%d|r seconds).";
|
|
Zerotorescue@3
|
517 nextRefresh = "|cffffffff%d|r/|cffffffff%d|r mail remaining, next refresh in |cffffffff%d|r seconds.";
|
|
Zerotorescue@0
|
518 waitingBatch = "|cffffffff%d|r/|cffffffff%d|r mail remaining - waiting for something from the current batch to be opened...";
|
|
Zerotorescue@0
|
519 waitingSync = "|cffffffff%d|r/|cffffffff%d|r mail remaining - waiting for the next mailbox refresh...";
|
|
Zerotorescue@0
|
520 soon = "|cffffffff%d|r/|cffffffff%d|r mail remaining - everything will be opened soon...";
|
|
Zerotorescue@0
|
521 };
|
|
Zerotorescue@0
|
522
|
|
Zerotorescue@31
|
523 function mod:UpdateTimer()
|
|
Zerotorescue@0
|
524 if lastSync then
|
|
Zerotorescue@3
|
525 self:UpdateMailCount();
|
|
Zerotorescue@3
|
526
|
|
Zerotorescue@0
|
527 -- Calculate the total amount of mail waiting
|
|
Zerotorescue@0
|
528 local numTotalMail = ( numHiddenMail + numCurrentMail );
|
|
Zerotorescue@0
|
529
|
|
Zerotorescue@0
|
530 -- Resize the font based on mail left so the counter always fits perfectly
|
|
Zerotorescue@0
|
531 if numTotalMail < 100 then
|
|
Zerotorescue@0
|
532 self.timeLeftFrame.text:SetFont(GameFontHighlight:GetFont(), 30, "THICKOUTLINE");
|
|
Zerotorescue@0
|
533 elseif numTotalMail < 1000 then
|
|
Zerotorescue@0
|
534 self.timeLeftFrame.text:SetFont(GameFontHighlight:GetFont(), 24, "THICKOUTLINE");
|
|
Zerotorescue@0
|
535 else
|
|
Zerotorescue@0
|
536 self.timeLeftFrame.text:SetFont(GameFontHighlight:GetFont(), 18, "THICKOUTLINE");
|
|
Zerotorescue@0
|
537 end
|
|
Zerotorescue@0
|
538 self.timeLeftFrame.text:SetText(numTotalMail);
|
|
Zerotorescue@3
|
539
|
|
Zerotorescue@3
|
540 -- Calculate the next server sync based on the last server sync plus sync interval
|
|
Zerotorescue@3
|
541 local nextSync = ( lastSync + 61 );
|
|
Zerotorescue@0
|
542
|
|
Zerotorescue@3
|
543 -- Calculate the timer remaining untill the next sync
|
|
Zerotorescue@3
|
544 local timeRemaining = floor( nextSync - GetTime() );
|
|
Zerotorescue@3
|
545
|
|
Zerotorescue@3
|
546 if numHiddenMail > 0 or timeRemaining > 0 then
|
|
Zerotorescue@3
|
547 -- If there is still mail being hidden or the timer is still know, display stuff
|
|
Zerotorescue@0
|
548
|
|
Zerotorescue@0
|
549 -- If the next sync was already due, our nextSync calculation was wrong and we must wait a little longer (lag?)
|
|
Zerotorescue@0
|
550 local syncTimeOut = false;
|
|
Zerotorescue@0
|
551 -- If time remaining is below 0, next sync should be soon
|
|
Zerotorescue@0
|
552 if timeRemaining < 0 then
|
|
Zerotorescue@0
|
553 timeRemaining = 0;
|
|
Zerotorescue@0
|
554 syncTimeOut = true;
|
|
Zerotorescue@0
|
555 end
|
|
Zerotorescue@0
|
556
|
|
Zerotorescue@0
|
557 -- Calculate the amount of server syncs required to open all mail
|
|
Zerotorescue@0
|
558 local syncsRequired = ceil( numHiddenMail / 50 );
|
|
Zerotorescue@0
|
559 -- Calculate the time required to execute all these syncs
|
|
Zerotorescue@0
|
560 local timeRequired = ( ( syncsRequired - 1 ) * 61 ) + timeRemaining;
|
|
Zerotorescue@0
|
561
|
|
Zerotorescue@0
|
562 local minutes = floor( timeRequired / 60 );
|
|
Zerotorescue@0
|
563 local seconds = floor( timeRequired % 60 );
|
|
Zerotorescue@0
|
564
|
|
Zerotorescue@0
|
565 local remainingText;
|
|
Zerotorescue@0
|
566 if syncTimeOut then
|
|
Zerotorescue@3
|
567 -- Previous server sync was expected earlier, notify user
|
|
Zerotorescue@3
|
568
|
|
Zerotorescue@0
|
569 if numCurrentMail == 50 then
|
|
Zerotorescue@3
|
570 -- Sync couldn't occur because we were still waiting for the current batch to be opened
|
|
Zerotorescue@0
|
571 remainingText = format(mailRemainingPatterns.waitingBatch, numCurrentMail, numTotalMail);
|
|
Zerotorescue@0
|
572 else
|
|
Zerotorescue@0
|
573 remainingText = format(mailRemainingPatterns.waitingSync, numCurrentMail, numTotalMail);
|
|
Zerotorescue@0
|
574 end
|
|
Zerotorescue@3
|
575 elseif numHiddenMail == 0 then
|
|
Zerotorescue@3
|
576 -- If no hidden mail is remaining, only show the timer for as long as we can be sure
|
|
Zerotorescue@3
|
577
|
|
Zerotorescue@3
|
578 remainingText = format(mailRemainingPatterns.nextRefresh, numCurrentMail, numTotalMail, timeRemaining);
|
|
Zerotorescue@0
|
579 elseif minutes ~= 0 then
|
|
Zerotorescue@0
|
580 if seconds ~= 0 then
|
|
Zerotorescue@0
|
581 remainingText = format(mailRemainingPatterns.minutesSeconds, numCurrentMail, numTotalMail, minutes, seconds, timeRemaining);
|
|
Zerotorescue@0
|
582 else
|
|
Zerotorescue@0
|
583 remainingText = format(mailRemainingPatterns.minutes, numCurrentMail, numTotalMail, minutes, timeRemaining);
|
|
Zerotorescue@0
|
584 end
|
|
Zerotorescue@0
|
585 elseif seconds ~= 0 then
|
|
Zerotorescue@0
|
586 remainingText = format(mailRemainingPatterns.seconds, numCurrentMail, numTotalMail, seconds, timeRemaining);
|
|
Zerotorescue@0
|
587 else
|
|
Zerotorescue@0
|
588 remainingText = format(mailRemainingPatterns.soon, numCurrentMail, numTotalMail);
|
|
Zerotorescue@0
|
589 end
|
|
Zerotorescue@0
|
590
|
|
Zerotorescue@0
|
591 self.timeLeftFrame.smallText:SetText(remainingText);
|
|
Zerotorescue@3
|
592 else
|
|
Zerotorescue@0
|
593 self.timeLeftFrame.smallText:SetText("");
|
|
Zerotorescue@0
|
594 end
|
|
Zerotorescue@0
|
595 end
|
|
Zerotorescue@0
|
596 end
|
|
Zerotorescue@0
|
597
|
|
Zerotorescue@31
|
598 function mod:StopOpening(simple)
|
|
Zerotorescue@2
|
599 -- Stop opener timer
|
|
Zerotorescue@2
|
600 self:CancelTimer(self.tmrMailOpener, true);
|
|
Zerotorescue@2
|
601
|
|
Zerotorescue@0
|
602 if not simple then
|
|
Zerotorescue@39
|
603 -- A simple stop is an automated stop, an advanced stop is one manually or after a sever sync
|
|
Zerotorescue@2
|
604
|
|
Zerotorescue@0
|
605 -- Recheck inventory full
|
|
Zerotorescue@0
|
606 inventoryFull = false;
|
|
Zerotorescue@0
|
607 -- Replay sound
|
|
Zerotorescue@0
|
608 inventoryFullSoundPlayed = nil;
|
|
Zerotorescue@0
|
609 end
|
|
Zerotorescue@0
|
610
|
|
Zerotorescue@0
|
611 -- Reset opener position
|
|
Zerotorescue@0
|
612 MAIL_ITEM_INDEX = 0;
|
|
Zerotorescue@0
|
613 -- Stopped opening, so allow to continue
|
|
Zerotorescue@0
|
614 continue = true;
|
|
Zerotorescue@31
|
615
|
|
Zerotorescue@0
|
616 self:SetOpeningStatus(false);
|
|
Zerotorescue@0
|
617 end
|
|
Zerotorescue@0
|
618
|
|
Zerotorescue@31
|
619 function mod:SetOpeningStatus(openingStatus)
|
|
Zerotorescue@0
|
620 opening = openingStatus;
|
|
Zerotorescue@0
|
621
|
|
Zerotorescue@0
|
622 if openingStatus then
|
|
Zerotorescue@0
|
623 self.btnOpenAll:SetText("Opening...");
|
|
Zerotorescue@0
|
624 else
|
|
Zerotorescue@0
|
625 self.btnOpenAll:SetText("Open all");
|
|
Zerotorescue@0
|
626 end
|
|
Zerotorescue@0
|
627 end
|
|
Zerotorescue@0
|
628
|
|
Zerotorescue@31
|
629 function mod:GetOptionsGroup()
|
|
Zerotorescue@0
|
630 local configGroup = {
|
|
Zerotorescue@0
|
631 order = 300,
|
|
Zerotorescue@0
|
632 type = "group",
|
|
Zerotorescue@0
|
633 name = "Open All",
|
|
Zerotorescue@0
|
634 desc = "Change open all settings.",
|
|
Zerotorescue@0
|
635 args = {
|
|
Zerotorescue@0
|
636 filters = {
|
|
Zerotorescue@0
|
637 order = 10,
|
|
Zerotorescue@0
|
638 type = "group",
|
|
Zerotorescue@0
|
639 inline = true,
|
|
Zerotorescue@0
|
640 name = "Filters",
|
|
Zerotorescue@0
|
641 args = {
|
|
Zerotorescue@0
|
642 description = {
|
|
Zerotorescue@0
|
643 order = 10,
|
|
Zerotorescue@0
|
644 type = "description",
|
|
Zerotorescue@0
|
645 name = "Toggle which mail the opener should autoloot.",
|
|
Zerotorescue@0
|
646 },
|
|
Zerotorescue@0
|
647 AHHeader = {
|
|
Zerotorescue@0
|
648 order = 15,
|
|
Zerotorescue@0
|
649 type = "header",
|
|
Zerotorescue@0
|
650 name = "Auction House Mail",
|
|
Zerotorescue@0
|
651 },
|
|
Zerotorescue@0
|
652 canceled = {
|
|
Zerotorescue@0
|
653 order = 20,
|
|
Zerotorescue@0
|
654 type = "toggle",
|
|
Zerotorescue@0
|
655 name = "Open all |cfffed000auction canceled|r mail",
|
|
Zerotorescue@0
|
656 desc = "Automatically loot all auction canceled mails from the auction house.",
|
|
Zerotorescue@0
|
657 set = function(i, v) self.db.profile.filter.AH.canceled = v; end,
|
|
Zerotorescue@0
|
658 get = function() return self.db.profile.filter.AH.canceled; end,
|
|
Zerotorescue@0
|
659 width = "double",
|
|
Zerotorescue@0
|
660 },
|
|
Zerotorescue@0
|
661 expired = {
|
|
Zerotorescue@0
|
662 order = 21,
|
|
Zerotorescue@0
|
663 type = "toggle",
|
|
Zerotorescue@0
|
664 name = "Open all |cfffed000auction expired|r mail",
|
|
Zerotorescue@0
|
665 desc = "Automatically loot all auction canceled mails from the auction house.",
|
|
Zerotorescue@0
|
666 set = function(i, v) self.db.profile.filter.AH.expired = v; end,
|
|
Zerotorescue@0
|
667 get = function() return self.db.profile.filter.AH.expired; end,
|
|
Zerotorescue@0
|
668 width = "double",
|
|
Zerotorescue@0
|
669 },
|
|
Zerotorescue@0
|
670 outbid = {
|
|
Zerotorescue@0
|
671 order = 22,
|
|
Zerotorescue@0
|
672 type = "toggle",
|
|
Zerotorescue@0
|
673 name = "Open all |cfffed000outbid on|r mail",
|
|
Zerotorescue@0
|
674 desc = "Automatically loot all auction outbid mails from the auction house.",
|
|
Zerotorescue@0
|
675 set = function(i, v) self.db.profile.filter.AH.outbid = v; end,
|
|
Zerotorescue@0
|
676 get = function() return self.db.profile.filter.AH.outbid; end,
|
|
Zerotorescue@0
|
677 width = "double",
|
|
Zerotorescue@0
|
678 },
|
|
Zerotorescue@0
|
679 success = {
|
|
Zerotorescue@0
|
680 order = 23,
|
|
Zerotorescue@0
|
681 type = "toggle",
|
|
Zerotorescue@0
|
682 name = "Open all |cfffed000auction successful|r mail",
|
|
Zerotorescue@0
|
683 desc = "Automatically loot all auction successful mails from the auction house.",
|
|
Zerotorescue@0
|
684 set = function(i, v) self.db.profile.filter.AH.success = v; end,
|
|
Zerotorescue@0
|
685 get = function() return self.db.profile.filter.AH.success; end,
|
|
Zerotorescue@0
|
686 width = "double",
|
|
Zerotorescue@0
|
687 },
|
|
Zerotorescue@0
|
688 won = {
|
|
Zerotorescue@0
|
689 order = 24,
|
|
Zerotorescue@0
|
690 type = "toggle",
|
|
Zerotorescue@0
|
691 name = "Open all |cfffed000auction won|r mail",
|
|
Zerotorescue@0
|
692 desc = "Automatically loot all auction won mails from the auction house.",
|
|
Zerotorescue@0
|
693 set = function(i, v) self.db.profile.filter.AH.won = v; end,
|
|
Zerotorescue@0
|
694 get = function() return self.db.profile.filter.AH.won; end,
|
|
Zerotorescue@0
|
695 width = "double",
|
|
Zerotorescue@0
|
696 },
|
|
Zerotorescue@0
|
697 normalHeader = {
|
|
Zerotorescue@0
|
698 order = 30,
|
|
Zerotorescue@0
|
699 type = "header",
|
|
Zerotorescue@0
|
700 name = "Remaining Mail",
|
|
Zerotorescue@0
|
701 },
|
|
Zerotorescue@0
|
702 normalAttachments = {
|
|
Zerotorescue@0
|
703 order = 40,
|
|
Zerotorescue@0
|
704 type = "toggle",
|
|
Zerotorescue@0
|
705 name = "Other mail with |cfffed000attachments|r",
|
|
Zerotorescue@0
|
706 desc = "Automatically loot all mails with attachments not sent by any of the above sources.",
|
|
Zerotorescue@0
|
707 set = function(i, v) self.db.profile.filter.normalAttachments = v; end,
|
|
Zerotorescue@0
|
708 get = function() return self.db.profile.filter.normalAttachments; end,
|
|
Zerotorescue@0
|
709 width = "double",
|
|
Zerotorescue@0
|
710 },
|
|
Zerotorescue@0
|
711 normalMoney = {
|
|
Zerotorescue@0
|
712 order = 50,
|
|
Zerotorescue@0
|
713 type = "toggle",
|
|
Zerotorescue@0
|
714 name = "Other mail with |cfffed000gold|r",
|
|
Zerotorescue@0
|
715 desc = "Automatically loot all mails with gold not sent by any of the above sources.",
|
|
Zerotorescue@0
|
716 set = function(i, v) self.db.profile.filter.normalMoney = v; end,
|
|
Zerotorescue@0
|
717 get = function() return self.db.profile.filter.normalMoney; end,
|
|
Zerotorescue@0
|
718 width = "double",
|
|
Zerotorescue@0
|
719 },
|
|
Zerotorescue@0
|
720 },
|
|
Zerotorescue@0
|
721 },
|
|
Zerotorescue@0
|
722 -- Continuous opening config inline group
|
|
Zerotorescue@0
|
723 continuousOpening = {
|
|
Zerotorescue@0
|
724 order = 20,
|
|
Zerotorescue@0
|
725 type = "group",
|
|
Zerotorescue@0
|
726 inline = true,
|
|
Zerotorescue@0
|
727 name = "Opening Interval",
|
|
Zerotorescue@0
|
728 args = {
|
|
Zerotorescue@0
|
729 description = {
|
|
Zerotorescue@0
|
730 order = 10,
|
|
Zerotorescue@0
|
731 type = "description",
|
|
Zerotorescue@0
|
732 name = function()
|
|
Zerotorescue@0
|
733 local defaultString = "The default behaviour for opening mail is to only do so right after new mail was received from the server. If you close the mailbox or your inventory is full before everything is opened you will have to click the open all button manually or wait for a next mailbox refresh.\n\n";
|
|
Zerotorescue@0
|
734
|
|
Zerotorescue@0
|
735 local currentSettings = "";
|
|
Zerotorescue@0
|
736 if MailOpener.db.profile.general.continueOpening then
|
|
Zerotorescue@0
|
737 currentSettings = currentSettings .. "Mail Opener will |cff00ff00continue|r to attempt to open the remaining mail every |cfffed000" .. MailOpener.db.profile.general.waitTime .. " seconds|r. ";
|
|
Zerotorescue@0
|
738 else
|
|
Zerotorescue@0
|
739 currentSettings = currentSettings .. "Mail Opener will |cffff0000not|r continue to attempt to open the remaining mail and will only start opening when new mail has just been received from the server. ";
|
|
Zerotorescue@0
|
740 end
|
|
Zerotorescue@0
|
741 currentSettings = currentSettings .. "The first batch after each server refresh will be opened after waiting |cfffed000" .. MailOpener.db.profile.general.initialDelay .. " seconds|r.";
|
|
Zerotorescue@0
|
742 return defaultString .. currentSettings;
|
|
Zerotorescue@0
|
743 end,
|
|
Zerotorescue@0
|
744 },
|
|
Zerotorescue@0
|
745 header = {
|
|
Zerotorescue@0
|
746 order = 15,
|
|
Zerotorescue@0
|
747 type = "header",
|
|
Zerotorescue@0
|
748 name = "",
|
|
Zerotorescue@0
|
749 },
|
|
Zerotorescue@0
|
750 continueOpening = {
|
|
Zerotorescue@0
|
751 order = 20,
|
|
Zerotorescue@0
|
752 type = "toggle",
|
|
Zerotorescue@0
|
753 name = "Continue opening mail",
|
|
Zerotorescue@0
|
754 desc = "Continue opening mail at the interval set below, even if the mailbox wasn't refreshed recently.",
|
|
Zerotorescue@0
|
755 width = "full",
|
|
Zerotorescue@0
|
756 get = function() return MailOpener.db.profile.general.continueOpening; end,
|
|
Zerotorescue@0
|
757 set = function(i, v) MailOpener.db.profile.general.continueOpening = v; end,
|
|
Zerotorescue@0
|
758 },
|
|
Zerotorescue@0
|
759 waitTime = {
|
|
Zerotorescue@0
|
760 order = 30,
|
|
Zerotorescue@0
|
761 type = "range",
|
|
Zerotorescue@0
|
762 width = "double",
|
|
Zerotorescue@0
|
763 min = 0.5,
|
|
Zerotorescue@0
|
764 max = 60,
|
|
Zerotorescue@0
|
765 step = 0.5,
|
|
Zerotorescue@0
|
766 name = "Continued Mail Opening Interval",
|
|
Zerotorescue@5
|
767 desc = "Change the interval at which Mail Opener tries to continue opening mail after opening the mailbox. Please note that this setting does not reduce the game's normal 60 seconds wait time for mail.\n\nThe default value is 5 seconds.",
|
|
Zerotorescue@0
|
768 get = function() return MailOpener.db.profile.general.waitTime; end,
|
|
Zerotorescue@0
|
769 set = function(i, v) MailOpener.db.profile.general.waitTime = v; end,
|
|
Zerotorescue@0
|
770 disabled = function() return (not MailOpener.db.profile.general.continueOpening); end,
|
|
Zerotorescue@0
|
771 },
|
|
Zerotorescue@0
|
772 initialDelay = {
|
|
Zerotorescue@0
|
773 order = 40,
|
|
Zerotorescue@0
|
774 type = "range",
|
|
Zerotorescue@0
|
775 width = "double",
|
|
Zerotorescue@0
|
776 min = 0.5,
|
|
Zerotorescue@0
|
777 max = 60,
|
|
Zerotorescue@0
|
778 step = 0.5,
|
|
Zerotorescue@0
|
779 name = "Initial Mail Opening Delay",
|
|
Zerotorescue@0
|
780 desc = "Change the delay before Mail Opener tries opening mail after opening the mailbox or new mail has been received from the server.\n\nThe default value is 0.5 seconds.",
|
|
Zerotorescue@0
|
781 get = function() return MailOpener.db.profile.general.initialDelay; end,
|
|
Zerotorescue@0
|
782 set = function(i, v) MailOpener.db.profile.general.initialDelay = v; end,
|
|
Zerotorescue@0
|
783 },
|
|
Zerotorescue@0
|
784 },
|
|
Zerotorescue@0
|
785 }, -- end Continuous opening config inline group
|
|
Zerotorescue@0
|
786 keepFree = {
|
|
Zerotorescue@0
|
787 order = 30,
|
|
Zerotorescue@0
|
788 type = "group",
|
|
Zerotorescue@0
|
789 inline = true,
|
|
Zerotorescue@0
|
790 name = "Keep Free Space",
|
|
Zerotorescue@0
|
791 args = {
|
|
Zerotorescue@0
|
792 description = {
|
|
Zerotorescue@0
|
793 order = 10,
|
|
Zerotorescue@0
|
794 type = "description",
|
|
Zerotorescue@0
|
795 name = "You can set an amount of bag space you wish to reserve when opening mail. Mail with a higher amount of attachments than available space will be skipped completely with this option set above 0.",
|
|
Zerotorescue@0
|
796 },
|
|
Zerotorescue@0
|
797 header = {
|
|
Zerotorescue@0
|
798 order = 15,
|
|
Zerotorescue@0
|
799 type = "header",
|
|
Zerotorescue@0
|
800 name = "",
|
|
Zerotorescue@0
|
801 },
|
|
Zerotorescue@0
|
802 keepFreeSpace = {
|
|
Zerotorescue@0
|
803 order = 20,
|
|
Zerotorescue@0
|
804 type = "range",
|
|
Zerotorescue@0
|
805 min = 0,
|
|
Zerotorescue@0
|
806 max = 100,
|
|
Zerotorescue@0
|
807 step = 1,
|
|
Zerotorescue@0
|
808 width = "double",
|
|
Zerotorescue@0
|
809 name = "Keep free space",
|
|
Zerotorescue@0
|
810 desc = "Change the amount of space to reserve for other things when opening mail. If this option is set higher than 0, mail with a higher amount of attachments than available space will be skipped completely.\n\nE.g. If this is set to 1 and you have a total of 12 slots left then any mail with 12 attachments will be skipped while one with 11 attachments would be opened.",
|
|
Zerotorescue@0
|
811 set = function(i, v) self.db.profile.keepFreeSpace = v; end,
|
|
Zerotorescue@0
|
812 get = function() return self.db.profile.keepFreeSpace; end,
|
|
Zerotorescue@0
|
813 },
|
|
Zerotorescue@0
|
814 },
|
|
Zerotorescue@0
|
815 },
|
|
Zerotorescue@0
|
816 speed = {
|
|
Zerotorescue@0
|
817 order = 40,
|
|
Zerotorescue@0
|
818 type = "group",
|
|
Zerotorescue@0
|
819 inline = true,
|
|
Zerotorescue@0
|
820 name = "Opening Speed",
|
|
Zerotorescue@0
|
821 args = {
|
|
Zerotorescue@0
|
822 description = {
|
|
Zerotorescue@0
|
823 order = 10,
|
|
Zerotorescue@0
|
824 type = "description",
|
|
Zerotorescue@0
|
825 name = "Change the speed at which mail is opened. You should set the opening speed to the lowest latency you have in a city or experiment with setting it to the minimum.",
|
|
Zerotorescue@0
|
826 },
|
|
Zerotorescue@0
|
827 header = {
|
|
Zerotorescue@0
|
828 order = 15,
|
|
Zerotorescue@0
|
829 type = "header",
|
|
Zerotorescue@0
|
830 name = "",
|
|
Zerotorescue@0
|
831 },
|
|
Zerotorescue@0
|
832 openMailInterval = {
|
|
Zerotorescue@0
|
833 order = 20,
|
|
Zerotorescue@0
|
834 type = "range",
|
|
Zerotorescue@0
|
835 min = 5,
|
|
Zerotorescue@0
|
836 max = 2500,
|
|
Zerotorescue@0
|
837 step = 5,
|
|
Zerotorescue@0
|
838 width = "double",
|
|
Zerotorescue@0
|
839 name = "Open single mail interval",
|
|
Zerotorescue@0
|
840 desc = "Change the mail opening speed (in microseconds) for each mail. Lower may not always be faster.",
|
|
Zerotorescue@0
|
841 get = function() return ( self.db.profile.speed * 1000 ); end,
|
|
Zerotorescue@0
|
842 set = function(i, v) self.db.profile.speed = ( v / 1000 ); end,
|
|
Zerotorescue@0
|
843 },
|
|
Zerotorescue@0
|
844 },
|
|
Zerotorescue@0
|
845 },
|
|
Zerotorescue@0
|
846 },
|
|
Zerotorescue@0
|
847 };
|
|
Zerotorescue@0
|
848
|
|
Zerotorescue@0
|
849 return configGroup;
|
|
Zerotorescue@0
|
850 end
|
|
Zerotorescue@0
|
851
|
|
Zerotorescue@31
|
852 function mod:Debug(t)
|
|
Zerotorescue@0
|
853 return MailOpener:Debug("|cff00ff00OpenAll|r:" .. t);
|
|
Zerotorescue@0
|
854 end |