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