annotate Modules/FailSafe.lua @ 44:5cd81a462159 v1.1.1

Updated changelog, ready to commit.
author Zerotorescue
date Sun, 12 Sep 2010 01:30:32 +0200
parents 8168280420ae
children eadff31e61e8
rev   line source
Zerotorescue@5 1 local MailOpener = LibStub("AceAddon-3.0"):GetAddon("MailOpener");
Zerotorescue@31 2 local mod = MailOpener:NewModule("FailSafe", "AceEvent-3.0", "AceTimer-3.0");
Zerotorescue@5 3
Zerotorescue@31 4 mod.moduleDescription = "Prevents the mail opening from completely stopping when the opening of a single mail gets stuck.";
Zerotorescue@31 5 mod.moduleRequired = false;
Zerotorescue@5 6
Zerotorescue@31 7 function mod:OnInitialize()
Zerotorescue@5 8 local defaults = {
Zerotorescue@5 9 profile = {
Zerotorescue@5 10 timeout = 20,
Zerotorescue@5 11 },
Zerotorescue@5 12 };
Zerotorescue@5 13
Zerotorescue@5 14 -- Register our saved variables NameSpace
Zerotorescue@5 15 self.db = MailOpener.db:RegisterNamespace("FailSafe", defaults);
Zerotorescue@5 16 end
Zerotorescue@5 17
Zerotorescue@31 18 function mod:OnEnable()
Zerotorescue@5 19 self:Debug("OnEnable");
Zerotorescue@5 20
Zerotorescue@5 21 self:RegisterEvent("MAIL_SHOW");
Zerotorescue@31 22
Zerotorescue@31 23 -- If we were toggling this module on while the mailbox is opened we must register all events again
Zerotorescue@31 24 if MailFrame:IsVisible() then
Zerotorescue@31 25 self:MAIL_SHOW();
Zerotorescue@31 26 end
Zerotorescue@5 27 end
Zerotorescue@5 28
Zerotorescue@5 29 -- Even though Ace can unregister our events it's neater to do it manually too
Zerotorescue@31 30 function mod:OnDisable()
Zerotorescue@5 31 self:Debug("OnDisable");
Zerotorescue@5 32
Zerotorescue@5 33 self:UnregisterEvent("MAIL_SHOW");
Zerotorescue@42 34
Zerotorescue@42 35 -- If we were toggling this module off while the mailbox is opened we must unregister all events
Zerotorescue@42 36 if MailFrame:IsVisible() then
Zerotorescue@42 37 self:MAIL_CLOSED();
Zerotorescue@42 38 end
Zerotorescue@5 39 end
Zerotorescue@5 40
Zerotorescue@31 41 function mod:MAIL_SHOW()
Zerotorescue@5 42 self:Debug("MAIL_SHOW");
Zerotorescue@5 43
Zerotorescue@5 44 self:RegisterEvent("MAIL_CLOSED");
Zerotorescue@5 45
Zerotorescue@5 46 self:RegisterMessage("MO_OPENING_MAIL");
Zerotorescue@5 47 self:RegisterMessage("MO_MAIL_EMPTIED");
Zerotorescue@5 48 end
Zerotorescue@5 49
Zerotorescue@31 50 function mod:MAIL_CLOSED()
Zerotorescue@5 51 self:Debug("MAIL_CLOSED");
Zerotorescue@5 52
Zerotorescue@5 53 self:UnregisterEvent("MAIL_CLOSED");
Zerotorescue@5 54
Zerotorescue@5 55 self:UnregisterMessage("MO_OPENING_MAIL");
Zerotorescue@5 56 self:UnregisterMessage("MO_OPENING_MAIL_FINISHED");
Zerotorescue@5 57
Zerotorescue@6 58 self:CancelTimer(self.tmrTimeout, true);
Zerotorescue@5 59 end
Zerotorescue@5 60
Zerotorescue@31 61 function mod:MO_OPENING_MAIL()
Zerotorescue@5 62 -- Single mail being opened
Zerotorescue@5 63
Zerotorescue@11 64 self:CancelTimer(self.tmrTimeout, true); -- insurance
Zerotorescue@5 65 self.tmrTimeout = self:ScheduleTimer("Continue", self.db.profile.timeout);
Zerotorescue@5 66 end
Zerotorescue@5 67
Zerotorescue@31 68 function mod:MO_MAIL_EMPTIED()
Zerotorescue@5 69 -- Single mail has been opened
Zerotorescue@5 70
Zerotorescue@6 71 self:CancelTimer(self.tmrTimeout, true);
Zerotorescue@5 72 end
Zerotorescue@5 73
Zerotorescue@31 74 function mod:Continue()
Zerotorescue@5 75 MailOpener:GetModule("OpenAll"):Continue();
Zerotorescue@5 76
Zerotorescue@5 77 print("|cff15ff00Mail Opener|r (FailSafe): Mail opening timeout, continueing with the next mail.");
Zerotorescue@5 78 end
Zerotorescue@5 79
Zerotorescue@31 80 function mod:GetOptionsGroup()
Zerotorescue@5 81 local configGroup = {
Zerotorescue@31 82 order = 0,
Zerotorescue@31 83 type = "modulesSubGroup",
Zerotorescue@5 84 name = "FailSafe",
Zerotorescue@5 85 desc = "Change settings for the FailSafe module.",
Zerotorescue@5 86 args = {
Zerotorescue@5 87 General = {
Zerotorescue@5 88 order = 10,
Zerotorescue@5 89 type = "group",
Zerotorescue@5 90 inline = true,
Zerotorescue@5 91 name = "General",
Zerotorescue@5 92 args = {
Zerotorescue@5 93 description = {
Zerotorescue@5 94 order = 10,
Zerotorescue@5 95 type = "description",
Zerotorescue@5 96 name = function()
Zerotorescue@31 97 local descText = "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 98
Zerotorescue@5 99 if self:IsEnabled() then
Zerotorescue@31 100 descText = descText .. "Status: |cff00ff00Enabled|r";
Zerotorescue@5 101 else
Zerotorescue@31 102 descText = descText .. "Status: |cffff0000Disabled|r";
Zerotorescue@5 103 end
Zerotorescue@31 104
Zerotorescue@31 105 return descText;
Zerotorescue@5 106 end,
Zerotorescue@5 107 },
Zerotorescue@5 108 disable = {
Zerotorescue@5 109 order = 20,
Zerotorescue@5 110 type = "execute",
Zerotorescue@5 111 name = function()
Zerotorescue@5 112 if self:IsEnabled() then
Zerotorescue@5 113 return "Disable Module";
Zerotorescue@5 114 else
Zerotorescue@5 115 return "Enable Module";
Zerotorescue@5 116 end
Zerotorescue@5 117 end,
Zerotorescue@5 118 desc = "Click here to completely toggle this module on or off.",
Zerotorescue@5 119 width = "double",
Zerotorescue@5 120 func = function()
Zerotorescue@5 121 if self:IsEnabled() then
Zerotorescue@5 122 self:Disable();
Zerotorescue@5 123
Zerotorescue@5 124 MailOpener.db.profile.modules[self:GetName()] = false;
Zerotorescue@5 125 else
Zerotorescue@5 126 self:Enable();
Zerotorescue@5 127
Zerotorescue@5 128 MailOpener.db.profile.modules[self:GetName()] = true;
Zerotorescue@5 129 end
Zerotorescue@5 130 end,
Zerotorescue@5 131 },
Zerotorescue@5 132 },
Zerotorescue@5 133 },
Zerotorescue@5 134 SingleMailTimeout = {
Zerotorescue@5 135 order = 20,
Zerotorescue@5 136 type = "group",
Zerotorescue@5 137 inline = true,
Zerotorescue@5 138 name = "Single Mail Opening Timeout",
Zerotorescue@5 139 args = {
Zerotorescue@5 140 description = {
Zerotorescue@5 141 order = 10,
Zerotorescue@5 142 type = "description",
Zerotorescue@5 143 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.",
Zerotorescue@5 144 },
Zerotorescue@5 145 timeout = {
Zerotorescue@5 146 order = 20,
Zerotorescue@5 147 type = "range",
Zerotorescue@5 148 width = "double",
Zerotorescue@5 149 min = 1,
Zerotorescue@5 150 max = 60,
Zerotorescue@5 151 step = 0.5,
Zerotorescue@5 152 name = "Single Mail Timeout",
Zerotorescue@5 153 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.",
Zerotorescue@5 154 get = function() return self.db.profile.timeout; end,
Zerotorescue@5 155 set = function(i, v) self.db.profile.timeout = v; end,
Zerotorescue@5 156 },
Zerotorescue@5 157 },
Zerotorescue@5 158 },
Zerotorescue@5 159 },
Zerotorescue@5 160 };
Zerotorescue@5 161
Zerotorescue@5 162 return configGroup;
Zerotorescue@5 163 end
Zerotorescue@5 164
Zerotorescue@31 165 function mod:Debug(t)
Zerotorescue@5 166 return MailOpener:Debug("|cffff0000FailSafe|r:" .. t);
Zerotorescue@5 167 end