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