annotate Core.lua @ 46:1805df31794d

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