view Modules/FailSafe.lua @ 6:f10c8a083d2a

The ALPHA help request popup should pop when the addon is enabled for every 15th time. I really would like some data to. The timer to start opening mail when you open the mailbox will now use the initial mail opening delay.
author Zerotorescue
date Wed, 08 Sep 2010 00:48:37 +0200
parents 1ba07a64bf14
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