annotate Modules/OpenAll.lua @ 4:2dd6005d41f3

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