annotate Modules/OpenAll.lua @ 45:e9072491dc3f

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