Mercurial > wow > mailopener
diff Modules/FailSafe.lua @ 5:1ba07a64bf14
Added a ?FailSafe? module which will safe you from mail failing to open. The opening of a single mail may get stuck when other things occur such as mail being send at the exact same time. This module will continue with the next mail after a set timeout (default set to 20 seconds).
| author | Zerotorescue |
|---|---|
| date | Tue, 07 Sep 2010 20:57:49 +0200 |
| parents | |
| children | f10c8a083d2a |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Modules/FailSafe.lua Tue Sep 07 20:57:49 2010 +0200 @@ -0,0 +1,159 @@ +local MailOpener = LibStub("AceAddon-3.0"):GetAddon("MailOpener"); +local FailSafe = MailOpener:NewModule("FailSafe", "AceEvent-3.0", "AceTimer-3.0"); + +--[[ +Module name: FailSafe +Description: Prevents the mail opening from stopping when the execution of a single mail opening function fails (e.g. because of mail functions throttling). +Required: No. +]] + +function FailSafe:OnInitialize() + local defaults = { + profile = { + timeout = 20, + }, + }; + + -- Register our saved variables NameSpace + self.db = MailOpener.db:RegisterNamespace("FailSafe", defaults); +end + +function FailSafe:OnEnable() + self:Debug("OnEnable"); + + self:RegisterEvent("MAIL_SHOW"); +end + +-- Even though Ace can unregister our events it's neater to do it manually too +function FailSafe:OnDisable() + self:Debug("OnDisable"); + + self:UnregisterEvent("MAIL_SHOW"); + + self:Stop(); +end + +function FailSafe:MAIL_SHOW() + self:Debug("MAIL_SHOW"); + + self:RegisterEvent("MAIL_CLOSED"); + + self:RegisterMessage("MO_OPENING_MAIL"); + self:RegisterMessage("MO_MAIL_EMPTIED"); +end + +function FailSafe:MAIL_CLOSED() + self:Debug("MAIL_CLOSED"); + + self:UnregisterEvent("MAIL_CLOSED"); + + self:UnregisterMessage("MO_OPENING_MAIL"); + self:UnregisterMessage("MO_OPENING_MAIL_FINISHED"); + + self:CancelTimer(self.tmrTimeout); +end + +function FailSafe:MO_OPENING_MAIL() + -- Single mail being opened + + self.tmrTimeout = self:ScheduleTimer("Continue", self.db.profile.timeout); +end + +function FailSafe:MO_MAIL_EMPTIED() + -- Single mail has been opened + + self:CancelTimer(self.tmrTimeout); +end + +function FailSafe:Continue() + MailOpener:GetModule("OpenAll"):Continue(); + + print("|cff15ff00Mail Opener|r (FailSafe): Mail opening timeout, continueing with the next mail."); +end + +function FailSafe:GetOptionsGroup() + local configGroup = { + order = 450, + type = "group", + name = "FailSafe", + desc = "Change settings for the FailSafe module.", + args = { + General = { + order = 10, + type = "group", + inline = true, + name = "General", + args = { + description = { + order = 10, + type = "description", + name = function() + local default = "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"; + + if self:IsEnabled() then + return default .. "Status: |cff00ff00Enabled|r"; + else + return default .. "Status: |cffff0000Disabled|r"; + end + end, + }, + disable = { + order = 20, + type = "execute", + name = function() + if self:IsEnabled() then + return "Disable Module"; + else + return "Enable Module"; + end + end, + desc = "Click here to completely toggle this module on or off.", + width = "double", + func = function() + if self:IsEnabled() then + self:Disable(); + + MailOpener.db.profile.modules[self:GetName()] = false; + else + self:Enable(); + + MailOpener.db.profile.modules[self:GetName()] = true; + end + end, + }, + }, + }, + SingleMailTimeout = { + order = 20, + type = "group", + inline = true, + name = "Single Mail Opening Timeout", + args = { + description = { + order = 10, + type = "description", + 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.", + }, + timeout = { + order = 20, + type = "range", + width = "double", + min = 1, + max = 60, + step = 0.5, + name = "Single Mail Timeout", + 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.", + get = function() return self.db.profile.timeout; end, + set = function(i, v) self.db.profile.timeout = v; end, + }, + }, + }, + }, + }; + + return configGroup; +end + +function FailSafe:Debug(t) + return MailOpener:Debug("|cffff0000FailSafe|r:" .. t); +end \ No newline at end of file
