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