|
Zerotorescue@0
|
1 local MailOpener = LibStub("AceAddon-3.0"):GetAddon("MailOpener");
|
|
Zerotorescue@0
|
2 local OpenAll = MailOpener:NewModule("OpenAll", "AceEvent-3.0", "AceTimer-3.0");
|
|
Zerotorescue@0
|
3
|
|
Zerotorescue@3
|
4 --[[
|
|
Zerotorescue@3
|
5 Module name: OpenAll
|
|
Zerotorescue@3
|
6 Description: The actual mail opening initiated by the core.
|
|
Zerotorescue@3
|
7 Required: Yes.
|
|
Zerotorescue@3
|
8
|
|
Zerotorescue@3
|
9 Dev notes:
|
|
Zerotorescue@3
|
10 When shift clicking the Open All button it should override all filters.
|
|
Zerotorescue@3
|
11 ]]
|
|
Zerotorescue@3
|
12
|
|
Zerotorescue@0
|
13 local MAIL_ITEM_INDEX, mailTimer, inventoryFull, inventoryFullSoundPlayed, opening, lastSync, numCurrentMail, numHiddenMail, continue;
|
|
Zerotorescue@0
|
14
|
|
Zerotorescue@0
|
15 function OpenAll:OnInitialize()
|
|
Zerotorescue@0
|
16 local defaults = {
|
|
Zerotorescue@0
|
17 profile = {
|
|
Zerotorescue@0
|
18 speed = 0.05,
|
|
Zerotorescue@0
|
19 keepFreeSpace = 0,
|
|
Zerotorescue@0
|
20 filter = {
|
|
Zerotorescue@0
|
21 AH = {
|
|
Zerotorescue@0
|
22 canceled = true,
|
|
Zerotorescue@0
|
23 expired = true,
|
|
Zerotorescue@0
|
24 outbid = true,
|
|
Zerotorescue@0
|
25 success = true,
|
|
Zerotorescue@0
|
26 won = true,
|
|
Zerotorescue@0
|
27 },
|
|
Zerotorescue@0
|
28 normalAttachments = false,
|
|
Zerotorescue@0
|
29 normalMoney = true,
|
|
Zerotorescue@0
|
30 },
|
|
Zerotorescue@0
|
31 },
|
|
Zerotorescue@0
|
32 };
|
|
Zerotorescue@0
|
33
|
|
Zerotorescue@0
|
34 -- Register our saved variables NameSpace
|
|
Zerotorescue@0
|
35 self.db = MailOpener.db:RegisterNamespace("OpenAll", defaults);
|
|
Zerotorescue@0
|
36 end
|
|
Zerotorescue@0
|
37
|
|
Zerotorescue@0
|
38 function OpenAll:OnEnable()
|
|
Zerotorescue@0
|
39 self:RegisterEvent("MAIL_SHOW");
|
|
Zerotorescue@0
|
40
|
|
Zerotorescue@0
|
41 if not self.btnOpenAll then
|
|
Zerotorescue@0
|
42 -- Open all button
|
|
Zerotorescue@0
|
43 local button = CreateFrame("Button", "btnMailOpenerOpenAll", InboxFrame, "UIPanelButtonTemplate")
|
|
Zerotorescue@0
|
44 button:SetText("Open all")
|
|
Zerotorescue@0
|
45 button:SetHeight(26)
|
|
Zerotorescue@0
|
46 button:SetWidth(120)
|
|
Zerotorescue@0
|
47 button:SetPoint("BOTTOM", InboxFrame, "CENTER", -10, -165)
|
|
Zerotorescue@0
|
48 button:SetScript("OnClick", function() OpenAll:Open(true) end)
|
|
Zerotorescue@0
|
49
|
|
Zerotorescue@0
|
50 self.btnOpenAll = button;
|
|
Zerotorescue@0
|
51 end
|
|
Zerotorescue@0
|
52
|
|
Zerotorescue@0
|
53 self.btnOpenAll:Show();
|
|
Zerotorescue@0
|
54
|
|
Zerotorescue@0
|
55 if not self.timeLeftFrame then
|
|
Zerotorescue@0
|
56 -- If the timeLeftFrame doesn't exist we will have to build it
|
|
Zerotorescue@0
|
57
|
|
Zerotorescue@0
|
58 self:Debug("Building text frame");
|
|
Zerotorescue@0
|
59
|
|
Zerotorescue@0
|
60 local frame = CreateFrame("Button", "MailOpenerTimeLeftButton", InboxFrame);
|
|
Zerotorescue@0
|
61
|
|
Zerotorescue@0
|
62 -- Mail counter
|
|
Zerotorescue@0
|
63 frame.text = frame:CreateFontString("MailOpenerTimeLeftFrameMailCount", "OVERLAY", "GameFontHighlight");
|
|
Zerotorescue@0
|
64 frame.text:SetPoint("CENTER", MailFrame, "TOPLEFT", 40, -35);
|
|
Zerotorescue@0
|
65
|
|
Zerotorescue@0
|
66 -- Long time left indicator
|
|
Zerotorescue@0
|
67 frame.smallText = frame:CreateFontString("MailOpenerTimeLeftFrameTimeRemaining", "OVERLAY", "GameFontNormal");
|
|
Zerotorescue@0
|
68 frame.smallText:SetFont(GameFontHighlight:GetFont(), 11, "OUTLINE");
|
|
Zerotorescue@0
|
69 frame.smallText:SetPoint("TOPLEFT", MailFrame, "TOPLEFT", 75, -38);
|
|
Zerotorescue@0
|
70 frame.smallText:SetWidth(270);
|
|
Zerotorescue@0
|
71 frame.smallText:SetJustifyH("LEFT");
|
|
Zerotorescue@0
|
72 frame.smallText:SetJustifyV("MIDDLE");
|
|
Zerotorescue@0
|
73
|
|
Zerotorescue@0
|
74 frame:SetPoint("TOPLEFT", MailFrame, "TOPLEFT", 75, -38);
|
|
Zerotorescue@0
|
75 frame:SetWidth(270);
|
|
Zerotorescue@0
|
76 frame:SetHeight(35);
|
|
Zerotorescue@0
|
77 frame:SetScript("OnClick", function(self)
|
|
Zerotorescue@0
|
78 local timeRemainingUntillOpened = frame.smallText:GetText();
|
|
Zerotorescue@0
|
79 if timeRemainingUntillOpened then
|
|
Zerotorescue@0
|
80 MailOpener.currentPopupContents = "|cffffd700" .. timeRemainingUntillOpened .. "|r";
|
|
Zerotorescue@0
|
81
|
|
Zerotorescue@0
|
82 StaticPopup_Show("MailOpenerCopyWindow");
|
|
Zerotorescue@0
|
83 end
|
|
Zerotorescue@0
|
84 end);
|
|
Zerotorescue@0
|
85
|
|
Zerotorescue@0
|
86 self.timeLeftFrame = frame;
|
|
Zerotorescue@0
|
87 end
|
|
Zerotorescue@0
|
88
|
|
Zerotorescue@0
|
89 self.timeLeftFrame:Show();
|
|
Zerotorescue@0
|
90
|
|
Zerotorescue@3
|
91 -- Go through all children of the mail frame to find QA's element and hide it
|
|
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@0
|
106 function OpenAll: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@0
|
125 local kids = { MailFrame:GetChildren() };
|
|
Zerotorescue@0
|
126
|
|
Zerotorescue@0
|
127 for _, child in ipairs(kids) do
|
|
Zerotorescue@0
|
128 if child and child.text then
|
|
Zerotorescue@0
|
129 child.text:Show();
|
|
Zerotorescue@0
|
130 end
|
|
Zerotorescue@0
|
131 end
|
|
Zerotorescue@0
|
132
|
|
Zerotorescue@0
|
133 self:Stop();
|
|
Zerotorescue@0
|
134 end
|
|
Zerotorescue@0
|
135
|
|
Zerotorescue@0
|
136 function OpenAll:MAIL_SHOW()
|
|
Zerotorescue@0
|
137 self:Debug("MAIL_SHOW");
|
|
Zerotorescue@0
|
138
|
|
Zerotorescue@0
|
139 self:StopOpening(false);
|
|
Zerotorescue@0
|
140
|
|
Zerotorescue@0
|
141 if MailOpener.PostalEnabled then
|
|
Zerotorescue@0
|
142 -- Disable Postal's openers so we can do it ourselves
|
|
Zerotorescue@0
|
143
|
|
Zerotorescue@0
|
144 MailOpener:TogglePostalModule("OpenAll", false);
|
|
Zerotorescue@0
|
145 MailOpener:TogglePostalModule("Select", false);
|
|
Zerotorescue@0
|
146 end
|
|
Zerotorescue@0
|
147
|
|
Zerotorescue@0
|
148 -- Keep an eye for closing of the mailbox
|
|
Zerotorescue@0
|
149 self:RegisterEvent("MAIL_CLOSED", "Stop");
|
|
Zerotorescue@0
|
150 self:RegisterEvent("PLAYER_LEAVING_WORLD", "Stop");
|
|
Zerotorescue@0
|
151
|
|
Zerotorescue@0
|
152 -- Look if the mailbox is full
|
|
Zerotorescue@0
|
153 self:RegisterEvent("UI_ERROR_MESSAGE");
|
|
Zerotorescue@0
|
154 -- Only look again after bags updated
|
|
Zerotorescue@0
|
155 self:RegisterEvent("BAG_UPDATE");
|
|
Zerotorescue@0
|
156
|
|
Zerotorescue@0
|
157 -- We need to know when to start opening
|
|
Zerotorescue@0
|
158 self:RegisterMessage("MO_OPEN_MAIL", "Open");
|
|
Zerotorescue@0
|
159 self:RegisterMessage("MO_SERVER_SYNCED");
|
|
Zerotorescue@3
|
160 self:RegisterMessage("MO_MAIL_EMPTIED");
|
|
Zerotorescue@0
|
161
|
|
Zerotorescue@0
|
162 self:CancelTimer(self.tmrTimeRemaining, true);
|
|
Zerotorescue@0
|
163 self.tmrTimeRemaining = self:ScheduleRepeatingTimer("UpdateTimer", 1);
|
|
Zerotorescue@0
|
164 self:UpdateTimer();
|
|
Zerotorescue@0
|
165 end
|
|
Zerotorescue@0
|
166
|
|
Zerotorescue@0
|
167 function OpenAll:Stop()
|
|
Zerotorescue@0
|
168 self:Debug("Stop");
|
|
Zerotorescue@0
|
169
|
|
Zerotorescue@0
|
170 -- We shutdown, so nothing to do when the mailbox is closed anymore
|
|
Zerotorescue@0
|
171 self:UnregisterEvent("MAIL_CLOSED");
|
|
Zerotorescue@0
|
172 self:UnregisterEvent("PLAYER_LEAVING_WORLD");
|
|
Zerotorescue@0
|
173
|
|
Zerotorescue@0
|
174 -- We care about a full inventory just a little
|
|
Zerotorescue@0
|
175 self:UnregisterEvent("UI_ERROR_MESSAGE");
|
|
Zerotorescue@0
|
176 self:UnregisterEvent("BAG_UPDATE");
|
|
Zerotorescue@0
|
177
|
|
Zerotorescue@0
|
178 -- We no longer care
|
|
Zerotorescue@0
|
179 self:UnregisterMessage("MO_OPEN_MAIL");
|
|
Zerotorescue@0
|
180 self:UnregisterMessage("MO_SERVER_SYNCED");
|
|
Zerotorescue@3
|
181 self:UnregisterMessage("MO_MAIL_EMPTIED");
|
|
Zerotorescue@0
|
182
|
|
Zerotorescue@0
|
183 self:CancelTimer(self.tmrMailOpener, true);
|
|
Zerotorescue@0
|
184 self:CancelTimer(self.tmrTimeRemaining, true);
|
|
Zerotorescue@0
|
185
|
|
Zerotorescue@0
|
186 self:SetOpeningStatus(false);
|
|
Zerotorescue@0
|
187 end
|
|
Zerotorescue@0
|
188
|
|
Zerotorescue@0
|
189 function OpenAll:MO_SERVER_SYNCED()
|
|
Zerotorescue@0
|
190 self:Debug("MO_SERVER_SYNCED");
|
|
Zerotorescue@0
|
191
|
|
Zerotorescue@2
|
192 -- Stop opening now to prevent the opener from continue while Beancounter is counting
|
|
Zerotorescue@2
|
193 self:StopOpening(false);
|
|
Zerotorescue@2
|
194
|
|
Zerotorescue@0
|
195 lastSync = GetTime();
|
|
Zerotorescue@0
|
196
|
|
Zerotorescue@2
|
197 self:UpdateMailCount();
|
|
Zerotorescue@2
|
198 end
|
|
Zerotorescue@2
|
199
|
|
Zerotorescue@3
|
200 function OpenAll:MO_MAIL_EMPTIED()
|
|
Zerotorescue@3
|
201 -- A mail has been processed so we can process the next
|
|
Zerotorescue@2
|
202 continue = true;
|
|
Zerotorescue@2
|
203
|
|
Zerotorescue@3
|
204 self:UpdateTimer();
|
|
Zerotorescue@2
|
205 end
|
|
Zerotorescue@2
|
206
|
|
Zerotorescue@2
|
207 function OpenAll:UpdateMailCount()
|
|
Zerotorescue@0
|
208 local numItems, totalItems = GetInboxNumItems();
|
|
Zerotorescue@0
|
209
|
|
Zerotorescue@0
|
210 numCurrentMail = numItems;
|
|
Zerotorescue@0
|
211 numHiddenMail = ( totalItems - numItems );
|
|
Zerotorescue@0
|
212 end
|
|
Zerotorescue@0
|
213
|
|
Zerotorescue@0
|
214 function OpenAll:BAG_UPDATE()
|
|
Zerotorescue@0
|
215 -- If the bags are updated we should check if the inventory is full again
|
|
Zerotorescue@0
|
216 inventoryFull = false;
|
|
Zerotorescue@1
|
217 -- Replay sound
|
|
Zerotorescue@1
|
218 inventoryFullSoundPlayed = nil;
|
|
Zerotorescue@0
|
219 end
|
|
Zerotorescue@0
|
220
|
|
Zerotorescue@0
|
221 -- 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@0
|
222 function OpenAll:UI_ERROR_MESSAGE(e, errorMessage)
|
|
Zerotorescue@0
|
223 if errorMessage == ERR_INV_FULL then
|
|
Zerotorescue@0
|
224 -- Inventory is full.
|
|
Zerotorescue@0
|
225
|
|
Zerotorescue@0
|
226 if not inventoryFull then
|
|
Zerotorescue@0
|
227 inventoryFull = true;
|
|
Zerotorescue@0
|
228
|
|
Zerotorescue@0
|
229 -- Play the sound
|
|
Zerotorescue@0
|
230 if MailOpener.db.profile.notifications.bagsFullSound and (not MailOpener.db.profile.notifications.bagsFullSoundOnlyOnce or not inventoryFullSoundPlayed) then
|
|
Zerotorescue@0
|
231 PlaySoundFile(MailOpener.db.profile.notifications.bagsFullSoundFile);
|
|
Zerotorescue@0
|
232 inventoryFullSoundPlayed = true;
|
|
Zerotorescue@0
|
233 end
|
|
Zerotorescue@0
|
234 end
|
|
Zerotorescue@0
|
235
|
|
Zerotorescue@0
|
236 -- Continue opening mail (we still want to open gold mail)
|
|
Zerotorescue@0
|
237 continue = true;
|
|
Zerotorescue@0
|
238 elseif errorMessage == ERR_ITEM_MAX_COUNT or errorMessage == ERR_MAIL_DATABASE_ERROR then
|
|
Zerotorescue@0
|
239 -- Can't carry more of this item OR mail database error
|
|
Zerotorescue@0
|
240
|
|
Zerotorescue@0
|
241 -- Continue opening mail (we still want to retrieve other items or gold)
|
|
Zerotorescue@0
|
242 continue = true;
|
|
Zerotorescue@0
|
243 end
|
|
Zerotorescue@0
|
244 end
|
|
Zerotorescue@0
|
245
|
|
Zerotorescue@0
|
246 function OpenAll:Open(forced)
|
|
Zerotorescue@0
|
247 self:Debug("Open");
|
|
Zerotorescue@0
|
248
|
|
Zerotorescue@0
|
249 if not opening or forced == true then
|
|
Zerotorescue@0
|
250 local numItems, totalItems = GetInboxNumItems();
|
|
Zerotorescue@0
|
251 -- Start at the end, add one because OpenNext will take it away again
|
|
Zerotorescue@0
|
252 local newMailItemIndex = ( ( numItems or 0 ) + 1 );
|
|
Zerotorescue@0
|
253
|
|
Zerotorescue@0
|
254 if newMailItemIndex > 1 then
|
|
Zerotorescue@0
|
255 self:Debug("Open succes");
|
|
Zerotorescue@0
|
256
|
|
Zerotorescue@0
|
257 -- Stop the previous opening and restart
|
|
Zerotorescue@0
|
258 if forced == true then
|
|
Zerotorescue@0
|
259 self:StopOpening(false); -- this is not a "simple" stop, so also reset inventory full warning
|
|
Zerotorescue@0
|
260 else
|
|
Zerotorescue@0
|
261 self:StopOpening(true); -- forced is false - automated action - simple reset, skip inventory full reset to avoid sound spam
|
|
Zerotorescue@0
|
262 end
|
|
Zerotorescue@0
|
263
|
|
Zerotorescue@0
|
264 -- Update the caret
|
|
Zerotorescue@0
|
265 MAIL_ITEM_INDEX = newMailItemIndex;
|
|
Zerotorescue@0
|
266
|
|
Zerotorescue@0
|
267 -- We're now going to be busy again
|
|
Zerotorescue@0
|
268 self:SetOpeningStatus(true);
|
|
Zerotorescue@0
|
269
|
|
Zerotorescue@0
|
270 -- Open the next mail in line
|
|
Zerotorescue@0
|
271 self:OpenNext();
|
|
Zerotorescue@0
|
272 else
|
|
Zerotorescue@0
|
273 if MailOpener.db.profile.notifications.mailboxIsEmpty then
|
|
Zerotorescue@0
|
274 print("|cffff0000There is currently no mail available.|r");
|
|
Zerotorescue@0
|
275 end
|
|
Zerotorescue@0
|
276
|
|
Zerotorescue@0
|
277 self:Debug("MO_OPEN_COMPLETE");
|
|
Zerotorescue@0
|
278
|
|
Zerotorescue@0
|
279 -- Report that we're all done
|
|
Zerotorescue@0
|
280 self:SendMessage("MO_OPEN_COMPLETE");
|
|
Zerotorescue@0
|
281 end
|
|
Zerotorescue@0
|
282 end
|
|
Zerotorescue@0
|
283 end
|
|
Zerotorescue@0
|
284
|
|
Zerotorescue@0
|
285 -- Return the type of mail a message subject is
|
|
Zerotorescue@0
|
286 local knownAHSubjectPatterns = {
|
|
Zerotorescue@0
|
287 canceled = AUCTION_REMOVED_MAIL_SUBJECT:replace("%s", ""),
|
|
Zerotorescue@0
|
288 expired = AUCTION_EXPIRED_MAIL_SUBJECT:replace("%s", ""),
|
|
Zerotorescue@0
|
289 outbid = AUCTION_OUTBID_MAIL_SUBJECT:replace("%s", ""),
|
|
Zerotorescue@0
|
290 success = AUCTION_SOLD_MAIL_SUBJECT:replace("%s", ""),
|
|
Zerotorescue@0
|
291 won = AUCTION_WON_MAIL_SUBJECT:replace("%s", ""),
|
|
Zerotorescue@0
|
292 };
|
|
Zerotorescue@0
|
293 function OpenAll:GetAuctionMailType(subject)
|
|
Zerotorescue@0
|
294 if subject then
|
|
Zerotorescue@0
|
295 -- 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
|
296 if subject:find(knownAHSubjectPatterns.expired) then
|
|
Zerotorescue@0
|
297 return "expired";
|
|
Zerotorescue@0
|
298 elseif subject:find(knownAHSubjectPatterns.success) then
|
|
Zerotorescue@0
|
299 return "success";
|
|
Zerotorescue@0
|
300 elseif subject:find(knownAHSubjectPatterns.won) then
|
|
Zerotorescue@0
|
301 return "won";
|
|
Zerotorescue@0
|
302 elseif subject:find(knownAHSubjectPatterns.canceled) then
|
|
Zerotorescue@0
|
303 return "canceled";
|
|
Zerotorescue@0
|
304 elseif subject:find(knownAHSubjectPatterns.outbid) then
|
|
Zerotorescue@0
|
305 return "outbid";
|
|
Zerotorescue@0
|
306 end
|
|
Zerotorescue@0
|
307 end
|
|
Zerotorescue@0
|
308
|
|
Zerotorescue@0
|
309 return; -- not auction mail
|
|
Zerotorescue@0
|
310 end
|
|
Zerotorescue@0
|
311
|
|
Zerotorescue@0
|
312 function OpenAll:OpenMail(index)
|
|
Zerotorescue@0
|
313 if index > 0 then
|
|
Zerotorescue@0
|
314 -- LUA arrays start at 1, so mail with index 0 doesn't exist, so we're finished
|
|
Zerotorescue@0
|
315
|
|
Zerotorescue@0
|
316 local sender, subject, gold, cod, _, items, _, _, _, _, isGM = select(3, GetInboxHeaderInfo(index));
|
|
Zerotorescue@0
|
317 local auctionMailType = self:GetAuctionMailType(subject);
|
|
Zerotorescue@0
|
318
|
|
Zerotorescue@0
|
319 if isGM then
|
|
Zerotorescue@0
|
320 -- GM Mail
|
|
Zerotorescue@0
|
321 if MailOpener.db.profile.notifications.skipped.all and MailOpener.db.profile.notifications.skipped.GMMail then
|
|
Zerotorescue@0
|
322 print("Skipping " .. index .. ": " .. subject .. " (GM mail)");
|
|
Zerotorescue@0
|
323 end
|
|
Zerotorescue@0
|
324
|
|
Zerotorescue@0
|
325 self:OpenNext();
|
|
Zerotorescue@0
|
326
|
|
Zerotorescue@0
|
327 return;
|
|
Zerotorescue@0
|
328 elseif cod and cod > 0 then
|
|
Zerotorescue@0
|
329 -- Cost on delivery
|
|
Zerotorescue@0
|
330 if MailOpener.db.profile.notifications.skipped.all and MailOpener.db.profile.notifications.skipped.COD then
|
|
Zerotorescue@0
|
331 print("Skipping " .. index .. ": " .. subject .. " (C.O.D.)");
|
|
Zerotorescue@0
|
332 end
|
|
Zerotorescue@0
|
333
|
|
Zerotorescue@0
|
334 self:OpenNext();
|
|
Zerotorescue@0
|
335
|
|
Zerotorescue@0
|
336 return;
|
|
Zerotorescue@0
|
337 elseif ((gold and gold > 0) or (items and items > 0)) then
|
|
Zerotorescue@0
|
338 -- Mail with some sort of attachments
|
|
Zerotorescue@0
|
339
|
|
Zerotorescue@0
|
340 local slotsAvailable = 0;
|
|
Zerotorescue@0
|
341 if self.db.profile.keepFreeSpace > 0 then
|
|
Zerotorescue@0
|
342 for bag = 0, 4 do
|
|
Zerotorescue@0
|
343 local numberOfFreeSlots = GetContainerNumFreeSlots(bag);
|
|
Zerotorescue@0
|
344 slotsAvailable = ( slotsAvailable + numberOfFreeSlots );
|
|
Zerotorescue@0
|
345 end
|
|
Zerotorescue@0
|
346 end
|
|
Zerotorescue@0
|
347
|
|
Zerotorescue@0
|
348 if inventoryFull and not MailOpener.db.profile.general.continueOpeningStackableItems and items and items > 0 then
|
|
Zerotorescue@0
|
349 if MailOpener.db.profile.notifications.skipped.all and MailOpener.db.profile.notifications.skipped.inventoryFull then
|
|
Zerotorescue@0
|
350 print("Skipping " .. index .. ": " .. subject .. " (inventory is full)");
|
|
Zerotorescue@0
|
351 end
|
|
Zerotorescue@0
|
352
|
|
Zerotorescue@0
|
353 self:OpenNext();
|
|
Zerotorescue@0
|
354
|
|
Zerotorescue@0
|
355 return;
|
|
Zerotorescue@0
|
356 elseif self.db.profile.keepFreeSpace > 0 and items and ( slotsAvailable - items ) < self.db.profile.keepFreeSpace then
|
|
Zerotorescue@0
|
357 if MailOpener.db.profile.notifications.skipped.all and MailOpener.db.profile.notifications.skipped.keepFreeSpaceLimit then
|
|
Zerotorescue@0
|
358 print("Skipping " .. index .. ": " .. subject .. " (keep free space limit)");
|
|
Zerotorescue@0
|
359 end
|
|
Zerotorescue@0
|
360
|
|
Zerotorescue@0
|
361 self:OpenNext();
|
|
Zerotorescue@0
|
362
|
|
Zerotorescue@0
|
363 return;
|
|
Zerotorescue@0
|
364 else
|
|
Zerotorescue@0
|
365 -- This string will hold the mailtype, MailOpener.db.profile.notifications.skipped/processed[mailType] will be checked if this should be announced
|
|
Zerotorescue@0
|
366 local mailType = "other";
|
|
Zerotorescue@0
|
367
|
|
Zerotorescue@0
|
368 if not auctionMailType then
|
|
Zerotorescue@0
|
369 -- This is a normal mail
|
|
Zerotorescue@0
|
370
|
|
Zerotorescue@0
|
371 if gold and gold > 0 then
|
|
Zerotorescue@0
|
372 mailType = "normalGoldMail";
|
|
Zerotorescue@0
|
373 elseif items and items > 0 then
|
|
Zerotorescue@0
|
374 mailType = "normalItemsMail";
|
|
Zerotorescue@0
|
375 end
|
|
Zerotorescue@0
|
376 else
|
|
Zerotorescue@0
|
377 -- This is an auction house mail
|
|
Zerotorescue@0
|
378
|
|
Zerotorescue@0
|
379 mailType = "AH" .. auctionMailType;
|
|
Zerotorescue@0
|
380 end
|
|
Zerotorescue@0
|
381
|
|
Zerotorescue@0
|
382 if not self.db.profile.filter.normalMoney and mailType == "normalGoldMail" then
|
|
Zerotorescue@0
|
383 if MailOpener.db.profile.notifications.skipped.all and MailOpener.db.profile.notifications.skipped[mailType] then
|
|
Zerotorescue@0
|
384 print("Skipping " .. index .. ": " .. subject .. " (normal mail with gold)");
|
|
Zerotorescue@0
|
385 end
|
|
Zerotorescue@0
|
386
|
|
Zerotorescue@0
|
387 self:OpenNext();
|
|
Zerotorescue@0
|
388
|
|
Zerotorescue@0
|
389 return;
|
|
Zerotorescue@0
|
390 elseif not self.db.profile.filter.normalAttachments and mailType == "normalItemsMail" then
|
|
Zerotorescue@0
|
391 if MailOpener.db.profile.notifications.skipped.all and MailOpener.db.profile.notifications.skipped[mailType] then
|
|
Zerotorescue@0
|
392 print("Skipping " .. index .. ": " .. subject .. " (normal mail with attachments)");
|
|
Zerotorescue@0
|
393 end
|
|
Zerotorescue@0
|
394
|
|
Zerotorescue@0
|
395 self:OpenNext();
|
|
Zerotorescue@0
|
396
|
|
Zerotorescue@0
|
397 return;
|
|
Zerotorescue@0
|
398 elseif not self.db.profile.filter.AH.expired and mailType == "AHexpired" then
|
|
Zerotorescue@0
|
399 if MailOpener.db.profile.notifications.skipped.all and MailOpener.db.profile.notifications.skipped[mailType] then
|
|
Zerotorescue@0
|
400 print("Skipping " .. index .. ": " .. subject .. " (expired auction)");
|
|
Zerotorescue@0
|
401 end
|
|
Zerotorescue@0
|
402
|
|
Zerotorescue@0
|
403 self:OpenNext();
|
|
Zerotorescue@0
|
404
|
|
Zerotorescue@0
|
405 return;
|
|
Zerotorescue@0
|
406 elseif not self.db.profile.filter.AH.success and mailType == "AHsuccess" then
|
|
Zerotorescue@0
|
407 if MailOpener.db.profile.notifications.skipped.all and MailOpener.db.profile.notifications.skipped[mailType] then
|
|
Zerotorescue@0
|
408 print("Skipping " .. index .. ": " .. subject .. " (successful auction)");
|
|
Zerotorescue@0
|
409 end
|
|
Zerotorescue@0
|
410
|
|
Zerotorescue@0
|
411 self:OpenNext();
|
|
Zerotorescue@0
|
412
|
|
Zerotorescue@0
|
413 return;
|
|
Zerotorescue@0
|
414 elseif not self.db.profile.filter.AH.won and mailType == "AHwon" then
|
|
Zerotorescue@0
|
415 if MailOpener.db.profile.notifications.skipped.all and MailOpener.db.profile.notifications.skipped[mailType] then
|
|
Zerotorescue@0
|
416 print("Skipping " .. index .. ": " .. subject .. " (auction won)");
|
|
Zerotorescue@0
|
417 end
|
|
Zerotorescue@0
|
418
|
|
Zerotorescue@0
|
419 self:OpenNext();
|
|
Zerotorescue@0
|
420
|
|
Zerotorescue@0
|
421 return;
|
|
Zerotorescue@0
|
422 elseif not self.db.profile.filter.AH.canceled and mailType == "AHcanceled" then
|
|
Zerotorescue@0
|
423 if MailOpener.db.profile.notifications.skipped.all and MailOpener.db.profile.notifications.skipped[mailType] then
|
|
Zerotorescue@0
|
424 print("Skipping " .. index .. ": " .. subject .. " (canceled auction)");
|
|
Zerotorescue@0
|
425 end
|
|
Zerotorescue@0
|
426
|
|
Zerotorescue@0
|
427 self:OpenNext();
|
|
Zerotorescue@0
|
428
|
|
Zerotorescue@0
|
429 return;
|
|
Zerotorescue@0
|
430 elseif not self.db.profile.filter.AH.outbid and mailType == "AHoutbid" then
|
|
Zerotorescue@0
|
431 if MailOpener.db.profile.notifications.skipped.all and MailOpener.db.profile.notifications.skipped[mailType] then
|
|
Zerotorescue@0
|
432 print("Skipping " .. index .. ": " .. subject .. " (outbid on auction)");
|
|
Zerotorescue@0
|
433 end
|
|
Zerotorescue@0
|
434
|
|
Zerotorescue@0
|
435 self:OpenNext();
|
|
Zerotorescue@0
|
436
|
|
Zerotorescue@0
|
437 return;
|
|
Zerotorescue@0
|
438 else
|
|
Zerotorescue@0
|
439 continue = false;
|
|
Zerotorescue@3
|
440
|
|
Zerotorescue@11
|
441 self:Debug("MO_OPENING_MAIL (#" .. index .. ")");
|
|
Zerotorescue@0
|
442
|
|
Zerotorescue@2
|
443 -- Notifiy other modules of opening
|
|
Zerotorescue@2
|
444 self:SendMessage("MO_OPENING_MAIL");
|
|
Zerotorescue@2
|
445
|
|
Zerotorescue@0
|
446 -- Open current mail
|
|
Zerotorescue@0
|
447 AutoLootMailItem(index);
|
|
Zerotorescue@0
|
448
|
|
Zerotorescue@0
|
449 if MailOpener.db.profile.notifications.processed.all and MailOpener.db.profile.notifications.processed[mailType] then
|
|
Zerotorescue@0
|
450 if gold and gold > 0 then
|
|
Zerotorescue@0
|
451 print("Processing " .. index .. ": " .. subject .. " (" .. MailOpener:FormatMoney(gold) .. ")");
|
|
Zerotorescue@0
|
452 else
|
|
Zerotorescue@0
|
453 print("Processing " .. index .. ": " .. subject);
|
|
Zerotorescue@0
|
454 end
|
|
Zerotorescue@0
|
455 end
|
|
Zerotorescue@0
|
456
|
|
Zerotorescue@0
|
457 -- And prepare for the next
|
|
Zerotorescue@0
|
458 self.tmrMailOpener = self:ScheduleTimer("OpenNext", self.db.profile.speed);
|
|
Zerotorescue@0
|
459 end
|
|
Zerotorescue@0
|
460 end
|
|
Zerotorescue@0
|
461 else
|
|
Zerotorescue@0
|
462 -- Unknown, probably just text
|
|
Zerotorescue@0
|
463 if MailOpener.db.profile.notifications.skipped.all and MailOpener.db.profile.notifications.skipped.other then
|
|
Zerotorescue@0
|
464 if subject then
|
|
Zerotorescue@0
|
465 print("Skipping " .. index .. ": " .. subject);
|
|
Zerotorescue@0
|
466 else
|
|
Zerotorescue@0
|
467 print("Skipping " .. index);
|
|
Zerotorescue@0
|
468 end
|
|
Zerotorescue@0
|
469 end
|
|
Zerotorescue@0
|
470
|
|
Zerotorescue@0
|
471 self:OpenNext();
|
|
Zerotorescue@0
|
472 end
|
|
Zerotorescue@0
|
473 else
|
|
Zerotorescue@0
|
474 -- Finished!
|
|
Zerotorescue@0
|
475 if MailOpener.db.profile.notifications.finishedCurrentBatch then
|
|
Zerotorescue@0
|
476 print("Finished opening the current batch.");
|
|
Zerotorescue@0
|
477 end
|
|
Zerotorescue@0
|
478
|
|
Zerotorescue@0
|
479 self:SetOpeningStatus(false);
|
|
Zerotorescue@3
|
480
|
|
Zerotorescue@0
|
481 self:Debug("MO_OPEN_COMPLETE");
|
|
Zerotorescue@0
|
482
|
|
Zerotorescue@0
|
483 -- Report that we're all done
|
|
Zerotorescue@0
|
484 self:SendMessage("MO_OPEN_COMPLETE");
|
|
Zerotorescue@0
|
485 end
|
|
Zerotorescue@0
|
486 end
|
|
Zerotorescue@0
|
487
|
|
Zerotorescue@0
|
488 function OpenAll:OpenNext()
|
|
Zerotorescue@0
|
489 if continue then
|
|
Zerotorescue@0
|
490 -- If the previous mail was opened successful, open the next
|
|
Zerotorescue@0
|
491
|
|
Zerotorescue@0
|
492 -- Next mail in line
|
|
Zerotorescue@0
|
493 MAIL_ITEM_INDEX = ( MAIL_ITEM_INDEX - 1 );
|
|
Zerotorescue@0
|
494
|
|
Zerotorescue@0
|
495 -- Open it
|
|
Zerotorescue@0
|
496 self:OpenMail(MAIL_ITEM_INDEX);
|
|
Zerotorescue@0
|
497 else
|
|
Zerotorescue@0
|
498 -- Try again at the next interval
|
|
Zerotorescue@0
|
499
|
|
Zerotorescue@0
|
500 self.tmrMailOpener = self:ScheduleTimer("OpenNext", self.db.profile.speed);
|
|
Zerotorescue@0
|
501 end
|
|
Zerotorescue@0
|
502 end
|
|
Zerotorescue@0
|
503
|
|
Zerotorescue@2
|
504 function OpenAll:Continue()
|
|
Zerotorescue@2
|
505 continue = true;
|
|
Zerotorescue@2
|
506 self:OpenNext();
|
|
Zerotorescue@2
|
507 end
|
|
Zerotorescue@2
|
508
|
|
Zerotorescue@0
|
509 local mailRemainingPatterns = {
|
|
Zerotorescue@3
|
510 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
|
511 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
|
512 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
|
513 nextRefresh = "|cffffffff%d|r/|cffffffff%d|r mail remaining, next refresh in |cffffffff%d|r seconds.";
|
|
Zerotorescue@0
|
514 waitingBatch = "|cffffffff%d|r/|cffffffff%d|r mail remaining - waiting for something from the current batch to be opened...";
|
|
Zerotorescue@0
|
515 waitingSync = "|cffffffff%d|r/|cffffffff%d|r mail remaining - waiting for the next mailbox refresh...";
|
|
Zerotorescue@0
|
516 soon = "|cffffffff%d|r/|cffffffff%d|r mail remaining - everything will be opened soon...";
|
|
Zerotorescue@0
|
517 };
|
|
Zerotorescue@0
|
518
|
|
Zerotorescue@0
|
519 function OpenAll:UpdateTimer()
|
|
Zerotorescue@0
|
520 if lastSync then
|
|
Zerotorescue@3
|
521 self:UpdateMailCount();
|
|
Zerotorescue@3
|
522
|
|
Zerotorescue@0
|
523 -- Calculate the total amount of mail waiting
|
|
Zerotorescue@0
|
524 local numTotalMail = ( numHiddenMail + numCurrentMail );
|
|
Zerotorescue@0
|
525
|
|
Zerotorescue@0
|
526 -- Resize the font based on mail left so the counter always fits perfectly
|
|
Zerotorescue@0
|
527 if numTotalMail < 100 then
|
|
Zerotorescue@0
|
528 self.timeLeftFrame.text:SetFont(GameFontHighlight:GetFont(), 30, "THICKOUTLINE");
|
|
Zerotorescue@0
|
529 elseif numTotalMail < 1000 then
|
|
Zerotorescue@0
|
530 self.timeLeftFrame.text:SetFont(GameFontHighlight:GetFont(), 24, "THICKOUTLINE");
|
|
Zerotorescue@0
|
531 else
|
|
Zerotorescue@0
|
532 self.timeLeftFrame.text:SetFont(GameFontHighlight:GetFont(), 18, "THICKOUTLINE");
|
|
Zerotorescue@0
|
533 end
|
|
Zerotorescue@0
|
534 self.timeLeftFrame.text:SetText(numTotalMail);
|
|
Zerotorescue@3
|
535
|
|
Zerotorescue@3
|
536 -- Calculate the next server sync based on the last server sync plus sync interval
|
|
Zerotorescue@3
|
537 local nextSync = ( lastSync + 61 );
|
|
Zerotorescue@0
|
538
|
|
Zerotorescue@3
|
539 -- Calculate the timer remaining untill the next sync
|
|
Zerotorescue@3
|
540 local timeRemaining = floor( nextSync - GetTime() );
|
|
Zerotorescue@3
|
541
|
|
Zerotorescue@3
|
542 if numHiddenMail > 0 or timeRemaining > 0 then
|
|
Zerotorescue@3
|
543 -- If there is still mail being hidden or the timer is still know, display stuff
|
|
Zerotorescue@0
|
544
|
|
Zerotorescue@0
|
545 -- If the next sync was already due, our nextSync calculation was wrong and we must wait a little longer (lag?)
|
|
Zerotorescue@0
|
546 local syncTimeOut = false;
|
|
Zerotorescue@0
|
547 -- If time remaining is below 0, next sync should be soon
|
|
Zerotorescue@0
|
548 if timeRemaining < 0 then
|
|
Zerotorescue@0
|
549 timeRemaining = 0;
|
|
Zerotorescue@0
|
550 syncTimeOut = true;
|
|
Zerotorescue@0
|
551 end
|
|
Zerotorescue@0
|
552
|
|
Zerotorescue@0
|
553 -- Calculate the amount of server syncs required to open all mail
|
|
Zerotorescue@0
|
554 local syncsRequired = ceil( numHiddenMail / 50 );
|
|
Zerotorescue@0
|
555 -- Calculate the time required to execute all these syncs
|
|
Zerotorescue@0
|
556 local timeRequired = ( ( syncsRequired - 1 ) * 61 ) + timeRemaining;
|
|
Zerotorescue@0
|
557
|
|
Zerotorescue@0
|
558 local minutes = floor( timeRequired / 60 );
|
|
Zerotorescue@0
|
559 local seconds = floor( timeRequired % 60 );
|
|
Zerotorescue@0
|
560
|
|
Zerotorescue@0
|
561 local remainingText;
|
|
Zerotorescue@0
|
562 if syncTimeOut then
|
|
Zerotorescue@3
|
563 -- Previous server sync was expected earlier, notify user
|
|
Zerotorescue@3
|
564
|
|
Zerotorescue@0
|
565 if numCurrentMail == 50 then
|
|
Zerotorescue@3
|
566 -- Sync couldn't occur because we were still waiting for the current batch to be opened
|
|
Zerotorescue@0
|
567 remainingText = format(mailRemainingPatterns.waitingBatch, numCurrentMail, numTotalMail);
|
|
Zerotorescue@0
|
568 else
|
|
Zerotorescue@0
|
569 remainingText = format(mailRemainingPatterns.waitingSync, numCurrentMail, numTotalMail);
|
|
Zerotorescue@0
|
570 end
|
|
Zerotorescue@3
|
571 elseif numHiddenMail == 0 then
|
|
Zerotorescue@3
|
572 -- If no hidden mail is remaining, only show the timer for as long as we can be sure
|
|
Zerotorescue@3
|
573
|
|
Zerotorescue@3
|
574 remainingText = format(mailRemainingPatterns.nextRefresh, numCurrentMail, numTotalMail, timeRemaining);
|
|
Zerotorescue@0
|
575 elseif minutes ~= 0 then
|
|
Zerotorescue@0
|
576 if seconds ~= 0 then
|
|
Zerotorescue@0
|
577 remainingText = format(mailRemainingPatterns.minutesSeconds, numCurrentMail, numTotalMail, minutes, seconds, timeRemaining);
|
|
Zerotorescue@0
|
578 else
|
|
Zerotorescue@0
|
579 remainingText = format(mailRemainingPatterns.minutes, numCurrentMail, numTotalMail, minutes, timeRemaining);
|
|
Zerotorescue@0
|
580 end
|
|
Zerotorescue@0
|
581 elseif seconds ~= 0 then
|
|
Zerotorescue@0
|
582 remainingText = format(mailRemainingPatterns.seconds, numCurrentMail, numTotalMail, seconds, timeRemaining);
|
|
Zerotorescue@0
|
583 else
|
|
Zerotorescue@0
|
584 remainingText = format(mailRemainingPatterns.soon, numCurrentMail, numTotalMail);
|
|
Zerotorescue@0
|
585 end
|
|
Zerotorescue@0
|
586
|
|
Zerotorescue@0
|
587 self.timeLeftFrame.smallText:SetText(remainingText);
|
|
Zerotorescue@3
|
588 else
|
|
Zerotorescue@0
|
589 self.timeLeftFrame.smallText:SetText("");
|
|
Zerotorescue@0
|
590 end
|
|
Zerotorescue@0
|
591 end
|
|
Zerotorescue@0
|
592 end
|
|
Zerotorescue@0
|
593
|
|
Zerotorescue@0
|
594 function OpenAll:StopOpening(simple)
|
|
Zerotorescue@2
|
595 -- Stop opener timer
|
|
Zerotorescue@2
|
596 self:CancelTimer(self.tmrMailOpener, true);
|
|
Zerotorescue@2
|
597
|
|
Zerotorescue@0
|
598 if not simple then
|
|
Zerotorescue@2
|
599 -- A simple stop is an automated stop, an advance stop is one manually or after a sever sync
|
|
Zerotorescue@2
|
600
|
|
Zerotorescue@0
|
601 -- Recheck inventory full
|
|
Zerotorescue@0
|
602 inventoryFull = false;
|
|
Zerotorescue@0
|
603 -- Replay sound
|
|
Zerotorescue@0
|
604 inventoryFullSoundPlayed = nil;
|
|
Zerotorescue@0
|
605 end
|
|
Zerotorescue@0
|
606
|
|
Zerotorescue@27
|
607 if MailAddonBusy == MailOpener:GetName() then
|
|
Zerotorescue@27
|
608 MailAddonBusy = nil;
|
|
Zerotorescue@27
|
609 end
|
|
Zerotorescue@27
|
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@27
|
615
|
|
Zerotorescue@0
|
616 self:SetOpeningStatus(false);
|
|
Zerotorescue@0
|
617 end
|
|
Zerotorescue@0
|
618
|
|
Zerotorescue@0
|
619 function OpenAll: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@0
|
629 function OpenAll: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@0
|
852 function OpenAll:Debug(t)
|
|
Zerotorescue@0
|
853 return MailOpener:Debug("|cff00ff00OpenAll|r:" .. t);
|
|
Zerotorescue@0
|
854 end |