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