annotate Core.lua @ 50:8e2138877ebf

Added neat(er) tooltips for both the mail opener status toggler as the config button. Added an option below the filters to disable the shift click functionality of the open all button.
author Zerotorescue
date Sun, 12 Sep 2010 21:06:05 +0200
parents 1805df31794d
children fcc7112cc365
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@50 163 local check = CreateFrame("CheckButton", "cbMailOpenerEnable", MailFrame, "OptionsCheckButtonTemplate");
Zerotorescue@0 164 check:SetHeight(26);
Zerotorescue@0 165 check:SetWidth(26);
Zerotorescue@50 166 check:SetPoint("TOPLEFT", MailFrame, "TOPLEFT", 68, -13);
Zerotorescue@3 167 check:SetChecked(true);
Zerotorescue@0 168 check:SetHitRectInsets(0, -80, 0, 0);
Zerotorescue@0 169 check:SetScript("OnClick", function(self)
Zerotorescue@3 170 if IsShiftKeyDown() then
Zerotorescue@3 171 -- Shift key = toggle addon on or off, since addon is already on there's only one option
Zerotorescue@3 172
Zerotorescue@3 173 if not MailOpener:IsEnabled() then
Zerotorescue@3 174 print("|cff15ff00Mail Opener|r: Shift key was held down, so |cff00ff00enabling|r the entire addon as well as automatic opening of mail.");
Zerotorescue@3 175
Zerotorescue@3 176 MailOpener:Enable();
Zerotorescue@3 177
Zerotorescue@3 178 -- The above calls MAIL_SHOW which changes AutoOpenMail, so we can't remember the old setting
Zerotorescue@3 179 AutoOpenMail = true;
Zerotorescue@3 180
Zerotorescue@3 181 self:SetChecked(true);
Zerotorescue@3 182 else
Zerotorescue@3 183 print("|cff15ff00Mail Opener|r: Shift key was held down, so |cffff0000disabling|r the entire addon.");
Zerotorescue@3 184
Zerotorescue@3 185 MailOpener:Disable();
Zerotorescue@3 186
Zerotorescue@3 187 self:SetChecked(false);
Zerotorescue@3 188 end
Zerotorescue@0 189 else
Zerotorescue@3 190 -- Normal click
Zerotorescue@3 191
Zerotorescue@3 192 if self:GetChecked() then
Zerotorescue@3 193 print("|cff15ff00Mail Opener|r: |cff00ff00Enabling|r automatic opening of mail.");
Zerotorescue@3 194
Zerotorescue@3 195 AutoOpenMail = true;
Zerotorescue@8 196 MailOpener:ScheduleOpen(false);
Zerotorescue@3 197 else
Zerotorescue@3 198 print("|cff15ff00Mail Opener|r: |cffff0000Disabling|r automatic opening of mail.");
Zerotorescue@3 199
Zerotorescue@3 200 AutoOpenMail = false;
Zerotorescue@3 201 end
Zerotorescue@0 202 end
Zerotorescue@0 203 end);
Zerotorescue@50 204 check.tooltipTitle = "Mail Opener status";
Zerotorescue@50 205 check.tooltip = "Toggle automatic mail opening |cff00ff00on|r or |cffff0000off|r (you can also enforce this by holding shift when opening the mailbox).\n\nYou can also hold the |cfffed000shift|r key while clicking this checkbox to disable the entire addon instead.";
Zerotorescue@50 206 check:SetScript("OnEnter", function(self)
Zerotorescue@50 207 GameTooltip:SetOwner(self, "ANCHOR_BOTTOM")
Zerotorescue@50 208 GameTooltip:SetPoint("BOTTOM", self, "BOTTOM")
Zerotorescue@50 209 GameTooltip:SetText(self.tooltipTitle, 1, .82, 0, 1)
Zerotorescue@50 210
Zerotorescue@50 211 if type(self.tooltip) == "string" then
Zerotorescue@50 212 GameTooltip:AddLine(self.tooltip, 1, 1, 1, 1);
Zerotorescue@50 213 end
Zerotorescue@50 214
Zerotorescue@50 215 GameTooltip:Show();
Zerotorescue@50 216 end);
Zerotorescue@50 217 button:SetScript("OnLeave", function(self)
Zerotorescue@50 218 GameTooltip:Hide();
Zerotorescue@50 219 end);
Zerotorescue@0 220
Zerotorescue@0 221 -- Get reference to the text field
Zerotorescue@0 222 local checkboxText = _G[check:GetName() .. "Text"];
Zerotorescue@0 223 checkboxText:SetText("Mail Opener");
Zerotorescue@0 224
Zerotorescue@0 225 self.cbOpenAll = check;
Zerotorescue@0 226
Zerotorescue@31 227
Zerotorescue@31 228
Zerotorescue@31 229
Zerotorescue@31 230 -- CONFIG BUTTON
Zerotorescue@31 231
Zerotorescue@0 232 -- Make the config button
Zerotorescue@0 233 local button = CreateFrame("Button", "btnMailOpenerConfig", MailFrame, "UIPanelButtonTemplate")
Zerotorescue@0 234 button:SetText("Config")
Zerotorescue@0 235 button:SetHeight(23)
Zerotorescue@0 236 button:SetWidth(55)
Zerotorescue@31 237 button:SetPoint("TOPRIGHT", MailFrame, "TOPRIGHT", -55, -13);
Zerotorescue@0 238 button:SetScript("OnClick", function()
Zerotorescue@0 239 MailOpener:EnableConfigModule();
Zerotorescue@0 240
Zerotorescue@0 241 MailOpenerConfig:Show();
Zerotorescue@0 242
Zerotorescue@8 243 --BETA:if MailOpener.db.profile.uses >= 15 then
Zerotorescue@7 244 --BETA: MailOpener:ShowBetaPopup();
Zerotorescue@7 245 --BETA:end
Zerotorescue@0 246 end);
Zerotorescue@50 247 button.tooltipTitle = "Mail Opener Config";
Zerotorescue@50 248 button.tooltip = "Click to open the configuration window for Mail Opener.";
Zerotorescue@50 249 button:SetScript("OnEnter", function(self)
Zerotorescue@50 250 GameTooltip:SetOwner(self, "ANCHOR_BOTTOM")
Zerotorescue@50 251 GameTooltip:SetPoint("BOTTOM", self, "TOP")
Zerotorescue@50 252 GameTooltip:SetText(self.tooltipTitle, 1, .82, 0, 1)
Zerotorescue@50 253
Zerotorescue@50 254 if type(self.tooltip) == "string" then
Zerotorescue@50 255 GameTooltip:AddLine(self.tooltip, 1, 1, 1, 1);
Zerotorescue@50 256 end
Zerotorescue@50 257
Zerotorescue@50 258 GameTooltip:Show();
Zerotorescue@50 259 end);
Zerotorescue@50 260 button:SetScript("OnLeave", function(self)
Zerotorescue@50 261 GameTooltip:Hide();
Zerotorescue@50 262 end);
Zerotorescue@0 263
Zerotorescue@0 264 self.btnConfig = button;
Zerotorescue@0 265
Zerotorescue@31 266
Zerotorescue@31 267
Zerotorescue@31 268
Zerotorescue@31 269
Zerotorescue@31 270 -- ADDON LOADING
Zerotorescue@31 271 -- THE BELOW WILL TAKE SOME TIME; WE WILL BE LOADING OTHER ADDONS
Zerotorescue@31 272
Zerotorescue@31 273 if select(6, GetAddOnInfo("Postal")) == nil then
Zerotorescue@31 274 self.PostalEnabled = true; -- Set this as an object variable so we can use it in our modules
Zerotorescue@0 275
Zerotorescue@31 276 -- Ensure this addon is loaded if AddonLoader is installed
Zerotorescue@31 277 if AddonLoader and AddonLoader.LoadAddOn and not Postal then
Zerotorescue@31 278 AddonLoader:LoadAddOn("Postal");
Zerotorescue@31 279 end
Zerotorescue@0 280 end
Zerotorescue@0 281
Zerotorescue@31 282 if select(6, GetAddOnInfo("QuickAuctions")) == nil then
Zerotorescue@31 283 self.QuickAuctionsEnabled = 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 then
Zerotorescue@31 287 AddonLoader:LoadAddOn("QuickAuctions");
Zerotorescue@31 288 end
Zerotorescue@31 289 end
Zerotorescue@31 290
Zerotorescue@31 291
Zerotorescue@31 292
Zerotorescue@31 293
Zerotorescue@31 294
Zerotorescue@31 295 -- ADJUST POSITIONS
Zerotorescue@31 296
Zerotorescue@31 297 if self.QuickAuctionsEnabled then
Zerotorescue@31 298 -- QA is enabled so move the checkbox further to the right
Zerotorescue@0 299
Zerotorescue@31 300 self.cbOpenAll:SetPoint("TOPLEFT", MailFrame, "TOPLEFT", 155, -13);
Zerotorescue@31 301 end
Zerotorescue@31 302
Zerotorescue@31 303 if self.PostalEnabled then
Zerotorescue@31 304 self.btnConfig:SetPoint("TOPRIGHT", MailFrame, "TOPRIGHT", -75, -13);
Zerotorescue@31 305 end
Zerotorescue@0 306 end
Zerotorescue@0 307
Zerotorescue@0 308 function MailOpener:OnEnable()
Zerotorescue@0 309 self:RegisterEvent("MAIL_SHOW");
Zerotorescue@0 310 self:RegisterEvent("PLAYER_ENTERING_WORLD");
Zerotorescue@0 311
Zerotorescue@0 312 self.btnConfig:Show();
Zerotorescue@0 313
Zerotorescue@0 314 -- Reset variables
Zerotorescue@0 315 lastAmount = 0;
Zerotorescue@0 316 self.debugChannel = nil;
Zerotorescue@0 317
Zerotorescue@8 318 --BETA:if (self.db.profile.uses % 15) == 0 then
Zerotorescue@7 319 --BETA: -- Automatically show once every 15 uses
Zerotorescue@7 320 --BETA: self:ShowBetaPopup();
Zerotorescue@7 321 --BETA:end
Zerotorescue@0 322
Zerotorescue@0 323 -- If we were toggling this addon on while the mailbox is opened we must register all events again
Zerotorescue@0 324 if MailFrame:IsVisible() then
Zerotorescue@0 325 self:MAIL_SHOW();
Zerotorescue@0 326 end
Zerotorescue@0 327 end
Zerotorescue@0 328
Zerotorescue@0 329 function MailOpener:OnDisable()
Zerotorescue@0 330 self:UnregisterEvent("MAIL_SHOW");
Zerotorescue@0 331
Zerotorescue@0 332 self.btnConfig:Hide();
Zerotorescue@0 333
Zerotorescue@0 334 MailOpener:Stop();
Zerotorescue@0 335 end
Zerotorescue@0 336
Zerotorescue@0 337 -- 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 338 function MailOpener:PLAYER_ENTERING_WORLD()
Zerotorescue@0 339 self:UnregisterEvent("PLAYER_ENTERING_WORLD");
Zerotorescue@0 340
Zerotorescue@0 341 self:ToggleQAStatus();
Zerotorescue@0 342 end
Zerotorescue@0 343
Zerotorescue@0 344 -- Fired when the mailbox is opened
Zerotorescue@0 345 function MailOpener:MAIL_SHOW()
Zerotorescue@0 346 -- To stop the timer when the mailbox is closed
Zerotorescue@0 347 self:RegisterEvent("MAIL_CLOSED", "Stop");
Zerotorescue@0 348 self:RegisterEvent("PLAYER_LEAVING_WORLD", "Stop");
Zerotorescue@0 349
Zerotorescue@0 350 -- To set the timer for when to refresh again
Zerotorescue@0 351 self:RegisterEvent("MAIL_INBOX_UPDATE");
Zerotorescue@0 352
Zerotorescue@0 353 -- We need to know when opening has completed
Zerotorescue@0 354 self:RegisterMessage("MO_OPEN_COMPLETE");
Zerotorescue@0 355
Zerotorescue@19 356 if self.db.profile.uses == 0 and MailOpener.db.profile.general.defaultStatus ~= "_enabled" then
Zerotorescue@19 357 StaticPopupDialogs["MailOpenerFirstUseConfirmBox"] = {
Zerotorescue@19 358 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 359 button1 = "Yes",
Zerotorescue@19 360 button2 = "No",
Zerotorescue@19 361 OnAccept = function()
Zerotorescue@19 362 MailOpener.db.profile.general.defaultStatus = "_enabled";
Zerotorescue@19 363 print("|cff15ff00Mail Opener|r: You can always change the default status in the General config (|cff00ffff/mo c|r).");
Zerotorescue@19 364
Zerotorescue@19 365 print("|cff15ff00Mail Opener|r: |cff00ff00Enabling|r automatic opening of mail.");
Zerotorescue@19 366 MailOpener.cbOpenAll:SetChecked(true);
Zerotorescue@19 367
Zerotorescue@19 368 AutoOpenMail = true;
Zerotorescue@19 369 MailOpener:ScheduleOpen(false);
Zerotorescue@19 370 end,
Zerotorescue@19 371 OnCancel = function (_,reason)
Zerotorescue@19 372 print("|cff15ff00Mail Opener|r: You can always change the default status in the General config (|cff00ffff/mo c|r).");
Zerotorescue@19 373 end,
Zerotorescue@19 374 timeout = 0,
Zerotorescue@19 375 whileDead = 1,
Zerotorescue@19 376 hideOnEscape = 1,
Zerotorescue@19 377 };
Zerotorescue@19 378 StaticPopup_Show("MailOpenerFirstUseConfirmBox");
Zerotorescue@8 379 end
Zerotorescue@8 380
Zerotorescue@8 381 self.db.profile.uses = ( self.db.profile.uses + 1 );
Zerotorescue@8 382
Zerotorescue@0 383 self:Debug("defaultStatus:" .. self.db.profile.general.defaultStatus);
Zerotorescue@0 384 -- Change the mail opening status according to our settings
Zerotorescue@0 385 if self.db.profile.general.defaultStatus == "_enabled" then
Zerotorescue@3 386 AutoOpenMail = true;
Zerotorescue@3 387 self.cbOpenAll:SetChecked(true);
Zerotorescue@3 388 elseif self.db.profile.general.defaultStatus == "disabled" then
Zerotorescue@3 389 -- Disable auto opening but leave mail opener enabled
Zerotorescue@3 390
Zerotorescue@3 391 AutoOpenMail = false;
Zerotorescue@3 392 self.cbOpenAll:SetChecked(false);
Zerotorescue@3 393 elseif self.db.profile.general.defaultStatus == "xdisabled" then
Zerotorescue@3 394 -- Disable entire addon
Zerotorescue@3 395
Zerotorescue@3 396 MailOpener:Disable();
Zerotorescue@3 397 self.cbOpenAll:SetChecked(false);
Zerotorescue@0 398 end
Zerotorescue@0 399
Zerotorescue@46 400 if IsShiftKeyDown() then
Zerotorescue@46 401 print("|cff15ff00Mail Opener|r: |cffff0000Disabling|r automatic opening of mail, shift key was down when opening the mailbox.");
Zerotorescue@46 402
Zerotorescue@46 403 AutoOpenMail = false;
Zerotorescue@46 404 self.cbOpenAll:SetChecked(false);
Zerotorescue@46 405 end
Zerotorescue@46 406
Zerotorescue@0 407 self:ToggleQAStatus();
Zerotorescue@0 408
Zerotorescue@0 409 -- Hide the InboxTooMuchMail warning to allow room for our mail remaining info line
Zerotorescue@0 410 InboxTooMuchMail:Hide()
Zerotorescue@0 411 InboxTooMuchMail.Show = function() end
Zerotorescue@0 412
Zerotorescue@0 413 if self.QuickAuctionsEnabled then
Zerotorescue@8 414 local QAMail = LibStub("AceAddon-3.0"):GetAddon("QuickAuctions", true):GetModule("Mail", true);
Zerotorescue@0 415
Zerotorescue@8 416 if QAMail then
Zerotorescue@8 417 -- Hide the open all button
Zerotorescue@8 418 QAMail.massOpening:Hide();
Zerotorescue@8 419 -- Hide the x mail remaining text
Zerotorescue@8 420 QAMail.totalMail:Hide();
Zerotorescue@8 421 end
Zerotorescue@0 422 end
Zerotorescue@0 423
Zerotorescue@0 424 if self.db.profile.notifications.welcome then
Zerotorescue@0 425 -- Welcome notification
Zerotorescue@0 426 local _, c = UnitClass("player");
Zerotorescue@0 427 c = RAID_CLASS_COLORS[c];
Zerotorescue@0 428 c = string.format("|cff%02x%02x%02x", c.r * 255 + 0.5, c.g * 255 + 0.5, c.b * 255 + 0.5);
Zerotorescue@0 429
Zerotorescue@0 430 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 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@0 659 if self.db.profile.notifications.bye then
Zerotorescue@0 660 print("|cff15ff00Mail Opener|r: Have a nice day. :)");
Zerotorescue@0 661 end
Zerotorescue@0 662
Zerotorescue@8 663 if MailAddonBusy == self:GetName() then
Zerotorescue@8 664 MailAddonBusy = nil;
Zerotorescue@8 665 end
Zerotorescue@0 666
Zerotorescue@0 667 -- We won't need this anymore
Zerotorescue@0 668 self:UnregisterEvent("MAIL_CLOSED");
Zerotorescue@0 669 self:UnregisterEvent("PLAYER_LEAVING_WORLD");
Zerotorescue@0 670 self:UnregisterEvent("MAIL_INBOX_UPDATE");
Zerotorescue@0 671
Zerotorescue@0 672 -- Messages
Zerotorescue@0 673 self:UnregisterMessage("MO_OPEN_COMPLETE");
Zerotorescue@0 674
Zerotorescue@0 675 -- Timers
Zerotorescue@0 676 self:CancelTimer(self.tmrTryAgain, true);
Zerotorescue@0 677 self:CancelTimer(self.tmrOpenNow, true);
Zerotorescue@0 678
Zerotorescue@0 679 -- If we wait with disabling QA automail until MAIL_SHOW, QA will beat us to it and already start sending stuff
Zerotorescue@0 680 self:ToggleQAStatus();
Zerotorescue@0 681 end
Zerotorescue@0 682
Zerotorescue@0 683 function MailOpener:Debug(t)
Zerotorescue@0 684 if not self.debugChannel and self.debugChannel ~= false then
Zerotorescue@0 685 -- 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 686 self.debugChannel = false;
Zerotorescue@0 687
Zerotorescue@0 688 for i = 1, NUM_CHAT_WINDOWS do
Zerotorescue@0 689 local name = GetChatWindowInfo(i);
Zerotorescue@0 690
Zerotorescue@0 691 if name:upper() == "DEBUG" then
Zerotorescue@0 692 self.debugChannel = _G["ChatFrame" .. i];
Zerotorescue@0 693 end
Zerotorescue@0 694 end
Zerotorescue@0 695 end
Zerotorescue@0 696
Zerotorescue@0 697 if self.debugChannel then
Zerotorescue@0 698 self.debugChannel:AddMessage(t);
Zerotorescue@0 699 end
Zerotorescue@0 700 end
Zerotorescue@0 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@0 712 if MailOpener.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@0 753 text = "Please 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 ]]