annotate Core.lua @ 169:74407c4a8c97 v1.3.2-beta

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