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