changeset 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 2dd6005d41f3
children f10c8a083d2a
files Core.lua MailOpener.toc Modules/FailSafe.lua Modules/OpenAll.lua
diffstat 4 files changed, 162 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/Core.lua	Tue Sep 07 17:49:39 2010 +0200
+++ b/Core.lua	Tue Sep 07 20:57:49 2010 +0200
@@ -24,6 +24,7 @@
 			},
 			modules = {
 				Collected = true,
+				FailSafe = true,
 			},
 			notifications = {
 				welcome = false,
--- a/MailOpener.toc	Tue Sep 07 17:49:39 2010 +0200
+++ b/MailOpener.toc	Tue Sep 07 20:57:49 2010 +0200
@@ -15,4 +15,5 @@
 
 Modules\Collected.lua
 Modules\Config.lua
+Modules\FailSafe.lua
 Modules\OpenAll.lua
\ No newline at end of file
--- /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
--- a/Modules/OpenAll.lua	Tue Sep 07 17:49:39 2010 +0200
+++ b/Modules/OpenAll.lua	Tue Sep 07 20:57:49 2010 +0200
@@ -759,7 +759,7 @@
 						max = 60,
 						step = 0.5,
 						name = "Continued Mail Opening Interval",
-						desc = "Change the interval at which Mail Opener tries to continue opening mail after opening the mailbox. Please note that this setting does not reduce the game's normal 60 seconds wait time for mail.\n\nThe default value is 5 seconds",
+						desc = "Change the interval at which Mail Opener tries to continue opening mail after opening the mailbox. Please note that this setting does not reduce the game's normal 60 seconds wait time for mail.\n\nThe default value is 5 seconds.",
 						get = function() return MailOpener.db.profile.general.waitTime; end,
 						set = function(i, v) MailOpener.db.profile.general.waitTime = v; end,
 						disabled = function() return (not MailOpener.db.profile.general.continueOpening); end,