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