|
Zerotorescue@3
|
1 -- You can access this addon's object through: LibStub("AceAddon-3.0"):GetAddon("MailOpener")
|
|
Zerotorescue@3
|
2 local MailOpener = LibStub("AceAddon-3.0"):NewAddon("MailOpener", "AceEvent-3.0", "AceTimer-3.0");
|
|
Zerotorescue@68
|
3 local L = LibStub("AceLocale-3.0"):GetLocale("MailOpener");
|
|
Zerotorescue@0
|
4
|
|
Zerotorescue@8
|
5 -- You can check if MailOpener is busy with the global MailAddonBusy (if not MailAddonBusy then ...do something... end)
|
|
Zerotorescue@8
|
6 -- MailAddonBusy will be nil when nothing is happening or filled with the addon name when MO is working
|
|
Zerotorescue@8
|
7 -- Another addon can use this variable to indicate they're working too, MailOpener will then wait for that to finish
|
|
Zerotorescue@3
|
8
|
|
Zerotorescue@115
|
9 local AutoOpenMail, MailOpenerConfig, lastAmount, lastQuickAuctionsStatus, freshList, mailboxEmptySoundPlayed, mailboxEmptySoundPlayedThisVisit, hasOpenedMailAlready, originalCheckInbox;
|
|
Zerotorescue@0
|
10
|
|
Zerotorescue@0
|
11 function MailOpener:OnInitialize()
|
|
Zerotorescue@31
|
12 self:Debug("OnInitialize");
|
|
Zerotorescue@31
|
13
|
|
Zerotorescue@31
|
14
|
|
Zerotorescue@31
|
15
|
|
Zerotorescue@31
|
16
|
|
Zerotorescue@31
|
17 -- SAVED VARIABLES
|
|
Zerotorescue@31
|
18
|
|
Zerotorescue@0
|
19 local defaults = {
|
|
Zerotorescue@60
|
20 global = {
|
|
Zerotorescue@60
|
21 currentTip = -1, -- even though LUA table indexes start at one, Config's OnEnable will increase this value by one the first time you run it and another 1 to adjust for the % modifier, so we still actually start at the table index 1
|
|
Zerotorescue@60
|
22 },
|
|
Zerotorescue@0
|
23 profile = {
|
|
Zerotorescue@8
|
24 uses = 0,
|
|
Zerotorescue@0
|
25 general = {
|
|
Zerotorescue@8
|
26 defaultStatus = "disabled", -- addon enabled, but mail opening not auto on
|
|
Zerotorescue@0
|
27 defaultQAStatus = "__remember",
|
|
Zerotorescue@0
|
28 continueOpeningStackableItems = false,
|
|
Zerotorescue@51
|
29 showHelpTooltips = true,
|
|
Zerotorescue@0
|
30 autoDisableQAAutoMail = true,
|
|
Zerotorescue@0
|
31 autoReenableQAAutoMail = false,
|
|
Zerotorescue@0
|
32 autoSetBackQAAutoMail = true,
|
|
Zerotorescue@0
|
33 continueOpening = false,
|
|
Zerotorescue@0
|
34 waitTime = 5,
|
|
Zerotorescue@0
|
35 initialDelay = 0.5,
|
|
Zerotorescue@111
|
36 overrideCheckInbox = true,
|
|
Zerotorescue@0
|
37 },
|
|
Zerotorescue@0
|
38 modules = {
|
|
Zerotorescue@31
|
39 BeanCounterSupport = true,
|
|
Zerotorescue@31
|
40 Config = false,
|
|
Zerotorescue@0
|
41 Collected = true,
|
|
Zerotorescue@5
|
42 FailSafe = true,
|
|
Zerotorescue@0
|
43 },
|
|
Zerotorescue@0
|
44 notifications = {
|
|
Zerotorescue@3
|
45 welcome = false,
|
|
Zerotorescue@3
|
46 bye = false,
|
|
Zerotorescue@0
|
47 finishedCurrentBatch = true,
|
|
Zerotorescue@0
|
48 mailboxIsEmpty = true,
|
|
Zerotorescue@0
|
49
|
|
Zerotorescue@0
|
50 skipped = {
|
|
Zerotorescue@0
|
51 all = true,
|
|
Zerotorescue@0
|
52 inventoryFull = true,
|
|
Zerotorescue@0
|
53 keepFreeSpaceLimit = true,
|
|
Zerotorescue@0
|
54 GMMail = true,
|
|
Zerotorescue@0
|
55 COD = true,
|
|
Zerotorescue@0
|
56 normalGoldMail = true,
|
|
Zerotorescue@0
|
57 normalItemsMail = true,
|
|
Zerotorescue@0
|
58 AHexpired = true,
|
|
Zerotorescue@0
|
59 AHsuccess = true,
|
|
Zerotorescue@0
|
60 AHwon = true,
|
|
Zerotorescue@0
|
61 AHcanceled = true,
|
|
Zerotorescue@0
|
62 AHoutbid = true,
|
|
Zerotorescue@0
|
63 other = true,
|
|
Zerotorescue@0
|
64 },
|
|
Zerotorescue@0
|
65 processed = {
|
|
Zerotorescue@0
|
66 all = true,
|
|
Zerotorescue@0
|
67 normalGoldMail = true,
|
|
Zerotorescue@0
|
68 normalItemsMail = true,
|
|
Zerotorescue@0
|
69 AHexpired = true,
|
|
Zerotorescue@0
|
70 AHsuccess = true,
|
|
Zerotorescue@0
|
71 AHwon = true,
|
|
Zerotorescue@0
|
72 AHcanceled = true,
|
|
Zerotorescue@0
|
73 AHoutbid = true,
|
|
Zerotorescue@0
|
74 other = true,
|
|
Zerotorescue@0
|
75 },
|
|
Zerotorescue@0
|
76
|
|
Zerotorescue@0
|
77 bagsFullSound = false,
|
|
Zerotorescue@0
|
78 bagsFullSoundFile = "Sound\\Spells\\SimonGame_Visual_BadPress.wav",
|
|
Zerotorescue@0
|
79 bagsFullSoundFileName = "Simon Error",
|
|
Zerotorescue@0
|
80 bagsFullSoundOnlyOnce = true,
|
|
Zerotorescue@42
|
81 bagsFullSoundOnlyOncePerMailboxVisit = false,
|
|
Zerotorescue@0
|
82 mailboxEmptySound = false,
|
|
Zerotorescue@0
|
83 mailboxEmptySoundFile = "Sound\\Spells\\SimonGame_Visual_GameStart.wav",
|
|
Zerotorescue@0
|
84 mailboxEmptySoundFileName = "Simon Start",
|
|
Zerotorescue@0
|
85 mailboxEmptySoundOnlyOnce = true,
|
|
Zerotorescue@42
|
86 mailboxEmptySoundOnlyOncePerMailboxVisit = false,
|
|
Zerotorescue@0
|
87 },
|
|
Zerotorescue@0
|
88 },
|
|
Zerotorescue@0
|
89 };
|
|
Zerotorescue@0
|
90
|
|
Zerotorescue@0
|
91 -- Register our saved variables database
|
|
Zerotorescue@0
|
92 self.db = LibStub("AceDB-3.0"):New("MailOpenerDB", defaults, true);
|
|
Zerotorescue@0
|
93
|
|
Zerotorescue@0
|
94
|
|
Zerotorescue@31
|
95
|
|
Zerotorescue@31
|
96
|
|
Zerotorescue@31
|
97
|
|
Zerotorescue@31
|
98 -- MODULE TOGGLING
|
|
Zerotorescue@0
|
99
|
|
Zerotorescue@0
|
100 -- Don't enable the config module until we need it
|
|
Zerotorescue@0
|
101 for name, module in self:IterateModules() do
|
|
Zerotorescue@31
|
102 if self.db.profile.modules[name] ~= nil then
|
|
Zerotorescue@0
|
103 if self.db.profile.modules[name] then
|
|
Zerotorescue@68
|
104 self:Debug(("|cff00ff00Enabling|r module: "):format(name));
|
|
Zerotorescue@0
|
105 else
|
|
Zerotorescue@68
|
106 self:Debug(("|cffff0000Disabling|r module: "):format(name));
|
|
Zerotorescue@0
|
107 end
|
|
Zerotorescue@0
|
108
|
|
Zerotorescue@0
|
109 module:SetEnabledState(self.db.profile.modules[name]);
|
|
Zerotorescue@0
|
110 end
|
|
Zerotorescue@0
|
111 end
|
|
Zerotorescue@0
|
112
|
|
Zerotorescue@31
|
113
|
|
Zerotorescue@31
|
114
|
|
Zerotorescue@31
|
115
|
|
Zerotorescue@31
|
116
|
|
Zerotorescue@31
|
117 -- SLASH COMMANDS
|
|
Zerotorescue@31
|
118
|
|
Zerotorescue@31
|
119 -- Disable the AddonLoader slash commands
|
|
Zerotorescue@31
|
120 SLASH_MO1 = nil;
|
|
Zerotorescue@31
|
121 SLASH_MAILOPEN1 = nil;
|
|
Zerotorescue@31
|
122 SLASH_MAILOPENER1 = nil;
|
|
Zerotorescue@31
|
123
|
|
Zerotorescue@31
|
124 -- Register our own slash commands
|
|
Zerotorescue@31
|
125 SLASH_MAILOPENER1 = "/mo";
|
|
Zerotorescue@31
|
126 SLASH_MAILOPENER2 = "/mailopen";
|
|
Zerotorescue@31
|
127 SLASH_MAILOPENER3 = "/mailopener";
|
|
Zerotorescue@31
|
128 SlashCmdList["MAILOPENER"] = function(msg)
|
|
Zerotorescue@31
|
129 MailOpener:EnableConfigModule();
|
|
Zerotorescue@31
|
130
|
|
Zerotorescue@31
|
131 MailOpenerConfig:CommandHandler(msg);
|
|
Zerotorescue@31
|
132 end
|
|
Zerotorescue@31
|
133
|
|
Zerotorescue@31
|
134
|
|
Zerotorescue@31
|
135
|
|
Zerotorescue@31
|
136
|
|
Zerotorescue@31
|
137
|
|
Zerotorescue@31
|
138 -- INTERFACE OPTIONS
|
|
Zerotorescue@31
|
139
|
|
Zerotorescue@31
|
140 -- Attempt to remove the interface options added by AddonLoader (if enabled)
|
|
Zerotorescue@31
|
141 if AddonLoader and AddonLoader.RemoveInterfaceOptions then
|
|
Zerotorescue@31
|
142 AddonLoader:RemoveInterfaceOptions("Mail Opener");
|
|
Zerotorescue@31
|
143 end
|
|
Zerotorescue@31
|
144
|
|
Zerotorescue@31
|
145 -- Now create our own options frame
|
|
Zerotorescue@31
|
146 local frame = CreateFrame("Frame", nil, UIParent);
|
|
Zerotorescue@31
|
147 frame:Hide();
|
|
Zerotorescue@31
|
148 frame.name = "Mail Opener";
|
|
Zerotorescue@135
|
149 frame.fresh = true;
|
|
Zerotorescue@31
|
150 frame:HookScript("OnShow", function(self)
|
|
Zerotorescue@135
|
151 if self.fresh then
|
|
Zerotorescue@135
|
152 self.fresh = nil;
|
|
Zerotorescue@135
|
153
|
|
Zerotorescue@135
|
154 -- Enable the config module
|
|
Zerotorescue@135
|
155 MailOpener:EnableConfigModule();
|
|
Zerotorescue@135
|
156
|
|
Zerotorescue@135
|
157 -- Load the options and add it to the blizzard interface list
|
|
Zerotorescue@135
|
158 MailOpenerConfig:Load();
|
|
Zerotorescue@135
|
159
|
|
Zerotorescue@135
|
160 -- Refresh the frame to instantly show the right options
|
|
Zerotorescue@135
|
161 InterfaceOptionsFrame_OpenToCategory(self.name);
|
|
Zerotorescue@135
|
162 end
|
|
Zerotorescue@31
|
163 end);
|
|
Zerotorescue@31
|
164 -- And add it to the interface options
|
|
Zerotorescue@31
|
165 InterfaceOptions_AddCategory(frame);
|
|
Zerotorescue@31
|
166
|
|
Zerotorescue@31
|
167
|
|
Zerotorescue@31
|
168
|
|
Zerotorescue@31
|
169
|
|
Zerotorescue@31
|
170
|
|
Zerotorescue@31
|
171 -- ADDON / MAIL OPENING STATUS TOGGLER
|
|
Zerotorescue@31
|
172
|
|
Zerotorescue@0
|
173 -- Make the open all checkbox
|
|
Zerotorescue@50
|
174 local check = CreateFrame("CheckButton", "cbMailOpenerEnable", MailFrame, "OptionsCheckButtonTemplate");
|
|
Zerotorescue@0
|
175 check:SetHeight(26);
|
|
Zerotorescue@0
|
176 check:SetWidth(26);
|
|
Zerotorescue@50
|
177 check:SetPoint("TOPLEFT", MailFrame, "TOPLEFT", 68, -13);
|
|
Zerotorescue@3
|
178 check:SetChecked(true);
|
|
Zerotorescue@0
|
179 check:SetHitRectInsets(0, -80, 0, 0);
|
|
Zerotorescue@91
|
180 check:SetScript("OnClick", function(cbSelf)
|
|
Zerotorescue@3
|
181 if IsShiftKeyDown() then
|
|
Zerotorescue@3
|
182 -- Shift key = toggle addon on or off, since addon is already on there's only one option
|
|
Zerotorescue@3
|
183
|
|
Zerotorescue@91
|
184 if not self:IsEnabled() then
|
|
Zerotorescue@91
|
185 self:Print(L["Shift key was held down, so |cff00ff00enabling|r the entire addon as well as automatic opening of mail."]);
|
|
Zerotorescue@3
|
186
|
|
Zerotorescue@91
|
187 self:Enable();
|
|
Zerotorescue@3
|
188
|
|
Zerotorescue@3
|
189 -- The above calls MAIL_SHOW which changes AutoOpenMail, so we can't remember the old setting
|
|
Zerotorescue@3
|
190 AutoOpenMail = true;
|
|
Zerotorescue@3
|
191
|
|
Zerotorescue@91
|
192 cbSelf:SetChecked(true);
|
|
Zerotorescue@3
|
193 else
|
|
Zerotorescue@91
|
194 self:Print(L["Shift key was held down, so |cffff0000disabling|r the entire addon."]);
|
|
Zerotorescue@3
|
195
|
|
Zerotorescue@91
|
196 self:Disable();
|
|
Zerotorescue@3
|
197
|
|
Zerotorescue@91
|
198 cbSelf:SetChecked(false);
|
|
Zerotorescue@3
|
199 end
|
|
Zerotorescue@0
|
200 else
|
|
Zerotorescue@3
|
201 -- Normal click
|
|
Zerotorescue@3
|
202
|
|
Zerotorescue@91
|
203 if cbSelf:GetChecked() then
|
|
Zerotorescue@91
|
204 self:Print(L["|cff00ff00Enabling|r automatic opening of mail."]);
|
|
Zerotorescue@3
|
205
|
|
Zerotorescue@3
|
206 AutoOpenMail = true;
|
|
Zerotorescue@91
|
207 self:ScheduleOpen(false);
|
|
Zerotorescue@3
|
208 else
|
|
Zerotorescue@91
|
209 self:Print(L["|cffff0000Disabling|r automatic opening of mail."]);
|
|
Zerotorescue@3
|
210
|
|
Zerotorescue@3
|
211 AutoOpenMail = false;
|
|
Zerotorescue@3
|
212 end
|
|
Zerotorescue@0
|
213 end
|
|
Zerotorescue@0
|
214 end);
|
|
Zerotorescue@68
|
215 check.tooltipTitle = L["Mail Opener status"];
|
|
Zerotorescue@68
|
216 check.tooltip = L["Toggle automatic mail opening |cff00ff00on|r or |cffff0000off|r (you can also enforce this by holding shift when opening the mailbox).\n\nYou can toggle this addon |cff00ff00on|r or |cffff0000off|r by |cfffed000shift-clicking|r this checkbox."];
|
|
Zerotorescue@91
|
217 check:SetScript("OnEnter", function(cbSelf)
|
|
Zerotorescue@91
|
218 if self.db.profile.general.showHelpTooltips then
|
|
Zerotorescue@91
|
219 GameTooltip:SetOwner(cbSelf, "ANCHOR_BOTTOM")
|
|
Zerotorescue@91
|
220 GameTooltip:SetPoint("BOTTOM", cbSelf, "BOTTOM")
|
|
Zerotorescue@91
|
221 GameTooltip:SetText(cbSelf.tooltipTitle, 1, .82, 0, 1)
|
|
Zerotorescue@51
|
222
|
|
Zerotorescue@91
|
223 if type(cbSelf.tooltip) == "string" then
|
|
Zerotorescue@91
|
224 GameTooltip:AddLine(cbSelf.tooltip, 1, 1, 1, 1);
|
|
Zerotorescue@51
|
225 end
|
|
Zerotorescue@51
|
226
|
|
Zerotorescue@51
|
227 GameTooltip:Show();
|
|
Zerotorescue@50
|
228 end
|
|
Zerotorescue@50
|
229 end);
|
|
Zerotorescue@91
|
230 check:SetScript("OnLeave", function(cbSelf)
|
|
Zerotorescue@50
|
231 GameTooltip:Hide();
|
|
Zerotorescue@50
|
232 end);
|
|
Zerotorescue@0
|
233
|
|
Zerotorescue@0
|
234 -- Get reference to the text field
|
|
Zerotorescue@0
|
235 local checkboxText = _G[check:GetName() .. "Text"];
|
|
Zerotorescue@68
|
236 checkboxText:SetText(L["Mail Opener"]);
|
|
Zerotorescue@0
|
237
|
|
Zerotorescue@0
|
238 self.cbOpenAll = check;
|
|
Zerotorescue@0
|
239
|
|
Zerotorescue@31
|
240
|
|
Zerotorescue@31
|
241
|
|
Zerotorescue@31
|
242
|
|
Zerotorescue@31
|
243 -- CONFIG BUTTON
|
|
Zerotorescue@31
|
244
|
|
Zerotorescue@0
|
245 -- Make the config button
|
|
Zerotorescue@0
|
246 local button = CreateFrame("Button", "btnMailOpenerConfig", MailFrame, "UIPanelButtonTemplate")
|
|
Zerotorescue@68
|
247 button:SetText(L["Config"])
|
|
Zerotorescue@0
|
248 button:SetHeight(23)
|
|
Zerotorescue@0
|
249 button:SetWidth(55)
|
|
Zerotorescue@31
|
250 button:SetPoint("TOPRIGHT", MailFrame, "TOPRIGHT", -55, -13);
|
|
Zerotorescue@0
|
251 button:SetScript("OnClick", function()
|
|
Zerotorescue@0
|
252 MailOpener:EnableConfigModule();
|
|
Zerotorescue@0
|
253
|
|
Zerotorescue@0
|
254 MailOpenerConfig:Show();
|
|
Zerotorescue@0
|
255
|
|
Zerotorescue@8
|
256 --BETA:if MailOpener.db.profile.uses >= 15 then
|
|
Zerotorescue@7
|
257 --BETA: MailOpener:ShowBetaPopup();
|
|
Zerotorescue@7
|
258 --BETA:end
|
|
Zerotorescue@0
|
259 end);
|
|
Zerotorescue@68
|
260 button.tooltipTitle = L["Mail Opener Config"];
|
|
Zerotorescue@68
|
261 button.tooltip = L["Click to open the configuration window for Mail Opener."];
|
|
Zerotorescue@91
|
262 button:SetScript("OnEnter", function(btnSelf)
|
|
Zerotorescue@91
|
263 if self.db.profile.general.showHelpTooltips then
|
|
Zerotorescue@91
|
264 GameTooltip:SetOwner(btnSelf, "ANCHOR_BOTTOM")
|
|
Zerotorescue@91
|
265 GameTooltip:SetPoint("BOTTOM", btnSelf, "TOP")
|
|
Zerotorescue@91
|
266 GameTooltip:SetText(btnSelf.tooltipTitle, 1, .82, 0, 1)
|
|
Zerotorescue@51
|
267
|
|
Zerotorescue@91
|
268 if type(btnSelf.tooltip) == "string" then
|
|
Zerotorescue@91
|
269 GameTooltip:AddLine(btnSelf.tooltip, 1, 1, 1, 1);
|
|
Zerotorescue@51
|
270 end
|
|
Zerotorescue@51
|
271
|
|
Zerotorescue@51
|
272 GameTooltip:Show();
|
|
Zerotorescue@50
|
273 end
|
|
Zerotorescue@50
|
274 end);
|
|
Zerotorescue@91
|
275 button:SetScript("OnLeave", function(btnSelf)
|
|
Zerotorescue@50
|
276 GameTooltip:Hide();
|
|
Zerotorescue@50
|
277 end);
|
|
Zerotorescue@0
|
278
|
|
Zerotorescue@0
|
279 self.btnConfig = button;
|
|
Zerotorescue@0
|
280
|
|
Zerotorescue@31
|
281
|
|
Zerotorescue@31
|
282
|
|
Zerotorescue@31
|
283
|
|
Zerotorescue@31
|
284
|
|
Zerotorescue@31
|
285 -- ADDON LOADING
|
|
Zerotorescue@31
|
286 -- THE BELOW WILL TAKE SOME TIME; WE WILL BE LOADING OTHER ADDONS
|
|
Zerotorescue@31
|
287
|
|
Zerotorescue@31
|
288 if select(6, GetAddOnInfo("Postal")) == nil then
|
|
Zerotorescue@31
|
289 self.PostalEnabled = true; -- Set this as an object variable so we can use it in our modules
|
|
Zerotorescue@0
|
290
|
|
Zerotorescue@31
|
291 -- Ensure this addon is loaded if AddonLoader is installed
|
|
Zerotorescue@126
|
292 if AddonLoader and AddonLoader.LoadAddOn and not IsAddOnLoaded("Postal") and not Postal then
|
|
Zerotorescue@31
|
293 AddonLoader:LoadAddOn("Postal");
|
|
Zerotorescue@31
|
294 end
|
|
Zerotorescue@0
|
295 end
|
|
Zerotorescue@0
|
296
|
|
Zerotorescue@118
|
297 if select(6, GetAddOnInfo("ZeroAuctions")) == nil then
|
|
Zerotorescue@118
|
298 self.ZeroAuctionsEnabled = true; -- Set this as an object variable so we can use it in our modules
|
|
Zerotorescue@116
|
299
|
|
Zerotorescue@116
|
300 -- Ensure this addon is loaded if AddonLoader is installed
|
|
Zerotorescue@126
|
301 if AddonLoader and AddonLoader.LoadAddOn and not IsAddOnLoaded("ZeroAuctions") then
|
|
Zerotorescue@116
|
302 AddonLoader:LoadAddOn("ZeroAuctions");
|
|
Zerotorescue@116
|
303 end
|
|
Zerotorescue@31
|
304 end
|
|
Zerotorescue@31
|
305
|
|
Zerotorescue@132
|
306 if select(6, GetAddOnInfo("AuctionProfitMaster")) == nil then
|
|
Zerotorescue@132
|
307 self.ZeroAuctionsEnabled = true; -- Set this as an object variable so we can use it in our modules
|
|
Zerotorescue@132
|
308
|
|
Zerotorescue@132
|
309 -- Ensure this addon is loaded if AddonLoader is installed
|
|
Zerotorescue@132
|
310 if AddonLoader and AddonLoader.LoadAddOn and not IsAddOnLoaded("AuctionProfitMaster") then
|
|
Zerotorescue@132
|
311 AddonLoader:LoadAddOn("AuctionProfitMaster");
|
|
Zerotorescue@132
|
312 end
|
|
Zerotorescue@132
|
313 end
|
|
Zerotorescue@132
|
314
|
|
Zerotorescue@154
|
315 if select(6, GetAddOnInfo("TradeSkillMaster_Mailing")) == nil then
|
|
Zerotorescue@154
|
316 self.TSMMailingEnabled = true; -- Set this as an object variable so we can use it in our modules
|
|
Zerotorescue@154
|
317
|
|
Zerotorescue@154
|
318 -- Ensure this addon is loaded if AddonLoader is installed
|
|
Zerotorescue@154
|
319 if AddonLoader and AddonLoader.LoadAddOn and not IsAddOnLoaded("TradeSkillMaster_Mailing") then
|
|
Zerotorescue@154
|
320 AddonLoader:LoadAddOn("TradeSkillMaster_Mailing");
|
|
Zerotorescue@154
|
321 end
|
|
Zerotorescue@154
|
322 end
|
|
Zerotorescue@154
|
323
|
|
Zerotorescue@31
|
324
|
|
Zerotorescue@31
|
325
|
|
Zerotorescue@31
|
326
|
|
Zerotorescue@31
|
327
|
|
Zerotorescue@31
|
328 -- ADJUST POSITIONS
|
|
Zerotorescue@31
|
329
|
|
Zerotorescue@123
|
330 if self.ZeroAuctionsEnabled then
|
|
Zerotorescue@31
|
331 -- QA is enabled so move the checkbox further to the right
|
|
Zerotorescue@0
|
332
|
|
Zerotorescue@31
|
333 self.cbOpenAll:SetPoint("TOPLEFT", MailFrame, "TOPLEFT", 155, -13);
|
|
Zerotorescue@31
|
334 end
|
|
Zerotorescue@31
|
335
|
|
Zerotorescue@31
|
336 if self.PostalEnabled then
|
|
Zerotorescue@31
|
337 self.btnConfig:SetPoint("TOPRIGHT", MailFrame, "TOPRIGHT", -75, -13);
|
|
Zerotorescue@31
|
338 end
|
|
Zerotorescue@0
|
339 end
|
|
Zerotorescue@0
|
340
|
|
Zerotorescue@0
|
341 function MailOpener:OnEnable()
|
|
Zerotorescue@0
|
342 self:RegisterEvent("MAIL_SHOW");
|
|
Zerotorescue@0
|
343 self:RegisterEvent("PLAYER_ENTERING_WORLD");
|
|
Zerotorescue@0
|
344
|
|
Zerotorescue@0
|
345 self.btnConfig:Show();
|
|
Zerotorescue@0
|
346
|
|
Zerotorescue@139
|
347 -- Reset variables
|
|
Zerotorescue@139
|
348 lastAmount = 0;
|
|
Zerotorescue@139
|
349 self.debugChannel = nil;
|
|
Zerotorescue@139
|
350
|
|
Zerotorescue@115
|
351 if not originalCheckInbox then
|
|
Zerotorescue@115
|
352 -- Override the CheckInbox function
|
|
Zerotorescue@115
|
353 -- Remember the original
|
|
Zerotorescue@115
|
354 originalCheckInbox = CheckInbox;
|
|
Zerotorescue@115
|
355 -- Then override that
|
|
Zerotorescue@115
|
356 CheckInbox = NewCheckInbox;
|
|
Zerotorescue@115
|
357 end
|
|
Zerotorescue@115
|
358
|
|
Zerotorescue@0
|
359 -- If we were toggling this addon on while the mailbox is opened we must register all events again
|
|
Zerotorescue@0
|
360 if MailFrame:IsVisible() then
|
|
Zerotorescue@0
|
361 self:MAIL_SHOW();
|
|
Zerotorescue@0
|
362 end
|
|
Zerotorescue@0
|
363 end
|
|
Zerotorescue@0
|
364
|
|
Zerotorescue@0
|
365 function MailOpener:OnDisable()
|
|
Zerotorescue@0
|
366 self:UnregisterEvent("MAIL_SHOW");
|
|
Zerotorescue@0
|
367
|
|
Zerotorescue@0
|
368 self.btnConfig:Hide();
|
|
Zerotorescue@0
|
369
|
|
Zerotorescue@115
|
370 if originalCheckInbox then
|
|
Zerotorescue@115
|
371 -- Change checkinbox back to the original value
|
|
Zerotorescue@115
|
372 CheckInbox = originalCheckInbox;
|
|
Zerotorescue@115
|
373 -- Forget the other reference
|
|
Zerotorescue@115
|
374 originalCheckInbox = nil;
|
|
Zerotorescue@115
|
375 end
|
|
Zerotorescue@115
|
376
|
|
Zerotorescue@0
|
377 MailOpener:Stop();
|
|
Zerotorescue@0
|
378 end
|
|
Zerotorescue@0
|
379
|
|
Zerotorescue@0
|
380 -- We must disable Quick Auction's auto mail (if set up that way in the settings) before opening the mailbox or it will instantly start sending stuff
|
|
Zerotorescue@0
|
381 function MailOpener:PLAYER_ENTERING_WORLD()
|
|
Zerotorescue@0
|
382 self:UnregisterEvent("PLAYER_ENTERING_WORLD");
|
|
Zerotorescue@0
|
383
|
|
Zerotorescue@0
|
384 self:ToggleQAStatus();
|
|
Zerotorescue@0
|
385 end
|
|
Zerotorescue@0
|
386
|
|
Zerotorescue@0
|
387 -- Fired when the mailbox is opened
|
|
Zerotorescue@0
|
388 function MailOpener:MAIL_SHOW()
|
|
Zerotorescue@0
|
389 -- To stop the timer when the mailbox is closed
|
|
Zerotorescue@0
|
390 self:RegisterEvent("MAIL_CLOSED", "Stop");
|
|
Zerotorescue@0
|
391 self:RegisterEvent("PLAYER_LEAVING_WORLD", "Stop");
|
|
Zerotorescue@0
|
392
|
|
Zerotorescue@0
|
393 -- To set the timer for when to refresh again
|
|
Zerotorescue@0
|
394 self:RegisterEvent("MAIL_INBOX_UPDATE");
|
|
Zerotorescue@0
|
395
|
|
Zerotorescue@0
|
396 -- We need to know when opening has completed
|
|
Zerotorescue@0
|
397 self:RegisterMessage("MO_OPEN_COMPLETE");
|
|
Zerotorescue@0
|
398
|
|
Zerotorescue@19
|
399 if self.db.profile.uses == 0 and MailOpener.db.profile.general.defaultStatus ~= "_enabled" then
|
|
Zerotorescue@19
|
400 StaticPopupDialogs["MailOpenerFirstUseConfirmBox"] = {
|
|
Zerotorescue@68
|
401 text = L["You are using |cff15ff00Mail Opener|r for the first time. Do you wish to always |cf00ff000enable|r |cfffed000automatic mail opening when you open the mailbox|r?\n\nYou can always change the standard behavior in the General options."],
|
|
Zerotorescue@68
|
402 button1 = L["Yes"],
|
|
Zerotorescue@68
|
403 button2 = L["No"],
|
|
Zerotorescue@19
|
404 OnAccept = function()
|
|
Zerotorescue@19
|
405 MailOpener.db.profile.general.defaultStatus = "_enabled";
|
|
Zerotorescue@85
|
406 MailOpener:Print(L["You can always change the default status in the General config (|cff00ffff/mo c|r)."]);
|
|
Zerotorescue@19
|
407
|
|
Zerotorescue@85
|
408 MailOpener:Print(L["|cff00ff00Enabling|r automatic opening of mail."]);
|
|
Zerotorescue@19
|
409 MailOpener.cbOpenAll:SetChecked(true);
|
|
Zerotorescue@19
|
410
|
|
Zerotorescue@19
|
411 AutoOpenMail = true;
|
|
Zerotorescue@19
|
412 MailOpener:ScheduleOpen(false);
|
|
Zerotorescue@19
|
413 end,
|
|
Zerotorescue@91
|
414 OnCancel = function ()
|
|
Zerotorescue@85
|
415 MailOpener:Print(L["You can always change the default status in the General config (|cff00ffff/mo c|r)."]);
|
|
Zerotorescue@19
|
416 end,
|
|
Zerotorescue@19
|
417 timeout = 0,
|
|
Zerotorescue@19
|
418 whileDead = 1,
|
|
Zerotorescue@19
|
419 hideOnEscape = 1,
|
|
Zerotorescue@19
|
420 };
|
|
Zerotorescue@19
|
421 StaticPopup_Show("MailOpenerFirstUseConfirmBox");
|
|
Zerotorescue@8
|
422 end
|
|
Zerotorescue@8
|
423
|
|
Zerotorescue@8
|
424 self.db.profile.uses = ( self.db.profile.uses + 1 );
|
|
Zerotorescue@8
|
425
|
|
Zerotorescue@0
|
426 self:Debug("defaultStatus:" .. self.db.profile.general.defaultStatus);
|
|
Zerotorescue@0
|
427 -- Change the mail opening status according to our settings
|
|
Zerotorescue@0
|
428 if self.db.profile.general.defaultStatus == "_enabled" then
|
|
Zerotorescue@3
|
429 AutoOpenMail = true;
|
|
Zerotorescue@3
|
430 self.cbOpenAll:SetChecked(true);
|
|
Zerotorescue@3
|
431 elseif self.db.profile.general.defaultStatus == "disabled" then
|
|
Zerotorescue@3
|
432 -- Disable auto opening but leave mail opener enabled
|
|
Zerotorescue@3
|
433
|
|
Zerotorescue@3
|
434 AutoOpenMail = false;
|
|
Zerotorescue@3
|
435 self.cbOpenAll:SetChecked(false);
|
|
Zerotorescue@3
|
436 elseif self.db.profile.general.defaultStatus == "xdisabled" then
|
|
Zerotorescue@3
|
437 -- Disable entire addon
|
|
Zerotorescue@3
|
438
|
|
Zerotorescue@3
|
439 MailOpener:Disable();
|
|
Zerotorescue@3
|
440 self.cbOpenAll:SetChecked(false);
|
|
Zerotorescue@0
|
441 end
|
|
Zerotorescue@0
|
442
|
|
Zerotorescue@161
|
443 hasOpenedMailAlready = nil;
|
|
Zerotorescue@161
|
444 mailboxEmptySoundPlayed = nil;
|
|
Zerotorescue@161
|
445 mailboxEmptySoundPlayedThisVisit = nil;
|
|
Zerotorescue@161
|
446
|
|
Zerotorescue@46
|
447 if IsShiftKeyDown() then
|
|
Zerotorescue@68
|
448 self:Print(L["|cffff0000Disabling|r automatic opening of mail, shift key was down when opening the mailbox."]);
|
|
Zerotorescue@46
|
449
|
|
Zerotorescue@46
|
450 AutoOpenMail = false;
|
|
Zerotorescue@161
|
451 hasOpenedMailAlready = true;
|
|
Zerotorescue@46
|
452 self.cbOpenAll:SetChecked(false);
|
|
Zerotorescue@46
|
453 end
|
|
Zerotorescue@46
|
454
|
|
Zerotorescue@0
|
455 self:ToggleQAStatus();
|
|
Zerotorescue@0
|
456
|
|
Zerotorescue@0
|
457 -- Hide the InboxTooMuchMail warning to allow room for our mail remaining info line
|
|
Zerotorescue@0
|
458 InboxTooMuchMail:Hide()
|
|
Zerotorescue@0
|
459 InboxTooMuchMail.Show = function() end
|
|
Zerotorescue@0
|
460
|
|
Zerotorescue@118
|
461 if self.ZeroAuctionsEnabled then
|
|
Zerotorescue@132
|
462 local AHAddon = LibStub("AceAddon-3.0"):GetAddon("ZeroAuctions", true) or LibStub("AceAddon-3.0"):GetAddon("AuctionProfitMaster", true);
|
|
Zerotorescue@132
|
463 if AHAddon then
|
|
Zerotorescue@132
|
464 local QAMail = AHAddon:GetModule("Mail", true);
|
|
Zerotorescue@132
|
465
|
|
Zerotorescue@132
|
466 if QAMail then
|
|
Zerotorescue@143
|
467 if QAMail.massOpening then
|
|
Zerotorescue@143
|
468 -- Hide the open all button
|
|
Zerotorescue@143
|
469 QAMail.massOpening:Hide();
|
|
Zerotorescue@143
|
470 end
|
|
Zerotorescue@143
|
471 if QAMail.totalMail then
|
|
Zerotorescue@143
|
472 -- Hide the x mail remaining text
|
|
Zerotorescue@143
|
473 QAMail.totalMail:Hide();
|
|
Zerotorescue@143
|
474 end
|
|
Zerotorescue@132
|
475 end
|
|
Zerotorescue@8
|
476 end
|
|
Zerotorescue@0
|
477 end
|
|
Zerotorescue@0
|
478
|
|
Zerotorescue@0
|
479 self:Recheck();
|
|
Zerotorescue@0
|
480
|
|
Zerotorescue@0
|
481 if self.db.profile.general.continueOpening then
|
|
Zerotorescue@6
|
482 -- Continue opening mail, but use the "initial mail opening interval" as time
|
|
Zerotorescue@6
|
483 self:ScheduleOpen(false);
|
|
Zerotorescue@0
|
484 end
|
|
Zerotorescue@0
|
485 end
|
|
Zerotorescue@0
|
486
|
|
Zerotorescue@0
|
487 -- Fired after a successful server sync
|
|
Zerotorescue@0
|
488 -- Fired when mail is deleted (which happens after taking all attachments from a mail sent by the game)
|
|
Zerotorescue@0
|
489 function MailOpener:MAIL_INBOX_UPDATE()
|
|
Zerotorescue@0
|
490 local current, total = GetInboxNumItems();
|
|
Zerotorescue@0
|
491
|
|
Zerotorescue@3
|
492 -- Calculate the amount of mail waiting that actually have attachments
|
|
Zerotorescue@3
|
493 -- If we just compare numbers we won't be including mail that isn't automatically deleted when opened, such as mail with attachments sent by other players
|
|
Zerotorescue@3
|
494 local currentMailWithAttachments = 0;
|
|
Zerotorescue@3
|
495 for i = 1, current do
|
|
Zerotorescue@3
|
496 local _, _, _, _, money, _, _, items = GetInboxHeaderInfo(i);
|
|
Zerotorescue@3
|
497
|
|
Zerotorescue@3
|
498 if (items and items > 0) or (money and money > 0) then
|
|
Zerotorescue@3
|
499 currentMailWithAttachments = currentMailWithAttachments + 1;
|
|
Zerotorescue@3
|
500 end
|
|
Zerotorescue@0
|
501 end
|
|
Zerotorescue@0
|
502
|
|
Zerotorescue@3
|
503 local tempLastAmount = lastAmount;
|
|
Zerotorescue@3
|
504 lastAmount = currentMailWithAttachments;
|
|
Zerotorescue@3
|
505
|
|
Zerotorescue@11
|
506 --if currentMailWithAttachments ~= tempLastAmount then
|
|
Zerotorescue@11
|
507 -- self:Debug("MAIL_INBOX_UPDATE - lastAmount:" .. tempLastAmount .. " - current:" .. currentMailWithAttachments);
|
|
Zerotorescue@11
|
508 --end
|
|
Zerotorescue@3
|
509
|
|
Zerotorescue@3
|
510 if currentMailWithAttachments > tempLastAmount then
|
|
Zerotorescue@0
|
511 -- New messages arrived in our mailbox, so this was a refresh, so set a timer
|
|
Zerotorescue@0
|
512
|
|
Zerotorescue@3
|
513 self:Debug("MO_SERVER_SYNCED");
|
|
Zerotorescue@3
|
514
|
|
Zerotorescue@0
|
515 -- Yell that we successfully synced with the server
|
|
Zerotorescue@0
|
516 self:SendMessage("MO_SERVER_SYNCED");
|
|
Zerotorescue@0
|
517
|
|
Zerotorescue@29
|
518 if MailAddonBusy == MailOpener:GetName() then
|
|
Zerotorescue@29
|
519 MailAddonBusy = nil;
|
|
Zerotorescue@29
|
520 end
|
|
Zerotorescue@29
|
521
|
|
Zerotorescue@0
|
522 -- This list is fresh
|
|
Zerotorescue@0
|
523 freshList = true;
|
|
Zerotorescue@0
|
524 mailboxEmptySoundPlayed = nil;
|
|
Zerotorescue@0
|
525
|
|
Zerotorescue@0
|
526 -- Stop previous timer
|
|
Zerotorescue@0
|
527 self:CancelTimer(self.tmrRecheck, true);
|
|
Zerotorescue@0
|
528 -- More will arrive in 60 seconds
|
|
Zerotorescue@0
|
529 self.tmrRecheck = self:ScheduleTimer(function()
|
|
Zerotorescue@0
|
530 self:Debug("tmrRecheck 61 finished");
|
|
Zerotorescue@0
|
531
|
|
Zerotorescue@0
|
532 -- We can get a fresh list now, so query the server
|
|
Zerotorescue@0
|
533 freshList = false;
|
|
Zerotorescue@0
|
534
|
|
Zerotorescue@0
|
535 -- Look for mail
|
|
Zerotorescue@0
|
536 self:Recheck();
|
|
Zerotorescue@0
|
537 end, 61);
|
|
Zerotorescue@0
|
538 self:Debug("tmrRecheck 61");
|
|
Zerotorescue@0
|
539
|
|
Zerotorescue@46
|
540 -- Open the current mail
|
|
Zerotorescue@46
|
541 self:ScheduleOpen(false);
|
|
Zerotorescue@3
|
542 elseif currentMailWithAttachments < tempLastAmount then
|
|
Zerotorescue@2
|
543 -- We lost a mail
|
|
Zerotorescue@2
|
544
|
|
Zerotorescue@19
|
545 --TODO: NYI: May need to delay this until the mail is actually deleted to keep the mail count more realtime
|
|
Zerotorescue@3
|
546
|
|
Zerotorescue@3
|
547 self:Debug("MO_MAIL_EMPTIED");
|
|
Zerotorescue@3
|
548
|
|
Zerotorescue@2
|
549 -- Yell that we successfully opened/removed a mail
|
|
Zerotorescue@3
|
550 self:SendMessage("MO_MAIL_EMPTIED");
|
|
Zerotorescue@3
|
551 elseif (currentMailWithAttachments == 50 and tempLastAmount == 50) then
|
|
Zerotorescue@46
|
552 -- Open the current mail
|
|
Zerotorescue@46
|
553 self:ScheduleOpen(false);
|
|
Zerotorescue@0
|
554 end
|
|
Zerotorescue@0
|
555 end
|
|
Zerotorescue@0
|
556
|
|
Zerotorescue@0
|
557 function MailOpener:ScheduleOpen(continued)
|
|
Zerotorescue@0
|
558 if lastAmount > 0 then
|
|
Zerotorescue@0
|
559 local waitTime;
|
|
Zerotorescue@0
|
560 if continued then
|
|
Zerotorescue@0
|
561 waitTime = self.db.profile.general.waitTime;
|
|
Zerotorescue@0
|
562 else
|
|
Zerotorescue@0
|
563 -- Even though this is not a continuation and should be instant, we set a .5 second timer to prevent multiple calls of the OpenNow function
|
|
Zerotorescue@0
|
564 waitTime = self.db.profile.general.initialDelay;
|
|
Zerotorescue@0
|
565 end
|
|
Zerotorescue@0
|
566
|
|
Zerotorescue@0
|
567 -- Stop previous timer
|
|
Zerotorescue@0
|
568 self:CancelTimer(self.tmrOpenNow, true);
|
|
Zerotorescue@0
|
569 -- Schedule the next open
|
|
Zerotorescue@0
|
570 self.tmrOpenNow = self:ScheduleTimer("OpenNow", waitTime);
|
|
Zerotorescue@0
|
571 end
|
|
Zerotorescue@0
|
572 end
|
|
Zerotorescue@0
|
573
|
|
Zerotorescue@0
|
574 function MailOpener:OpenNow()
|
|
Zerotorescue@8
|
575 self:Debug("OpenNow (" .. ((MailAddonBusy and "1") or "0") .. ")");
|
|
Zerotorescue@8
|
576 if MailFrame:IsVisible() and AutoOpenMail then
|
|
Zerotorescue@0
|
577 self:Debug("OpenNow");
|
|
Zerotorescue@0
|
578
|
|
Zerotorescue@0
|
579 -- BeanCounter is the only addon hiding the mail close button while busy, so we can look for that
|
|
Zerotorescue@31
|
580 --local BeanCounterActive = not InboxCloseButton:IsVisible();
|
|
Zerotorescue@0
|
581
|
|
Zerotorescue@31
|
582 --if not BeanCounterActive and not MailAddonBusy then
|
|
Zerotorescue@31
|
583 if not MailAddonBusy then
|
|
Zerotorescue@8
|
584 -- No other addon is currently active
|
|
Zerotorescue@0
|
585
|
|
Zerotorescue@0
|
586 self:CancelTimer(self.tmrTryAgain, true); -- Insurance
|
|
Zerotorescue@0
|
587
|
|
Zerotorescue@118
|
588 if self.ZeroAuctionsEnabled and ZeroAuctionsAutoMail then
|
|
Zerotorescue@118
|
589 -- Remember the last known quick auctions status
|
|
Zerotorescue@118
|
590 lastQuickAuctionsStatus = ZeroAuctionsAutoMail:GetChecked();
|
|
Zerotorescue@118
|
591 end
|
|
Zerotorescue@118
|
592 if self.db.profile.general.autoDisableQAAutoMail and self.ZeroAuctionsEnabled and ZeroAuctionsAutoMail and ZeroAuctionsAutoMail:GetChecked() then
|
|
Zerotorescue@118
|
593 -- If auto disable "QA Auto mail" is enabled and QA's auto mail is currently toggled on, turn it off
|
|
Zerotorescue@118
|
594 -- We need to do this with a :click to trigger the right events
|
|
Zerotorescue@118
|
595
|
|
Zerotorescue@118
|
596 self:Debug("Turning automail |cffff0000off|r.");
|
|
Zerotorescue@118
|
597
|
|
Zerotorescue@118
|
598 ZeroAuctionsAutoMail:Click();
|
|
Zerotorescue@118
|
599 end
|
|
Zerotorescue@118
|
600
|
|
Zerotorescue@0
|
601
|
|
Zerotorescue@8
|
602 MailAddonBusy = self:GetName();
|
|
Zerotorescue@0
|
603
|
|
Zerotorescue@0
|
604 self:Debug("MO_OPEN_MAIL");
|
|
Zerotorescue@0
|
605
|
|
Zerotorescue@0
|
606 -- Summon the mail opening gods
|
|
Zerotorescue@0
|
607 self:SendMessage("MO_OPEN_MAIL");
|
|
Zerotorescue@129
|
608 elseif MailAddonBusy ~= self:GetName() then
|
|
Zerotorescue@8
|
609 -- Another addon is ACTIVE
|
|
Zerotorescue@31
|
610 self:Debug("Another addon active, waiting .5 seconds... (" .. MailAddonBusy .. ")");
|
|
Zerotorescue@0
|
611
|
|
Zerotorescue@0
|
612 self:CancelTimer(self.tmrTryAgain, true); -- Insurance
|
|
Zerotorescue@8
|
613 -- Try again every 0.5 seconds
|
|
Zerotorescue@0
|
614 self.tmrTryAgain = self:ScheduleTimer("OpenNow", 0.5);
|
|
Zerotorescue@0
|
615 end
|
|
Zerotorescue@0
|
616 end
|
|
Zerotorescue@0
|
617 end
|
|
Zerotorescue@0
|
618
|
|
Zerotorescue@0
|
619 function MailOpener:MO_OPEN_COMPLETE()
|
|
Zerotorescue@8
|
620 if MailAddonBusy == self:GetName() then
|
|
Zerotorescue@8
|
621 MailAddonBusy = nil;
|
|
Zerotorescue@8
|
622 end
|
|
Zerotorescue@1
|
623
|
|
Zerotorescue@108
|
624 hasOpenedMailAlready = true;
|
|
Zerotorescue@108
|
625
|
|
Zerotorescue@1
|
626 -- Try a recheck
|
|
Zerotorescue@1
|
627 self:Recheck();
|
|
Zerotorescue@1
|
628
|
|
Zerotorescue@0
|
629 local current, total = GetInboxNumItems();
|
|
Zerotorescue@0
|
630
|
|
Zerotorescue@0
|
631 if (total - current) == 0 then
|
|
Zerotorescue@3
|
632 -- There is probably no unopenable mail remaining, so play the sound (if enabled)
|
|
Zerotorescue@3
|
633
|
|
Zerotorescue@42
|
634 if self.db.profile.notifications.mailboxEmptySound and (not MailOpener.db.profile.notifications.mailboxEmptySoundOnlyOnce or not mailboxEmptySoundPlayed) and (not MailOpener.db.profile.notifications.mailboxEmptySoundOnlyOncePerMailboxVisit or not mailboxEmptySoundPlayedThisVisit) then
|
|
Zerotorescue@0
|
635 PlaySoundFile(self.db.profile.notifications.mailboxEmptySoundFile);
|
|
Zerotorescue@0
|
636 mailboxEmptySoundPlayed = true;
|
|
Zerotorescue@42
|
637 mailboxEmptySoundPlayedThisVisit = true;
|
|
Zerotorescue@0
|
638 end
|
|
Zerotorescue@0
|
639 end
|
|
Zerotorescue@0
|
640
|
|
Zerotorescue@118
|
641 if self.ZeroAuctionsEnabled then
|
|
Zerotorescue@118
|
642 -- Zero Auctions enabled?
|
|
Zerotorescue@118
|
643 -- Toggle automailing as per settings
|
|
Zerotorescue@118
|
644
|
|
Zerotorescue@118
|
645 if self.db.profile.general.autoReenableQAAutoMail and ZeroAuctionsAutoMail and not ZeroAuctionsAutoMail:GetChecked() then
|
|
Zerotorescue@118
|
646 -- If auto re-enable "QA Auto mail" is enabled and QA's auto mail is currently toggled OFF, turn it on
|
|
Zerotorescue@118
|
647 -- We need to do this with a :click to trigger the right events
|
|
Zerotorescue@118
|
648
|
|
Zerotorescue@118
|
649 self:Debug("Turning automail |cff00ff00on|r.");
|
|
Zerotorescue@118
|
650
|
|
Zerotorescue@118
|
651 ZeroAuctionsAutoMail:Click();
|
|
Zerotorescue@118
|
652 elseif self.db.profile.general.autoSetBackQAAutoMail and ZeroAuctionsAutoMail and lastQuickAuctionsStatus ~= ZeroAuctionsAutoMail:GetChecked() then
|
|
Zerotorescue@118
|
653 -- If auto set back "QA Auto mail" is enabled and QA's auto mail is currently not the same as it was before starting, toggle it
|
|
Zerotorescue@118
|
654 -- We need to do this with a :click to trigger the right events
|
|
Zerotorescue@118
|
655
|
|
Zerotorescue@118
|
656 if lastQuickAuctionsStatus then
|
|
Zerotorescue@118
|
657 self:Debug("Turning automail |cff00ff00on|r.");
|
|
Zerotorescue@118
|
658 else
|
|
Zerotorescue@118
|
659 self:Debug("Turning automail |cffff0000off|r.");
|
|
Zerotorescue@118
|
660 end
|
|
Zerotorescue@118
|
661
|
|
Zerotorescue@118
|
662 ZeroAuctionsAutoMail:Click();
|
|
Zerotorescue@118
|
663 end
|
|
Zerotorescue@118
|
664 end
|
|
Zerotorescue@118
|
665
|
|
Zerotorescue@0
|
666 if self.db.profile.general.continueOpening then
|
|
Zerotorescue@0
|
667 self:ScheduleOpen(true);
|
|
Zerotorescue@0
|
668 end
|
|
Zerotorescue@0
|
669 end
|
|
Zerotorescue@0
|
670
|
|
Zerotorescue@0
|
671 -- Run another CheckInbox
|
|
Zerotorescue@0
|
672 function MailOpener:Recheck()
|
|
Zerotorescue@0
|
673 self:Debug("|cffffff00Recheck|r");
|
|
Zerotorescue@0
|
674
|
|
Zerotorescue@0
|
675 -- Freshlist prevents this from being run too often
|
|
Zerotorescue@0
|
676 -- It is set to true after a server sync
|
|
Zerotorescue@0
|
677 -- and set to false 61 seconds afterwards with a recheck called instantly after it
|
|
Zerotorescue@3
|
678
|
|
Zerotorescue@3
|
679 -- We're not refreshing while we're opening because it is automatically done when current batch was completely opened
|
|
Zerotorescue@8
|
680 if not freshList and MailFrame:IsVisible() then
|
|
Zerotorescue@0
|
681 self:Debug("|cff00ff00Recheck|r");
|
|
Zerotorescue@0
|
682
|
|
Zerotorescue@0
|
683 -- If this isn't a fresh list (so messages weren't received within the last 60 seconds) and the mailbox wasn't closed
|
|
Zerotorescue@0
|
684
|
|
Zerotorescue@0
|
685 -- BeanCounter is the only addon hiding the mail close button while busy, so we can look for that
|
|
Zerotorescue@31
|
686 --local BeanCounterActive = not InboxCloseButton:IsVisible();
|
|
Zerotorescue@0
|
687
|
|
Zerotorescue@31
|
688 --if not BeanCounterActive and AutoOpenMail and not MailAddonBusy then
|
|
Zerotorescue@31
|
689 if AutoOpenMail and not MailAddonBusy then
|
|
Zerotorescue@0
|
690 -- Query the server
|
|
Zerotorescue@0
|
691 CheckInbox();
|
|
Zerotorescue@0
|
692 end
|
|
Zerotorescue@0
|
693
|
|
Zerotorescue@0
|
694 -- Stop previous timer
|
|
Zerotorescue@0
|
695 self:CancelTimer(self.tmrRecheck, true);
|
|
Zerotorescue@0
|
696 -- Keep trying until it works
|
|
Zerotorescue@0
|
697 self.tmrRecheck = self:ScheduleTimer("Recheck", 2);
|
|
Zerotorescue@0
|
698
|
|
Zerotorescue@0
|
699 self:Debug("tmrRecheck 2");
|
|
Zerotorescue@0
|
700 end
|
|
Zerotorescue@0
|
701 end
|
|
Zerotorescue@0
|
702
|
|
Zerotorescue@0
|
703 -- Stop checking for new mail and unregister the events we needed
|
|
Zerotorescue@0
|
704 function MailOpener:Stop()
|
|
Zerotorescue@8
|
705 if MailAddonBusy == self:GetName() then
|
|
Zerotorescue@8
|
706 MailAddonBusy = nil;
|
|
Zerotorescue@8
|
707 end
|
|
Zerotorescue@0
|
708
|
|
Zerotorescue@108
|
709 hasOpenedMailAlready = nil;
|
|
Zerotorescue@108
|
710
|
|
Zerotorescue@0
|
711 -- We won't need this anymore
|
|
Zerotorescue@0
|
712 self:UnregisterEvent("MAIL_CLOSED");
|
|
Zerotorescue@0
|
713 self:UnregisterEvent("PLAYER_LEAVING_WORLD");
|
|
Zerotorescue@0
|
714 self:UnregisterEvent("MAIL_INBOX_UPDATE");
|
|
Zerotorescue@0
|
715
|
|
Zerotorescue@0
|
716 -- Messages
|
|
Zerotorescue@0
|
717 self:UnregisterMessage("MO_OPEN_COMPLETE");
|
|
Zerotorescue@0
|
718
|
|
Zerotorescue@0
|
719 -- Timers
|
|
Zerotorescue@0
|
720 self:CancelTimer(self.tmrTryAgain, true);
|
|
Zerotorescue@0
|
721 self:CancelTimer(self.tmrOpenNow, true);
|
|
Zerotorescue@0
|
722
|
|
Zerotorescue@0
|
723 -- If we wait with disabling QA automail until MAIL_SHOW, QA will beat us to it and already start sending stuff
|
|
Zerotorescue@0
|
724 self:ToggleQAStatus();
|
|
Zerotorescue@0
|
725 end
|
|
Zerotorescue@0
|
726
|
|
Zerotorescue@0
|
727 function MailOpener:Debug(t)
|
|
Zerotorescue@0
|
728 if not self.debugChannel and self.debugChannel ~= false then
|
|
Zerotorescue@0
|
729 -- We want to check just once, so if you add a debug channel later just do a /reload (registering an event for this is wasted resources)
|
|
Zerotorescue@0
|
730 self.debugChannel = false;
|
|
Zerotorescue@0
|
731
|
|
Zerotorescue@0
|
732 for i = 1, NUM_CHAT_WINDOWS do
|
|
Zerotorescue@0
|
733 local name = GetChatWindowInfo(i);
|
|
Zerotorescue@0
|
734
|
|
Zerotorescue@0
|
735 if name:upper() == "DEBUG" then
|
|
Zerotorescue@0
|
736 self.debugChannel = _G["ChatFrame" .. i];
|
|
Zerotorescue@0
|
737 end
|
|
Zerotorescue@0
|
738 end
|
|
Zerotorescue@0
|
739 end
|
|
Zerotorescue@0
|
740
|
|
Zerotorescue@0
|
741 if self.debugChannel then
|
|
Zerotorescue@0
|
742 self.debugChannel:AddMessage(t);
|
|
Zerotorescue@0
|
743 end
|
|
Zerotorescue@0
|
744 end
|
|
Zerotorescue@0
|
745
|
|
Zerotorescue@68
|
746 function MailOpener:Print(text)
|
|
Zerotorescue@68
|
747 print(L["|cff15ff00Mail Opener|r: %s"]:format(text));
|
|
Zerotorescue@68
|
748 end
|
|
Zerotorescue@68
|
749
|
|
Zerotorescue@0
|
750 -- Enable our config module if it's disabled and make a reference to it
|
|
Zerotorescue@0
|
751 function MailOpener:EnableConfigModule()
|
|
Zerotorescue@0
|
752 if not MailOpenerConfig then
|
|
Zerotorescue@0
|
753 MailOpenerConfig = self:GetModule("Config");
|
|
Zerotorescue@0
|
754 MailOpenerConfig:Enable();
|
|
Zerotorescue@0
|
755 end
|
|
Zerotorescue@0
|
756 end
|
|
Zerotorescue@0
|
757
|
|
Zerotorescue@0
|
758 -- Toggle Postal's opening modules on or off
|
|
Zerotorescue@0
|
759 function MailOpener:TogglePostalModule(name, status)
|
|
Zerotorescue@60
|
760 if self.PostalEnabled and Postal then
|
|
Zerotorescue@0
|
761 -- Postal must be enabled
|
|
Zerotorescue@0
|
762
|
|
Zerotorescue@3
|
763 -- Toggle module (let Postal handle this)
|
|
Zerotorescue@3
|
764 Postal.ToggleModule(nil, name, Postal:GetModule(name), status);
|
|
Zerotorescue@0
|
765 end
|
|
Zerotorescue@154
|
766
|
|
Zerotorescue@154
|
767 if self.TSMMailingEnabled then
|
|
Zerotorescue@154
|
768 local TSMMailing = LibStub("AceAddon-3.0"):GetAddon("TradeSkillMaster_Mailing");
|
|
Zerotorescue@154
|
769 if TSMMailing and TSMMailing.massOpening then
|
|
Zerotorescue@159
|
770 if not status then
|
|
Zerotorescue@159
|
771 TSMMailing.massOpening:Hide();
|
|
Zerotorescue@159
|
772 else
|
|
Zerotorescue@159
|
773 TSMMailing.massOpening:Show();
|
|
Zerotorescue@159
|
774 end
|
|
Zerotorescue@154
|
775 end
|
|
Zerotorescue@154
|
776 end
|
|
Zerotorescue@0
|
777 end
|
|
Zerotorescue@0
|
778
|
|
Zerotorescue@0
|
779 -- Change Quick Auction's auto mail status based on our prefered settings
|
|
Zerotorescue@0
|
780 function MailOpener:ToggleQAStatus()
|
|
Zerotorescue@0
|
781 self:Debug("defaultQAStatus:" .. self.db.profile.general.defaultQAStatus);
|
|
Zerotorescue@0
|
782
|
|
Zerotorescue@118
|
783 if self.ZeroAuctionsEnabled and self.db.profile.general.defaultQAStatus ~= "__remember" and ZeroAuctionsAutoMail then
|
|
Zerotorescue@118
|
784 if self.db.profile.general.defaultQAStatus == "_enabled" and not ZeroAuctionsAutoMail:GetChecked() then
|
|
Zerotorescue@118
|
785 self:Debug("Turning automail |cff00ff00on|r.");
|
|
Zerotorescue@118
|
786
|
|
Zerotorescue@118
|
787 ZeroAuctionsAutoMail:Click();
|
|
Zerotorescue@118
|
788 elseif self.db.profile.general.defaultQAStatus == "disabled" and ZeroAuctionsAutoMail:GetChecked() then
|
|
Zerotorescue@118
|
789 self:Debug("Turning automail |cffff0000off|r.");
|
|
Zerotorescue@118
|
790
|
|
Zerotorescue@118
|
791 ZeroAuctionsAutoMail:Click();
|
|
Zerotorescue@118
|
792 end
|
|
Zerotorescue@118
|
793 end
|
|
Zerotorescue@0
|
794 end
|
|
Zerotorescue@0
|
795
|
|
Zerotorescue@0
|
796 function MailOpener:FormatMoney(copper)
|
|
Zerotorescue@0
|
797 local gold = floor( copper / 10000 );
|
|
Zerotorescue@0
|
798 local silver = floor( ( copper - ( gold * 10000 ) ) / 100 );
|
|
Zerotorescue@0
|
799 local copper = mod(copper, 100);
|
|
Zerotorescue@0
|
800
|
|
Zerotorescue@0
|
801 if gold > 0 then
|
|
Zerotorescue@0
|
802 return format(GOLD_AMOUNT_TEXTURE .. " " .. SILVER_AMOUNT_TEXTURE .. " " .. COPPER_AMOUNT_TEXTURE, gold, 0, 0, silver, 0, 0, copper, 0, 0);
|
|
Zerotorescue@0
|
803 elseif silver > 0 then
|
|
Zerotorescue@0
|
804 return format(SILVER_AMOUNT_TEXTURE .. " " .. COPPER_AMOUNT_TEXTURE, silver, 0, 0, copper, 0, 0);
|
|
Zerotorescue@0
|
805 else
|
|
Zerotorescue@0
|
806 return format(COPPER_AMOUNT_TEXTURE, copper, 0, 0);
|
|
Zerotorescue@0
|
807 end
|
|
Zerotorescue@0
|
808 end
|
|
Zerotorescue@0
|
809
|
|
Zerotorescue@7
|
810 -- General copy window for multiple things (clickable URLs, the time remaining, and such)
|
|
Zerotorescue@0
|
811 StaticPopupDialogs["MailOpenerCopyWindow"] = {
|
|
Zerotorescue@68
|
812 text = L["Press CTRL-C to copy."],
|
|
Zerotorescue@0
|
813 button2 = CLOSE,
|
|
Zerotorescue@0
|
814 hasEditBox = 1,
|
|
Zerotorescue@123
|
815 editBoxWidth = 360,
|
|
Zerotorescue@123
|
816 OnShow = function(self)
|
|
Zerotorescue@123
|
817 if self.editBox and MailOpener.currentPopupContents then
|
|
Zerotorescue@123
|
818 self.editBox:SetText(MailOpener.currentPopupContents);
|
|
Zerotorescue@123
|
819 self.editBox:SetFocus();
|
|
Zerotorescue@123
|
820 self.editBox:HighlightText(0);
|
|
Zerotorescue@0
|
821 end
|
|
Zerotorescue@0
|
822
|
|
Zerotorescue@0
|
823 -- Position the close button in the middle
|
|
Zerotorescue@123
|
824 if self.button2 then
|
|
Zerotorescue@0
|
825 -- Remove previous know position
|
|
Zerotorescue@123
|
826 self.button2:ClearAllPoints();
|
|
Zerotorescue@123
|
827 self.button2:SetWidth(200);
|
|
Zerotorescue@0
|
828 -- Reposition in the center
|
|
Zerotorescue@123
|
829 self.button2:SetPoint("CENTER", self.editBox, "CENTER", 0, -30);
|
|
Zerotorescue@0
|
830 end
|
|
Zerotorescue@0
|
831 end,
|
|
Zerotorescue@92
|
832 EditBoxOnEscapePressed = function(self)
|
|
Zerotorescue@92
|
833 self:GetParent():Hide();
|
|
Zerotorescue@0
|
834 end,
|
|
Zerotorescue@0
|
835 timeout = 0,
|
|
Zerotorescue@0
|
836 whileDead = 1,
|
|
Zerotorescue@0
|
837 hideOnEscape = 1,
|
|
Zerotorescue@0
|
838 maxLetters = 1024,
|
|
Zerotorescue@1
|
839 };
|
|
Zerotorescue@1
|
840
|
|
Zerotorescue@0
|
841
|
|
Zerotorescue@108
|
842 -- The idea for this is to wait with refresing while there is still mail remaining which can be opened
|
|
Zerotorescue@108
|
843 -- This should speed things up a tiny bit, but might become buggy if coded wrong
|
|
Zerotorescue@115
|
844 -- We actually override the function in the onenable
|
|
Zerotorescue@115
|
845 function NewCheckInbox(...)
|
|
Zerotorescue@139
|
846 if not MailOpener.db.profile.general.overrideCheckInbox or not MailOpener.db.profile.general.continueOpening or not lastAmount or lastAmount == 0 then
|
|
Zerotorescue@108
|
847 -- If the override Check Inbox option is off
|
|
Zerotorescue@108
|
848 -- or continuous opening is off
|
|
Zerotorescue@108
|
849 -- or there's currently no mail visible
|
|
Zerotorescue@0
|
850
|
|
Zerotorescue@115
|
851 MailOpener:Debug("CheckInbox:" .. tostring((not MailOpener.db.profile.general.overrideCheckInbox)) .. "/" .. tostring((not MailOpener.db.profile.general.continueOpening)) .. "/" .. tostring(lastAmount == 0));
|
|
Zerotorescue@0
|
852
|
|
Zerotorescue@108
|
853 -- Just call the original function
|
|
Zerotorescue@108
|
854 return originalCheckInbox(...);
|
|
Zerotorescue@0
|
855 end
|
|
Zerotorescue@0
|
856
|
|
Zerotorescue@108
|
857 if not hasOpenedMailAlready then
|
|
Zerotorescue@108
|
858 -- If MO hasn't opened mail yet, we wait.
|
|
Zerotorescue@108
|
859 -- MO will call this function when mail opening is done
|
|
Zerotorescue@0
|
860
|
|
Zerotorescue@108
|
861 MailOpener:Debug("CheckInbox:Waiting...");
|
|
Zerotorescue@0
|
862
|
|
Zerotorescue@108
|
863 return false;
|
|
Zerotorescue@108
|
864 else
|
|
Zerotorescue@108
|
865 MailOpener:Debug("CheckInbox:Refresh!");
|
|
Zerotorescue@108
|
866
|
|
Zerotorescue@108
|
867 return originalCheckInbox(...);
|
|
Zerotorescue@108
|
868 end
|
|
Zerotorescue@139
|
869 end
|