Zerotorescue@5: local MailOpener = LibStub("AceAddon-3.0"):GetAddon("MailOpener"); Zerotorescue@31: local mod = MailOpener:NewModule("FailSafe", "AceEvent-3.0", "AceTimer-3.0"); Zerotorescue@70: local L = LibStub("AceLocale-3.0"):GetLocale("MailOpener"); Zerotorescue@5: Zerotorescue@68: mod.moduleDescription = L["Prevents the mail opening from completely stopping when the opening of a single mail gets stuck."]; Zerotorescue@31: mod.moduleRequired = false; Zerotorescue@5: Zerotorescue@31: function mod:OnInitialize() Zerotorescue@5: local defaults = { Zerotorescue@5: profile = { Zerotorescue@5: timeout = 20, Zerotorescue@5: }, Zerotorescue@5: }; Zerotorescue@5: Zerotorescue@5: -- Register our saved variables NameSpace Zerotorescue@5: self.db = MailOpener.db:RegisterNamespace("FailSafe", defaults); Zerotorescue@5: end Zerotorescue@5: Zerotorescue@31: function mod:OnEnable() Zerotorescue@5: self:Debug("OnEnable"); Zerotorescue@5: Zerotorescue@5: self:RegisterEvent("MAIL_SHOW"); Zerotorescue@31: Zerotorescue@31: -- If we were toggling this module on while the mailbox is opened we must register all events again Zerotorescue@31: if MailFrame:IsVisible() then Zerotorescue@31: self:MAIL_SHOW(); Zerotorescue@31: end Zerotorescue@5: end Zerotorescue@5: Zerotorescue@5: -- Even though Ace can unregister our events it's neater to do it manually too Zerotorescue@31: function mod:OnDisable() Zerotorescue@5: self:Debug("OnDisable"); Zerotorescue@5: Zerotorescue@5: self:UnregisterEvent("MAIL_SHOW"); Zerotorescue@42: Zerotorescue@42: -- If we were toggling this module off while the mailbox is opened we must unregister all events Zerotorescue@42: if MailFrame:IsVisible() then Zerotorescue@42: self:MAIL_CLOSED(); Zerotorescue@42: end Zerotorescue@5: end Zerotorescue@5: Zerotorescue@31: function mod:MAIL_SHOW() Zerotorescue@5: self:Debug("MAIL_SHOW"); Zerotorescue@5: Zerotorescue@5: self:RegisterEvent("MAIL_CLOSED"); Zerotorescue@5: Zerotorescue@5: self:RegisterMessage("MO_OPENING_MAIL"); Zerotorescue@5: self:RegisterMessage("MO_MAIL_EMPTIED"); Zerotorescue@5: end Zerotorescue@5: Zerotorescue@31: function mod:MAIL_CLOSED() Zerotorescue@5: self:Debug("MAIL_CLOSED"); Zerotorescue@5: Zerotorescue@5: self:UnregisterEvent("MAIL_CLOSED"); Zerotorescue@5: Zerotorescue@5: self:UnregisterMessage("MO_OPENING_MAIL"); Zerotorescue@5: self:UnregisterMessage("MO_OPENING_MAIL_FINISHED"); Zerotorescue@5: Zerotorescue@6: self:CancelTimer(self.tmrTimeout, true); Zerotorescue@5: end Zerotorescue@5: Zerotorescue@31: function mod:MO_OPENING_MAIL() Zerotorescue@5: -- Single mail being opened Zerotorescue@5: Zerotorescue@11: self:CancelTimer(self.tmrTimeout, true); -- insurance Zerotorescue@5: self.tmrTimeout = self:ScheduleTimer("Continue", self.db.profile.timeout); Zerotorescue@5: end Zerotorescue@5: Zerotorescue@31: function mod:MO_MAIL_EMPTIED() Zerotorescue@5: -- Single mail has been opened Zerotorescue@5: Zerotorescue@6: self:CancelTimer(self.tmrTimeout, true); Zerotorescue@5: end Zerotorescue@5: Zerotorescue@31: function mod:Continue() Zerotorescue@5: MailOpener:GetModule("OpenAll"):Continue(); Zerotorescue@5: Zerotorescue@68: MailOpener:Print(L["(FailSafe) Mail opening timeout, continuing with the next mail."]); Zerotorescue@5: end Zerotorescue@5: Zerotorescue@31: function mod:GetOptionsGroup() Zerotorescue@5: local configGroup = { Zerotorescue@31: order = 0, Zerotorescue@31: type = "modulesSubGroup", Zerotorescue@68: name = L["FailSafe"], Zerotorescue@68: desc = L["Change settings for the FailSafe module."], Zerotorescue@5: args = { Zerotorescue@5: General = { Zerotorescue@5: order = 10, Zerotorescue@5: type = "group", Zerotorescue@5: inline = true, Zerotorescue@68: name = L["General"], Zerotorescue@5: args = { Zerotorescue@5: description = { Zerotorescue@5: order = 10, Zerotorescue@5: type = "description", Zerotorescue@5: name = function() Zerotorescue@68: local descText = L["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: Zerotorescue@5: if self:IsEnabled() then Zerotorescue@68: descText = descText .. L["Status: %s"]:format(L["|cff00ff00Enabled|r"]); Zerotorescue@5: else Zerotorescue@68: descText = descText .. L["Status: %s"]:format(L["|cffff0000Disabled|r"]); Zerotorescue@5: end Zerotorescue@31: Zerotorescue@31: return descText; Zerotorescue@5: end, Zerotorescue@5: }, Zerotorescue@5: disable = { Zerotorescue@5: order = 20, Zerotorescue@5: type = "execute", Zerotorescue@5: name = function() Zerotorescue@5: if self:IsEnabled() then Zerotorescue@68: return L["Disable Module"]; Zerotorescue@5: else Zerotorescue@68: return L["Enable Module"]; Zerotorescue@5: end Zerotorescue@5: end, Zerotorescue@68: desc = L["Click here to completely toggle this module on or off."], Zerotorescue@5: width = "double", Zerotorescue@5: func = function() Zerotorescue@5: if self:IsEnabled() then Zerotorescue@5: self:Disable(); Zerotorescue@5: Zerotorescue@5: MailOpener.db.profile.modules[self:GetName()] = false; Zerotorescue@5: else Zerotorescue@5: self:Enable(); Zerotorescue@5: Zerotorescue@5: MailOpener.db.profile.modules[self:GetName()] = true; Zerotorescue@5: end Zerotorescue@5: end, Zerotorescue@5: }, Zerotorescue@5: }, Zerotorescue@5: }, Zerotorescue@5: SingleMailTimeout = { Zerotorescue@5: order = 20, Zerotorescue@5: type = "group", Zerotorescue@5: inline = true, Zerotorescue@68: name = L["Single Mail Opening Timeout"], Zerotorescue@5: args = { Zerotorescue@5: description = { Zerotorescue@5: order = 10, Zerotorescue@5: type = "description", Zerotorescue@68: name = L["Change how long FailSafe should wait before skipping the last mail and continuing with the next. This will prevent mail opening getting stuck forever because a single mail is frozen for whatever reason."], Zerotorescue@5: }, Zerotorescue@5: timeout = { Zerotorescue@5: order = 20, Zerotorescue@5: type = "range", Zerotorescue@5: width = "double", Zerotorescue@5: min = 1, Zerotorescue@5: max = 60, Zerotorescue@5: step = 0.5, Zerotorescue@68: name = L["Single Mail Timeout"], Zerotorescue@68: desc = L["Change how long FailSafe should wait before skipping the last mail and continuing 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: get = function() return self.db.profile.timeout; end, Zerotorescue@5: set = function(i, v) self.db.profile.timeout = v; end, Zerotorescue@5: }, Zerotorescue@5: }, Zerotorescue@5: }, Zerotorescue@5: }, Zerotorescue@5: }; Zerotorescue@5: Zerotorescue@5: return configGroup; Zerotorescue@5: end Zerotorescue@5: Zerotorescue@31: function mod:Debug(t) Zerotorescue@5: return MailOpener:Debug("|cffff0000FailSafe|r:" .. t); Zerotorescue@5: end