Mercurial > wow > mailopener
view Modules/FailSafe.lua @ 8:1b2d819b4fa8
Now using the global MailAddonBusy to indicate MailOpener is busy, read comments in Core.lua for more info.
Default status is now ?enabled without automatic mail opening? to let first time users look around before MailOpener messes up their heads. A StaticPopupDialog will be added later to ask if they want to auto-enable.
When ?enabled without automatic mail opening? is on and you toggle the mail opening checkbox on, mail opening will automatically start.
| author | Zerotorescue |
|---|---|
| date | Thu, 09 Sep 2010 10:53:19 +0200 |
| parents | f10c8a083d2a |
| children | fb952805d8b7 |
line wrap: on
line source
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, true); 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, true); 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
