annotate Core.lua @ 79:136aa3dd4dda

The keep free space will now cause the opener to partially loot mail when you are near the keep free space requirement, rather than skipping the entire mail. The config has been changed to reflect this.
author Zerotorescue
date Thu, 16 Sep 2010 17:20:34 +0200
parents eadff31e61e8
children c15dbeb84ddc
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@0 174 check:SetScript("OnClick", function(self)
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@3 178 if not MailOpener:IsEnabled() then
Zerotorescue@68 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@3 181 MailOpener: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@3 186 self:SetChecked(true);
Zerotorescue@3 187 else
Zerotorescue@68 188 self:Print(L["Shift key was held down, so |cffff0000disabling|r the entire addon."]);
Zerotorescue@3 189
Zerotorescue@3 190 MailOpener:Disable();
Zerotorescue@3 191
Zerotorescue@3 192 self:SetChecked(false);
Zerotorescue@3 193 end
Zerotorescue@0 194 else
Zerotorescue@3 195 -- Normal click
Zerotorescue@3 196
Zerotorescue@3 197 if self:GetChecked() then
Zerotorescue@68 198 self:Print(L["|cff00ff00Enabling|r automatic opening of mail."]);
Zerotorescue@3 199
Zerotorescue@3 200 AutoOpenMail = true;
Zerotorescue@8 201 MailOpener:ScheduleOpen(false);
Zerotorescue@3 202 else
Zerotorescue@68 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@50 211 check:SetScript("OnEnter", function(self)
Zerotorescue@51 212 if MailOpener.db.profile.general.showHelpTooltips then
Zerotorescue@51 213 GameTooltip:SetOwner(self, "ANCHOR_BOTTOM")
Zerotorescue@51 214 GameTooltip:SetPoint("BOTTOM", self, "BOTTOM")
Zerotorescue@51 215 GameTooltip:SetText(self.tooltipTitle, 1, .82, 0, 1)
Zerotorescue@51 216
Zerotorescue@51 217 if type(self.tooltip) == "string" then
Zerotorescue@51 218 GameTooltip:AddLine(self.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@55 224 check:SetScript("OnLeave", function(self)
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@50 256 button:SetScript("OnEnter", function(self)
Zerotorescue@51 257 if MailOpener.db.profile.general.showHelpTooltips then
Zerotorescue@51 258 GameTooltip:SetOwner(self, "ANCHOR_BOTTOM")
Zerotorescue@51 259 GameTooltip:SetPoint("BOTTOM", self, "TOP")
Zerotorescue@51 260 GameTooltip:SetText(self.tooltipTitle, 1, .82, 0, 1)
Zerotorescue@51 261
Zerotorescue@51 262 if type(self.tooltip) == "string" then
Zerotorescue@51 263 GameTooltip:AddLine(self.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@50 269 button:SetScript("OnLeave", function(self)
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@68 372 self:Print(L["You can always change the default status in the General config (|cff00ffff/mo c|r)."]);
Zerotorescue@19 373
Zerotorescue@68 374 self: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@19 380 OnCancel = function (_,reason)
Zerotorescue@68 381 self: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@0 775 EditBoxOnEscapePressed = function()
Zerotorescue@0 776 this: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 ]]