local addon = LibStub("AceAddon-3.0"):NewAddon("RemindMe", "AceConsole-3.0", "AceTimer-3.0", "LibSink-2.0") |
|
function addon:OnInitialize() |
self.db = LibStub("AceDB-3.0"):New("RemindMeDB", { |
profile = { |
reminders = {}, |
sink = {sink20OutputSink="ChatFrame"}, |
}, |
}) |
self:SetSinkStorage(self.db.profile.sink) |
|
self.menu = { |
name = "RemindMe", type = "group", |
args = { |
output = self:GetSinkAce3OptionsDataTable(), |
}, |
} |
local acreg = LibStub("AceConfigRegistry-3.0") |
acreg:RegisterOptionsTable("RemindMe", self.menu) |
acreg:RegisterOptionsTable("RemindMe Profiles", LibStub("AceDBOptions-3.0"):GetOptionsTable(self.db)) |
|
local acdia = LibStub("AceConfigDialog-3.0") |
acdia:AddToBlizOptions("RemindMe", "RemindMe") |
acdia:AddToBlizOptions("RemindMe Profiles", "Profiles", "RemindMe") |
|
self:RegisterChatCommand("remindme", "SetReminder") |
self:RegisterChatCommand("rm", "SetReminder", nil, true) |
end |
|
function addon:OnEnable() |
self:ScheduleRepeatingTimer("ReminderCheck", 10) |
end |
|
local unit_conversions = { |
s = 1, |
m = 60, |
h = 60 * 60, |
d = 60 * 60 * 24, |
} |
local function time_parse(t) |
-- t is a string, in the form [number][unit], where unit is m/h/d |
-- unit will default to m if not present |
-- returns the number of seconds in the future this will be |
local n, u = t:match("^(%d+%.?%d*)([smhd]?)$") |
if not n then return end |
if not unit_conversions[u] then u = 'm' end |
addon:Print( n, u) |
return tonumber(n) * unit_conversions[u] |
end |
|
function addon:ReminderCheck() |
local now = time() |
for when, message in pairs(self.db.profile.reminders) do |
if when < now then |
self:Pour("Reminder: " .. message) |
self.db.profile.reminders[when] = nil |
end |
end |
end |
|
function addon:SetReminder(arg) |
local when, message = arg:match("^([%d.mhd]+)%s*(.*)$") |
when = time_parse(when) |
if not (when and message) then |
self:Print("Usage: /remindme [number][unit:s/m/h/d] [message]") |
return |
end |
self:Print("Reminder set for ".. when .. " seconds.") |
self.db.profile.reminders[time() + when] = message |
end |