annotate Modules/OpenAll.lua @ 47:1243c2d2b85e

Now doing a garbage collection after making the options frame as we use many different tables that we don't ever touch again.
author Zerotorescue
date Sun, 12 Sep 2010 20:28:39 +0200
parents 1805df31794d
children f630d882d008
rev   line source
Zerotorescue@0 1 local MailOpener = LibStub("AceAddon-3.0"):GetAddon("MailOpener");
Zerotorescue@31 2 local mod = MailOpener:NewModule("OpenAll", "AceEvent-3.0", "AceTimer-3.0");
Zerotorescue@31 3
Zerotorescue@31 4 mod.moduleDescription = "The actual mail opening initiated by the core.";
Zerotorescue@31 5 mod.moduleRequired = true;
Zerotorescue@0 6
Zerotorescue@3 7 --[[
Zerotorescue@3 8 Dev notes:
Zerotorescue@3 9 When shift clicking the Open All button it should override all filters.
Zerotorescue@3 10 ]]
Zerotorescue@3 11
Zerotorescue@46 12 local MAIL_ITEM_INDEX, MAIL_OPEN_EVERYTHING, mailTimer, inventoryFull, inventoryFullSoundPlayed, inventoryFullSoundPlayedThisVisit, opening, lastSync, numCurrentMail, numHiddenMail, continue;
Zerotorescue@0 13
Zerotorescue@31 14 function mod:OnInitialize()
Zerotorescue@0 15 local defaults = {
Zerotorescue@0 16 profile = {
Zerotorescue@0 17 speed = 0.05,
Zerotorescue@0 18 keepFreeSpace = 0,
Zerotorescue@0 19 filter = {
Zerotorescue@0 20 AH = {
Zerotorescue@0 21 canceled = true,
Zerotorescue@0 22 expired = true,
Zerotorescue@0 23 outbid = true,
Zerotorescue@0 24 success = true,
Zerotorescue@0 25 won = true,
Zerotorescue@0 26 },
Zerotorescue@0 27 normalAttachments = false,
Zerotorescue@0 28 normalMoney = true,
Zerotorescue@0 29 },
Zerotorescue@0 30 },
Zerotorescue@0 31 };
Zerotorescue@0 32
Zerotorescue@0 33 -- Register our saved variables NameSpace
Zerotorescue@0 34 self.db = MailOpener.db:RegisterNamespace("OpenAll", defaults);
Zerotorescue@0 35 end
Zerotorescue@0 36
Zerotorescue@31 37 function mod:OnEnable()
Zerotorescue@0 38 self:RegisterEvent("MAIL_SHOW");
Zerotorescue@42 39
Zerotorescue@0 40 if not self.btnOpenAll then
Zerotorescue@0 41 -- Open all button
Zerotorescue@46 42 local button = CreateFrame("Button", "btnMailOpenerOpenAll", InboxFrame, "UIPanelButtonTemplate");
Zerotorescue@46 43 button:SetText("Open all");
Zerotorescue@46 44 button:SetHeight(26);
Zerotorescue@46 45 button:SetWidth(120);
Zerotorescue@46 46 button:SetPoint("BOTTOM", InboxFrame, "CENTER", -10, -165);
Zerotorescue@46 47 button:SetScript("OnClick", function()
Zerotorescue@46 48 mod:Open(true, IsShiftKeyDown());
Zerotorescue@46 49 end);
Zerotorescue@0 50
Zerotorescue@0 51 self.btnOpenAll = button;
Zerotorescue@0 52 end
Zerotorescue@0 53
Zerotorescue@0 54 self.btnOpenAll:Show();
Zerotorescue@0 55
Zerotorescue@0 56 if not self.timeLeftFrame then
Zerotorescue@0 57 -- If the timeLeftFrame doesn't exist we will have to build it
Zerotorescue@0 58
Zerotorescue@0 59 self:Debug("Building text frame");
Zerotorescue@0 60
Zerotorescue@0 61 local frame = CreateFrame("Button", "MailOpenerTimeLeftButton", InboxFrame);
Zerotorescue@0 62
Zerotorescue@0 63 -- Mail counter
Zerotorescue@0 64 frame.text = frame:CreateFontString("MailOpenerTimeLeftFrameMailCount", "OVERLAY", "GameFontHighlight");
Zerotorescue@0 65 frame.text:SetPoint("CENTER", MailFrame, "TOPLEFT", 40, -35);
Zerotorescue@0 66
Zerotorescue@0 67 -- Long time left indicator
Zerotorescue@0 68 frame.smallText = frame:CreateFontString("MailOpenerTimeLeftFrameTimeRemaining", "OVERLAY", "GameFontNormal");
Zerotorescue@0 69 frame.smallText:SetFont(GameFontHighlight:GetFont(), 11, "OUTLINE");
Zerotorescue@0 70 frame.smallText:SetPoint("TOPLEFT", MailFrame, "TOPLEFT", 75, -38);
Zerotorescue@0 71 frame.smallText:SetWidth(270);
Zerotorescue@0 72 frame.smallText:SetJustifyH("LEFT");
Zerotorescue@0 73 frame.smallText:SetJustifyV("MIDDLE");
Zerotorescue@0 74
Zerotorescue@0 75 frame:SetPoint("TOPLEFT", MailFrame, "TOPLEFT", 75, -38);
Zerotorescue@0 76 frame:SetWidth(270);
Zerotorescue@0 77 frame:SetHeight(35);
Zerotorescue@0 78 frame:SetScript("OnClick", function(self)
Zerotorescue@0 79 local timeRemainingUntillOpened = frame.smallText:GetText();
Zerotorescue@0 80 if timeRemainingUntillOpened then
Zerotorescue@0 81 MailOpener.currentPopupContents = "|cffffd700" .. timeRemainingUntillOpened .. "|r";
Zerotorescue@0 82
Zerotorescue@0 83 StaticPopup_Show("MailOpenerCopyWindow");
Zerotorescue@0 84 end
Zerotorescue@0 85 end);
Zerotorescue@0 86
Zerotorescue@0 87 self.timeLeftFrame = frame;
Zerotorescue@0 88 end
Zerotorescue@0 89
Zerotorescue@0 90 self.timeLeftFrame:Show();
Zerotorescue@0 91
Zerotorescue@3 92 -- Go through all children of the mail frame to find QA's element and hide it
Zerotorescue@42 93 -- There's no other way to do this because QuickAuctions has a local referrence to it (not as a property of the object like most other frames)
Zerotorescue@0 94 local kids = { MailFrame:GetChildren() };
Zerotorescue@0 95
Zerotorescue@0 96 for _, child in ipairs(kids) do
Zerotorescue@0 97 if child and child.text then
Zerotorescue@0 98 child.text:Hide();
Zerotorescue@0 99 end
Zerotorescue@0 100 end
Zerotorescue@0 101
Zerotorescue@0 102 -- If we were toggling this module on while the mailbox is opened we must register all events again
Zerotorescue@0 103 if MailFrame:IsVisible() then
Zerotorescue@0 104 self:MAIL_SHOW();
Zerotorescue@0 105 end
Zerotorescue@0 106 end
Zerotorescue@0 107
Zerotorescue@31 108 function mod:OnDisable()
Zerotorescue@0 109 self:UnregisterEvent("MAIL_SHOW");
Zerotorescue@0 110
Zerotorescue@0 111 if self.btnOpenAll then
Zerotorescue@0 112 self.btnOpenAll:Hide();
Zerotorescue@0 113 end
Zerotorescue@0 114
Zerotorescue@0 115 if self.timeLeftFrame then
Zerotorescue@0 116 self.timeLeftFrame:Hide();
Zerotorescue@0 117 end
Zerotorescue@0 118
Zerotorescue@0 119 if MailOpener.PostalEnabled then
Zerotorescue@0 120 -- Enable Postal's openers again
Zerotorescue@0 121
Zerotorescue@0 122 MailOpener:TogglePostalModule("OpenAll", true);
Zerotorescue@0 123 MailOpener:TogglePostalModule("Select", true);
Zerotorescue@0 124 end
Zerotorescue@0 125
Zerotorescue@0 126 -- Go through all children of the mail frame to find QA's elements and SHOW these
Zerotorescue@42 127 -- There's no other way to do this because QuickAuctions has a local referrence to it (not as a property of the object like most other frames)
Zerotorescue@0 128 local kids = { MailFrame:GetChildren() };
Zerotorescue@0 129
Zerotorescue@0 130 for _, child in ipairs(kids) do
Zerotorescue@0 131 if child and child.text then
Zerotorescue@0 132 child.text:Show();
Zerotorescue@0 133 end
Zerotorescue@0 134 end
Zerotorescue@0 135
Zerotorescue@0 136 self:Stop();
Zerotorescue@0 137 end
Zerotorescue@0 138
Zerotorescue@31 139 function mod:MAIL_SHOW()
Zerotorescue@0 140 self:Debug("MAIL_SHOW");
Zerotorescue@0 141
Zerotorescue@0 142 self:StopOpening(false);
Zerotorescue@42 143
Zerotorescue@42 144 inventoryFullSoundPlayedThisVisit = nil;
Zerotorescue@0 145
Zerotorescue@0 146 if MailOpener.PostalEnabled then
Zerotorescue@0 147 -- Disable Postal's openers so we can do it ourselves
Zerotorescue@0 148
Zerotorescue@0 149 MailOpener:TogglePostalModule("OpenAll", false);
Zerotorescue@0 150 MailOpener:TogglePostalModule("Select", false);
Zerotorescue@0 151 end
Zerotorescue@0 152
Zerotorescue@0 153 -- Keep an eye for closing of the mailbox
Zerotorescue@0 154 self:RegisterEvent("MAIL_CLOSED", "Stop");
Zerotorescue@0 155 self:RegisterEvent("PLAYER_LEAVING_WORLD", "Stop");
Zerotorescue@0 156
Zerotorescue@0 157 -- Look if the mailbox is full
Zerotorescue@0 158 self:RegisterEvent("UI_ERROR_MESSAGE");
Zerotorescue@0 159 -- Only look again after bags updated
Zerotorescue@0 160 self:RegisterEvent("BAG_UPDATE");
Zerotorescue@0 161
Zerotorescue@0 162 -- We need to know when to start opening
Zerotorescue@0 163 self:RegisterMessage("MO_OPEN_MAIL", "Open");
Zerotorescue@0 164 self:RegisterMessage("MO_SERVER_SYNCED");
Zerotorescue@3 165 self:RegisterMessage("MO_MAIL_EMPTIED");
Zerotorescue@0 166
Zerotorescue@0 167 self:CancelTimer(self.tmrTimeRemaining, true);
Zerotorescue@0 168 self.tmrTimeRemaining = self:ScheduleRepeatingTimer("UpdateTimer", 1);
Zerotorescue@0 169 self:UpdateTimer();
Zerotorescue@0 170 end
Zerotorescue@0 171
Zerotorescue@31 172 function mod:Stop()
Zerotorescue@0 173 self:Debug("Stop");
Zerotorescue@0 174
Zerotorescue@0 175 -- We shutdown, so nothing to do when the mailbox is closed anymore
Zerotorescue@0 176 self:UnregisterEvent("MAIL_CLOSED");
Zerotorescue@0 177 self:UnregisterEvent("PLAYER_LEAVING_WORLD");
Zerotorescue@0 178
Zerotorescue@0 179 -- We care about a full inventory just a little
Zerotorescue@0 180 self:UnregisterEvent("UI_ERROR_MESSAGE");
Zerotorescue@0 181 self:UnregisterEvent("BAG_UPDATE");
Zerotorescue@0 182
Zerotorescue@0 183 -- We no longer care
Zerotorescue@0 184 self:UnregisterMessage("MO_OPEN_MAIL");
Zerotorescue@0 185 self:UnregisterMessage("MO_SERVER_SYNCED");
Zerotorescue@3 186 self:UnregisterMessage("MO_MAIL_EMPTIED");
Zerotorescue@0 187
Zerotorescue@0 188 self:CancelTimer(self.tmrMailOpener, true);
Zerotorescue@0 189 self:CancelTimer(self.tmrTimeRemaining, true);
Zerotorescue@0 190
Zerotorescue@0 191 self:SetOpeningStatus(false);
Zerotorescue@0 192 end
Zerotorescue@0 193
Zerotorescue@31 194 function mod:MO_SERVER_SYNCED()
Zerotorescue@0 195 self:Debug("MO_SERVER_SYNCED");
Zerotorescue@0 196
Zerotorescue@31 197 -- Stop opening now to prevent the opener from continueing while BeanCounter is counting
Zerotorescue@2 198 self:StopOpening(false);
Zerotorescue@2 199
Zerotorescue@0 200 lastSync = GetTime();
Zerotorescue@0 201
Zerotorescue@2 202 self:UpdateMailCount();
Zerotorescue@2 203 end
Zerotorescue@2 204
Zerotorescue@31 205 function mod:MO_MAIL_EMPTIED()
Zerotorescue@3 206 -- A mail has been processed so we can process the next
Zerotorescue@2 207 continue = true;
Zerotorescue@2 208
Zerotorescue@3 209 self:UpdateTimer();
Zerotorescue@2 210 end
Zerotorescue@2 211
Zerotorescue@31 212 function mod:UpdateMailCount()
Zerotorescue@0 213 local numItems, totalItems = GetInboxNumItems();
Zerotorescue@0 214
Zerotorescue@0 215 numCurrentMail = numItems;
Zerotorescue@0 216 numHiddenMail = ( totalItems - numItems );
Zerotorescue@0 217 end
Zerotorescue@0 218
Zerotorescue@31 219 function mod:BAG_UPDATE()
Zerotorescue@0 220 -- If the bags are updated we should check if the inventory is full again
Zerotorescue@0 221 inventoryFull = false;
Zerotorescue@1 222 -- Replay sound
Zerotorescue@1 223 inventoryFullSoundPlayed = nil;
Zerotorescue@0 224 end
Zerotorescue@0 225
Zerotorescue@0 226 -- We registered this event to look for the inventory full error message because this is faster than counting the amount of items in the inventory all the time
Zerotorescue@31 227 function mod:UI_ERROR_MESSAGE(e, errorMessage)
Zerotorescue@0 228 if errorMessage == ERR_INV_FULL then
Zerotorescue@0 229 -- Inventory is full.
Zerotorescue@0 230
Zerotorescue@0 231 if not inventoryFull then
Zerotorescue@0 232 inventoryFull = true;
Zerotorescue@0 233
Zerotorescue@0 234 -- Play the sound
Zerotorescue@42 235 if MailOpener.db.profile.notifications.bagsFullSound and (not MailOpener.db.profile.notifications.bagsFullSoundOnlyOnce or not inventoryFullSoundPlayed) and (not MailOpener.db.profile.notifications.bagsFullSoundOnlyOncePerMailboxVisit or not inventoryFullSoundPlayedThisVisit) then
Zerotorescue@0 236 PlaySoundFile(MailOpener.db.profile.notifications.bagsFullSoundFile);
Zerotorescue@0 237 inventoryFullSoundPlayed = true;
Zerotorescue@42 238 inventoryFullSoundPlayedThisVisit = true;
Zerotorescue@0 239 end
Zerotorescue@0 240 end
Zerotorescue@0 241
Zerotorescue@0 242 -- Continue opening mail (we still want to open gold mail)
Zerotorescue@0 243 continue = true;
Zerotorescue@0 244 elseif errorMessage == ERR_ITEM_MAX_COUNT or errorMessage == ERR_MAIL_DATABASE_ERROR then
Zerotorescue@0 245 -- Can't carry more of this item OR mail database error
Zerotorescue@0 246
Zerotorescue@0 247 -- Continue opening mail (we still want to retrieve other items or gold)
Zerotorescue@0 248 continue = true;
Zerotorescue@0 249 end
Zerotorescue@0 250 end
Zerotorescue@0 251
Zerotorescue@46 252 function mod:Open(forced, everything)
Zerotorescue@46 253 self:Debug("Open (" .. ((everything and "1") or "0") .. ")");
Zerotorescue@0 254
Zerotorescue@0 255 if not opening or forced == true then
Zerotorescue@0 256 local numItems, totalItems = GetInboxNumItems();
Zerotorescue@0 257 -- Start at the end, add one because OpenNext will take it away again
Zerotorescue@0 258 local newMailItemIndex = ( ( numItems or 0 ) + 1 );
Zerotorescue@0 259
Zerotorescue@0 260 if newMailItemIndex > 1 then
Zerotorescue@0 261 self:Debug("Open succes");
Zerotorescue@0 262
Zerotorescue@0 263 -- Stop the previous opening and restart
Zerotorescue@0 264 if forced == true then
Zerotorescue@0 265 self:StopOpening(false); -- this is not a "simple" stop, so also reset inventory full warning
Zerotorescue@0 266 else
Zerotorescue@0 267 self:StopOpening(true); -- forced is false - automated action - simple reset, skip inventory full reset to avoid sound spam
Zerotorescue@0 268 end
Zerotorescue@0 269
Zerotorescue@0 270 -- Update the caret
Zerotorescue@0 271 MAIL_ITEM_INDEX = newMailItemIndex;
Zerotorescue@46 272 -- Do we want to override filters and open every single mail?
Zerotorescue@46 273 if everything then
Zerotorescue@46 274 MAIL_OPEN_EVERYTHING = true;
Zerotorescue@46 275
Zerotorescue@46 276 print("|cff15ff00Mail Opener|r: Shift key was held while pressing the open all button. Temporarily overriding filters; going to open every mail with attachments.");
Zerotorescue@46 277 else
Zerotorescue@46 278 MAIL_OPEN_EVERYTHING = nil;
Zerotorescue@46 279 end
Zerotorescue@0 280
Zerotorescue@0 281 -- We're now going to be busy again
Zerotorescue@0 282 self:SetOpeningStatus(true);
Zerotorescue@0 283
Zerotorescue@0 284 -- Open the next mail in line
Zerotorescue@0 285 self:OpenNext();
Zerotorescue@0 286 else
Zerotorescue@0 287 if MailOpener.db.profile.notifications.mailboxIsEmpty then
Zerotorescue@0 288 print("|cffff0000There is currently no mail available.|r");
Zerotorescue@0 289 end
Zerotorescue@0 290
Zerotorescue@0 291 self:Debug("MO_OPEN_COMPLETE");
Zerotorescue@0 292
Zerotorescue@0 293 -- Report that we're all done
Zerotorescue@0 294 self:SendMessage("MO_OPEN_COMPLETE");
Zerotorescue@0 295 end
Zerotorescue@0 296 end
Zerotorescue@0 297 end
Zerotorescue@0 298
Zerotorescue@0 299 -- Return the type of mail a message subject is
Zerotorescue@0 300 local knownAHSubjectPatterns = {
Zerotorescue@0 301 canceled = AUCTION_REMOVED_MAIL_SUBJECT:replace("%s", ""),
Zerotorescue@0 302 expired = AUCTION_EXPIRED_MAIL_SUBJECT:replace("%s", ""),
Zerotorescue@0 303 outbid = AUCTION_OUTBID_MAIL_SUBJECT:replace("%s", ""),
Zerotorescue@0 304 success = AUCTION_SOLD_MAIL_SUBJECT:replace("%s", ""),
Zerotorescue@0 305 won = AUCTION_WON_MAIL_SUBJECT:replace("%s", ""),
Zerotorescue@0 306 };
Zerotorescue@31 307 function mod:GetAuctionMailType(subject)
Zerotorescue@0 308 if subject then
Zerotorescue@0 309 -- Check if any of our patterns match, sorted by most likely matches first (if one is true the rest shouldn't be evaluated)
Zerotorescue@0 310 if subject:find(knownAHSubjectPatterns.expired) then
Zerotorescue@0 311 return "expired";
Zerotorescue@0 312 elseif subject:find(knownAHSubjectPatterns.success) then
Zerotorescue@0 313 return "success";
Zerotorescue@0 314 elseif subject:find(knownAHSubjectPatterns.won) then
Zerotorescue@0 315 return "won";
Zerotorescue@0 316 elseif subject:find(knownAHSubjectPatterns.canceled) then
Zerotorescue@0 317 return "canceled";
Zerotorescue@0 318 elseif subject:find(knownAHSubjectPatterns.outbid) then
Zerotorescue@0 319 return "outbid";
Zerotorescue@0 320 end
Zerotorescue@0 321 end
Zerotorescue@0 322
Zerotorescue@0 323 return; -- not auction mail
Zerotorescue@0 324 end
Zerotorescue@0 325
Zerotorescue@31 326 function mod:OpenMail(index)
Zerotorescue@0 327 if index > 0 then
Zerotorescue@0 328 -- LUA arrays start at 1, so mail with index 0 doesn't exist, so we're finished
Zerotorescue@0 329
Zerotorescue@0 330 local sender, subject, gold, cod, _, items, _, _, _, _, isGM = select(3, GetInboxHeaderInfo(index));
Zerotorescue@0 331 local auctionMailType = self:GetAuctionMailType(subject);
Zerotorescue@0 332
Zerotorescue@0 333 if isGM then
Zerotorescue@0 334 -- GM Mail
Zerotorescue@0 335 if MailOpener.db.profile.notifications.skipped.all and MailOpener.db.profile.notifications.skipped.GMMail then
Zerotorescue@0 336 print("Skipping " .. index .. ": " .. subject .. " (GM mail)");
Zerotorescue@0 337 end
Zerotorescue@0 338
Zerotorescue@0 339 self:OpenNext();
Zerotorescue@0 340
Zerotorescue@0 341 return;
Zerotorescue@0 342 elseif cod and cod > 0 then
Zerotorescue@0 343 -- Cost on delivery
Zerotorescue@0 344 if MailOpener.db.profile.notifications.skipped.all and MailOpener.db.profile.notifications.skipped.COD then
Zerotorescue@0 345 print("Skipping " .. index .. ": " .. subject .. " (C.O.D.)");
Zerotorescue@0 346 end
Zerotorescue@0 347
Zerotorescue@0 348 self:OpenNext();
Zerotorescue@0 349
Zerotorescue@0 350 return;
Zerotorescue@0 351 elseif ((gold and gold > 0) or (items and items > 0)) then
Zerotorescue@0 352 -- Mail with some sort of attachments
Zerotorescue@0 353
Zerotorescue@0 354 local slotsAvailable = 0;
Zerotorescue@0 355 if self.db.profile.keepFreeSpace > 0 then
Zerotorescue@0 356 for bag = 0, 4 do
Zerotorescue@0 357 local numberOfFreeSlots = GetContainerNumFreeSlots(bag);
Zerotorescue@0 358 slotsAvailable = ( slotsAvailable + numberOfFreeSlots );
Zerotorescue@0 359 end
Zerotorescue@0 360 end
Zerotorescue@0 361
Zerotorescue@46 362 if inventoryFull and not MAIL_OPEN_EVERYTHING and not MailOpener.db.profile.general.continueOpeningStackableItems and items and items > 0 then
Zerotorescue@0 363 if MailOpener.db.profile.notifications.skipped.all and MailOpener.db.profile.notifications.skipped.inventoryFull then
Zerotorescue@0 364 print("Skipping " .. index .. ": " .. subject .. " (inventory is full)");
Zerotorescue@0 365 end
Zerotorescue@0 366
Zerotorescue@0 367 self:OpenNext();
Zerotorescue@0 368
Zerotorescue@0 369 return;
Zerotorescue@0 370 elseif self.db.profile.keepFreeSpace > 0 and items and ( slotsAvailable - items ) < self.db.profile.keepFreeSpace then
Zerotorescue@0 371 if MailOpener.db.profile.notifications.skipped.all and MailOpener.db.profile.notifications.skipped.keepFreeSpaceLimit then
Zerotorescue@0 372 print("Skipping " .. index .. ": " .. subject .. " (keep free space limit)");
Zerotorescue@0 373 end
Zerotorescue@0 374
Zerotorescue@0 375 self:OpenNext();
Zerotorescue@0 376
Zerotorescue@0 377 return;
Zerotorescue@0 378 else
Zerotorescue@0 379 -- This string will hold the mailtype, MailOpener.db.profile.notifications.skipped/processed[mailType] will be checked if this should be announced
Zerotorescue@0 380 local mailType = "other";
Zerotorescue@0 381
Zerotorescue@0 382 if not auctionMailType then
Zerotorescue@0 383 -- This is a normal mail
Zerotorescue@0 384
Zerotorescue@0 385 if gold and gold > 0 then
Zerotorescue@0 386 mailType = "normalGoldMail";
Zerotorescue@0 387 elseif items and items > 0 then
Zerotorescue@0 388 mailType = "normalItemsMail";
Zerotorescue@0 389 end
Zerotorescue@0 390 else
Zerotorescue@0 391 -- This is an auction house mail
Zerotorescue@0 392
Zerotorescue@0 393 mailType = "AH" .. auctionMailType;
Zerotorescue@0 394 end
Zerotorescue@0 395
Zerotorescue@46 396 if not MAIL_OPEN_EVERYTHING and not self.db.profile.filter.normalMoney and mailType == "normalGoldMail" then
Zerotorescue@0 397 if MailOpener.db.profile.notifications.skipped.all and MailOpener.db.profile.notifications.skipped[mailType] then
Zerotorescue@0 398 print("Skipping " .. index .. ": " .. subject .. " (normal mail with gold)");
Zerotorescue@0 399 end
Zerotorescue@0 400
Zerotorescue@0 401 self:OpenNext();
Zerotorescue@0 402
Zerotorescue@0 403 return;
Zerotorescue@46 404 elseif not MAIL_OPEN_EVERYTHING and not self.db.profile.filter.normalAttachments and mailType == "normalItemsMail" then
Zerotorescue@0 405 if MailOpener.db.profile.notifications.skipped.all and MailOpener.db.profile.notifications.skipped[mailType] then
Zerotorescue@0 406 print("Skipping " .. index .. ": " .. subject .. " (normal mail with attachments)");
Zerotorescue@0 407 end
Zerotorescue@0 408
Zerotorescue@0 409 self:OpenNext();
Zerotorescue@0 410
Zerotorescue@0 411 return;
Zerotorescue@46 412 elseif not MAIL_OPEN_EVERYTHING and not self.db.profile.filter.AH.expired and mailType == "AHexpired" then
Zerotorescue@0 413 if MailOpener.db.profile.notifications.skipped.all and MailOpener.db.profile.notifications.skipped[mailType] then
Zerotorescue@0 414 print("Skipping " .. index .. ": " .. subject .. " (expired auction)");
Zerotorescue@0 415 end
Zerotorescue@0 416
Zerotorescue@0 417 self:OpenNext();
Zerotorescue@0 418
Zerotorescue@0 419 return;
Zerotorescue@46 420 elseif not MAIL_OPEN_EVERYTHING and not self.db.profile.filter.AH.success and mailType == "AHsuccess" then
Zerotorescue@0 421 if MailOpener.db.profile.notifications.skipped.all and MailOpener.db.profile.notifications.skipped[mailType] then
Zerotorescue@0 422 print("Skipping " .. index .. ": " .. subject .. " (successful auction)");
Zerotorescue@0 423 end
Zerotorescue@0 424
Zerotorescue@0 425 self:OpenNext();
Zerotorescue@0 426
Zerotorescue@0 427 return;
Zerotorescue@46 428 elseif not MAIL_OPEN_EVERYTHING and not self.db.profile.filter.AH.won and mailType == "AHwon" then
Zerotorescue@0 429 if MailOpener.db.profile.notifications.skipped.all and MailOpener.db.profile.notifications.skipped[mailType] then
Zerotorescue@0 430 print("Skipping " .. index .. ": " .. subject .. " (auction won)");
Zerotorescue@0 431 end
Zerotorescue@0 432
Zerotorescue@0 433 self:OpenNext();
Zerotorescue@0 434
Zerotorescue@0 435 return;
Zerotorescue@46 436 elseif not MAIL_OPEN_EVERYTHING and not self.db.profile.filter.AH.canceled and mailType == "AHcanceled" then
Zerotorescue@0 437 if MailOpener.db.profile.notifications.skipped.all and MailOpener.db.profile.notifications.skipped[mailType] then
Zerotorescue@0 438 print("Skipping " .. index .. ": " .. subject .. " (canceled auction)");
Zerotorescue@0 439 end
Zerotorescue@0 440
Zerotorescue@0 441 self:OpenNext();
Zerotorescue@0 442
Zerotorescue@0 443 return;
Zerotorescue@46 444 elseif not MAIL_OPEN_EVERYTHING and not self.db.profile.filter.AH.outbid and mailType == "AHoutbid" then
Zerotorescue@0 445 if MailOpener.db.profile.notifications.skipped.all and MailOpener.db.profile.notifications.skipped[mailType] then
Zerotorescue@0 446 print("Skipping " .. index .. ": " .. subject .. " (outbid on auction)");
Zerotorescue@0 447 end
Zerotorescue@0 448
Zerotorescue@0 449 self:OpenNext();
Zerotorescue@0 450
Zerotorescue@0 451 return;
Zerotorescue@0 452 else
Zerotorescue@0 453 continue = false;
Zerotorescue@3 454
Zerotorescue@11 455 self:Debug("MO_OPENING_MAIL (#" .. index .. ")");
Zerotorescue@0 456
Zerotorescue@2 457 -- Notifiy other modules of opening
Zerotorescue@2 458 self:SendMessage("MO_OPENING_MAIL");
Zerotorescue@2 459
Zerotorescue@0 460 -- Open current mail
Zerotorescue@0 461 AutoLootMailItem(index);
Zerotorescue@0 462
Zerotorescue@0 463 if MailOpener.db.profile.notifications.processed.all and MailOpener.db.profile.notifications.processed[mailType] then
Zerotorescue@0 464 if gold and gold > 0 then
Zerotorescue@0 465 print("Processing " .. index .. ": " .. subject .. " (" .. MailOpener:FormatMoney(gold) .. ")");
Zerotorescue@0 466 else
Zerotorescue@0 467 print("Processing " .. index .. ": " .. subject);
Zerotorescue@0 468 end
Zerotorescue@0 469 end
Zerotorescue@0 470
Zerotorescue@0 471 -- And prepare for the next
Zerotorescue@0 472 self.tmrMailOpener = self:ScheduleTimer("OpenNext", self.db.profile.speed);
Zerotorescue@0 473 end
Zerotorescue@0 474 end
Zerotorescue@0 475 else
Zerotorescue@0 476 -- Unknown, probably just text
Zerotorescue@0 477 if MailOpener.db.profile.notifications.skipped.all and MailOpener.db.profile.notifications.skipped.other then
Zerotorescue@0 478 if subject then
Zerotorescue@0 479 print("Skipping " .. index .. ": " .. subject);
Zerotorescue@0 480 else
Zerotorescue@0 481 print("Skipping " .. index);
Zerotorescue@0 482 end
Zerotorescue@0 483 end
Zerotorescue@0 484
Zerotorescue@0 485 self:OpenNext();
Zerotorescue@0 486 end
Zerotorescue@0 487 else
Zerotorescue@0 488 -- Finished!
Zerotorescue@0 489 if MailOpener.db.profile.notifications.finishedCurrentBatch then
Zerotorescue@0 490 print("Finished opening the current batch.");
Zerotorescue@0 491 end
Zerotorescue@0 492
Zerotorescue@0 493 self:SetOpeningStatus(false);
Zerotorescue@3 494
Zerotorescue@0 495 self:Debug("MO_OPEN_COMPLETE");
Zerotorescue@0 496
Zerotorescue@0 497 -- Report that we're all done
Zerotorescue@0 498 self:SendMessage("MO_OPEN_COMPLETE");
Zerotorescue@0 499 end
Zerotorescue@0 500 end
Zerotorescue@0 501
Zerotorescue@31 502 function mod:OpenNext()
Zerotorescue@0 503 if continue then
Zerotorescue@0 504 -- If the previous mail was opened successful, open the next
Zerotorescue@0 505
Zerotorescue@0 506 -- Next mail in line
Zerotorescue@0 507 MAIL_ITEM_INDEX = ( MAIL_ITEM_INDEX - 1 );
Zerotorescue@0 508
Zerotorescue@0 509 -- Open it
Zerotorescue@0 510 self:OpenMail(MAIL_ITEM_INDEX);
Zerotorescue@0 511 else
Zerotorescue@0 512 -- Try again at the next interval
Zerotorescue@0 513
Zerotorescue@0 514 self.tmrMailOpener = self:ScheduleTimer("OpenNext", self.db.profile.speed);
Zerotorescue@0 515 end
Zerotorescue@0 516 end
Zerotorescue@0 517
Zerotorescue@31 518 function mod:Continue()
Zerotorescue@2 519 continue = true;
Zerotorescue@2 520 self:OpenNext();
Zerotorescue@2 521 end
Zerotorescue@2 522
Zerotorescue@0 523 local mailRemainingPatterns = {
Zerotorescue@3 524 minutesSeconds = "|cffffffff%d|r/|cffffffff%d|r mail remaining, opening everything will take about |cffffffff%d|r minutes and |cffffffff%d|r seconds (next refresh in |cffffffff%d|r seconds).";
Zerotorescue@3 525 minutes = "|cffffffff%d|r/|cffffffff%d|r mail remaining, opening everything will take about |cffffffff%d|r minutes (next refresh in |cffffffff%d|r seconds).";
Zerotorescue@3 526 seconds = "|cffffffff%d|r/|cffffffff%d|r mail remaining, opening everything will take about |cffffffff%d|r seconds (next refresh in |cffffffff%d|r seconds).";
Zerotorescue@3 527 nextRefresh = "|cffffffff%d|r/|cffffffff%d|r mail remaining, next refresh in |cffffffff%d|r seconds.";
Zerotorescue@0 528 waitingBatch = "|cffffffff%d|r/|cffffffff%d|r mail remaining - waiting for something from the current batch to be opened...";
Zerotorescue@0 529 waitingSync = "|cffffffff%d|r/|cffffffff%d|r mail remaining - waiting for the next mailbox refresh...";
Zerotorescue@0 530 soon = "|cffffffff%d|r/|cffffffff%d|r mail remaining - everything will be opened soon...";
Zerotorescue@0 531 };
Zerotorescue@0 532
Zerotorescue@31 533 function mod:UpdateTimer()
Zerotorescue@0 534 if lastSync then
Zerotorescue@3 535 self:UpdateMailCount();
Zerotorescue@3 536
Zerotorescue@0 537 -- Calculate the total amount of mail waiting
Zerotorescue@0 538 local numTotalMail = ( numHiddenMail + numCurrentMail );
Zerotorescue@0 539
Zerotorescue@0 540 -- Resize the font based on mail left so the counter always fits perfectly
Zerotorescue@0 541 if numTotalMail < 100 then
Zerotorescue@0 542 self.timeLeftFrame.text:SetFont(GameFontHighlight:GetFont(), 30, "THICKOUTLINE");
Zerotorescue@0 543 elseif numTotalMail < 1000 then
Zerotorescue@0 544 self.timeLeftFrame.text:SetFont(GameFontHighlight:GetFont(), 24, "THICKOUTLINE");
Zerotorescue@0 545 else
Zerotorescue@0 546 self.timeLeftFrame.text:SetFont(GameFontHighlight:GetFont(), 18, "THICKOUTLINE");
Zerotorescue@0 547 end
Zerotorescue@0 548 self.timeLeftFrame.text:SetText(numTotalMail);
Zerotorescue@3 549
Zerotorescue@3 550 -- Calculate the next server sync based on the last server sync plus sync interval
Zerotorescue@3 551 local nextSync = ( lastSync + 61 );
Zerotorescue@0 552
Zerotorescue@3 553 -- Calculate the timer remaining untill the next sync
Zerotorescue@3 554 local timeRemaining = floor( nextSync - GetTime() );
Zerotorescue@3 555
Zerotorescue@3 556 if numHiddenMail > 0 or timeRemaining > 0 then
Zerotorescue@3 557 -- If there is still mail being hidden or the timer is still know, display stuff
Zerotorescue@0 558
Zerotorescue@0 559 -- If the next sync was already due, our nextSync calculation was wrong and we must wait a little longer (lag?)
Zerotorescue@0 560 local syncTimeOut = false;
Zerotorescue@0 561 -- If time remaining is below 0, next sync should be soon
Zerotorescue@0 562 if timeRemaining < 0 then
Zerotorescue@0 563 timeRemaining = 0;
Zerotorescue@0 564 syncTimeOut = true;
Zerotorescue@0 565 end
Zerotorescue@0 566
Zerotorescue@0 567 -- Calculate the amount of server syncs required to open all mail
Zerotorescue@0 568 local syncsRequired = ceil( numHiddenMail / 50 );
Zerotorescue@0 569 -- Calculate the time required to execute all these syncs
Zerotorescue@0 570 local timeRequired = ( ( syncsRequired - 1 ) * 61 ) + timeRemaining;
Zerotorescue@0 571
Zerotorescue@0 572 local minutes = floor( timeRequired / 60 );
Zerotorescue@0 573 local seconds = floor( timeRequired % 60 );
Zerotorescue@0 574
Zerotorescue@0 575 local remainingText;
Zerotorescue@0 576 if syncTimeOut then
Zerotorescue@3 577 -- Previous server sync was expected earlier, notify user
Zerotorescue@3 578
Zerotorescue@0 579 if numCurrentMail == 50 then
Zerotorescue@3 580 -- Sync couldn't occur because we were still waiting for the current batch to be opened
Zerotorescue@0 581 remainingText = format(mailRemainingPatterns.waitingBatch, numCurrentMail, numTotalMail);
Zerotorescue@0 582 else
Zerotorescue@0 583 remainingText = format(mailRemainingPatterns.waitingSync, numCurrentMail, numTotalMail);
Zerotorescue@0 584 end
Zerotorescue@3 585 elseif numHiddenMail == 0 then
Zerotorescue@3 586 -- If no hidden mail is remaining, only show the timer for as long as we can be sure
Zerotorescue@3 587
Zerotorescue@3 588 remainingText = format(mailRemainingPatterns.nextRefresh, numCurrentMail, numTotalMail, timeRemaining);
Zerotorescue@0 589 elseif minutes ~= 0 then
Zerotorescue@0 590 if seconds ~= 0 then
Zerotorescue@0 591 remainingText = format(mailRemainingPatterns.minutesSeconds, numCurrentMail, numTotalMail, minutes, seconds, timeRemaining);
Zerotorescue@0 592 else
Zerotorescue@0 593 remainingText = format(mailRemainingPatterns.minutes, numCurrentMail, numTotalMail, minutes, timeRemaining);
Zerotorescue@0 594 end
Zerotorescue@0 595 elseif seconds ~= 0 then
Zerotorescue@0 596 remainingText = format(mailRemainingPatterns.seconds, numCurrentMail, numTotalMail, seconds, timeRemaining);
Zerotorescue@0 597 else
Zerotorescue@0 598 remainingText = format(mailRemainingPatterns.soon, numCurrentMail, numTotalMail);
Zerotorescue@0 599 end
Zerotorescue@0 600
Zerotorescue@0 601 self.timeLeftFrame.smallText:SetText(remainingText);
Zerotorescue@3 602 else
Zerotorescue@0 603 self.timeLeftFrame.smallText:SetText("");
Zerotorescue@0 604 end
Zerotorescue@0 605 end
Zerotorescue@0 606 end
Zerotorescue@0 607
Zerotorescue@31 608 function mod:StopOpening(simple)
Zerotorescue@2 609 -- Stop opener timer
Zerotorescue@2 610 self:CancelTimer(self.tmrMailOpener, true);
Zerotorescue@2 611
Zerotorescue@0 612 if not simple then
Zerotorescue@39 613 -- A simple stop is an automated stop, an advanced stop is one manually or after a sever sync
Zerotorescue@2 614
Zerotorescue@0 615 -- Recheck inventory full
Zerotorescue@0 616 inventoryFull = false;
Zerotorescue@0 617 -- Replay sound
Zerotorescue@0 618 inventoryFullSoundPlayed = nil;
Zerotorescue@0 619 end
Zerotorescue@0 620
Zerotorescue@0 621 -- Reset opener position
Zerotorescue@0 622 MAIL_ITEM_INDEX = 0;
Zerotorescue@46 623 -- Reset open everything state
Zerotorescue@46 624 MAIL_OPEN_EVERYTHING = nil;
Zerotorescue@0 625 -- Stopped opening, so allow to continue
Zerotorescue@0 626 continue = true;
Zerotorescue@31 627
Zerotorescue@0 628 self:SetOpeningStatus(false);
Zerotorescue@0 629 end
Zerotorescue@0 630
Zerotorescue@31 631 function mod:SetOpeningStatus(openingStatus)
Zerotorescue@0 632 opening = openingStatus;
Zerotorescue@0 633
Zerotorescue@0 634 if openingStatus then
Zerotorescue@0 635 self.btnOpenAll:SetText("Opening...");
Zerotorescue@0 636 else
Zerotorescue@0 637 self.btnOpenAll:SetText("Open all");
Zerotorescue@0 638 end
Zerotorescue@0 639 end
Zerotorescue@0 640
Zerotorescue@31 641 function mod:GetOptionsGroup()
Zerotorescue@0 642 local configGroup = {
Zerotorescue@0 643 order = 300,
Zerotorescue@0 644 type = "group",
Zerotorescue@0 645 name = "Open All",
Zerotorescue@0 646 desc = "Change open all settings.",
Zerotorescue@0 647 args = {
Zerotorescue@0 648 filters = {
Zerotorescue@0 649 order = 10,
Zerotorescue@0 650 type = "group",
Zerotorescue@0 651 inline = true,
Zerotorescue@0 652 name = "Filters",
Zerotorescue@0 653 args = {
Zerotorescue@0 654 description = {
Zerotorescue@0 655 order = 10,
Zerotorescue@0 656 type = "description",
Zerotorescue@0 657 name = "Toggle which mail the opener should autoloot.",
Zerotorescue@0 658 },
Zerotorescue@0 659 AHHeader = {
Zerotorescue@0 660 order = 15,
Zerotorescue@0 661 type = "header",
Zerotorescue@0 662 name = "Auction House Mail",
Zerotorescue@0 663 },
Zerotorescue@0 664 canceled = {
Zerotorescue@0 665 order = 20,
Zerotorescue@0 666 type = "toggle",
Zerotorescue@0 667 name = "Open all |cfffed000auction canceled|r mail",
Zerotorescue@0 668 desc = "Automatically loot all auction canceled mails from the auction house.",
Zerotorescue@0 669 set = function(i, v) self.db.profile.filter.AH.canceled = v; end,
Zerotorescue@0 670 get = function() return self.db.profile.filter.AH.canceled; end,
Zerotorescue@0 671 width = "double",
Zerotorescue@0 672 },
Zerotorescue@0 673 expired = {
Zerotorescue@0 674 order = 21,
Zerotorescue@0 675 type = "toggle",
Zerotorescue@0 676 name = "Open all |cfffed000auction expired|r mail",
Zerotorescue@0 677 desc = "Automatically loot all auction canceled mails from the auction house.",
Zerotorescue@0 678 set = function(i, v) self.db.profile.filter.AH.expired = v; end,
Zerotorescue@0 679 get = function() return self.db.profile.filter.AH.expired; end,
Zerotorescue@0 680 width = "double",
Zerotorescue@0 681 },
Zerotorescue@0 682 outbid = {
Zerotorescue@0 683 order = 22,
Zerotorescue@0 684 type = "toggle",
Zerotorescue@0 685 name = "Open all |cfffed000outbid on|r mail",
Zerotorescue@0 686 desc = "Automatically loot all auction outbid mails from the auction house.",
Zerotorescue@0 687 set = function(i, v) self.db.profile.filter.AH.outbid = v; end,
Zerotorescue@0 688 get = function() return self.db.profile.filter.AH.outbid; end,
Zerotorescue@0 689 width = "double",
Zerotorescue@0 690 },
Zerotorescue@0 691 success = {
Zerotorescue@0 692 order = 23,
Zerotorescue@0 693 type = "toggle",
Zerotorescue@0 694 name = "Open all |cfffed000auction successful|r mail",
Zerotorescue@0 695 desc = "Automatically loot all auction successful mails from the auction house.",
Zerotorescue@0 696 set = function(i, v) self.db.profile.filter.AH.success = v; end,
Zerotorescue@0 697 get = function() return self.db.profile.filter.AH.success; end,
Zerotorescue@0 698 width = "double",
Zerotorescue@0 699 },
Zerotorescue@0 700 won = {
Zerotorescue@0 701 order = 24,
Zerotorescue@0 702 type = "toggle",
Zerotorescue@0 703 name = "Open all |cfffed000auction won|r mail",
Zerotorescue@0 704 desc = "Automatically loot all auction won mails from the auction house.",
Zerotorescue@0 705 set = function(i, v) self.db.profile.filter.AH.won = v; end,
Zerotorescue@0 706 get = function() return self.db.profile.filter.AH.won; end,
Zerotorescue@0 707 width = "double",
Zerotorescue@0 708 },
Zerotorescue@0 709 normalHeader = {
Zerotorescue@0 710 order = 30,
Zerotorescue@0 711 type = "header",
Zerotorescue@0 712 name = "Remaining Mail",
Zerotorescue@0 713 },
Zerotorescue@0 714 normalAttachments = {
Zerotorescue@0 715 order = 40,
Zerotorescue@0 716 type = "toggle",
Zerotorescue@0 717 name = "Other mail with |cfffed000attachments|r",
Zerotorescue@0 718 desc = "Automatically loot all mails with attachments not sent by any of the above sources.",
Zerotorescue@0 719 set = function(i, v) self.db.profile.filter.normalAttachments = v; end,
Zerotorescue@0 720 get = function() return self.db.profile.filter.normalAttachments; end,
Zerotorescue@0 721 width = "double",
Zerotorescue@0 722 },
Zerotorescue@0 723 normalMoney = {
Zerotorescue@0 724 order = 50,
Zerotorescue@0 725 type = "toggle",
Zerotorescue@0 726 name = "Other mail with |cfffed000gold|r",
Zerotorescue@0 727 desc = "Automatically loot all mails with gold not sent by any of the above sources.",
Zerotorescue@0 728 set = function(i, v) self.db.profile.filter.normalMoney = v; end,
Zerotorescue@0 729 get = function() return self.db.profile.filter.normalMoney; end,
Zerotorescue@0 730 width = "double",
Zerotorescue@0 731 },
Zerotorescue@0 732 },
Zerotorescue@0 733 },
Zerotorescue@0 734 -- Continuous opening config inline group
Zerotorescue@0 735 continuousOpening = {
Zerotorescue@0 736 order = 20,
Zerotorescue@0 737 type = "group",
Zerotorescue@0 738 inline = true,
Zerotorescue@0 739 name = "Opening Interval",
Zerotorescue@0 740 args = {
Zerotorescue@0 741 description = {
Zerotorescue@0 742 order = 10,
Zerotorescue@0 743 type = "description",
Zerotorescue@0 744 name = function()
Zerotorescue@0 745 local defaultString = "The default behaviour for opening mail is to only do so right after new mail was received from the server. If you close the mailbox or your inventory is full before everything is opened you will have to click the open all button manually or wait for a next mailbox refresh.\n\n";
Zerotorescue@0 746
Zerotorescue@0 747 local currentSettings = "";
Zerotorescue@0 748 if MailOpener.db.profile.general.continueOpening then
Zerotorescue@0 749 currentSettings = currentSettings .. "Mail Opener will |cff00ff00continue|r to attempt to open the remaining mail every |cfffed000" .. MailOpener.db.profile.general.waitTime .. " seconds|r. ";
Zerotorescue@0 750 else
Zerotorescue@0 751 currentSettings = currentSettings .. "Mail Opener will |cffff0000not|r continue to attempt to open the remaining mail and will only start opening when new mail has just been received from the server. ";
Zerotorescue@0 752 end
Zerotorescue@0 753 currentSettings = currentSettings .. "The first batch after each server refresh will be opened after waiting |cfffed000" .. MailOpener.db.profile.general.initialDelay .. " seconds|r.";
Zerotorescue@0 754 return defaultString .. currentSettings;
Zerotorescue@0 755 end,
Zerotorescue@0 756 },
Zerotorescue@0 757 header = {
Zerotorescue@0 758 order = 15,
Zerotorescue@0 759 type = "header",
Zerotorescue@0 760 name = "",
Zerotorescue@0 761 },
Zerotorescue@0 762 continueOpening = {
Zerotorescue@0 763 order = 20,
Zerotorescue@0 764 type = "toggle",
Zerotorescue@0 765 name = "Continue opening mail",
Zerotorescue@0 766 desc = "Continue opening mail at the interval set below, even if the mailbox wasn't refreshed recently.",
Zerotorescue@0 767 width = "full",
Zerotorescue@0 768 get = function() return MailOpener.db.profile.general.continueOpening; end,
Zerotorescue@0 769 set = function(i, v) MailOpener.db.profile.general.continueOpening = v; end,
Zerotorescue@0 770 },
Zerotorescue@0 771 waitTime = {
Zerotorescue@0 772 order = 30,
Zerotorescue@0 773 type = "range",
Zerotorescue@0 774 width = "double",
Zerotorescue@0 775 min = 0.5,
Zerotorescue@0 776 max = 60,
Zerotorescue@0 777 step = 0.5,
Zerotorescue@0 778 name = "Continued Mail Opening Interval",
Zerotorescue@5 779 desc = "Change the interval at which Mail Opener tries to continue opening mail after opening the mailbox. Please note that this setting does not reduce the game's normal 60 seconds wait time for mail.\n\nThe default value is 5 seconds.",
Zerotorescue@0 780 get = function() return MailOpener.db.profile.general.waitTime; end,
Zerotorescue@0 781 set = function(i, v) MailOpener.db.profile.general.waitTime = v; end,
Zerotorescue@0 782 disabled = function() return (not MailOpener.db.profile.general.continueOpening); end,
Zerotorescue@0 783 },
Zerotorescue@0 784 initialDelay = {
Zerotorescue@0 785 order = 40,
Zerotorescue@0 786 type = "range",
Zerotorescue@0 787 width = "double",
Zerotorescue@0 788 min = 0.5,
Zerotorescue@0 789 max = 60,
Zerotorescue@0 790 step = 0.5,
Zerotorescue@0 791 name = "Initial Mail Opening Delay",
Zerotorescue@0 792 desc = "Change the delay before Mail Opener tries opening mail after opening the mailbox or new mail has been received from the server.\n\nThe default value is 0.5 seconds.",
Zerotorescue@0 793 get = function() return MailOpener.db.profile.general.initialDelay; end,
Zerotorescue@0 794 set = function(i, v) MailOpener.db.profile.general.initialDelay = v; end,
Zerotorescue@0 795 },
Zerotorescue@0 796 },
Zerotorescue@0 797 }, -- end Continuous opening config inline group
Zerotorescue@0 798 keepFree = {
Zerotorescue@0 799 order = 30,
Zerotorescue@0 800 type = "group",
Zerotorescue@0 801 inline = true,
Zerotorescue@0 802 name = "Keep Free Space",
Zerotorescue@0 803 args = {
Zerotorescue@0 804 description = {
Zerotorescue@0 805 order = 10,
Zerotorescue@0 806 type = "description",
Zerotorescue@0 807 name = "You can set an amount of bag space you wish to reserve when opening mail. Mail with a higher amount of attachments than available space will be skipped completely with this option set above 0.",
Zerotorescue@0 808 },
Zerotorescue@0 809 header = {
Zerotorescue@0 810 order = 15,
Zerotorescue@0 811 type = "header",
Zerotorescue@0 812 name = "",
Zerotorescue@0 813 },
Zerotorescue@0 814 keepFreeSpace = {
Zerotorescue@0 815 order = 20,
Zerotorescue@0 816 type = "range",
Zerotorescue@0 817 min = 0,
Zerotorescue@0 818 max = 100,
Zerotorescue@0 819 step = 1,
Zerotorescue@0 820 width = "double",
Zerotorescue@0 821 name = "Keep free space",
Zerotorescue@0 822 desc = "Change the amount of space to reserve for other things when opening mail. If this option is set higher than 0, mail with a higher amount of attachments than available space will be skipped completely.\n\nE.g. If this is set to 1 and you have a total of 12 slots left then any mail with 12 attachments will be skipped while one with 11 attachments would be opened.",
Zerotorescue@0 823 set = function(i, v) self.db.profile.keepFreeSpace = v; end,
Zerotorescue@0 824 get = function() return self.db.profile.keepFreeSpace; end,
Zerotorescue@0 825 },
Zerotorescue@0 826 },
Zerotorescue@0 827 },
Zerotorescue@0 828 speed = {
Zerotorescue@0 829 order = 40,
Zerotorescue@0 830 type = "group",
Zerotorescue@0 831 inline = true,
Zerotorescue@0 832 name = "Opening Speed",
Zerotorescue@0 833 args = {
Zerotorescue@0 834 description = {
Zerotorescue@0 835 order = 10,
Zerotorescue@0 836 type = "description",
Zerotorescue@0 837 name = "Change the speed at which mail is opened. You should set the opening speed to the lowest latency you have in a city or experiment with setting it to the minimum.",
Zerotorescue@0 838 },
Zerotorescue@0 839 header = {
Zerotorescue@0 840 order = 15,
Zerotorescue@0 841 type = "header",
Zerotorescue@0 842 name = "",
Zerotorescue@0 843 },
Zerotorescue@0 844 openMailInterval = {
Zerotorescue@0 845 order = 20,
Zerotorescue@0 846 type = "range",
Zerotorescue@0 847 min = 5,
Zerotorescue@0 848 max = 2500,
Zerotorescue@0 849 step = 5,
Zerotorescue@0 850 width = "double",
Zerotorescue@0 851 name = "Open single mail interval",
Zerotorescue@0 852 desc = "Change the mail opening speed (in microseconds) for each mail. Lower may not always be faster.",
Zerotorescue@0 853 get = function() return ( self.db.profile.speed * 1000 ); end,
Zerotorescue@0 854 set = function(i, v) self.db.profile.speed = ( v / 1000 ); end,
Zerotorescue@0 855 },
Zerotorescue@0 856 },
Zerotorescue@0 857 },
Zerotorescue@0 858 },
Zerotorescue@0 859 };
Zerotorescue@0 860
Zerotorescue@0 861 return configGroup;
Zerotorescue@0 862 end
Zerotorescue@0 863
Zerotorescue@31 864 function mod:Debug(t)
Zerotorescue@0 865 return MailOpener:Debug("|cff00ff00OpenAll|r:" .. t);
Zerotorescue@0 866 end