annotate Modules/FailSafe.lua @ 37:81e7cfcc36b9

No longer showing spent ?0 minutes? when you spent less than 59 seconds at the mailbox. When you only opened a single mail, the summary will show ?from time mail? rather than ?from these mails?.
author Zerotorescue
date Sat, 11 Sep 2010 01:37:13 +0200
parents 90d58723ac0a
children 2b2bea9c7446
rev   line source
Zerotorescue@5 1 local MailOpener = LibStub("AceAddon-3.0"):GetAddon("MailOpener");
Zerotorescue@31 2 local mod = MailOpener:NewModule("FailSafe", "AceEvent-3.0", "AceTimer-3.0");
Zerotorescue@5 3
Zerotorescue@31 4 mod.moduleDescription = "Prevents the mail opening from completely stopping when the opening of a single mail gets stuck.";
Zerotorescue@31 5 mod.moduleRequired = false;
Zerotorescue@5 6
Zerotorescue@31 7 function mod:OnInitialize()
Zerotorescue@5 8 local defaults = {
Zerotorescue@5 9 profile = {
Zerotorescue@5 10 timeout = 20,
Zerotorescue@5 11 },
Zerotorescue@5 12 };
Zerotorescue@5 13
Zerotorescue@5 14 -- Register our saved variables NameSpace
Zerotorescue@5 15 self.db = MailOpener.db:RegisterNamespace("FailSafe", defaults);
Zerotorescue@5 16 end
Zerotorescue@5 17
Zerotorescue@31 18 function mod:OnEnable()
Zerotorescue@5 19 self:Debug("OnEnable");
Zerotorescue@5 20
Zerotorescue@5 21 self:RegisterEvent("MAIL_SHOW");
Zerotorescue@31 22
Zerotorescue@31 23 -- If we were toggling this module on while the mailbox is opened we must register all events again
Zerotorescue@31 24 if MailFrame:IsVisible() then
Zerotorescue@31 25 self:MAIL_SHOW();
Zerotorescue@31 26 end
Zerotorescue@5 27 end
Zerotorescue@5 28
Zerotorescue@5 29 -- Even though Ace can unregister our events it's neater to do it manually too
Zerotorescue@31 30 function mod:OnDisable()
Zerotorescue@5 31 self:Debug("OnDisable");
Zerotorescue@5 32
Zerotorescue@5 33 self:UnregisterEvent("MAIL_SHOW");
Zerotorescue@5 34
Zerotorescue@5 35 self:Stop();
Zerotorescue@5 36 end
Zerotorescue@5 37
Zerotorescue@31 38 function mod:MAIL_SHOW()
Zerotorescue@5 39 self:Debug("MAIL_SHOW");
Zerotorescue@5 40
Zerotorescue@5 41 self:RegisterEvent("MAIL_CLOSED");
Zerotorescue@5 42
Zerotorescue@5 43 self:RegisterMessage("MO_OPENING_MAIL");
Zerotorescue@5 44 self:RegisterMessage("MO_MAIL_EMPTIED");
Zerotorescue@5 45 end
Zerotorescue@5 46
Zerotorescue@31 47 function mod:MAIL_CLOSED()
Zerotorescue@5 48 self:Debug("MAIL_CLOSED");
Zerotorescue@5 49
Zerotorescue@5 50 self:UnregisterEvent("MAIL_CLOSED");
Zerotorescue@5 51
Zerotorescue@5 52 self:UnregisterMessage("MO_OPENING_MAIL");
Zerotorescue@5 53 self:UnregisterMessage("MO_OPENING_MAIL_FINISHED");
Zerotorescue@5 54
Zerotorescue@6 55 self:CancelTimer(self.tmrTimeout, true);
Zerotorescue@5 56 end
Zerotorescue@5 57
Zerotorescue@31 58 function mod:MO_OPENING_MAIL()
Zerotorescue@5 59 -- Single mail being opened
Zerotorescue@5 60
Zerotorescue@11 61 self:CancelTimer(self.tmrTimeout, true); -- insurance
Zerotorescue@5 62 self.tmrTimeout = self:ScheduleTimer("Continue", self.db.profile.timeout);
Zerotorescue@5 63 end
Zerotorescue@5 64
Zerotorescue@31 65 function mod:MO_MAIL_EMPTIED()
Zerotorescue@5 66 -- Single mail has been opened
Zerotorescue@5 67
Zerotorescue@6 68 self:CancelTimer(self.tmrTimeout, true);
Zerotorescue@5 69 end
Zerotorescue@5 70
Zerotorescue@31 71 function mod:Continue()
Zerotorescue@5 72 MailOpener:GetModule("OpenAll"):Continue();
Zerotorescue@5 73
Zerotorescue@5 74 print("|cff15ff00Mail Opener|r (FailSafe): Mail opening timeout, continueing with the next mail.");
Zerotorescue@5 75 end
Zerotorescue@5 76
Zerotorescue@31 77 function mod:GetOptionsGroup()
Zerotorescue@5 78 local configGroup = {
Zerotorescue@31 79 order = 0,
Zerotorescue@31 80 type = "modulesSubGroup",
Zerotorescue@5 81 name = "FailSafe",
Zerotorescue@5 82 desc = "Change settings for the FailSafe module.",
Zerotorescue@5 83 args = {
Zerotorescue@5 84 General = {
Zerotorescue@5 85 order = 10,
Zerotorescue@5 86 type = "group",
Zerotorescue@5 87 inline = true,
Zerotorescue@5 88 name = "General",
Zerotorescue@5 89 args = {
Zerotorescue@5 90 description = {
Zerotorescue@5 91 order = 10,
Zerotorescue@5 92 type = "description",
Zerotorescue@5 93 name = function()
Zerotorescue@31 94 local descText = "With this button you can completely toggle this module |cff00ff00on|r or |cffff0000off|r. This setting will be remembered and the module will be automatically toggled |cff00ff00on|r or |cffff0000off|r upon logon as it was last set.\n\n";
Zerotorescue@5 95
Zerotorescue@5 96 if self:IsEnabled() then
Zerotorescue@31 97 descText = descText .. "Status: |cff00ff00Enabled|r";
Zerotorescue@5 98 else
Zerotorescue@31 99 descText = descText .. "Status: |cffff0000Disabled|r";
Zerotorescue@5 100 end
Zerotorescue@31 101
Zerotorescue@31 102 return descText;
Zerotorescue@5 103 end,
Zerotorescue@5 104 },
Zerotorescue@5 105 disable = {
Zerotorescue@5 106 order = 20,
Zerotorescue@5 107 type = "execute",
Zerotorescue@5 108 name = function()
Zerotorescue@5 109 if self:IsEnabled() then
Zerotorescue@5 110 return "Disable Module";
Zerotorescue@5 111 else
Zerotorescue@5 112 return "Enable Module";
Zerotorescue@5 113 end
Zerotorescue@5 114 end,
Zerotorescue@5 115 desc = "Click here to completely toggle this module on or off.",
Zerotorescue@5 116 width = "double",
Zerotorescue@5 117 func = function()
Zerotorescue@5 118 if self:IsEnabled() then
Zerotorescue@5 119 self:Disable();
Zerotorescue@5 120
Zerotorescue@5 121 MailOpener.db.profile.modules[self:GetName()] = false;
Zerotorescue@5 122 else
Zerotorescue@5 123 self:Enable();
Zerotorescue@5 124
Zerotorescue@5 125 MailOpener.db.profile.modules[self:GetName()] = true;
Zerotorescue@5 126 end
Zerotorescue@5 127 end,
Zerotorescue@5 128 },
Zerotorescue@5 129 },
Zerotorescue@5 130 },
Zerotorescue@5 131 SingleMailTimeout = {
Zerotorescue@5 132 order = 20,
Zerotorescue@5 133 type = "group",
Zerotorescue@5 134 inline = true,
Zerotorescue@5 135 name = "Single Mail Opening Timeout",
Zerotorescue@5 136 args = {
Zerotorescue@5 137 description = {
Zerotorescue@5 138 order = 10,
Zerotorescue@5 139 type = "description",
Zerotorescue@5 140 name = "Change how long FailSafe should wait before skipping the last mail and continueing with the next. This will prevent mail opening getting stuck forever because a single mail is frozen for whatever reason.",
Zerotorescue@5 141 },
Zerotorescue@5 142 timeout = {
Zerotorescue@5 143 order = 20,
Zerotorescue@5 144 type = "range",
Zerotorescue@5 145 width = "double",
Zerotorescue@5 146 min = 1,
Zerotorescue@5 147 max = 60,
Zerotorescue@5 148 step = 0.5,
Zerotorescue@5 149 name = "Single Mail Timeout",
Zerotorescue@5 150 desc = "Change how long FailSafe should wait before skipping the last mail and continueing with the next. This should prevent mail opening getting stuck because a single mail is stuck for whatever reason.\n\nDefault value is 20 seconds.",
Zerotorescue@5 151 get = function() return self.db.profile.timeout; end,
Zerotorescue@5 152 set = function(i, v) self.db.profile.timeout = v; end,
Zerotorescue@5 153 },
Zerotorescue@5 154 },
Zerotorescue@5 155 },
Zerotorescue@5 156 },
Zerotorescue@5 157 };
Zerotorescue@5 158
Zerotorescue@5 159 return configGroup;
Zerotorescue@5 160 end
Zerotorescue@5 161
Zerotorescue@31 162 function mod:Debug(t)
Zerotorescue@5 163 return MailOpener:Debug("|cffff0000FailSafe|r:" .. t);
Zerotorescue@5 164 end