|
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 end
|
|
Zerotorescue@5
|
35
|
|
Zerotorescue@31
|
36 function mod: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@31
|
45 function mod: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@31
|
56 function mod: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@31
|
63 function mod: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@31
|
69 function mod: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@31
|
75 function mod:GetOptionsGroup()
|
|
Zerotorescue@5
|
76 local configGroup = {
|
|
Zerotorescue@31
|
77 order = 0,
|
|
Zerotorescue@31
|
78 type = "modulesSubGroup",
|
|
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@31
|
92 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
|
93
|
|
Zerotorescue@5
|
94 if self:IsEnabled() then
|
|
Zerotorescue@31
|
95 descText = descText .. "Status: |cff00ff00Enabled|r";
|
|
Zerotorescue@5
|
96 else
|
|
Zerotorescue@31
|
97 descText = descText .. "Status: |cffff0000Disabled|r";
|
|
Zerotorescue@5
|
98 end
|
|
Zerotorescue@31
|
99
|
|
Zerotorescue@31
|
100 return descText;
|
|
Zerotorescue@5
|
101 end,
|
|
Zerotorescue@5
|
102 },
|
|
Zerotorescue@5
|
103 disable = {
|
|
Zerotorescue@5
|
104 order = 20,
|
|
Zerotorescue@5
|
105 type = "execute",
|
|
Zerotorescue@5
|
106 name = function()
|
|
Zerotorescue@5
|
107 if self:IsEnabled() then
|
|
Zerotorescue@5
|
108 return "Disable Module";
|
|
Zerotorescue@5
|
109 else
|
|
Zerotorescue@5
|
110 return "Enable Module";
|
|
Zerotorescue@5
|
111 end
|
|
Zerotorescue@5
|
112 end,
|
|
Zerotorescue@5
|
113 desc = "Click here to completely toggle this module on or off.",
|
|
Zerotorescue@5
|
114 width = "double",
|
|
Zerotorescue@5
|
115 func = function()
|
|
Zerotorescue@5
|
116 if self:IsEnabled() then
|
|
Zerotorescue@5
|
117 self:Disable();
|
|
Zerotorescue@5
|
118
|
|
Zerotorescue@5
|
119 MailOpener.db.profile.modules[self:GetName()] = false;
|
|
Zerotorescue@5
|
120 else
|
|
Zerotorescue@5
|
121 self:Enable();
|
|
Zerotorescue@5
|
122
|
|
Zerotorescue@5
|
123 MailOpener.db.profile.modules[self:GetName()] = true;
|
|
Zerotorescue@5
|
124 end
|
|
Zerotorescue@5
|
125 end,
|
|
Zerotorescue@5
|
126 },
|
|
Zerotorescue@5
|
127 },
|
|
Zerotorescue@5
|
128 },
|
|
Zerotorescue@5
|
129 SingleMailTimeout = {
|
|
Zerotorescue@5
|
130 order = 20,
|
|
Zerotorescue@5
|
131 type = "group",
|
|
Zerotorescue@5
|
132 inline = true,
|
|
Zerotorescue@5
|
133 name = "Single Mail Opening Timeout",
|
|
Zerotorescue@5
|
134 args = {
|
|
Zerotorescue@5
|
135 description = {
|
|
Zerotorescue@5
|
136 order = 10,
|
|
Zerotorescue@5
|
137 type = "description",
|
|
Zerotorescue@5
|
138 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
|
139 },
|
|
Zerotorescue@5
|
140 timeout = {
|
|
Zerotorescue@5
|
141 order = 20,
|
|
Zerotorescue@5
|
142 type = "range",
|
|
Zerotorescue@5
|
143 width = "double",
|
|
Zerotorescue@5
|
144 min = 1,
|
|
Zerotorescue@5
|
145 max = 60,
|
|
Zerotorescue@5
|
146 step = 0.5,
|
|
Zerotorescue@5
|
147 name = "Single Mail Timeout",
|
|
Zerotorescue@5
|
148 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
|
149 get = function() return self.db.profile.timeout; end,
|
|
Zerotorescue@5
|
150 set = function(i, v) self.db.profile.timeout = v; end,
|
|
Zerotorescue@5
|
151 },
|
|
Zerotorescue@5
|
152 },
|
|
Zerotorescue@5
|
153 },
|
|
Zerotorescue@5
|
154 },
|
|
Zerotorescue@5
|
155 };
|
|
Zerotorescue@5
|
156
|
|
Zerotorescue@5
|
157 return configGroup;
|
|
Zerotorescue@5
|
158 end
|
|
Zerotorescue@5
|
159
|
|
Zerotorescue@31
|
160 function mod:Debug(t)
|
|
Zerotorescue@5
|
161 return MailOpener:Debug("|cffff0000FailSafe|r:" .. t);
|
|
Zerotorescue@5
|
162 end |