|
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@0
|
466 local slotsAvailable = 0;
|
|
Zerotorescue@0
|
467 if self.db.profile.keepFreeSpace > 0 then
|
|
Zerotorescue@0
|
468 for bag = 0, 4 do
|
|
Zerotorescue@0
|
469 local numberOfFreeSlots = GetContainerNumFreeSlots(bag);
|
|
Zerotorescue@0
|
470 slotsAvailable = ( slotsAvailable + numberOfFreeSlots );
|
|
Zerotorescue@0
|
471 end
|
|
Zerotorescue@0
|
472 end
|
|
Zerotorescue@0
|
473
|
|
Zerotorescue@46
|
474 if inventoryFull and not MAIL_OPEN_EVERYTHING and not MailOpener.db.profile.general.continueOpeningStackableItems and items and items > 0 then
|
|
Zerotorescue@0
|
475 if MailOpener.db.profile.notifications.skipped.all and MailOpener.db.profile.notifications.skipped.inventoryFull then
|
|
Zerotorescue@68
|
476 print(skippingString:format(index, subject, L["inventory is full"]));
|
|
Zerotorescue@0
|
477 end
|
|
Zerotorescue@0
|
478
|
|
Zerotorescue@0
|
479 self:OpenNext();
|
|
Zerotorescue@0
|
480
|
|
Zerotorescue@0
|
481 return;
|
|
Zerotorescue@0
|
482 elseif self.db.profile.keepFreeSpace > 0 and items and ( slotsAvailable - items ) < self.db.profile.keepFreeSpace then
|
|
Zerotorescue@0
|
483 if MailOpener.db.profile.notifications.skipped.all and MailOpener.db.profile.notifications.skipped.keepFreeSpaceLimit then
|
|
Zerotorescue@68
|
484 print(skippingString:format(index, subject, L["keep free space limit"]));
|
|
Zerotorescue@0
|
485 end
|
|
Zerotorescue@0
|
486
|
|
Zerotorescue@0
|
487 self:OpenNext();
|
|
Zerotorescue@0
|
488
|
|
Zerotorescue@0
|
489 return;
|
|
Zerotorescue@0
|
490 else
|
|
Zerotorescue@0
|
491 -- This string will hold the mailtype, MailOpener.db.profile.notifications.skipped/processed[mailType] will be checked if this should be announced
|
|
Zerotorescue@0
|
492 local mailType = "other";
|
|
Zerotorescue@0
|
493
|
|
Zerotorescue@0
|
494 if not auctionMailType then
|
|
Zerotorescue@0
|
495 -- This is a normal mail
|
|
Zerotorescue@0
|
496
|
|
Zerotorescue@0
|
497 if gold and gold > 0 then
|
|
Zerotorescue@0
|
498 mailType = "normalGoldMail";
|
|
Zerotorescue@0
|
499 elseif items and items > 0 then
|
|
Zerotorescue@0
|
500 mailType = "normalItemsMail";
|
|
Zerotorescue@0
|
501 end
|
|
Zerotorescue@0
|
502 else
|
|
Zerotorescue@0
|
503 -- This is an auction house mail
|
|
Zerotorescue@0
|
504
|
|
Zerotorescue@0
|
505 mailType = "AH" .. auctionMailType;
|
|
Zerotorescue@0
|
506 end
|
|
Zerotorescue@0
|
507
|
|
Zerotorescue@46
|
508 if not MAIL_OPEN_EVERYTHING and not self.db.profile.filter.normalMoney and mailType == "normalGoldMail" then
|
|
Zerotorescue@0
|
509 if MailOpener.db.profile.notifications.skipped.all and MailOpener.db.profile.notifications.skipped[mailType] then
|
|
Zerotorescue@68
|
510 print(skippingString:format(index, subject, L["normal mail with gold"]));
|
|
Zerotorescue@0
|
511 end
|
|
Zerotorescue@0
|
512
|
|
Zerotorescue@0
|
513 self:OpenNext();
|
|
Zerotorescue@0
|
514
|
|
Zerotorescue@0
|
515 return;
|
|
Zerotorescue@46
|
516 elseif not MAIL_OPEN_EVERYTHING and not self.db.profile.filter.normalAttachments and mailType == "normalItemsMail" 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 attachments"]));
|
|
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.AH.expired and mailType == "AHexpired" 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["expired auction"]));
|
|
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.success and mailType == "AHsuccess" 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["successful 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.won and mailType == "AHwon" 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["auction won"]));
|
|
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.canceled and mailType == "AHcanceled" 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["canceled auction"]));
|
|
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.outbid and mailType == "AHoutbid" 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["outbid on auction"]));
|
|
Zerotorescue@0
|
559 end
|
|
Zerotorescue@0
|
560
|
|
Zerotorescue@0
|
561 self:OpenNext();
|
|
Zerotorescue@0
|
562
|
|
Zerotorescue@0
|
563 return;
|
|
Zerotorescue@0
|
564 else
|
|
Zerotorescue@0
|
565 continue = false;
|
|
Zerotorescue@3
|
566
|
|
Zerotorescue@11
|
567 self:Debug("MO_OPENING_MAIL (#" .. index .. ")");
|
|
Zerotorescue@0
|
568
|
|
Zerotorescue@2
|
569 -- Notifiy other modules of opening
|
|
Zerotorescue@2
|
570 self:SendMessage("MO_OPENING_MAIL");
|
|
Zerotorescue@2
|
571
|
|
Zerotorescue@0
|
572 -- Open current mail
|
|
Zerotorescue@0
|
573 AutoLootMailItem(index);
|
|
Zerotorescue@0
|
574
|
|
Zerotorescue@0
|
575 if MailOpener.db.profile.notifications.processed.all and MailOpener.db.profile.notifications.processed[mailType] then
|
|
Zerotorescue@0
|
576 if gold and gold > 0 then
|
|
Zerotorescue@68
|
577 print(L["Processing %d: %s (%s)"]:format(index, subject, MailOpener:FormatMoney(gold)));
|
|
Zerotorescue@0
|
578 else
|
|
Zerotorescue@68
|
579 print(L["Processing %d: %s"]:format(index, subject));
|
|
Zerotorescue@0
|
580 end
|
|
Zerotorescue@0
|
581 end
|
|
Zerotorescue@0
|
582
|
|
Zerotorescue@0
|
583 -- And prepare for the next
|
|
Zerotorescue@0
|
584 self.tmrMailOpener = self:ScheduleTimer("OpenNext", self.db.profile.speed);
|
|
Zerotorescue@0
|
585 end
|
|
Zerotorescue@0
|
586 end
|
|
Zerotorescue@0
|
587 else
|
|
Zerotorescue@0
|
588 -- Unknown, probably just text
|
|
Zerotorescue@0
|
589 if MailOpener.db.profile.notifications.skipped.all and MailOpener.db.profile.notifications.skipped.other then
|
|
Zerotorescue@68
|
590 print(L["Skipping %d: %s"]:format(index, subject));
|
|
Zerotorescue@0
|
591 end
|
|
Zerotorescue@0
|
592
|
|
Zerotorescue@0
|
593 self:OpenNext();
|
|
Zerotorescue@0
|
594 end
|
|
Zerotorescue@0
|
595 else
|
|
Zerotorescue@0
|
596 -- Finished!
|
|
Zerotorescue@0
|
597 if MailOpener.db.profile.notifications.finishedCurrentBatch then
|
|
Zerotorescue@68
|
598 print(L["Finished opening the current batch."]);
|
|
Zerotorescue@0
|
599 end
|
|
Zerotorescue@0
|
600
|
|
Zerotorescue@0
|
601 self:SetOpeningStatus(false);
|
|
Zerotorescue@3
|
602
|
|
Zerotorescue@0
|
603 self:Debug("MO_OPEN_COMPLETE");
|
|
Zerotorescue@0
|
604
|
|
Zerotorescue@0
|
605 -- Report that we're all done
|
|
Zerotorescue@0
|
606 self:SendMessage("MO_OPEN_COMPLETE");
|
|
Zerotorescue@0
|
607 end
|
|
Zerotorescue@0
|
608 end
|
|
Zerotorescue@0
|
609
|
|
Zerotorescue@31
|
610 function mod:OpenNext()
|
|
Zerotorescue@0
|
611 if continue then
|
|
Zerotorescue@0
|
612 -- If the previous mail was opened successful, open the next
|
|
Zerotorescue@0
|
613
|
|
Zerotorescue@0
|
614 -- Next mail in line
|
|
Zerotorescue@0
|
615 MAIL_ITEM_INDEX = ( MAIL_ITEM_INDEX - 1 );
|
|
Zerotorescue@0
|
616
|
|
Zerotorescue@0
|
617 -- Open it
|
|
Zerotorescue@0
|
618 self:OpenMail(MAIL_ITEM_INDEX);
|
|
Zerotorescue@0
|
619 else
|
|
Zerotorescue@0
|
620 -- Try again at the next interval
|
|
Zerotorescue@0
|
621
|
|
Zerotorescue@0
|
622 self.tmrMailOpener = self:ScheduleTimer("OpenNext", self.db.profile.speed);
|
|
Zerotorescue@0
|
623 end
|
|
Zerotorescue@0
|
624 end
|
|
Zerotorescue@0
|
625
|
|
Zerotorescue@31
|
626 function mod:Continue()
|
|
Zerotorescue@2
|
627 continue = true;
|
|
Zerotorescue@2
|
628 self:OpenNext();
|
|
Zerotorescue@2
|
629 end
|
|
Zerotorescue@2
|
630
|
|
Zerotorescue@0
|
631 local mailRemainingPatterns = {
|
|
Zerotorescue@68
|
632 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
|
633 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
|
634 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
|
635 nextRefresh = L["|cffffffff%d|r/|cffffffff%d|r mail remaining, next refresh in |cffffffff%d|r seconds."],
|
|
Zerotorescue@68
|
636 waitingBatch = L["|cffffffff%d|r/|cffffffff%d|r mail remaining - waiting for something from the current batch to be opened..."],
|
|
Zerotorescue@68
|
637 waitingSync = L["|cffffffff%d|r/|cffffffff%d|r mail remaining - waiting for the next mailbox refresh..."],
|
|
Zerotorescue@68
|
638 soon = L["|cffffffff%d|r/|cffffffff%d|r mail remaining - everything will be opened soon..."],
|
|
Zerotorescue@0
|
639 };
|
|
Zerotorescue@0
|
640
|
|
Zerotorescue@31
|
641 function mod:UpdateTimer()
|
|
Zerotorescue@0
|
642 if lastSync then
|
|
Zerotorescue@3
|
643 self:UpdateMailCount();
|
|
Zerotorescue@3
|
644
|
|
Zerotorescue@0
|
645 -- Calculate the total amount of mail waiting
|
|
Zerotorescue@0
|
646 local numTotalMail = ( numHiddenMail + numCurrentMail );
|
|
Zerotorescue@0
|
647
|
|
Zerotorescue@0
|
648 -- Resize the font based on mail left so the counter always fits perfectly
|
|
Zerotorescue@0
|
649 if numTotalMail < 100 then
|
|
Zerotorescue@0
|
650 self.timeLeftFrame.text:SetFont(GameFontHighlight:GetFont(), 30, "THICKOUTLINE");
|
|
Zerotorescue@0
|
651 elseif numTotalMail < 1000 then
|
|
Zerotorescue@0
|
652 self.timeLeftFrame.text:SetFont(GameFontHighlight:GetFont(), 24, "THICKOUTLINE");
|
|
Zerotorescue@0
|
653 else
|
|
Zerotorescue@0
|
654 self.timeLeftFrame.text:SetFont(GameFontHighlight:GetFont(), 18, "THICKOUTLINE");
|
|
Zerotorescue@0
|
655 end
|
|
Zerotorescue@0
|
656 self.timeLeftFrame.text:SetText(numTotalMail);
|
|
Zerotorescue@3
|
657
|
|
Zerotorescue@3
|
658 -- Calculate the next server sync based on the last server sync plus sync interval
|
|
Zerotorescue@3
|
659 local nextSync = ( lastSync + 61 );
|
|
Zerotorescue@0
|
660
|
|
Zerotorescue@3
|
661 -- Calculate the timer remaining untill the next sync
|
|
Zerotorescue@3
|
662 local timeRemaining = floor( nextSync - GetTime() );
|
|
Zerotorescue@3
|
663
|
|
Zerotorescue@3
|
664 if numHiddenMail > 0 or timeRemaining > 0 then
|
|
Zerotorescue@3
|
665 -- If there is still mail being hidden or the timer is still know, display stuff
|
|
Zerotorescue@0
|
666
|
|
Zerotorescue@0
|
667 -- If the next sync was already due, our nextSync calculation was wrong and we must wait a little longer (lag?)
|
|
Zerotorescue@0
|
668 local syncTimeOut = false;
|
|
Zerotorescue@0
|
669 -- If time remaining is below 0, next sync should be soon
|
|
Zerotorescue@0
|
670 if timeRemaining < 0 then
|
|
Zerotorescue@0
|
671 timeRemaining = 0;
|
|
Zerotorescue@0
|
672 syncTimeOut = true;
|
|
Zerotorescue@0
|
673 end
|
|
Zerotorescue@0
|
674
|
|
Zerotorescue@0
|
675 -- Calculate the amount of server syncs required to open all mail
|
|
Zerotorescue@0
|
676 local syncsRequired = ceil( numHiddenMail / 50 );
|
|
Zerotorescue@0
|
677 -- Calculate the time required to execute all these syncs
|
|
Zerotorescue@0
|
678 local timeRequired = ( ( syncsRequired - 1 ) * 61 ) + timeRemaining;
|
|
Zerotorescue@0
|
679
|
|
Zerotorescue@0
|
680 local minutes = floor( timeRequired / 60 );
|
|
Zerotorescue@0
|
681 local seconds = floor( timeRequired % 60 );
|
|
Zerotorescue@0
|
682
|
|
Zerotorescue@0
|
683 local remainingText;
|
|
Zerotorescue@0
|
684 if syncTimeOut then
|
|
Zerotorescue@3
|
685 -- Previous server sync was expected earlier, notify user
|
|
Zerotorescue@3
|
686
|
|
Zerotorescue@0
|
687 if numCurrentMail == 50 then
|
|
Zerotorescue@3
|
688 -- Sync couldn't occur because we were still waiting for the current batch to be opened
|
|
Zerotorescue@0
|
689 remainingText = format(mailRemainingPatterns.waitingBatch, numCurrentMail, numTotalMail);
|
|
Zerotorescue@0
|
690 else
|
|
Zerotorescue@0
|
691 remainingText = format(mailRemainingPatterns.waitingSync, numCurrentMail, numTotalMail);
|
|
Zerotorescue@0
|
692 end
|
|
Zerotorescue@3
|
693 elseif numHiddenMail == 0 then
|
|
Zerotorescue@3
|
694 -- If no hidden mail is remaining, only show the timer for as long as we can be sure
|
|
Zerotorescue@3
|
695
|
|
Zerotorescue@3
|
696 remainingText = format(mailRemainingPatterns.nextRefresh, numCurrentMail, numTotalMail, timeRemaining);
|
|
Zerotorescue@0
|
697 elseif minutes ~= 0 then
|
|
Zerotorescue@0
|
698 if seconds ~= 0 then
|
|
Zerotorescue@0
|
699 remainingText = format(mailRemainingPatterns.minutesSeconds, numCurrentMail, numTotalMail, minutes, seconds, timeRemaining);
|
|
Zerotorescue@0
|
700 else
|
|
Zerotorescue@0
|
701 remainingText = format(mailRemainingPatterns.minutes, numCurrentMail, numTotalMail, minutes, timeRemaining);
|
|
Zerotorescue@0
|
702 end
|
|
Zerotorescue@0
|
703 elseif seconds ~= 0 then
|
|
Zerotorescue@0
|
704 remainingText = format(mailRemainingPatterns.seconds, numCurrentMail, numTotalMail, seconds, timeRemaining);
|
|
Zerotorescue@0
|
705 else
|
|
Zerotorescue@0
|
706 remainingText = format(mailRemainingPatterns.soon, numCurrentMail, numTotalMail);
|
|
Zerotorescue@0
|
707 end
|
|
Zerotorescue@0
|
708
|
|
Zerotorescue@0
|
709 self.timeLeftFrame.smallText:SetText(remainingText);
|
|
Zerotorescue@3
|
710 else
|
|
Zerotorescue@0
|
711 self.timeLeftFrame.smallText:SetText("");
|
|
Zerotorescue@0
|
712 end
|
|
Zerotorescue@0
|
713 end
|
|
Zerotorescue@0
|
714 end
|
|
Zerotorescue@0
|
715
|
|
Zerotorescue@31
|
716 function mod:StopOpening(simple)
|
|
Zerotorescue@2
|
717 -- Stop opener timer
|
|
Zerotorescue@2
|
718 self:CancelTimer(self.tmrMailOpener, true);
|
|
Zerotorescue@2
|
719
|
|
Zerotorescue@0
|
720 if not simple then
|
|
Zerotorescue@39
|
721 -- A simple stop is an automated stop, an advanced stop is one manually or after a sever sync
|
|
Zerotorescue@2
|
722
|
|
Zerotorescue@0
|
723 -- Recheck inventory full
|
|
Zerotorescue@0
|
724 inventoryFull = false;
|
|
Zerotorescue@0
|
725 -- Replay sound
|
|
Zerotorescue@0
|
726 inventoryFullSoundPlayed = nil;
|
|
Zerotorescue@0
|
727 end
|
|
Zerotorescue@0
|
728
|
|
Zerotorescue@0
|
729 -- Reset opener position
|
|
Zerotorescue@0
|
730 MAIL_ITEM_INDEX = 0;
|
|
Zerotorescue@46
|
731 -- Reset open everything state
|
|
Zerotorescue@46
|
732 MAIL_OPEN_EVERYTHING = nil;
|
|
Zerotorescue@0
|
733 -- Stopped opening, so allow to continue
|
|
Zerotorescue@0
|
734 continue = true;
|
|
Zerotorescue@31
|
735
|
|
Zerotorescue@0
|
736 self:SetOpeningStatus(false);
|
|
Zerotorescue@0
|
737 end
|
|
Zerotorescue@0
|
738
|
|
Zerotorescue@31
|
739 function mod:SetOpeningStatus(openingStatus)
|
|
Zerotorescue@0
|
740 opening = openingStatus;
|
|
Zerotorescue@0
|
741
|
|
Zerotorescue@0
|
742 if openingStatus then
|
|
Zerotorescue@68
|
743 self.btnOpenAll:SetText(L["Opening..."]);
|
|
Zerotorescue@0
|
744 else
|
|
Zerotorescue@68
|
745 self.btnOpenAll:SetText(L["Open all"]);
|
|
Zerotorescue@0
|
746 end
|
|
Zerotorescue@0
|
747 end
|
|
Zerotorescue@0
|
748
|
|
Zerotorescue@31
|
749 function mod:GetOptionsGroup()
|
|
Zerotorescue@0
|
750 local configGroup = {
|
|
Zerotorescue@0
|
751 order = 300,
|
|
Zerotorescue@0
|
752 type = "group",
|
|
Zerotorescue@68
|
753 name = L["Open All"],
|
|
Zerotorescue@68
|
754 desc = L["Change open all settings."],
|
|
Zerotorescue@0
|
755 args = {
|
|
Zerotorescue@0
|
756 filters = {
|
|
Zerotorescue@0
|
757 order = 10,
|
|
Zerotorescue@0
|
758 type = "group",
|
|
Zerotorescue@0
|
759 inline = true,
|
|
Zerotorescue@68
|
760 name = L["Filters"],
|
|
Zerotorescue@0
|
761 args = {
|
|
Zerotorescue@0
|
762 description = {
|
|
Zerotorescue@0
|
763 order = 10,
|
|
Zerotorescue@0
|
764 type = "description",
|
|
Zerotorescue@68
|
765 name = L["Toggle which mail the opener should autoloot."],
|
|
Zerotorescue@0
|
766 },
|
|
Zerotorescue@0
|
767 AHHeader = {
|
|
Zerotorescue@0
|
768 order = 15,
|
|
Zerotorescue@0
|
769 type = "header",
|
|
Zerotorescue@68
|
770 name = L["Auction House Mail"],
|
|
Zerotorescue@0
|
771 },
|
|
Zerotorescue@0
|
772 canceled = {
|
|
Zerotorescue@0
|
773 order = 20,
|
|
Zerotorescue@0
|
774 type = "toggle",
|
|
Zerotorescue@68
|
775 name = L["Open all |cfffed000auction canceled|r mail"],
|
|
Zerotorescue@68
|
776 desc = L["Automatically loot all auction canceled mail from the auction house."],
|
|
Zerotorescue@0
|
777 set = function(i, v) self.db.profile.filter.AH.canceled = v; end,
|
|
Zerotorescue@0
|
778 get = function() return self.db.profile.filter.AH.canceled; end,
|
|
Zerotorescue@0
|
779 width = "double",
|
|
Zerotorescue@0
|
780 },
|
|
Zerotorescue@0
|
781 expired = {
|
|
Zerotorescue@0
|
782 order = 21,
|
|
Zerotorescue@0
|
783 type = "toggle",
|
|
Zerotorescue@68
|
784 name = L["Open all |cfffed000auction expired|r mail"],
|
|
Zerotorescue@68
|
785 desc = L["Automatically loot all auction expired mail from the auction house."],
|
|
Zerotorescue@0
|
786 set = function(i, v) self.db.profile.filter.AH.expired = v; end,
|
|
Zerotorescue@0
|
787 get = function() return self.db.profile.filter.AH.expired; end,
|
|
Zerotorescue@0
|
788 width = "double",
|
|
Zerotorescue@0
|
789 },
|
|
Zerotorescue@0
|
790 outbid = {
|
|
Zerotorescue@0
|
791 order = 22,
|
|
Zerotorescue@0
|
792 type = "toggle",
|
|
Zerotorescue@68
|
793 name = L["Open all |cfffed000outbid on|r mail"],
|
|
Zerotorescue@68
|
794 desc = L["Automatically loot all auction outbid mail from the auction house."],
|
|
Zerotorescue@0
|
795 set = function(i, v) self.db.profile.filter.AH.outbid = v; end,
|
|
Zerotorescue@0
|
796 get = function() return self.db.profile.filter.AH.outbid; end,
|
|
Zerotorescue@0
|
797 width = "double",
|
|
Zerotorescue@0
|
798 },
|
|
Zerotorescue@0
|
799 success = {
|
|
Zerotorescue@0
|
800 order = 23,
|
|
Zerotorescue@0
|
801 type = "toggle",
|
|
Zerotorescue@68
|
802 name = L["Open all |cfffed000auction successful|r mail"],
|
|
Zerotorescue@68
|
803 desc = L["Automatically loot all auction successful mail from the auction house."],
|
|
Zerotorescue@0
|
804 set = function(i, v) self.db.profile.filter.AH.success = v; end,
|
|
Zerotorescue@0
|
805 get = function() return self.db.profile.filter.AH.success; end,
|
|
Zerotorescue@0
|
806 width = "double",
|
|
Zerotorescue@0
|
807 },
|
|
Zerotorescue@0
|
808 won = {
|
|
Zerotorescue@0
|
809 order = 24,
|
|
Zerotorescue@0
|
810 type = "toggle",
|
|
Zerotorescue@68
|
811 name = L["Open all |cfffed000auction won|r mail"],
|
|
Zerotorescue@68
|
812 desc = L["Automatically loot all auction won mail from the auction house."],
|
|
Zerotorescue@0
|
813 set = function(i, v) self.db.profile.filter.AH.won = v; end,
|
|
Zerotorescue@0
|
814 get = function() return self.db.profile.filter.AH.won; end,
|
|
Zerotorescue@0
|
815 width = "double",
|
|
Zerotorescue@0
|
816 },
|
|
Zerotorescue@0
|
817 normalHeader = {
|
|
Zerotorescue@0
|
818 order = 30,
|
|
Zerotorescue@0
|
819 type = "header",
|
|
Zerotorescue@68
|
820 name = L["Remaining Mail"],
|
|
Zerotorescue@0
|
821 },
|
|
Zerotorescue@0
|
822 normalAttachments = {
|
|
Zerotorescue@0
|
823 order = 40,
|
|
Zerotorescue@0
|
824 type = "toggle",
|
|
Zerotorescue@68
|
825 name = L["Normal mail with |cfffed000attachments|r"],
|
|
Zerotorescue@68
|
826 desc = L["Automatically loot all normal mail containing attachments (CoDs and Blizzard mail will be skipped)."],
|
|
Zerotorescue@0
|
827 set = function(i, v) self.db.profile.filter.normalAttachments = v; end,
|
|
Zerotorescue@0
|
828 get = function() return self.db.profile.filter.normalAttachments; end,
|
|
Zerotorescue@0
|
829 width = "double",
|
|
Zerotorescue@0
|
830 },
|
|
Zerotorescue@0
|
831 normalMoney = {
|
|
Zerotorescue@0
|
832 order = 50,
|
|
Zerotorescue@0
|
833 type = "toggle",
|
|
Zerotorescue@68
|
834 name = L["Normal mail with |cfffed000gold|r"],
|
|
Zerotorescue@68
|
835 desc = L["Automatically loot all normal mail containing gold (CoDs and Blizzard mail will be skipped)."],
|
|
Zerotorescue@0
|
836 set = function(i, v) self.db.profile.filter.normalMoney = v; end,
|
|
Zerotorescue@0
|
837 get = function() return self.db.profile.filter.normalMoney; end,
|
|
Zerotorescue@0
|
838 width = "double",
|
|
Zerotorescue@0
|
839 },
|
|
Zerotorescue@50
|
840 allowShiftClick = {
|
|
Zerotorescue@50
|
841 order = 60,
|
|
Zerotorescue@50
|
842 type = "toggle",
|
|
Zerotorescue@68
|
843 name = L["Allow shift-clicking of the |cfffed000Open All|r button to autoloot |cfffed000everything|r, regardless of the above filters."],
|
|
Zerotorescue@68
|
844 desc = L["Allow shift-clicking of the |cfffed000Open All|r button to autoloot |cfffed000everything|r with attachments, temporarily overriding all filters."],
|
|
Zerotorescue@50
|
845 set = function(i, v) self.db.profile.filter.allowShiftClick = v; end,
|
|
Zerotorescue@50
|
846 get = function() return self.db.profile.filter.allowShiftClick; end,
|
|
Zerotorescue@50
|
847 width = "full",
|
|
Zerotorescue@50
|
848 },
|
|
Zerotorescue@0
|
849 },
|
|
Zerotorescue@0
|
850 },
|
|
Zerotorescue@0
|
851 -- Continuous opening config inline group
|
|
Zerotorescue@0
|
852 continuousOpening = {
|
|
Zerotorescue@0
|
853 order = 20,
|
|
Zerotorescue@0
|
854 type = "group",
|
|
Zerotorescue@0
|
855 inline = true,
|
|
Zerotorescue@68
|
856 name = L["Opening Interval"],
|
|
Zerotorescue@0
|
857 args = {
|
|
Zerotorescue@0
|
858 description = {
|
|
Zerotorescue@0
|
859 order = 10,
|
|
Zerotorescue@0
|
860 type = "description",
|
|
Zerotorescue@0
|
861 name = function()
|
|
Zerotorescue@68
|
862 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
|
863
|
|
Zerotorescue@0
|
864 local currentSettings = "";
|
|
Zerotorescue@0
|
865 if MailOpener.db.profile.general.continueOpening then
|
|
Zerotorescue@68
|
866 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
|
867 else
|
|
Zerotorescue@68
|
868 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
|
869 end
|
|
Zerotorescue@68
|
870 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
|
871 return defaultString .. currentSettings;
|
|
Zerotorescue@0
|
872 end,
|
|
Zerotorescue@0
|
873 },
|
|
Zerotorescue@0
|
874 header = {
|
|
Zerotorescue@0
|
875 order = 15,
|
|
Zerotorescue@0
|
876 type = "header",
|
|
Zerotorescue@0
|
877 name = "",
|
|
Zerotorescue@0
|
878 },
|
|
Zerotorescue@0
|
879 continueOpening = {
|
|
Zerotorescue@0
|
880 order = 20,
|
|
Zerotorescue@0
|
881 type = "toggle",
|
|
Zerotorescue@68
|
882 name = L["Continue opening mail"],
|
|
Zerotorescue@68
|
883 desc = L["Continue opening mail at the interval set below, even if the mailbox wasn't refreshed recently."],
|
|
Zerotorescue@0
|
884 width = "full",
|
|
Zerotorescue@0
|
885 get = function() return MailOpener.db.profile.general.continueOpening; end,
|
|
Zerotorescue@0
|
886 set = function(i, v) MailOpener.db.profile.general.continueOpening = v; end,
|
|
Zerotorescue@0
|
887 },
|
|
Zerotorescue@0
|
888 waitTime = {
|
|
Zerotorescue@0
|
889 order = 30,
|
|
Zerotorescue@0
|
890 type = "range",
|
|
Zerotorescue@0
|
891 width = "double",
|
|
Zerotorescue@0
|
892 min = 0.5,
|
|
Zerotorescue@0
|
893 max = 60,
|
|
Zerotorescue@0
|
894 step = 0.5,
|
|
Zerotorescue@68
|
895 name = L["Continued Mail Opening Interval"],
|
|
Zerotorescue@68
|
896 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
|
897 get = function() return MailOpener.db.profile.general.waitTime; end,
|
|
Zerotorescue@0
|
898 set = function(i, v) MailOpener.db.profile.general.waitTime = v; end,
|
|
Zerotorescue@0
|
899 disabled = function() return (not MailOpener.db.profile.general.continueOpening); end,
|
|
Zerotorescue@0
|
900 },
|
|
Zerotorescue@0
|
901 initialDelay = {
|
|
Zerotorescue@0
|
902 order = 40,
|
|
Zerotorescue@0
|
903 type = "range",
|
|
Zerotorescue@0
|
904 width = "double",
|
|
Zerotorescue@0
|
905 min = 0.5,
|
|
Zerotorescue@0
|
906 max = 60,
|
|
Zerotorescue@0
|
907 step = 0.5,
|
|
Zerotorescue@68
|
908 name = L["Initial Mail Opening Delay"],
|
|
Zerotorescue@68
|
909 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
|
910 get = function() return MailOpener.db.profile.general.initialDelay; end,
|
|
Zerotorescue@0
|
911 set = function(i, v) MailOpener.db.profile.general.initialDelay = v; end,
|
|
Zerotorescue@0
|
912 },
|
|
Zerotorescue@0
|
913 },
|
|
Zerotorescue@0
|
914 }, -- end Continuous opening config inline group
|
|
Zerotorescue@0
|
915 keepFree = {
|
|
Zerotorescue@0
|
916 order = 30,
|
|
Zerotorescue@0
|
917 type = "group",
|
|
Zerotorescue@0
|
918 inline = true,
|
|
Zerotorescue@68
|
919 name = L["Keep Free Space"],
|
|
Zerotorescue@0
|
920 args = {
|
|
Zerotorescue@0
|
921 description = {
|
|
Zerotorescue@0
|
922 order = 10,
|
|
Zerotorescue@0
|
923 type = "description",
|
|
Zerotorescue@68
|
924 name = L["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
|
925 },
|
|
Zerotorescue@0
|
926 header = {
|
|
Zerotorescue@0
|
927 order = 15,
|
|
Zerotorescue@0
|
928 type = "header",
|
|
Zerotorescue@0
|
929 name = "",
|
|
Zerotorescue@0
|
930 },
|
|
Zerotorescue@0
|
931 keepFreeSpace = {
|
|
Zerotorescue@0
|
932 order = 20,
|
|
Zerotorescue@0
|
933 type = "range",
|
|
Zerotorescue@0
|
934 min = 0,
|
|
Zerotorescue@0
|
935 max = 100,
|
|
Zerotorescue@0
|
936 step = 1,
|
|
Zerotorescue@0
|
937 width = "double",
|
|
Zerotorescue@68
|
938 name = L["Keep free space"],
|
|
Zerotorescue@68
|
939 desc = L["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
|
940 set = function(i, v) self.db.profile.keepFreeSpace = v; end,
|
|
Zerotorescue@0
|
941 get = function() return self.db.profile.keepFreeSpace; end,
|
|
Zerotorescue@0
|
942 },
|
|
Zerotorescue@0
|
943 },
|
|
Zerotorescue@0
|
944 },
|
|
Zerotorescue@0
|
945 speed = {
|
|
Zerotorescue@0
|
946 order = 40,
|
|
Zerotorescue@0
|
947 type = "group",
|
|
Zerotorescue@0
|
948 inline = true,
|
|
Zerotorescue@0
|
949 name = "Opening Speed",
|
|
Zerotorescue@0
|
950 args = {
|
|
Zerotorescue@0
|
951 description = {
|
|
Zerotorescue@0
|
952 order = 10,
|
|
Zerotorescue@0
|
953 type = "description",
|
|
Zerotorescue@68
|
954 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
|
955 },
|
|
Zerotorescue@0
|
956 header = {
|
|
Zerotorescue@0
|
957 order = 15,
|
|
Zerotorescue@0
|
958 type = "header",
|
|
Zerotorescue@0
|
959 name = "",
|
|
Zerotorescue@0
|
960 },
|
|
Zerotorescue@0
|
961 openMailInterval = {
|
|
Zerotorescue@0
|
962 order = 20,
|
|
Zerotorescue@0
|
963 type = "range",
|
|
Zerotorescue@0
|
964 min = 5,
|
|
Zerotorescue@0
|
965 max = 2500,
|
|
Zerotorescue@0
|
966 step = 5,
|
|
Zerotorescue@0
|
967 width = "double",
|
|
Zerotorescue@68
|
968 name = L["Open single mail interval"],
|
|
Zerotorescue@68
|
969 desc = L["Change the mail opening speed (in microseconds) for each mail. Lower may not always be faster."],
|
|
Zerotorescue@0
|
970 get = function() return ( self.db.profile.speed * 1000 ); end,
|
|
Zerotorescue@0
|
971 set = function(i, v) self.db.profile.speed = ( v / 1000 ); end,
|
|
Zerotorescue@0
|
972 },
|
|
Zerotorescue@0
|
973 },
|
|
Zerotorescue@0
|
974 },
|
|
Zerotorescue@0
|
975 },
|
|
Zerotorescue@0
|
976 };
|
|
Zerotorescue@0
|
977
|
|
Zerotorescue@0
|
978 return configGroup;
|
|
Zerotorescue@0
|
979 end
|
|
Zerotorescue@0
|
980
|
|
Zerotorescue@31
|
981 function mod:Debug(t)
|
|
Zerotorescue@68
|
982 return MailOpener:Debug(("|cff00ff00OpenAll|r:%s"):format(t));
|
|
Zerotorescue@0
|
983 end |