|
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@5
|
34
|
|
Zerotorescue@5
|
35 self:Stop();
|
|
Zerotorescue@5
|
36 end
|
|
Zerotorescue@5
|
37
|
|
Zerotorescue@31
|
38 function mod:MAIL_SHOW()
|
|
Zerotorescue@5
|
39 self:Debug("MAIL_SHOW");
|
|
Zerotorescue@5
|
40
|
|
Zerotorescue@5
|
41 self:RegisterEvent("MAIL_CLOSED");
|
|
Zerotorescue@5
|
42
|
|
Zerotorescue@5
|
43 self:RegisterMessage("MO_OPENING_MAIL");
|
|
Zerotorescue@5
|
44 self:RegisterMessage("MO_MAIL_EMPTIED");
|
|
Zerotorescue@5
|
45 end
|
|
Zerotorescue@5
|
46
|
|
Zerotorescue@31
|
47 function mod:MAIL_CLOSED()
|
|
Zerotorescue@5
|
48 self:Debug("MAIL_CLOSED");
|
|
Zerotorescue@5
|
49
|
|
Zerotorescue@5
|
50 self:UnregisterEvent("MAIL_CLOSED");
|
|
Zerotorescue@5
|
51
|
|
Zerotorescue@5
|
52 self:UnregisterMessage("MO_OPENING_MAIL");
|
|
Zerotorescue@5
|
53 self:UnregisterMessage("MO_OPENING_MAIL_FINISHED");
|
|
Zerotorescue@5
|
54
|
|
Zerotorescue@6
|
55 self:CancelTimer(self.tmrTimeout, true);
|
|
Zerotorescue@5
|
56 end
|
|
Zerotorescue@5
|
57
|
|
Zerotorescue@31
|
58 function mod:MO_OPENING_MAIL()
|
|
Zerotorescue@5
|
59 -- Single mail being opened
|
|
Zerotorescue@5
|
60
|
|
Zerotorescue@11
|
61 self:CancelTimer(self.tmrTimeout, true); -- insurance
|
|
Zerotorescue@5
|
62 self.tmrTimeout = self:ScheduleTimer("Continue", self.db.profile.timeout);
|
|
Zerotorescue@5
|
63 end
|
|
Zerotorescue@5
|
64
|
|
Zerotorescue@31
|
65 function mod:MO_MAIL_EMPTIED()
|
|
Zerotorescue@5
|
66 -- Single mail has been opened
|
|
Zerotorescue@5
|
67
|
|
Zerotorescue@6
|
68 self:CancelTimer(self.tmrTimeout, true);
|
|
Zerotorescue@5
|
69 end
|
|
Zerotorescue@5
|
70
|
|
Zerotorescue@31
|
71 function mod:Continue()
|
|
Zerotorescue@5
|
72 MailOpener:GetModule("OpenAll"):Continue();
|
|
Zerotorescue@5
|
73
|
|
Zerotorescue@5
|
74 print("|cff15ff00Mail Opener|r (FailSafe): Mail opening timeout, continueing with the next mail.");
|
|
Zerotorescue@5
|
75 end
|
|
Zerotorescue@5
|
76
|
|
Zerotorescue@31
|
77 function mod:GetOptionsGroup()
|
|
Zerotorescue@5
|
78 local configGroup = {
|
|
Zerotorescue@31
|
79 order = 0,
|
|
Zerotorescue@31
|
80 type = "modulesSubGroup",
|
|
Zerotorescue@5
|
81 name = "FailSafe",
|
|
Zerotorescue@5
|
82 desc = "Change settings for the FailSafe module.",
|
|
Zerotorescue@5
|
83 args = {
|
|
Zerotorescue@5
|
84 General = {
|
|
Zerotorescue@5
|
85 order = 10,
|
|
Zerotorescue@5
|
86 type = "group",
|
|
Zerotorescue@5
|
87 inline = true,
|
|
Zerotorescue@5
|
88 name = "General",
|
|
Zerotorescue@5
|
89 args = {
|
|
Zerotorescue@5
|
90 description = {
|
|
Zerotorescue@5
|
91 order = 10,
|
|
Zerotorescue@5
|
92 type = "description",
|
|
Zerotorescue@5
|
93 name = function()
|
|
Zerotorescue@31
|
94 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
|
95
|
|
Zerotorescue@5
|
96 if self:IsEnabled() then
|
|
Zerotorescue@31
|
97 descText = descText .. "Status: |cff00ff00Enabled|r";
|
|
Zerotorescue@5
|
98 else
|
|
Zerotorescue@31
|
99 descText = descText .. "Status: |cffff0000Disabled|r";
|
|
Zerotorescue@5
|
100 end
|
|
Zerotorescue@31
|
101
|
|
Zerotorescue@31
|
102 return descText;
|
|
Zerotorescue@5
|
103 end,
|
|
Zerotorescue@5
|
104 },
|
|
Zerotorescue@5
|
105 disable = {
|
|
Zerotorescue@5
|
106 order = 20,
|
|
Zerotorescue@5
|
107 type = "execute",
|
|
Zerotorescue@5
|
108 name = function()
|
|
Zerotorescue@5
|
109 if self:IsEnabled() then
|
|
Zerotorescue@5
|
110 return "Disable Module";
|
|
Zerotorescue@5
|
111 else
|
|
Zerotorescue@5
|
112 return "Enable Module";
|
|
Zerotorescue@5
|
113 end
|
|
Zerotorescue@5
|
114 end,
|
|
Zerotorescue@5
|
115 desc = "Click here to completely toggle this module on or off.",
|
|
Zerotorescue@5
|
116 width = "double",
|
|
Zerotorescue@5
|
117 func = function()
|
|
Zerotorescue@5
|
118 if self:IsEnabled() then
|
|
Zerotorescue@5
|
119 self:Disable();
|
|
Zerotorescue@5
|
120
|
|
Zerotorescue@5
|
121 MailOpener.db.profile.modules[self:GetName()] = false;
|
|
Zerotorescue@5
|
122 else
|
|
Zerotorescue@5
|
123 self:Enable();
|
|
Zerotorescue@5
|
124
|
|
Zerotorescue@5
|
125 MailOpener.db.profile.modules[self:GetName()] = true;
|
|
Zerotorescue@5
|
126 end
|
|
Zerotorescue@5
|
127 end,
|
|
Zerotorescue@5
|
128 },
|
|
Zerotorescue@5
|
129 },
|
|
Zerotorescue@5
|
130 },
|
|
Zerotorescue@5
|
131 SingleMailTimeout = {
|
|
Zerotorescue@5
|
132 order = 20,
|
|
Zerotorescue@5
|
133 type = "group",
|
|
Zerotorescue@5
|
134 inline = true,
|
|
Zerotorescue@5
|
135 name = "Single Mail Opening Timeout",
|
|
Zerotorescue@5
|
136 args = {
|
|
Zerotorescue@5
|
137 description = {
|
|
Zerotorescue@5
|
138 order = 10,
|
|
Zerotorescue@5
|
139 type = "description",
|
|
Zerotorescue@5
|
140 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
|
141 },
|
|
Zerotorescue@5
|
142 timeout = {
|
|
Zerotorescue@5
|
143 order = 20,
|
|
Zerotorescue@5
|
144 type = "range",
|
|
Zerotorescue@5
|
145 width = "double",
|
|
Zerotorescue@5
|
146 min = 1,
|
|
Zerotorescue@5
|
147 max = 60,
|
|
Zerotorescue@5
|
148 step = 0.5,
|
|
Zerotorescue@5
|
149 name = "Single Mail Timeout",
|
|
Zerotorescue@5
|
150 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
|
151 get = function() return self.db.profile.timeout; end,
|
|
Zerotorescue@5
|
152 set = function(i, v) self.db.profile.timeout = v; end,
|
|
Zerotorescue@5
|
153 },
|
|
Zerotorescue@5
|
154 },
|
|
Zerotorescue@5
|
155 },
|
|
Zerotorescue@5
|
156 },
|
|
Zerotorescue@5
|
157 };
|
|
Zerotorescue@5
|
158
|
|
Zerotorescue@5
|
159 return configGroup;
|
|
Zerotorescue@5
|
160 end
|
|
Zerotorescue@5
|
161
|
|
Zerotorescue@31
|
162 function mod:Debug(t)
|
|
Zerotorescue@5
|
163 return MailOpener:Debug("|cffff0000FailSafe|r:" .. t);
|
|
Zerotorescue@5
|
164 end |